name: Publish prebuild

on:
  push:
    branches:
      - stable
  release:
    types: [published]
  workflow_dispatch:

jobs:
  build_binaries:
    name: Build & ship binaries
    runs-on: ubuntu-latest
    strategy:
      matrix:
        node-version: [20.x]
        python-version: [3.11.x]
    if: github.repository == 'transfem-org/Sharkey'
    permissions:
      contents: read
      packages: write

    steps:
      - name: Check out the repo
        uses: actions/checkout@v4.1.1
        with:
          lfs: true
          submodules: 'recursive'
        
      - name: Use Node.js ${{ matrix.node-version }}
        uses: actions/setup-node@v4
        with:
          node-version: ${{ matrix.node-version }}

      - name: Setup Python
        uses: actions/setup-python@v4.7.1
        with:
          python-version: ${{ matrix.python-version }}

      - name: Cache APT Packages
        uses: awalsh128/cache-apt-pkgs-action@v1.3.1
        with:
          packages: "build-essential binfmt-support qemu-user-static ffmpeg tini curl libjemalloc-dev libjemalloc2 uuid-dev libx11-dev libxkbfile-dev execstack libgconf-2-4 libsecret-1-dev"

      - name: Set pnpm store path
        run: echo "PNPM_STORE_PATH=$(pnpm store path)" >> $GITHUB_ENV

      - name: Cache node modules
        uses: actions/cache@v3
        with:
          path: ${{ env.PNPM_STORE_PATH }}
          key: pnpm-${{ runner.os }}-${{ hashFiles('**/pnpm-lock.yaml') }}
          restore-keys: |
            pnpm-${{ runner.os }}-

      - name: Build
        run: |
          corepack enable
          corepack prepare pnpm@latest --activate
          CI=true pnpm install
          CI=true pnpm run build
          rm -rdf packages/backend/node_modules
          rm -rdf packages/frontend/node_modules
          rm -rdf packages/megalodon/node_modules
          rm -rdf packages/misskey-js/node_modules
          rm -rdf node_modules
          CI=true pnpm --prod --no-optional install
          tar -czf /tmp/workspace.tar.gz .
      - name: Upload linux x64
        uses: actions/upload-artifact@v3.1.3
        with: 
          name: sharkey-linux-x64
          path: /tmp/workspace.tar.gz