feat(webui): nav enhancement — Bridge link, Schedules placeholder, pr… #2669
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Release | |
| on: | |
| push: | |
| branches: ["*"] | |
| tags: ["v*"] | |
| pull_request: | |
| permissions: | |
| contents: write | |
| jobs: | |
| test: | |
| if: "!startsWith(github.ref, 'refs/tags/')" | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| - name: Setup Go | |
| uses: actions/setup-go@v5 | |
| with: | |
| go-version-file: go.mod | |
| cache: true | |
| - name: Cache go-build | |
| uses: actions/cache@v4 | |
| with: | |
| path: ~/.cache/go-build | |
| key: ${{ runner.os }}-go-build-${{ hashFiles('**/go.sum') }} | |
| restore-keys: | | |
| ${{ runner.os }}-go-build- | |
| - name: Run race tests on hot packages | |
| run: go test -race -timeout 5m ./internal/pipeline/... ./internal/contract/... ./internal/state/... | |
| - name: Run remaining tests without race | |
| run: go test -timeout 5m $(go list ./... | grep -v -E '/(internal/pipeline|internal/contract|internal/state)(/|$)') | |
| goreleaser-check: | |
| if: "!startsWith(github.ref, 'refs/tags/')" | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| - name: Setup Go | |
| uses: actions/setup-go@v5 | |
| with: | |
| go-version-file: go.mod | |
| cache: true | |
| - name: Install GoReleaser | |
| run: go install github.com/goreleaser/goreleaser/v2@latest | |
| - name: Validate config | |
| run: goreleaser check | |
| - name: Test build | |
| run: goreleaser release --snapshot --clean | |
| validate: | |
| if: "!startsWith(github.ref, 'refs/tags/')" | |
| runs-on: ubuntu-latest | |
| needs: [test, goreleaser-check] | |
| steps: | |
| - run: echo "all validation jobs passed" | |
| auto-tag: | |
| if: github.ref == 'refs/heads/main' | |
| needs: validate | |
| runs-on: ubuntu-latest | |
| outputs: | |
| new_tag: ${{ steps.bump.outputs.next }} | |
| tag_created: ${{ steps.push_tag.outputs.created }} | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 | |
| - name: Determine version bump | |
| id: bump | |
| run: | | |
| # Get the latest tag, default to v0.0.0 if none exists | |
| LATEST_TAG=$(git tag -l 'v*' --sort=-v:refname | head -n1) | |
| if [ -z "$LATEST_TAG" ]; then | |
| LATEST_TAG="v0.0.0" | |
| fi | |
| echo "latest=$LATEST_TAG" >> "$GITHUB_OUTPUT" | |
| # Parse current version | |
| VERSION="${LATEST_TAG#v}" | |
| MAJOR=$(echo "$VERSION" | cut -d. -f1) | |
| MINOR=$(echo "$VERSION" | cut -d. -f2) | |
| PATCH=$(echo "$VERSION" | cut -d. -f3) | |
| # Analyze commits since last tag to determine bump type | |
| BUMP="patch" | |
| if [ "$LATEST_TAG" = "v0.0.0" ]; then | |
| COMMITS=$(git log --oneline --format="%s") | |
| else | |
| COMMITS=$(git log "${LATEST_TAG}..HEAD" --oneline --format="%s") | |
| fi | |
| if echo "$COMMITS" | grep -qE '!:|BREAKING CHANGE'; then | |
| BUMP="major" | |
| elif echo "$COMMITS" | grep -qE '^feat(\(.+\))?:'; then | |
| BUMP="minor" | |
| fi | |
| # Calculate next version | |
| case "$BUMP" in | |
| major) MAJOR=$((MAJOR + 1)); MINOR=0; PATCH=0 ;; | |
| minor) MINOR=$((MINOR + 1)); PATCH=0 ;; | |
| patch) PATCH=$((PATCH + 1)) ;; | |
| esac | |
| NEXT="v${MAJOR}.${MINOR}.${PATCH}" | |
| echo "next=$NEXT" >> "$GITHUB_OUTPUT" | |
| echo "bump=$BUMP" >> "$GITHUB_OUTPUT" | |
| echo "Bump: $BUMP ($LATEST_TAG → $NEXT)" | |
| - name: Create and push tag | |
| id: push_tag | |
| if: steps.bump.outputs.next != steps.bump.outputs.latest | |
| run: | | |
| git config user.name "github-actions[bot]" | |
| git config user.email "github-actions[bot]@users.noreply.github.com" | |
| git tag -a "${{ steps.bump.outputs.next }}" -m "Release ${{ steps.bump.outputs.next }}" | |
| git push origin "${{ steps.bump.outputs.next }}" | |
| echo "created=true" >> "$GITHUB_OUTPUT" | |
| # Runs after auto-tag in the same workflow (GITHUB_TOKEN tag pushes don't trigger new runs). | |
| # Also runs independently when a tag is pushed manually. | |
| release: | |
| if: >- | |
| always() && ( | |
| startsWith(github.ref, 'refs/tags/') | |
| || (needs.auto-tag.result == 'success' && needs.auto-tag.outputs.tag_created == 'true') | |
| ) | |
| needs: [auto-tag] | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout at tag | |
| uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 | |
| ref: ${{ needs.auto-tag.outputs.new_tag || github.ref }} | |
| - name: Setup Go | |
| uses: actions/setup-go@v5 | |
| with: | |
| go-version-file: go.mod | |
| - name: Run GoReleaser | |
| uses: goreleaser/goreleaser-action@v6 | |
| with: | |
| version: "~> v2" | |
| args: release --clean | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| GORELEASER_CURRENT_TAG: ${{ needs.auto-tag.outputs.new_tag || github.ref_name }} |