name: Action Gateway CI/CD on: push: branches: [main] pull_request: branches: [main] push: tags: - 'release/*' jobs: build-and-test: name: Build & Test runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Setup Rust uses: actions-rust-lang/setup-rust-toolchain@v1 with: toolchain: stable - name: Build run: cargo build --release - name: Run tests run: cargo test - name: Check formatting run: cargo fmt --check - name: Clippy run: cargo clippy -- -D warnings release: name: Publish Release runs-on: ubuntu-latest needs: build-and-test if: startsWith(github.ref, 'refs/tags/release/') steps: - uses: actions/checkout@v4 - name: Setup Rust uses: actions-rust-lang/setup-rust-toolchain@v1 with: toolchain: stable - name: Build release binary run: cargo build --release - name: Extract tag id: tag run: echo "TAG=${GITHUB_REF#refs/tags/}" >> $GITHUB_OUTPUT - name: Create Gitea release with binary run: | RELEASE=$(curl -s -X POST "$GITEA_URL/api/v1/repos/$GITEA_OWNER/$GITEA_REPO/releases" \ -H "Authorization: token $GITEA_TOKEN" \ -H "Content-Type: application/json" \ -d "{ \"tag_name\": \"${{ steps.tag.outputs.TAG }}\", \"name\": \"Action Gateway ${{ steps.tag.outputs.TAG }}\", \"body\": \"Automated release\\n\\nCommit: ${{ github.sha }}\", \"draft\": false }") RELEASE_ID=$(echo $RELEASE | python3 -c "import sys,json; print(json.load(sys.stdin)['id'])") curl -s -X POST "$GITEA_URL/api/v1/repos/$GITEA_OWNER/$GITEA_REPO/releases/$RELEASE_ID/assets" \ -H "Authorization: token $GITEA_TOKEN" \ -F "attachment=@target/release/action-gateway;filename=action-gateway-linux-amd64" env: GITEA_URL: https://git.dominat.us GITEA_OWNER: clawbot GITEA_REPO: action-gateway GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }}