name: Build on: push: repository_dispatch: types: [external_build_trigger] workflow_dispatch: # schedule: # - cron: "0 0 * * *" jobs: build: runs-on: ubuntu-latest steps: - name: Get Release id: get_tag run: | LATEST_TAG=$(curl -s https://api.github.com/repos/signalapp/Signal-Desktop/releases/latest | jq -r '.tag_name') echo "LATEST_TAG=$LATEST_TAG" >> $GITHUB_OUTPUT - name: Skip if exists env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} GITHUB_REPOSITORY: ${{ github.repository }} GITHUB_RUN_ID: ${{ github.run_id }} run: | LATEST_TAG="${{ steps.get_tag.outputs.LATEST_TAG }}" MY_RELEASE=$(curl -s https://api.github.com/repos/${{ github.repository }}/releases/latest | jq -r '.tag_name') if [[ "$LATEST_TAG" == "$MY_RELEASE" ]]; then curl -L \ -X POST \ -H "Accept: application/vnd.github+json" \ -H "Authorization: Bearer $GITHUB_TOKEN" \ -H "X-GitHub-Api-Version: 2022-11-28" \ "https://api.github.com/repos/${GITHUB_REPOSITORY}/actions/runs/${GITHUB_RUN_ID}/force-cancel" exit 0 fi - uses: actions/checkout@v4 with: repository: signalapp/Signal-Desktop ref: ${{ steps.get_tag.outputs.LATEST_TAG }} fetch-depth: 1 - name: Install jq run: | sudo apt update sudo apt install -y jq python3 - name: Modify package.json run: | cp package.json package.json.0 cat package.json.0 | jq '.build.linux.target = ["AppImage"]' > package.json.1 cat package.json.1 | jq '.scripts."build:electron" += " --publish=never"' > package.json - name: Read .nvmrc id: nvm run: echo "NODE_VERSION=$(cat .nvmrc)" >> $GITHUB_OUTPUT - name: Use Node.js ${{ steps.nvm.outputs.NODE_VERSION }} uses: actions/setup-node@v2 with: node-version: ${{ steps.nvm.outputs.NODE_VERSION }} - name: Setup pnpm uses: pnpm/action-setup@v4.1.0 - name: Build id: build run: | pnpm install pnpm build-release echo "FILE=$(basename $(ls release/*.AppImage | tail -n 1))" >> $GITHUB_OUTPUT - name: Create Release id: create_release uses: actions/create-release@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: draft: false prerelease: false release_name: ${{ steps.get_tag.outputs.LATEST_TAG }} tag_name: ${{ steps.get_tag.outputs.LATEST_TAG }} - name: Upload Release Asset id: upload-release-asset uses: actions/upload-release-asset@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: upload_url: ${{ steps.create_release.outputs.upload_url }} asset_path: release/${{ steps.build.outputs.FILE }} asset_name: ${{ steps.build.outputs.FILE }} asset_content_type: application/zip