name: Build and Release on: push: tags: - 'v*' 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 - 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' - run: npm ci - name: Build Windows Packages run: npx electron-builder --win --publish never - 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' - run: npm ci - name: Build macOS Packages env: CSC_LINK: ${{ secrets.CSC_LINK }} CSC_KEY_PASSWORD: ${{ secrets.CSC_KEY_PASSWORD }} 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 - 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 rpm - uses: actions/setup-node@v4 with: node-version: '22' - run: npm ci - name: Build Linux Packages run: npx electron-builder --linux AppImage deb rpm --publish never - 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/*.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