name: CI on: push: branches: [main] pull_request: branches: [main] env: REGISTRY: forgejo.riotpiao.com IMAGE: forgejo.riotpiao.com/rock/kmsvc-sdk jobs: test: name: Test runs-on: golang steps: - name: Install Node.js for actions runtime run: apt-get update && apt-get install -y nodejs - name: Checkout code uses: actions/checkout@v4 - name: Configure git auth for private modules run: | git config --global url."https://oauth2:${REGISTRY_PAT}@forgejo.riotpiao.com".insteadOf "https://forgejo.riotpiao.com" env: REGISTRY_PAT: ${{ secrets.REGISTRY_PAT }} - name: gofmt run: | fmt_out="$(gofmt -l .)" if [ -n "$fmt_out" ]; then echo "$fmt_out" echo "::error::gofmt found unformatted files" exit 1 fi - name: go vet run: go vet ./... - name: go build run: go build ./... - name: go test run: go test ./... -race -coverprofile=coverage.out - name: coverage summary run: go tool cover -func=coverage.out | tail -1 release: name: Create Release (on tag) if: startsWith(github.ref, 'refs/tags/v') runs-on: golang permissions: contents: write steps: - name: Install Node.js run: apt-get update && apt-get install -y nodejs - name: Checkout code uses: actions/checkout@v4 - name: Configure git auth run: | git config --global url."https://oauth2:${REGISTRY_PAT}@forgejo.riotpiao.com".insteadOf "https://forgejo.riotpiao.com" env: REGISTRY_PAT: ${{ secrets.REGISTRY_PAT }} - name: Run gate (vet, build, test) run: | go vet ./... go build ./... go test ./... -race - name: Extract changelog id: changelog run: | tag="${GITHUB_REF_NAME}" version="${tag#v}" notes="$(awk -v ver="$version" ' $0 ~ "^## v"ver"([^.0-9]|$)" { found=1; next } found && /^## / { exit } found { print } ' CHANGELOG.md)" if [ -z "$notes" ]; then notes="(no changelog entry found for $tag)" fi { echo "notes<> "$GITHUB_OUTPUT" - name: Create Forgejo release run: | curl -fsSL -X POST \ -H "Authorization: token ${FORGEJO_TOKEN}" \ -H "Content-Type: application/json" \ "${GITHUB_SERVER_URL}/api/v1/repos/${GITHUB_REPOSITORY}/releases" \ -d "$(jq -n \ --arg tag "$GITHUB_REF_NAME" \ --arg body "${{ steps.changelog.outputs.notes }}" \ '{tag_name: $tag, name: $tag, body: $body, draft: false, prerelease: false}')" \ | jq . env: FORGEJO_TOKEN: ${{ secrets.GITHUB_TOKEN }}