Browse Source

chore: enhance GitHub Actions workflows with improved job structure and error handling

- Introduced a pre-job in auto-tag.yml to skip duplicate actions based on content, optimizing workflow execution.
- Updated the auto-tag job to run on ubuntu-latest and added concurrency controls for better resource management.
- Enhanced error handling in both workflows by adding checks for workflow status and notifying on failures.
- Upgraded actions to their latest versions for improved performance and reliability.
- Added caching steps in both workflows to speed up builds and reduce redundant operations.
pull/122/head v0.0.18
煎饼果子卷鲨鱼辣椒 5 months ago
parent
commit
f90d6d7e5f
  1. 36
      .github/workflows/auto-tag.yml
  2. 58
      .github/workflows/release.yml

36
.github/workflows/auto-tag.yml

@ -13,16 +13,40 @@ on:
permissions: write-all permissions: write-all
jobs: jobs:
pre_job:
runs-on: ubuntu-latest
outputs:
should_skip: ${{ steps.skip_check.outputs.should_skip }}
steps:
- id: skip_check
uses: fkirc/skip-duplicate-actions@v5.3.1
with:
cancel_others: "true"
concurrent_skipping: "same_content"
auto-tag: auto-tag:
runs-on: ubuntu-22.04
needs: pre_job
if: needs.pre_job.outputs.should_skip != 'true'
runs-on: ubuntu-latest
timeout-minutes: 10 timeout-minutes: 10
outputs: outputs:
version: ${{ steps.get_latest_tag.outputs.version }} version: ${{ steps.get_latest_tag.outputs.version }}
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
steps: steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
with: with:
fetch-depth: 0 fetch-depth: 0
- uses: actions/cache@v3
with:
path: |
~/.cache/git
key: ${{ runner.os }}-git-${{ github.sha }}
restore-keys: |
${{ runner.os }}-git-
- name: Get latest tag - name: Get latest tag
id: get_latest_tag id: get_latest_tag
run: | run: |
@ -98,6 +122,14 @@ jobs:
echo " - Version not empty: ${{ steps.get_latest_tag.outputs.version != '' }}" echo " - Version not empty: ${{ steps.get_latest_tag.outputs.version != '' }}"
echo " - Current job status: ${{ job.status }}" echo " - Current job status: ${{ job.status }}"
- name: Check workflow status
if: always()
run: |
if [[ "${{ job.status }}" == "failure" ]]; then
echo "::error::Auto-tag workflow failed"
exit 1
fi
release: release:
needs: auto-tag needs: auto-tag
permissions: permissions:

58
.github/workflows/release.yml

@ -29,28 +29,14 @@ permissions:
jobs: jobs:
goreleaser: goreleaser:
environment: production environment: production
runs-on: ubuntu-22.04
runs-on: ubuntu-latest
timeout-minutes: 15 timeout-minutes: 15
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
steps: steps:
- name: Check Permissions
run: |
echo "Checking required permissions..."
TOKEN="${{ secrets.RELEASE_TOKEN }}"
if [ -z "$TOKEN" ]; then
echo "::error::RELEASE_TOKEN is not set"
exit 1
fi
echo "Token permissions check passed"
- name: Debug Workflow Trigger
run: |
echo "Event name: ${{ github.event_name }}"
echo "Ref: ${{ github.ref }}"
echo "Version input: ${{ inputs.version }}"
echo "Token exists: ${{ secrets.RELEASE_TOKEN != '' }}"
- name: Checkout - name: Checkout
uses: actions/checkout@v3
uses: actions/checkout@v4
with: with:
fetch-depth: 0 fetch-depth: 0
lfs: true lfs: true
@ -60,8 +46,18 @@ jobs:
uses: actions/setup-go@v4 uses: actions/setup-go@v4
with: with:
go-version: "1.21" go-version: "1.21"
check-latest: true
cache: true cache: true
- uses: actions/cache@v3
with:
path: |
~/.cache/go-build
~/go/pkg/mod
key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }}
restore-keys: |
${{ runner.os }}-go-
- name: Import GPG key - name: Import GPG key
id: import_gpg id: import_gpg
uses: crazy-max/ghaction-import-gpg@v5 uses: crazy-max/ghaction-import-gpg@v5
@ -73,23 +69,29 @@ jobs:
git_commit_gpgsign: true git_commit_gpgsign: true
git_tag_gpgsign: true git_tag_gpgsign: true
- name: Verify Go installation
run: |
go version || {
echo "::error::Go installation failed"
exit 1
}
- name: Run GoReleaser - name: Run GoReleaser
uses: goreleaser/goreleaser-action@v4 uses: goreleaser/goreleaser-action@v4
with: with:
distribution: goreleaser distribution: goreleaser
version: latest version: latest
args: release --clean
args: release --clean --timeout 60m
env: env:
GITHUB_TOKEN: ${{ secrets.RELEASE_TOKEN }} GITHUB_TOKEN: ${{ secrets.RELEASE_TOKEN }}
GPG_FINGERPRINT: ${{ steps.import_gpg.outputs.fingerprint }} GPG_FINGERPRINT: ${{ steps.import_gpg.outputs.fingerprint }}
VERSION: ${{ inputs.version }} VERSION: ${{ inputs.version }}
continue-on-error: false
- name: Notify on failure
if: failure()
run: |
echo "::error::Release process failed"
- name: Verify Release
if: success()
run: |
echo "Verifying release artifacts..."
if [ ! -d "dist" ]; then
echo "::error::Release artifacts not found"
exit 1
fi
if: github.event_name == 'workflow_call' || startsWith(github.ref, 'refs/tags/v') if: github.event_name == 'workflow_call' || startsWith(github.ref, 'refs/tags/v')
Loading…
Cancel
Save