From c9be0d07bce3bf64dfa44f19acf261c00b8be27c Mon Sep 17 00:00:00 2001 From: Nix Date: Wed, 13 May 2026 14:06:42 +0800 Subject: [PATCH] ci: run tests before builds and publish tag releases --- .gitea/workflows/build-binaries.yml | 69 +++++++++++++++++++++++++++-- 1 file changed, 66 insertions(+), 3 deletions(-) diff --git a/.gitea/workflows/build-binaries.yml b/.gitea/workflows/build-binaries.yml index de7467f..b957c2b 100644 --- a/.gitea/workflows/build-binaries.yml +++ b/.gitea/workflows/build-binaries.yml @@ -1,4 +1,4 @@ -name: build-binaries +name: test-build-release on: push: @@ -9,7 +9,31 @@ on: workflow_dispatch: jobs: - linux: + test: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Setup Python + uses: actions/setup-python@v5 + with: + python-version: '3.11' + + - name: Install test deps + run: | + python -m venv .venv-ci + . .venv-ci/bin/activate + pip install --upgrade pip + pip install -r requirements.txt pytest + + - name: Run tests + run: | + . .venv-ci/bin/activate + pytest -q + + build-linux: + needs: test runs-on: ubuntu-latest steps: - name: Checkout @@ -23,7 +47,7 @@ jobs: - name: Install OS deps run: | sudo apt-get update - sudo apt-get install -y python3-venv libfuse2 wget + sudo apt-get install -y python3-venv libfuse2 wget jq - name: Build Linux binary run: bash build/build_linux.sh @@ -48,3 +72,42 @@ jobs: dist/TrulyMEM.AppImage if-no-files-found: error retention-days: 30 + + - name: Create Gitea release + if: startsWith(github.ref, 'refs/tags/') + env: + GITEA_TOKEN: ${{ secrets.GITEA_RELEASE_TOKEN }} + TAG_NAME: ${{ github.ref_name }} + REPO: ${{ github.repository }} + SERVER_URL: ${{ github.server_url }} + run: | + test -n "$GITEA_TOKEN" + + release_payload=$(jq -n \ + --arg tag "$TAG_NAME" \ + '{tag_name:$tag, name:$tag, draft:false, prerelease:false}') + + release_response=$(curl -fsSL \ + -H "Authorization: token $GITEA_TOKEN" \ + -H "Content-Type: application/json" \ + -X POST \ + "$SERVER_URL/api/v1/repos/$REPO/releases" \ + -d "$release_payload" \ + || true) + + release_id=$(printf '%s' "$release_response" | jq -r '.id // empty') + + if [ -z "$release_id" ]; then + release_id=$(curl -fsSL \ + -H "Authorization: token $GITEA_TOKEN" \ + "$SERVER_URL/api/v1/repos/$REPO/releases/tags/$TAG_NAME" | jq -r '.id') + fi + + for file in dist/TrulyMEM dist/TrulyMEM.desktop dist/TrulyMEM.AppImage; do + name=$(basename "$file") + curl -fsSL \ + -H "Authorization: token $GITEA_TOKEN" \ + -H "Content-Type: application/octet-stream" \ + --data-binary @"$file" \ + "$SERVER_URL/api/v1/repos/$REPO/releases/$release_id/assets?name=$name" + done