diff --git a/.github/workflows/release-generation.yaml b/.github/workflows/release-generation.yaml new file mode 100644 index 00000000..4a44b9cc --- /dev/null +++ b/.github/workflows/release-generation.yaml @@ -0,0 +1,141 @@ +name: "Release - Generation" + +on: + # release: + # types: [created] + push: + branches: + - distro-255-aa-fix-release-workflow + +env: + # Example: 8.4+gen1 + CAMUNDA_RELEASE_NAME: 8.4+gen7 + +jobs: + release_script: + runs-on: ubuntu-latest + name: Build release notes + steps: + - uses: actions/checkout@v4 + + - name: Setup Go + uses: actions/setup-go@v5 + with: + go-version: "1.20" + + - name: Build + working-directory: ./release-notes-fetcher + run: go build + + - name: Generate token for Camunda GitHub org + id: generate-camunda-github-token + uses: tibdex/github-app-token@v1 + with: + app_id: ${{ secrets.APP_ID }} + private_key: ${{ secrets.APP_PRIVATE_KEY }} + + - name: Generate token for Camunda Cloud GitHub org + id: generate-camunda-cloud-github-token + uses: tibdex/github-app-token@v1 + with: + app_id: ${{ secrets.APP_ID }} + private_key: ${{ secrets.APP_PRIVATE_KEY }} + repository: camunda-cloud/identity + + - name: Set vars + run: | + CAMUNDA_VERSION="$(echo ${CAMUNDA_RELEASE_NAME} | awk -F '+' '{print $1}')" + CONFIG_FILE="release-notes-fetcher/config/release-notes-fetcher-camunda-${CAMUNDA_VERSION}.yaml" + export GLOBAL_GITREF="$(yq '.gitRef.global' ${CONFIG_FILE})" + + # Generate env var from git ref for all apps. + # This will generate env vars like "ZEEBE_GITREF". + yq '.gitRef | omit(["global"]) | keys' "${CONFIG_FILE}" | sed 's/- //g' | + while read APP_NAME; do + APP_REF="$(APP_NAME=${APP_NAME} yq '.gitRef.[env(APP_NAME)] // env(GLOBAL_GITREF)' ${CONFIG_FILE})" + echo "${APP_NAME^^}_GITREF=${APP_REF}" >> "${GITHUB_ENV}" + done + + - name: Run release notes script + working-directory: ./release-notes-fetcher + run: set -o pipefail; ./release-notes-fetcher | tee release_notes.txt + env: + GITHUB_CAMUNDA_ACCESS_TOKEN: ${{ steps.generate-camunda-github-token.outputs.token }} + GITHUB_CAMUNDA_CLOUD_ACCESS_TOKEN: ${{ steps.generate-camunda-cloud-github-token.outputs.token }} + + - name: Login to gh repo + working-directory: ./release-notes-fetcher + run: echo ${{ steps.generate-camunda-github-token.outputs.token }} | gh auth login --with-token + + - name: Edit release notes with output from script + working-directory: ./release-notes-fetcher + run: gh release edit --notes-file release_notes.txt -R camunda/camunda-platform ${CAMUNDA_RELEASE_NAME} + + - name: Create temporary directory for asset download/upload + working-directory: ./release-notes-fetcher + run: mkdir -p tmp + + # Tasklist binaries are uploaded to zeebes repo + - name: Download Zeebe resources + working-directory: ./release-notes-fetcher/tmp + run: | + gh release download "${ZEEBE_GITREF}" \ + -R camunda/zeebe \ + -p "zbctl" \ + -p "zbctl.sha1sum" \ + -p "zbctl.exe" \ + -p "zbctl.exe.sha1sum" \ + -p "zbctl.darwin" \ + -p "zbctl.darwin.sha1sum" \ + -p "camunda-zeebe-${ZEEBE_GITREF}.tar.gz" \ + -p "camunda-zeebe-${ZEEBE_GITREF}.tar.gz.sha1sum" \ + -p "camunda-zeebe-${ZEEBE_GITREF}.zip" \ + -p "camunda-zeebe-${ZEEBE_GITREF}.zip.sha1sum" \ + -p "camunda-tasklist-${ZEEBE_GITREF}.zip" \ + -p "camunda-tasklist-${ZEEBE_GITREF}.zip.sha1sum" \ + -p "camunda-tasklist-${ZEEBE_GITREF}.tar.gz" \ + -p "camunda-tasklist-${ZEEBE_GITREF}.tar.gz.sha1sum" + + - name: Download Operate resources from monorepo + if: ${{ startsWith(env.CAMUNDA_RELEASE_NAME, '8.5') }} + working-directory: ./release-notes-fetcher/tmp + run: | + gh release download "operate-${OPERATE_GITREF}" \ + -R camunda/zeebe \ + -p "camunda-operate-${OPERATE_GITREF}.zip" \ + -p "camunda-operate-${OPERATE_GITREF}.zip.sha1sum" \ + -p "camunda-operate-${OPERATE_GITREF}.tar.gz" \ + -p "camunda-operate-${OPERATE_GITREF}.tar.gz.sha1sum" \ + + - name: Download Operate resources + if: ${{ !startsWith(env.CAMUNDA_RELEASE_NAME, '8.5') }} + working-directory: ./release-notes-fetcher/tmp + run: | + gh release download "${OPERATE_GITREF}" \ + -R camunda/operate \ + -p "camunda-operate-${OPERATE_GITREF}.zip" \ + -p "camunda-operate-${OPERATE_GITREF}.zip.sha1sum" \ + -p "camunda-operate-${OPERATE_GITREF}.tar.gz" \ + -p "camunda-operate-${OPERATE_GITREF}.tar.gz.sha1sum" \ + + - name: Login to Camunda Cloud + working-directory: ./release-notes-fetcher + run: echo ${{ steps.generate-camunda-cloud-github-token.outputs.token }} | gh auth login --with-token + + - name: Download Identity resources + working-directory: ./release-notes-fetcher/tmp + run: | + gh release download "${IDENTITY_GITREF}" \ + -R camunda-cloud/identity \ + -p "camunda-identity-${IDENTITY_GITREF}.tar.gz" \ + -p "camunda-identity-${IDENTITY_GITREF}.tar.gz.sha1sum" \ + -p "camunda-identity-${IDENTITY_GITREF}.zip" \ + -p "camunda-identity-${IDENTITY_GITREF}.zip.sha1sum" + + - name: Login back to Camunda + working-directory: ./release-notes-fetcher + run: echo ${{ steps.generate-camunda-github-token.outputs.token }} | gh auth login --with-token + + - name: Upload resources + working-directory: ./release-notes-fetcher/tmp + run: gh release -R camunda/camunda-platform upload "${CAMUNDA_RELEASE_NAME}" * diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 5315b9b0..d9246d69 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -4,6 +4,7 @@ on: jobs: release_script: + if: ! contains($GITHUB_REF_NAME, "+") runs-on: ubuntu-latest name: Build release script steps: diff --git a/release-notes-fetcher/config/release-notes-fetcher-camunda-8.4.yaml b/release-notes-fetcher/config/release-notes-fetcher-camunda-8.4.yaml new file mode 100644 index 00000000..485b5fb2 --- /dev/null +++ b/release-notes-fetcher/config/release-notes-fetcher-camunda-8.4.yaml @@ -0,0 +1,6 @@ +gitRef: + global: 8.4.7 + operate: 8.4.8 + identity: + tasklist: + zeebe: diff --git a/release-notes-fetcher/fetch.go b/release-notes-fetcher/fetch.go index 37f48126..6840928b 100644 --- a/release-notes-fetcher/fetch.go +++ b/release-notes-fetcher/fetch.go @@ -2,14 +2,16 @@ package main import ( "context" - "github.com/google/go-github/v54/github" - "github.com/rs/zerolog" - "github.com/rs/zerolog/log" - "golang.org/x/oauth2" + "fmt" "io" "os" "regexp" "text/template" + + "github.com/google/go-github/v54/github" + "github.com/rs/zerolog" + "github.com/rs/zerolog/log" + "golang.org/x/oauth2" ) const RepoOwner = "camunda" @@ -83,13 +85,20 @@ func GetLatestReleaseContents(ctx context.Context, return *githubRelease.Body } +func getEnv(key, fallback string) string { + if value, ok := os.LookupEnv(key); ok { + return value + } + return fallback +} + func main() { var temp = template.Must(template.ParseFiles(ReleaseNotesTemplateFileName)) camundaTokenSource := oauth2.StaticTokenSource( &oauth2.Token{AccessToken: os.Getenv("GITHUB_CAMUNDA_ACCESS_TOKEN")}, ) - githubRef := os.Getenv("GITHUB_REF_NAME") + githubRef := getEnv(os.Getenv("CAMUNDA_RELEASE_NAME"), os.Getenv("GITHUB_REF_NAME")) ctx := context.TODO() camundaOAuthClient := oauth2.NewClient(ctx, camundaTokenSource) @@ -100,14 +109,14 @@ func main() { camundaRepoService := camundaGithubClient.Repositories - log.Debug().Msg("Github ref = " + githubRef) + log.Debug().Msg("Camunda Github ref = " + githubRef) zeebeReleaseNotes := GetLatestReleaseContents( ctx, RepoOwner, ZeebeRepoName, camundaRepoService, - githubRef, + getEnv("ZEEBE_GITREF", githubRef), ) operateReleaseNotesContents := GetLatestReleaseContents( @@ -115,7 +124,7 @@ func main() { RepoOwner, OperateRepoName, camundaRepoService, - githubRef, + getEnv("OPERATE_GITREF", githubRef), ) tasklistReleaseNotesContents := GetChangelogReleaseContents( @@ -123,7 +132,7 @@ func main() { TasklistRepoName, "CHANGELOG.md", camundaRepoService, - githubRef, + getEnv("TASKLIST_GITREF", githubRef), ) camundaCloudTokenSource := oauth2.StaticTokenSource( @@ -138,9 +147,11 @@ func main() { CloudRepoOwner, IdentityRepoName, camundaCloudRepoService, - githubRef, + getEnv("IDENTITY_GITREF", githubRef), ) + fmt.Println(zeebeReleaseNotes) + platformRelease := CamundaPlatformRelease{ ZeebeReleaseNotes: zeebeReleaseNotes, OperateReleaseNotes: operateReleaseNotesContents, diff --git a/release-notes-fetcher/release.sh b/release-notes-fetcher/release.sh deleted file mode 100755 index bb8964a7..00000000 --- a/release-notes-fetcher/release.sh +++ /dev/null @@ -1,52 +0,0 @@ -#!/bin/bash -set -x -e -set +o pipefail - -export GITHUB_REF_NAME=8.2.3 -export REPO_TO_PUBLISH_TO=camunda/camunda-platform - -go build - -./release-notes-fetcher | tee release_notes.txt -gh release edit --notes-file release_notes.txt -R $REPO_TO_PUBLISH_TO $GITHUB_REF_NAME - -mkdir -p tmp - -cd tmp - -gh release \ - download "$GITHUB_REF_NAME" \ - -R camunda/zeebe \ - -p "zbctl" \ - -p "zbctl.sha1sum" \ - -p "zbctl.exe" \ - -p "zbctl.exe.sha1sum" \ - -p "zbctl.darwin" \ - -p "zbctl.darwin.sha1sum" \ - -p "camunda-zeebe-$GITHUB_REF_NAME.tar.gz" \ - -p "camunda-zeebe-$GITHUB_REF_NAME.tar.gz.sha1sum" \ - -p "camunda-zeebe-$GITHUB_REF_NAME.zip" \ - -p "camunda-zeebe-$GITHUB_REF_NAME.zip.sha1sum" \ - -p "camunda-tasklist-$GITHUB_REF_NAME.zip" \ - -p "camunda-tasklist-$GITHUB_REF_NAME.zip.sha1sum" \ - -p "camunda-tasklist-$GITHUB_REF_NAME.tar.gz" \ - -p "camunda-tasklist-$GITHUB_REF_NAME.tar.gz.sha1sum" - -gh release \ - download "$GITHUB_REF_NAME" \ - -R camunda/operate \ - -p "camunda-operate-$GITHUB_REF_NAME.zip" \ - -p "camunda-operate-$GITHUB_REF_NAME.zip.sha1sum" \ - -p "camunda-operate-$GITHUB_REF_NAME.tar.gz" \ - -p "camunda-operate-$GITHUB_REF_NAME.tar.gz.sha1sum" \ - -gh release \ - download "$GITHUB_REF_NAME" \ - -R camunda-cloud/identity \ - -p "camunda-identity-$GITHUB_REF_NAME.tar.gz" \ - -p "camunda-identity-$GITHUB_REF_NAME.tar.gz.sha1sum" \ - -p "camunda-identity-$GITHUB_REF_NAME.zip" \ - -p "camunda-identity-$GITHUB_REF_NAME.zip.sha1sum" - -gh release -R $REPO_TO_PUBLISH_TO upload "$GITHUB_REF_NAME" * -