Files
Toju/.gitea/workflows/release-draft.yml
2026-03-10 23:56:53 +01:00

143 lines
4.7 KiB
YAML

name: Queue Release Build
on:
push:
branches:
- main
- master
workflow_dispatch:
jobs:
prepare-release:
name: Prepare draft release
runs-on: linux
outputs:
release_download_url: ${{ steps.release.outputs.release_download_url }}
release_id: ${{ steps.release.outputs.release_id }}
release_name: ${{ steps.version.outputs.release_name }}
release_tag: ${{ steps.version.outputs.release_tag }}
release_version: ${{ steps.version.outputs.release_version }}
steps:
- name: Checkout repository
uses: https://github.com/actions/checkout@v4
- name: Setup Node.js
uses: https://github.com/actions/setup-node@v4
with:
node-version: 20
- name: Resolve release version
id: version
run: node tools/resolve-release-version.js --write-output
- name: Ensure draft release exists
id: release
env:
GITEA_RELEASE_TOKEN: ${{ secrets.GITEA_RELEASE_TOKEN }}
run: >
node tools/gitea-release.js ensure-draft
--server-url "${{ github.server_url }}"
--repository "${{ github.repository }}"
--tag "${{ steps.version.outputs.release_tag }}"
--target "${{ github.sha }}"
--name "${{ steps.version.outputs.release_name }}"
--body "Automated draft release queued from ${{ github.ref_name }} @ ${{ github.sha }}. Desktop auto-update assets, release-manifest.json, and server executables are attached by the platform build jobs. Publish this draft after approval."
--write-output
build-linux:
name: Build Linux release assets
needs: prepare-release
runs-on: linux
steps:
- name: Checkout repository
uses: https://github.com/actions/checkout@v4
- name: Setup Node.js
uses: https://github.com/actions/setup-node@v4
with:
node-version: 20
- name: Install root dependencies
run: npm ci
- name: Install server dependencies
run: npm install --prefix server
- name: Set CI release version
run: >
node tools/set-release-version.js
--version "${{ needs.prepare-release.outputs.release_version }}"
- name: Build Linux desktop and server assets
run: npm run release:build:linux
- name: Download previous published manifest
env:
GITEA_RELEASE_TOKEN: ${{ secrets.GITEA_RELEASE_TOKEN }}
run: >
node tools/gitea-release.js download-latest-manifest
--server-url "${{ github.server_url }}"
--repository "${{ github.repository }}"
--output dist-electron/release-manifest.previous.json
--allow-missing
- name: Generate release manifest
run: >
node tools/generate-release-manifest.js
--existing dist-electron/release-manifest.previous.json
--manifest dist-electron/release-manifest.json
--feed-url "${{ needs.prepare-release.outputs.release_download_url }}"
--version "${{ needs.prepare-release.outputs.release_version }}"
- name: Upload Linux assets to draft release
env:
GITEA_RELEASE_TOKEN: ${{ secrets.GITEA_RELEASE_TOKEN }}
run: >
node tools/gitea-release.js upload-built-assets
--server-url "${{ github.server_url }}"
--repository "${{ github.repository }}"
--release-id "${{ needs.prepare-release.outputs.release_id }}"
--dist-electron dist-electron
--dist-server dist-server
build-windows:
name: Build Windows release assets
needs: prepare-release
runs-on: windows
defaults:
run:
shell: powershell
steps:
- name: Checkout repository
uses: https://github.com/actions/checkout@v4
- name: Setup Node.js
uses: https://github.com/actions/setup-node@v4
with:
node-version: 20
- name: Install root dependencies
run: npm ci
- name: Install server dependencies
run: npm install --prefix server
- name: Set CI release version
run: >
node tools/set-release-version.js
--version "${{ needs.prepare-release.outputs.release_version }}"
- name: Build Windows desktop and server assets
run: npm run release:build:win
- name: Upload Windows assets to draft release
env:
GITEA_RELEASE_TOKEN: ${{ secrets.GITEA_RELEASE_TOKEN }}
run: >
node tools/gitea-release.js upload-built-assets
--server-url "${{ github.server_url }}"
--repository "${{ github.repository }}"
--release-id "${{ needs.prepare-release.outputs.release_id }}"
--dist-electron dist-electron
--dist-server dist-server