From 7644db78385d561f744029930eaef2a0394ee5db Mon Sep 17 00:00:00 2001 From: Sam Calder-Mason Date: Thu, 24 Aug 2023 14:50:55 +1000 Subject: [PATCH 1/2] feat(ci): Support alpha releases --- .github/workflows/goreleaser.yaml | 35 +++++++++++++++++++++++---- .goreleaser.yaml | 40 +++++++++++++++---------------- 2 files changed, 51 insertions(+), 24 deletions(-) diff --git a/.github/workflows/goreleaser.yaml b/.github/workflows/goreleaser.yaml index f76287a..aa2bc54 100644 --- a/.github/workflows/goreleaser.yaml +++ b/.github/workflows/goreleaser.yaml @@ -14,6 +14,22 @@ jobs: uses: actions/checkout@v3 with: fetch-depth: 0 + - name: Derive release suffix from tag (if it exists) + run: | + # Strip the 'refs/tags/' prefix + TAG_NAME=${GITHUB_REF#refs/tags/} + + # Extract suffix from tag name after the last '-' (e.g., 'dencun' from 'v1.0.0-dencun') + RELEASE_SUFFIX=${TAG_NAME##*-} + + # Check if the suffix is still a version pattern (e.g., 'v0.0.44'), in which case there's no suffix + if [[ $RELEASE_SUFFIX =~ ^v[0-9]+\.[0-9]+\.[0-9]+$ ]]; then + RELEASE_SUFFIX="" + fi + + echo "RELEASE_SUFFIX=$RELEASE_SUFFIX" >> $GITHUB_ENV + + echo "Release suffix: $RELEASE_SUFFIX" - name: Set up Go uses: actions/setup-go@v3 @@ -28,12 +44,23 @@ jobs: with: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} - - - name: Run GoReleaser + - name: Update GoReleaser config + run: | + cp .goreleaser.yaml ../.goreleaser.yaml.new + + # If we have a RELEASE_SUFFIX, update the goreleaser config to not set + # the release as the latest + if [[ -n "$RELEASE_SUFFIX" ]]; then + echo "release:" >> ../.goreleaser.yaml.new + echo " prerelease: true" >> ../.goreleaser.yaml.new + echo " make_latest: false" >> ../.goreleaser.yaml.new + fi + - name: Run GoReleaser uses: goreleaser/goreleaser-action@v4 with: distribution: goreleaser version: latest - args: release --rm-dist + args: release --clean --config ../.goreleaser.yaml.new env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + RELEASE_SUFFIX: ${{ env.RELEASE_SUFFIX }} diff --git a/.goreleaser.yaml b/.goreleaser.yaml index b3ad21d..1b218e9 100644 --- a/.goreleaser.yaml +++ b/.goreleaser.yaml @@ -44,9 +44,9 @@ dockers: dockerfile: goreleaser-scratch.Dockerfile image_templates: - "samcm/{{ .ProjectName }}:{{ .Version }}-amd64" - - "samcm/{{ .ProjectName }}:latest-amd64" + - "samcm/{{ .ProjectName }}:{{ if .Env.RELEASE_SUFFIX }}{{ .Env.RELEASE_SUFFIX }}-{{ end }}latest-amd64" - "ethpandaops/{{ .ProjectName }}:{{ .Version }}-amd64" - - "ethpandaops/{{ .ProjectName }}:latest-amd64" + - "ethpandaops/{{ .ProjectName }}:{{ if .Env.RELEASE_SUFFIX }}{{ .Env.RELEASE_SUFFIX }}-{{ end }}latest-amd64" build_flag_templates: - "--platform=linux/amd64" - "--label=org.opencontainers.image.created={{.Date}}" @@ -59,9 +59,9 @@ dockers: dockerfile: goreleaser-scratch.Dockerfile image_templates: - "samcm/{{ .ProjectName }}:{{ .Version }}-arm64v8" - - "samcm/{{ .ProjectName }}:latest-arm64v8" + - "samcm/{{ .ProjectName }}:{{ if .Env.RELEASE_SUFFIX }}{{ .Env.RELEASE_SUFFIX }}-{{ end }}latest-arm64v8" - "ethpandaops/{{ .ProjectName }}:{{ .Version }}-arm64v8" - - "ethpandaops/{{ .ProjectName }}:latest-arm64v8" + - "ethpandaops/{{ .ProjectName }}:{{ if .Env.RELEASE_SUFFIX }}{{ .Env.RELEASE_SUFFIX }}-{{ end }}latest-arm64v8" build_flag_templates: - "--platform=linux/arm64/v8" - "--label=org.opencontainers.image.created={{.Date}}" @@ -75,9 +75,9 @@ dockers: dockerfile: goreleaser-debian.Dockerfile image_templates: - "samcm/{{ .ProjectName }}:{{ .Version }}-debian-amd64" - - "samcm/{{ .ProjectName }}:debian-latest-amd64" + - "samcm/{{ .ProjectName }}:{{ if .Env.RELEASE_SUFFIX }}{{ .Env.RELEASE_SUFFIX }}-{{ end }}debian-latest-amd64" - "ethpandaops/{{ .ProjectName }}:{{ .Version }}-debian-amd64" - - "ethpandaops/{{ .ProjectName }}:debian-latest-amd64" + - "ethpandaops/{{ .ProjectName }}:{{ if .Env.RELEASE_SUFFIX }}{{ .Env.RELEASE_SUFFIX }}-{{ end }}debian-latest-amd64" build_flag_templates: - "--platform=linux/amd64" - "--label=org.opencontainers.image.created={{.Date}}" @@ -90,9 +90,9 @@ dockers: dockerfile: goreleaser-debian.Dockerfile image_templates: - "samcm/{{ .ProjectName }}:{{ .Version }}-debian-arm64v8" - - "samcm/{{ .ProjectName }}:debian-latest-arm64v8" + - "samcm/{{ .ProjectName }}:{{ if .Env.RELEASE_SUFFIX }}{{ .Env.RELEASE_SUFFIX }}-{{ end }}debian-latest-arm64v8" - "ethpandaops/{{ .ProjectName }}:{{ .Version }}-debian-arm64v8" - - "ethpandaops/{{ .ProjectName }}:debian-latest-arm64v8" + - "ethpandaops/{{ .ProjectName }}:{{ if .Env.RELEASE_SUFFIX }}{{ .Env.RELEASE_SUFFIX }}-{{ end }}debian-latest-arm64v8" build_flag_templates: - "--platform=linux/arm64/v8" - "--label=org.opencontainers.image.created={{.Date}}" @@ -108,10 +108,10 @@ docker_manifests: - name_template: samcm/{{ .ProjectName }}:{{ .Version }}-arm64 image_templates: - samcm/{{ .ProjectName }}:{{ .Version }}-arm64v8 - - name_template: samcm/{{ .ProjectName }}:latest + - name_template: samcm/{{ .ProjectName }}:{{ if .Env.RELEASE_SUFFIX }}{{ .Env.RELEASE_SUFFIX }}-{{ end }}latest image_templates: - - samcm/{{ .ProjectName }}:latest-amd64 - - samcm/{{ .ProjectName }}:latest-arm64v8 + - samcm/{{ .ProjectName }}:{{ if .Env.RELEASE_SUFFIX }}{{ .Env.RELEASE_SUFFIX }}-{{ end }}latest-amd64 + - samcm/{{ .ProjectName }}:{{ if .Env.RELEASE_SUFFIX }}{{ .Env.RELEASE_SUFFIX }}-{{ end }}latest-arm64v8 - name_template: ethpandaops/{{ .ProjectName }}:{{ .Version }} image_templates: @@ -120,10 +120,10 @@ docker_manifests: - name_template: ethpandaops/{{ .ProjectName }}:{{ .Version }}-arm64 image_templates: - ethpandaops/{{ .ProjectName }}:{{ .Version }}-arm64v8 - - name_template: ethpandaops/{{ .ProjectName }}:latest + - name_template: ethpandaops/{{ .ProjectName }}:{{ if .Env.RELEASE_SUFFIX }}{{ .Env.RELEASE_SUFFIX }}-{{ end }}latest image_templates: - - ethpandaops/{{ .ProjectName }}:latest-amd64 - - ethpandaops/{{ .ProjectName }}:latest-arm64v8 + - ethpandaops/{{ .ProjectName }}:{{ if .Env.RELEASE_SUFFIX }}{{ .Env.RELEASE_SUFFIX }}-{{ end }}latest-amd64 + - ethpandaops/{{ .ProjectName }}:{{ if .Env.RELEASE_SUFFIX }}{{ .Env.RELEASE_SUFFIX }}-{{ end }}latest-arm64v8 ## Debian - name_template: samcm/{{ .ProjectName }}:{{ .Version }}-debian @@ -133,10 +133,10 @@ docker_manifests: - name_template: samcm/{{ .ProjectName }}:{{ .Version }}-debian-arm64 image_templates: - samcm/{{ .ProjectName }}:{{ .Version }}-debian-arm64v8 - - name_template: samcm/{{ .ProjectName }}:debian-latest + - name_template: samcm/{{ .ProjectName }}:{{ if .Env.RELEASE_SUFFIX }}{{ .Env.RELEASE_SUFFIX }}-{{ end }}debian-latest image_templates: - - samcm/{{ .ProjectName }}:debian-latest-amd64 - - samcm/{{ .ProjectName }}:debian-latest-arm64v8 + - samcm/{{ .ProjectName }}:{{ if .Env.RELEASE_SUFFIX }}{{ .Env.RELEASE_SUFFIX }}-{{ end }}debian-latest-amd64 + - samcm/{{ .ProjectName }}:{{ if .Env.RELEASE_SUFFIX }}{{ .Env.RELEASE_SUFFIX }}-{{ end }}debian-latest-arm64v8 - name_template: ethpandaops/{{ .ProjectName }}:{{ .Version }}-debian image_templates: - ethpandaops/{{ .ProjectName }}:{{ .Version }}-debian-amd64 @@ -144,7 +144,7 @@ docker_manifests: - name_template: ethpandaops/{{ .ProjectName }}:{{ .Version }}-debian-arm64 image_templates: - ethpandaops/{{ .ProjectName }}:{{ .Version }}-debian-arm64v8 - - name_template: ethpandaops/{{ .ProjectName }}:debian-latest + - name_template: ethpandaops/{{ .ProjectName }}:{{ if .Env.RELEASE_SUFFIX }}{{ .Env.RELEASE_SUFFIX }}-{{ end }}debian-latest image_templates: - - ethpandaops/{{ .ProjectName }}:debian-latest-amd64 - - ethpandaops/{{ .ProjectName }}:debian-latest-arm64v8 + - ethpandaops/{{ .ProjectName }}:{{ if .Env.RELEASE_SUFFIX }}{{ .Env.RELEASE_SUFFIX }}-{{ end }}debian-latest-amd64 + - ethpandaops/{{ .ProjectName }}{{ if .Env.RELEASE_SUFFIX }}{{ .Env.RELEASE_SUFFIX }}-{{ end }}:debian-latest-arm64v8 From 729e4d80f4df80307935ac5566a2f15ea493d205 Mon Sep 17 00:00:00 2001 From: Sam Calder-Mason Date: Thu, 24 Aug 2023 14:52:54 +1000 Subject: [PATCH 2/2] feat(ci): Support alpha releases --- .github/workflows/alpha-releases.yaml | 59 +++++++++++++++++++++++++++ .goreleaser.yaml | 2 +- 2 files changed, 60 insertions(+), 1 deletion(-) create mode 100644 .github/workflows/alpha-releases.yaml diff --git a/.github/workflows/alpha-releases.yaml b/.github/workflows/alpha-releases.yaml new file mode 100644 index 0000000..26b6d44 --- /dev/null +++ b/.github/workflows/alpha-releases.yaml @@ -0,0 +1,59 @@ +name: alpha releases + +on: + push: + branches: + - 'release/*' + +jobs: + goreleaser: + runs-on: ubuntu-20.04 + steps: + - name: Checkout + uses: actions/checkout@v3 + with: + fetch-depth: 0 + ref: ${{ github.ref }} + token: ${{ secrets.EPOBOT_TOKEN }} + - name: Get latest release version for this release branch + if: startsWith(github.ref, 'refs/heads/release/') + id: latest_version + run: | + # Extract suffix from branch name (e.g., 'dencun' from 'release/dencun') + RELEASE_SUFFIX=${GITHUB_REF#refs/heads/release/} + + # Fetch all tags and get the latest that matches the pattern + # Using the refs/tags API + LATEST_VERSION=$(curl --silent "https://api.github.com/repos/$GITHUB_REPOSITORY/git/refs/tags" \ + | jq -r --arg suffix "$RELEASE_SUFFIX" '.[] | select(.ref | test("refs/tags/v?[0-9]+\\.[0-9]+\\.[0-9]+-" + $suffix + "$")) | .ref' \ + | sed 's|refs/tags/||' | sort -V | tail -n 1) + echo "Found latest $RELEASE_SUFFIX version: $LATEST_VERSION" + + # Default to 0.0.0 if no matching release was found + if [[ -z "$LATEST_VERSION" ]]; then + LATEST_VERSION="0.0.0" + fi + + # Increment the patch version using bash + LATEST_VERSION=$(echo "$LATEST_VERSION" | awk -F. -v OFS=. '{$NF = $NF + 1;} 1') + + VERSION=$LATEST_VERSION-$RELEASE_SUFFIX + + echo "Releasing version: $VERSION" + + git config --global user.email "ethpandaopsbot@ethereum.org" + git config --global user.name "ethpandaopsbot" + + # Log the short commit SHA + SHORT_COMMIT=$(git rev-parse --short HEAD) + + echo "Git commit: $SHORT_COMMIT" + + git tag -a "$VERSION" -m "Release $VERSION" + + echo "RELEASE_SUFFIX=$RELEASE_SUFFIX" >> $GITHUB_ENV + + # Push the tag + git push origin "$VERSION" + env: + GITHUB_TOKEN: ${{ secrets.EPOBOT_TOKEN }} diff --git a/.goreleaser.yaml b/.goreleaser.yaml index 1b218e9..adae0f3 100644 --- a/.goreleaser.yaml +++ b/.goreleaser.yaml @@ -147,4 +147,4 @@ docker_manifests: - name_template: ethpandaops/{{ .ProjectName }}:{{ if .Env.RELEASE_SUFFIX }}{{ .Env.RELEASE_SUFFIX }}-{{ end }}debian-latest image_templates: - ethpandaops/{{ .ProjectName }}:{{ if .Env.RELEASE_SUFFIX }}{{ .Env.RELEASE_SUFFIX }}-{{ end }}debian-latest-amd64 - - ethpandaops/{{ .ProjectName }}{{ if .Env.RELEASE_SUFFIX }}{{ .Env.RELEASE_SUFFIX }}-{{ end }}:debian-latest-arm64v8 + - ethpandaops/{{ .ProjectName }}:{{ if .Env.RELEASE_SUFFIX }}{{ .Env.RELEASE_SUFFIX }}-{{ end }}debian-latest-arm64v8