|
| 1 | +name: goreleaser |
| 2 | + |
| 3 | +on: |
| 4 | + push: |
| 5 | + tags: |
| 6 | + - '*' |
| 7 | + workflow_dispatch: |
| 8 | + inputs: |
| 9 | + frontend_branch: |
| 10 | + description: 'Frontend branch to use (e.g., frontend, main)' |
| 11 | + required: false |
| 12 | + default: 'frontend' |
| 13 | + |
| 14 | +jobs: |
| 15 | + goreleaser: |
| 16 | + permissions: |
| 17 | + contents: write |
| 18 | + runs-on: ubuntu-latest |
| 19 | + steps: |
| 20 | + - name: Checkout |
| 21 | + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 |
| 22 | + with: |
| 23 | + fetch-depth: 0 |
| 24 | + ref: ${{ github.ref }} |
| 25 | + |
| 26 | + - name: Derive release suffix from tag (if it exists) |
| 27 | + run: | |
| 28 | + # Strip the 'refs/tags/' prefix |
| 29 | + TAG_NAME=${GITHUB_REF#refs/tags/} |
| 30 | +
|
| 31 | + # Extract suffix from tag name after the last '-' (e.g., 'dencun' from 'v1.0.0-dencun') |
| 32 | + RELEASE_SUFFIX=${TAG_NAME##*-} |
| 33 | +
|
| 34 | + # Check if the suffix is still a version pattern (e.g., 'v0.0.44'), in which case there's no suffix |
| 35 | + if [[ $RELEASE_SUFFIX =~ ^v[0-9]+\.[0-9]+\.[0-9]+$ ]]; then |
| 36 | + RELEASE_SUFFIX="" |
| 37 | + fi |
| 38 | +
|
| 39 | + echo "RELEASE_SUFFIX=$RELEASE_SUFFIX" >> $GITHUB_ENV |
| 40 | +
|
| 41 | + echo "Release suffix: $RELEASE_SUFFIX" |
| 42 | +
|
| 43 | + - name: Set up Go |
| 44 | + uses: actions/setup-go@d35c59abb061a4a6fb18e82ac0862c26744d6ab5 # v5.5.0 |
| 45 | + with: |
| 46 | + go-version: '1.25.1' |
| 47 | + |
| 48 | + - name: Run apt-get update |
| 49 | + run: sudo apt-get update |
| 50 | + |
| 51 | + - name: Install cross-compiler for linux/arm64 |
| 52 | + run: sudo apt-get -y install gcc-aarch64-linux-gnu |
| 53 | + |
| 54 | + - name: Install make |
| 55 | + run: sudo apt-get -y install make |
| 56 | + |
| 57 | + - name: Set frontend branch |
| 58 | + run: | |
| 59 | + # Use workflow input if provided, otherwise default to 'frontend' |
| 60 | + if [ "${{ github.event.inputs.frontend_branch }}" != "" ]; then |
| 61 | + echo "FRONTEND_BRANCH=${{ github.event.inputs.frontend_branch }}" >> $GITHUB_ENV |
| 62 | + else |
| 63 | + echo "FRONTEND_BRANCH=frontend" >> $GITHUB_ENV |
| 64 | + fi |
| 65 | +
|
| 66 | + - name: Download and setup frontend |
| 67 | + run: | |
| 68 | + echo "Using frontend branch: $FRONTEND_BRANCH" |
| 69 | + FRONTEND_BRANCH=$FRONTEND_BRANCH make setup-frontend |
| 70 | +
|
| 71 | + - name: Set up QEMU |
| 72 | + uses: docker/setup-qemu-action@29109295f81e9208d7d86ff1c6c12d2833863392 # v3.6.0 |
| 73 | + |
| 74 | + - name: Set up Docker Context for Buildx |
| 75 | + shell: bash |
| 76 | + id: buildx-context |
| 77 | + run: | |
| 78 | + docker context create builders |
| 79 | +
|
| 80 | + - name: Set up Docker Buildx |
| 81 | + uses: docker/setup-buildx-action@e468171a9de216ec08956ac3ada2f0791b6bd435 # v3.11.1 |
| 82 | + with: |
| 83 | + endpoint: builders |
| 84 | + |
| 85 | + - name: Login to DockerHub |
| 86 | + uses: docker/login-action@184bdaa0721073962dff0199f1fb9940f07167d1 # v3.5.0 |
| 87 | + with: |
| 88 | + username: ${{ secrets.DOCKERHUB_USERNAME }} |
| 89 | + password: ${{ secrets.DOCKERHUB_TOKEN }} |
| 90 | + |
| 91 | + - name: Update GoReleaser config |
| 92 | + run: | |
| 93 | + cp .goreleaser.yaml .goreleaser.yaml.new |
| 94 | +
|
| 95 | + # If we have a RELEASE_SUFFIX, update the goreleaser config to not set |
| 96 | + # the release as the latest |
| 97 | + if [[ -n "$RELEASE_SUFFIX" ]]; then |
| 98 | + echo "release:" >> .goreleaser.yaml.new |
| 99 | + echo " prerelease: true" >> .goreleaser.yaml.new |
| 100 | + echo " make_latest: false" >> .goreleaser.yaml.new |
| 101 | + fi |
| 102 | +
|
| 103 | + - name: Run GoReleaser in Docker |
| 104 | + run: | |
| 105 | + docker run --rm \ |
| 106 | + -v ${{ github.workspace }}:/workspace \ |
| 107 | + -w /workspace \ |
| 108 | + -e GITHUB_TOKEN=${{ secrets.GITHUB_TOKEN }} \ |
| 109 | + -e DOCKER_USERNAME=${{ secrets.DOCKERHUB_USERNAME }} \ |
| 110 | + -e DOCKER_PASSWORD=${{ secrets.DOCKERHUB_TOKEN }} \ |
| 111 | + -v /var/run/docker.sock:/var/run/docker.sock \ |
| 112 | + -e RELEASE_SUFFIX=${{ env.RELEASE_SUFFIX }} \ |
| 113 | + goreleaser/goreleaser-cross:v1.25.1 release --clean --config .goreleaser.yaml.new |
0 commit comments