chore(release-1.19.x): release 1.19.0 (#211) #322
This file contains 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
concurrency: | |
group: "create-release-pr-${{ github.sha }}" | |
env: | |
BUILD_ARTIFACTS_BUCKET: "loki-build-artifacts" | |
BUILD_TIMEOUT: 25 | |
CHANGELOG_PATH: "CHANGELOG.md" | |
DOCKER_USERNAME: "grafana" | |
DRY_RUN: false | |
IMAGE_PREFIX: "trevorwhitney075" | |
RELEASE_LIB_REF: "main" | |
RELEASE_REPO: "grafana/loki-release" | |
SKIP_VALIDATION: false | |
USE_GITHUB_APP_TOKEN: true | |
VERSIONING_STRATEGY: "always-bump-patch" | |
jobs: | |
check: | |
uses: "./.github/workflows/check.yml" | |
with: | |
build_image: "grafana/loki-build-image:0.34.3" | |
golang_ci_lint_version: "v1.60.3" | |
release_lib_ref: "main" | |
skip_validation: false | |
use_github_app_token: true | |
create-release-pr: | |
needs: | |
- "dist" | |
- "loki" | |
- "loki-docker-driver" | |
runs-on: "ubuntu-latest" | |
steps: | |
- name: "pull code to release" | |
uses: "actions/checkout@v4" | |
with: | |
path: "release" | |
repository: "${{ env.RELEASE_REPO }}" | |
- name: "pull release library code" | |
uses: "actions/checkout@v4" | |
with: | |
path: "lib" | |
ref: "${{ env.RELEASE_LIB_REF }}" | |
repository: "grafana/loki-release" | |
- name: "setup node" | |
uses: "actions/setup-node@v4" | |
with: | |
node-version: 20 | |
- id: "extract_branch" | |
name: "extract branch name" | |
run: | | |
echo "branch=${GITHUB_HEAD_REF:-${GITHUB_REF#refs/heads/}}" >> $GITHUB_OUTPUT | |
working-directory: "release" | |
- id: "get_github_app_token" | |
if: "${{ fromJSON(env.USE_GITHUB_APP_TOKEN) }}" | |
name: "get github app token" | |
uses: "actions/create-github-app-token@v1" | |
with: | |
app-id: "${{ secrets.APP_ID }}" | |
owner: "${{ github.repository_owner }}" | |
private-key: "${{ secrets.APP_PRIVATE_KEY }}" | |
- id: "github_app_token" | |
name: "set github token" | |
run: | | |
if [[ "${USE_GITHUB_APP_TOKEN}" == "true" ]]; then | |
echo "token=${{ steps.get_github_app_token.outputs.token }}" >> $GITHUB_OUTPUT | |
else | |
echo "token=${{ secrets.GH_TOKEN }}" >> $GITHUB_OUTPUT | |
fi | |
- env: | |
SHA: "${{ github.sha }}" | |
id: "release" | |
name: "release please" | |
run: | | |
npm install | |
npm exec -- release-please release-pr \ | |
--changelog-path "${CHANGELOG_PATH}" \ | |
--consider-all-branches \ | |
--group-pull-request-title-pattern "chore\${scope}: release\${component} \${version}" \ | |
--label "backport main,autorelease: pending,product-approved" \ | |
--manifest-file .release-please-manifest.json \ | |
--pull-request-footer "Merging this PR will release the [artifacts](https://console.cloud.google.com/storage/browser/${BUILD_ARTIFACTS_BUCKET}/${SHA}) of ${SHA}" \ | |
--pull-request-title-pattern "chore\${scope}: release\${component} \${version}" \ | |
--release-as "${{ needs.dist.outputs.version }}" \ | |
--release-type simple \ | |
--repo-url "${{ env.RELEASE_REPO }}" \ | |
--separate-pull-requests false \ | |
--target-branch "${{ steps.extract_branch.outputs.branch }}" \ | |
--token "${{ steps.github_app_token.outputs.token }}" \ | |
--dry-run ${{ fromJSON(env.DRY_RUN) }} | |
working-directory: "lib" | |
dist: | |
needs: | |
- "version" | |
outputs: | |
version: "${{ needs.version.outputs.version }}" | |
runs-on: "ubuntu-latest" | |
steps: | |
- name: "clean up build tools cache" | |
run: "rm -rf /opt/hostedtoolcache" | |
- name: "pull code to release" | |
uses: "actions/checkout@v4" | |
with: | |
path: "release" | |
repository: "${{ env.RELEASE_REPO }}" | |
- name: "auth gcs" | |
uses: "google-github-actions/auth@v2" | |
with: | |
credentials_json: "${{ secrets.GCS_SERVICE_ACCOUNT_KEY }}" | |
- name: "Set up Cloud SDK" | |
uses: "google-github-actions/setup-gcloud@v2" | |
with: | |
version: ">= 452.0.0" | |
- id: "get-secrets" | |
name: "get nfpm signing keys" | |
uses: "grafana/shared-workflows/actions/get-vault-secrets@main" | |
with: | |
common_secrets: | | |
NFPM_SIGNING_KEY=packages-gpg:private-key | |
NFPM_PASSPHRASE=packages-gpg:passphrase | |
- env: | |
BUILD_IN_CONTAINER: false | |
DRONE_TAG: "${{ needs.version.outputs.version }}" | |
IMAGE_TAG: "${{ needs.version.outputs.version }}" | |
NFPM_SIGNING_KEY_FILE: "nfpm-private-key.key" | |
SKIP_ARM: false | |
if: "${{ fromJSON(needs.version.outputs.pr_created) }}" | |
name: "build artifacts" | |
run: | | |
cat <<EOF | docker run \ | |
--interactive \ | |
--env BUILD_IN_CONTAINER \ | |
--env DRONE_TAG \ | |
--env IMAGE_TAG \ | |
--env NFPM_PASSPHRASE \ | |
--env NFPM_SIGNING_KEY \ | |
--env NFPM_SIGNING_KEY_FILE \ | |
--env SKIP_ARM \ | |
--volume .:/src/loki \ | |
--workdir /src/loki \ | |
--entrypoint /bin/sh "grafana/loki-build-image:0.34.3" | |
git config --global --add safe.directory /src/loki | |
echo "${NFPM_SIGNING_KEY}" > $NFPM_SIGNING_KEY_FILE | |
make dist packages | |
EOF | |
working-directory: "release" | |
- if: "${{ fromJSON(needs.version.outputs.pr_created) }}" | |
name: "upload artifacts" | |
uses: "google-github-actions/upload-cloud-storage@v2" | |
with: | |
destination: "${{ env.BUILD_ARTIFACTS_BUCKET }}/${{ github.sha }}" | |
path: "release/dist" | |
process_gcloudignore: false | |
loki: | |
needs: | |
- "version" | |
runs-on: "${{ matrix.runs_on }}" | |
steps: | |
- name: "pull release library code" | |
uses: "actions/checkout@v4" | |
with: | |
path: "lib" | |
ref: "${{ env.RELEASE_LIB_REF }}" | |
repository: "grafana/loki-release" | |
- name: "pull code to release" | |
uses: "actions/checkout@v4" | |
with: | |
path: "release" | |
repository: "${{ env.RELEASE_REPO }}" | |
- name: "setup node" | |
uses: "actions/setup-node@v4" | |
with: | |
node-version: 20 | |
- name: "auth gcs" | |
uses: "google-github-actions/auth@v2" | |
with: | |
credentials_json: "${{ secrets.GCS_SERVICE_ACCOUNT_KEY }}" | |
- name: "Set up Docker buildx" | |
uses: "docker/setup-buildx-action@v3" | |
- id: "platform" | |
name: "Parse image platform" | |
run: | | |
mkdir -p images | |
platform="$(echo "${{ matrix.arch }}" | sed "s/\(.*\)\/\(.*\)/\1-\2/")" | |
echo "platform=${platform}" >> $GITHUB_OUTPUT | |
echo "platform_short=$(echo ${{ matrix.arch }} | cut -d / -f 2)" >> $GITHUB_OUTPUT | |
working-directory: "release" | |
- env: | |
IMAGE_TAG: "${{ needs.version.outputs.version }}" | |
if: "${{ fromJSON(needs.version.outputs.pr_created) }}" | |
name: "Build and export" | |
timeout-minutes: "${{ fromJSON(env.BUILD_TIMEOUT) }}" | |
uses: "docker/build-push-action@v6" | |
with: | |
build-args: "IMAGE_TAG=${{ needs.version.outputs.version }}" | |
context: "release" | |
file: "release/cmd/loki/Dockerfile" | |
outputs: "type=docker,dest=release/images/fake-loki-${{ needs.version.outputs.version}}-${{ steps.platform.outputs.platform }}.tar" | |
platforms: "${{ matrix.arch }}" | |
tags: "${{ env.IMAGE_PREFIX }}/fake-loki:${{ needs.version.outputs.version }}-${{ steps.platform.outputs.platform_short }}" | |
- if: "${{ fromJSON(needs.version.outputs.pr_created) }}" | |
name: "Upload artifacts" | |
uses: "google-github-actions/upload-cloud-storage@v2" | |
with: | |
destination: "${{ env.BUILD_ARTIFACTS_BUCKET }}/${{ github.sha }}/images" | |
path: "release/images/fake-loki-${{ needs.version.outputs.version}}-${{ steps.platform.outputs.platform }}.tar" | |
process_gcloudignore: false | |
strategy: | |
fail-fast: true | |
matrix: | |
include: | |
- arch: "linux/amd64" | |
runs_on: | |
- "github-hosted-ubuntu-x64-small" | |
- arch: "linux/arm64" | |
runs_on: | |
- "github-hosted-ubuntu-arm64-small" | |
- arch: "linux/arm" | |
runs_on: | |
- "github-hosted-ubuntu-arm64-small" | |
loki-docker-driver: | |
needs: | |
- "version" | |
runs-on: "${{ matrix.runs_on }}" | |
steps: | |
- name: "pull release library code" | |
uses: "actions/checkout@v4" | |
with: | |
path: "lib" | |
ref: "${{ env.RELEASE_LIB_REF }}" | |
repository: "grafana/loki-release" | |
- name: "pull code to release" | |
uses: "actions/checkout@v4" | |
with: | |
path: "release" | |
repository: "${{ env.RELEASE_REPO }}" | |
- name: "setup node" | |
uses: "actions/setup-node@v4" | |
with: | |
node-version: 20 | |
- name: "auth gcs" | |
uses: "google-github-actions/auth@v2" | |
with: | |
credentials_json: "${{ secrets.GCS_SERVICE_ACCOUNT_KEY }}" | |
- name: "Set up QEMU" | |
uses: "docker/setup-qemu-action@v3" | |
- name: "set up docker buildx" | |
uses: "docker/setup-buildx-action@v3" | |
- id: "platform" | |
name: "parse image platform" | |
run: | | |
mkdir -p images | |
mkdir -p plugins | |
platform="$(echo "${{ matrix.arch}}" | sed "s/\(.*\)\/\(.*\)/\1-\2/")" | |
echo "platform=${platform}" >> $GITHUB_OUTPUT | |
echo "platform_short=$(echo ${{ matrix.arch }} | cut -d / -f 2)" >> $GITHUB_OUTPUT | |
if [[ "${platform}" == "linux/arm64" ]]; then | |
echo "plugin_arch=-arm64" >> $GITHUB_OUTPUT | |
else | |
echo "plugin_arch=" >> $GITHUB_OUTPUT | |
fi | |
working-directory: "release" | |
- if: "${{ fromJSON(needs.version.outputs.pr_created) }}" | |
name: "Build and export" | |
timeout-minutes: "${{ fromJSON(env.BUILD_TIMEOUT) }}" | |
uses: "docker/build-push-action@v6" | |
with: | |
build-args: | | |
IMAGE_TAG=${{ needs.version.outputs.version }} | |
GOARCH=${{ steps.platform.outputs.platform_short }} | |
BUILD_IMAGE=grafana/loki-build-image:0.34.3 | |
context: "release" | |
file: "release/clients/cmd/docker-driver/Dockerfile" | |
outputs: "type=local,dest=release/plugins/loki-docker-driver-${{ needs.version.outputs.version}}-${{ steps.platform.outputs.platform }}" | |
platforms: "${{ matrix.arch }}" | |
push: false | |
tags: "${{ env.IMAGE_PREFIX }}/loki-docker-driver:${{ needs.version.outputs.version }}-${{ steps.platform.outputs.platform_short }}" | |
- if: "${{ fromJSON(needs.version.outputs.pr_created) }}" | |
name: "compress rootfs" | |
run: | | |
tar -cf release/plugins/loki-docker-driver-${{ needs.version.outputs.version}}-${{ steps.platform.outputs.platform }}.tar \ | |
-C release/plugins/loki-docker-driver-${{ needs.version.outputs.version}}-${{ steps.platform.outputs.platform }} \ | |
. | |
- if: "${{ fromJSON(needs.version.outputs.pr_created) }}" | |
name: "upload artifacts" | |
uses: "google-github-actions/upload-cloud-storage@v2" | |
with: | |
destination: "${{ env.BUILD_ARTIFACTS_BUCKET }}/${{ github.sha }}/plugins" | |
path: "release/plugins/loki-docker-driver-${{ needs.version.outputs.version}}-${{ steps.platform.outputs.platform }}.tar" | |
process_gcloudignore: false | |
strategy: | |
fail-fast: true | |
matrix: | |
include: | |
- arch: "linux/amd64" | |
runs_on: | |
- "github-hosted-ubuntu-x64-small" | |
- arch: "linux/arm64" | |
runs_on: | |
- "github-hosted-ubuntu-arm64-small" | |
version: | |
needs: | |
- "check" | |
outputs: | |
pr_created: "${{ steps.version.outputs.pr_created }}" | |
version: "${{ steps.version.outputs.version }}" | |
runs-on: "ubuntu-latest" | |
steps: | |
- name: "pull release library code" | |
uses: "actions/checkout@v4" | |
with: | |
path: "lib" | |
ref: "${{ env.RELEASE_LIB_REF }}" | |
repository: "grafana/loki-release" | |
- name: "pull code to release" | |
uses: "actions/checkout@v4" | |
with: | |
path: "release" | |
repository: "${{ env.RELEASE_REPO }}" | |
- name: "setup node" | |
uses: "actions/setup-node@v4" | |
with: | |
node-version: 20 | |
- id: "extract_branch" | |
name: "extract branch name" | |
run: | | |
echo "branch=${GITHUB_HEAD_REF:-${GITHUB_REF#refs/heads/}}" >> $GITHUB_OUTPUT | |
working-directory: "release" | |
- id: "get_github_app_token" | |
if: "${{ fromJSON(env.USE_GITHUB_APP_TOKEN) }}" | |
name: "get github app token" | |
uses: "actions/create-github-app-token@v1" | |
with: | |
app-id: "${{ secrets.APP_ID }}" | |
owner: "${{ github.repository_owner }}" | |
private-key: "${{ secrets.APP_PRIVATE_KEY }}" | |
- id: "github_app_token" | |
name: "set github token" | |
run: | | |
if [[ "${USE_GITHUB_APP_TOKEN}" == "true" ]]; then | |
echo "token=${{ steps.get_github_app_token.outputs.token }}" >> $GITHUB_OUTPUT | |
else | |
echo "token=${{ secrets.GH_TOKEN }}" >> $GITHUB_OUTPUT | |
fi | |
- id: "version" | |
name: "get release version" | |
run: | | |
npm install | |
if [[ -z "${{ env.RELEASE_AS }}" ]]; then | |
npm exec -- release-please release-pr \ | |
--consider-all-branches \ | |
--dry-run \ | |
--dry-run-output release.json \ | |
--group-pull-request-title-pattern "chore\${scope}: release\${component} \${version}" \ | |
--manifest-file .release-please-manifest.json \ | |
--pull-request-title-pattern "chore\${scope}: release\${component} \${version}" \ | |
--release-type simple \ | |
--repo-url "${{ env.RELEASE_REPO }}" \ | |
--separate-pull-requests false \ | |
--target-branch "${{ steps.extract_branch.outputs.branch }}" \ | |
--token "${{ steps.github_app_token.outputs.token }}" \ | |
--versioning-strategy "${{ env.VERSIONING_STRATEGY }}" | |
else | |
npm exec -- release-please release-pr \ | |
--consider-all-branches \ | |
--dry-run \ | |
--dry-run-output release.json \ | |
--group-pull-request-title-pattern "chore\${scope}: release\${component} \${version}" \ | |
--manifest-file .release-please-manifest.json \ | |
--pull-request-title-pattern "chore\${scope}: release\${component} \${version}" \ | |
--release-type simple \ | |
--repo-url "${{ env.RELEASE_REPO }}" \ | |
--separate-pull-requests false \ | |
--target-branch "${{ steps.extract_branch.outputs.branch }}" \ | |
--token "${{ steps.github_app_token.outputs.token }}" \ | |
--release-as "${{ env.RELEASE_AS }}" | |
fi | |
cat release.json | |
if [[ `jq length release.json` -gt 1 ]]; then | |
echo 'release-please would create more than 1 PR, so cannot determine correct version' | |
echo "pr_created=false" >> $GITHUB_OUTPUT | |
exit 1 | |
fi | |
if [[ `jq length release.json` -eq 0 ]]; then | |
echo "pr_created=false" >> $GITHUB_OUTPUT | |
else | |
version="$(npm run --silent get-version)" | |
echo "Parsed version: ${version}" | |
echo "version=${version}" >> $GITHUB_OUTPUT | |
echo "pr_created=true" >> $GITHUB_OUTPUT | |
fi | |
working-directory: "lib" | |
name: "Create Release PR" | |
"on": | |
push: | |
branches: | |
- "release-[0-9]+.[0-9]+.x" | |
permissions: | |
contents: "write" | |
id-token: "write" | |
pull-requests: "write" |