From 3abe885ab4e17cb0ee304f7a2828053f1ff25c2a Mon Sep 17 00:00:00 2001 From: sanasol Date: Fri, 20 Feb 2026 00:54:58 +0100 Subject: [PATCH 1/2] ci: adapt release workflow for Forgejo - Windows build cross-compiles from ubuntu-latest using Wine - Arch build disabled (commented out) - Release action switched to actions/forgejo-release@v2 - Removed arch artifacts from release Co-Authored-By: Claude Opus 4.6 --- .github/workflows/release.yml | 118 ++++++++++++++++------------------ 1 file changed, 55 insertions(+), 63 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 2648e63..1fc61dc 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -8,15 +8,23 @@ on: jobs: build-windows: - runs-on: windows-latest + runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 + - name: Install Wine for cross-compilation + run: | + sudo dpkg --add-architecture i386 + sudo mkdir -pm755 /etc/apt/keyrings + sudo wget -O /etc/apt/keyrings/winehq-archive.key https://dl.winehq.org/wine-builds/winehq.key + sudo wget -NP /etc/apt/sources.list.d/ https://dl.winehq.org/wine-builds/ubuntu/dists/$(lsb_release -cs)/winehq-$(lsb_release -cs).sources + sudo apt-get update + sudo apt-get install -y --install-recommends winehq-stable - uses: actions/setup-node@v4 with: node-version: '22' cache: 'npm' - run: npm ci - + - name: Build Windows Packages run: npx electron-builder --win --publish never - uses: actions/upload-artifact@v4 @@ -84,59 +92,46 @@ jobs: dist/*.rpm dist/latest-linux.yml - build-arch: - runs-on: ubuntu-latest - container: - image: archlinux:latest - steps: - - name: Checkout repository - uses: actions/checkout@v4 - with: - fetch-depth: 0 - - - name: Install base packages - run: | - pacman -Syu --noconfirm - pacman -S --noconfirm \ - base-devel \ - git \ - nodejs \ - npm \ - rpm-tools \ - libxcrypt-compat - - - name: Create build user - run: | - useradd -m builder - echo "builder ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers - - - name: Fix Permissions - run: chown -R builder:builder . - - - name: Build Arch Package - run: | - sudo -u builder bash << 'EOF' - set -e - makepkg --printsrcinfo > .SRCINFO - makepkg -s --noconfirm - EOF - - - name: Fix permissions for upload - if: always() - run: | - sudo chown -R $(id -u):$(id -g) . - - - name: Upload Arch Package - uses: actions/upload-artifact@v4 - with: - name: arch-package - path: | - *.pkg.tar.zst - .SRCINFO - include-hidden-files: true + # build-arch: + # runs-on: ubuntu-latest + # container: + # image: archlinux:latest + # steps: + # - name: Checkout repository + # uses: actions/checkout@v4 + # with: + # fetch-depth: 0 + # - name: Install base packages + # run: | + # pacman -Syu --noconfirm + # pacman -S --noconfirm base-devel git nodejs npm rpm-tools libxcrypt-compat + # - name: Create build user + # run: | + # useradd -m builder + # echo "builder ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers + # - name: Fix Permissions + # run: chown -R builder:builder . + # - name: Build Arch Package + # run: | + # sudo -u builder bash << 'EOF' + # set -e + # makepkg --printsrcinfo > .SRCINFO + # makepkg -s --noconfirm + # EOF + # - name: Fix permissions for upload + # if: always() + # run: sudo chown -R $(id -u):$(id -g) . + # - name: Upload Arch Package + # uses: actions/upload-artifact@v4 + # with: + # name: arch-package + # path: | + # *.pkg.tar.zst + # .SRCINFO + # include-hidden-files: true release: - needs: [build-windows, build-macos, build-linux, build-arch] + needs: [build-windows, build-macos, build-linux] runs-on: ubuntu-latest if: | startsWith(github.ref, 'refs/tags/v') || @@ -163,16 +158,13 @@ jobs: run: echo "VERSION=$(node -p "require('./package.json').version")" >> $GITHUB_OUTPUT - name: Create Release - uses: softprops/action-gh-release@v2 + uses: actions/forgejo-release@v2 with: - tag_name: ${{ github.ref_name }} - files: | - artifacts/arch-package/*.pkg.tar.zst - artifacts/arch-package/.SRCINFO - artifacts/linux-builds/**/* - artifacts/windows-builds/**/* - artifacts/macos-builds/**/* - generate_release_notes: true - draft: true + tag: ${{ github.ref_name }} + direction: upload + url: https://git.sanhost.net + token: ${{ secrets.RELEASE_TOKEN }} + release-dir: artifacts + release-notes: "Release ${{ github.ref_name }}" prerelease: false From 92a0a26251c88d404b70df499cdb7c43214b63db Mon Sep 17 00:00:00 2001 From: sanasol Date: Fri, 20 Feb 2026 00:59:44 +0100 Subject: [PATCH 2/2] ci: fix Forgejo Actions compatibility - Remove upload-artifact/download-artifact (not supported on Forgejo) - Each build job uploads directly to release via API - Add `rpm` package to Linux build dependencies - Remove separate release job, replaced by create-release + per-job upload - Remove arch build job entirely Co-Authored-By: Claude Opus 4.6 --- .github/workflows/release.yml | 164 ++++++++++++---------------------- 1 file changed, 55 insertions(+), 109 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 1fc61dc..e2c235a 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -7,7 +7,22 @@ on: workflow_dispatch: jobs: + create-release: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Create Draft Release + run: | + curl -s -X POST "https://git.sanhost.net/api/v1/repos/${GITHUB_REPOSITORY}/releases" \ + -H "Authorization: token ${{ secrets.RELEASE_TOKEN }}" \ + -H "Content-Type: application/json" \ + -d "{\"tag_name\":\"${{ github.ref_name }}\",\"name\":\"${{ github.ref_name }}\",\"body\":\"Release ${{ github.ref_name }}\",\"draft\":true,\"prerelease\":false}" \ + -o release.json + cat release.json + echo "RELEASE_ID=$(cat release.json | python3 -c 'import sys,json; print(json.load(sys.stdin)["id"])')" >> $GITHUB_ENV + build-windows: + needs: [create-release] runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 @@ -22,149 +37,80 @@ jobs: - uses: actions/setup-node@v4 with: node-version: '22' - cache: 'npm' - run: npm ci - name: Build Windows Packages run: npx electron-builder --win --publish never - - uses: actions/upload-artifact@v4 - with: - name: windows-builds - path: | - dist/*.exe - dist/*.exe.blockmap - dist/latest.yml + + - name: Upload to Release + run: | + RELEASE_ID=$(curl -s "https://git.sanhost.net/api/v1/repos/${GITHUB_REPOSITORY}/releases/tags/${{ github.ref_name }}" \ + -H "Authorization: token ${{ secrets.RELEASE_TOKEN }}" | python3 -c 'import sys,json; print(json.load(sys.stdin)["id"])') + for file in dist/*.exe dist/*.exe.blockmap dist/latest.yml; do + [ -f "$file" ] || continue + echo "Uploading $file..." + curl -s -X POST "https://git.sanhost.net/api/v1/repos/${GITHUB_REPOSITORY}/releases/${RELEASE_ID}/assets?name=$(basename $file)" \ + -H "Authorization: token ${{ secrets.RELEASE_TOKEN }}" \ + -F "attachment=@${file}" || echo "Failed to upload $file" + done build-macos: + needs: [create-release] runs-on: macos-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: node-version: '22' - cache: 'npm' - run: npm ci - name: Build macOS Packages env: - # Code signing CSC_LINK: ${{ secrets.CSC_LINK }} CSC_KEY_PASSWORD: ${{ secrets.CSC_KEY_PASSWORD }} - # Notarization APPLE_ID: ${{ secrets.APPLE_ID }} APPLE_APP_SPECIFIC_PASSWORD: ${{ secrets.APPLE_APP_SPECIFIC_PASSWORD }} APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }} run: npx electron-builder --mac --publish never - - uses: actions/upload-artifact@v4 - with: - name: macos-builds - path: | - dist/*.dmg - dist/*.zip - dist/*.blockmap - dist/latest-mac.yml + + - name: Upload to Release + run: | + RELEASE_ID=$(curl -s "https://git.sanhost.net/api/v1/repos/${GITHUB_REPOSITORY}/releases/tags/${{ github.ref_name }}" \ + -H "Authorization: token ${{ secrets.RELEASE_TOKEN }}" | python3 -c 'import sys,json; print(json.load(sys.stdin)["id"])') + for file in dist/*.dmg dist/*.zip dist/*.blockmap dist/latest-mac.yml; do + [ -f "$file" ] || continue + echo "Uploading $file..." + curl -s -X POST "https://git.sanhost.net/api/v1/repos/${GITHUB_REPOSITORY}/releases/${RELEASE_ID}/assets?name=$(basename $file)" \ + -H "Authorization: token ${{ secrets.RELEASE_TOKEN }}" \ + -F "attachment=@${file}" || echo "Failed to upload $file" + done build-linux: + needs: [create-release] runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Install build dependencies run: | sudo apt-get update - sudo apt-get install -y libarchive-tools - + sudo apt-get install -y libarchive-tools rpm + - uses: actions/setup-node@v4 with: node-version: '22' - cache: 'npm' - run: npm ci - name: Build Linux Packages + run: npx electron-builder --linux AppImage deb rpm --publish never + + - name: Upload to Release run: | - npx electron-builder --linux AppImage deb rpm --publish never - - uses: actions/upload-artifact@v4 - with: - name: linux-builds - path: | - dist/*.AppImage - dist/*.AppImage.blockmap - dist/*.deb - dist/*.rpm - dist/latest-linux.yml - - # build-arch: - # runs-on: ubuntu-latest - # container: - # image: archlinux:latest - # steps: - # - name: Checkout repository - # uses: actions/checkout@v4 - # with: - # fetch-depth: 0 - # - name: Install base packages - # run: | - # pacman -Syu --noconfirm - # pacman -S --noconfirm base-devel git nodejs npm rpm-tools libxcrypt-compat - # - name: Create build user - # run: | - # useradd -m builder - # echo "builder ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers - # - name: Fix Permissions - # run: chown -R builder:builder . - # - name: Build Arch Package - # run: | - # sudo -u builder bash << 'EOF' - # set -e - # makepkg --printsrcinfo > .SRCINFO - # makepkg -s --noconfirm - # EOF - # - name: Fix permissions for upload - # if: always() - # run: sudo chown -R $(id -u):$(id -g) . - # - name: Upload Arch Package - # uses: actions/upload-artifact@v4 - # with: - # name: arch-package - # path: | - # *.pkg.tar.zst - # .SRCINFO - # include-hidden-files: true - - release: - needs: [build-windows, build-macos, build-linux] - runs-on: ubuntu-latest - if: | - startsWith(github.ref, 'refs/tags/v') || - github.ref == 'refs/heads/main' || - github.event_name == 'workflow_dispatch' - - permissions: - contents: write - - steps: - - name: Checkout code - uses: actions/checkout@v4 - - - name: Download all artifacts - uses: actions/download-artifact@v4 - with: - path: artifacts - - - name: Display structure of downloaded files - run: ls -R artifacts - - - name: Get version from package.json - id: pkg_version - run: echo "VERSION=$(node -p "require('./package.json').version")" >> $GITHUB_OUTPUT - - - name: Create Release - uses: actions/forgejo-release@v2 - with: - tag: ${{ github.ref_name }} - direction: upload - url: https://git.sanhost.net - token: ${{ secrets.RELEASE_TOKEN }} - release-dir: artifacts - release-notes: "Release ${{ github.ref_name }}" - prerelease: false - + RELEASE_ID=$(curl -s "https://git.sanhost.net/api/v1/repos/${GITHUB_REPOSITORY}/releases/tags/${{ github.ref_name }}" \ + -H "Authorization: token ${{ secrets.RELEASE_TOKEN }}" | python3 -c 'import sys,json; print(json.load(sys.stdin)["id"])') + for file in dist/*.AppImage dist/*.AppImage.blockmap dist/*.deb dist/*.rpm dist/latest-linux.yml; do + [ -f "$file" ] || continue + echo "Uploading $file..." + curl -s -X POST "https://git.sanhost.net/api/v1/repos/${GITHUB_REPOSITORY}/releases/${RELEASE_ID}/assets?name=$(basename $file)" \ + -H "Authorization: token ${{ secrets.RELEASE_TOKEN }}" \ + -F "attachment=@${file}" || echo "Failed to upload $file" + done