Skip to content

Commit 5ba3cbc

Browse files
authored
[ADP-3400] Automate part of the release process as CI steps (#4749)
This PR remove some manual steps from the release process. In particular - create release tag - create release - upload artifacts - upload the titles and links of the PRs since last release, for further human processing Because the release process is rare, this PR introduce a running draft release called nightly, which runs the automated steps on a running tag that gets rewritten every day. More work should be done to - collect automatically the dockerhub image link. - collect the bump.sh to the current change ADP-3400
2 parents e2ddfa9 + 1b8b503 commit 5ba3cbc

12 files changed

+286
-93
lines changed

.buildkite/pipeline.yml

+10-11
Original file line numberDiff line numberDiff line change
@@ -510,11 +510,12 @@ steps:
510510
if: |
511511
build.branch !~ /^gh-readonly-queue\/master/
512512
&& build.branch != "master"
513-
&& ( build.env("RELEASE_CANDIDATE") == null || build.env("TEST_RC") == "TRUE" )
513+
&& build.env("RELEASE_CANDIDATE") == null
514514
key: block-macos
515515

516516
- label: Build Integration Tests (macOS, arm64)
517517
key: macos-arm64-tests-build-integration
518+
if: build.env("TEST_RC") == null || build.env("TEST_RC") == "FALSE"
518519
depends_on: block-macos
519520
command: nix build -L .#packages.aarch64-darwin.integration-exe
520521
agents:
@@ -610,10 +611,8 @@ steps:
610611
if: |
611612
build.branch !~ /^gh-readonly-queue\/master/
612613
&& build.branch != "master"
613-
&& (build.env("RELEASE_CANDIDATE") == null
614-
|| build.env("TEST_RC") == "TRUE"
615-
)
616614
&& build.branch != "rc-latest"
615+
&& build.env("RELEASE_CANDIDATE") == null
617616
key: trigger-build-windows-artifacts
618617

619618
- label: Build Package (windows)
@@ -627,6 +626,7 @@ steps:
627626

628627
- label: Build Testing Bundle (windows)
629628
key: windows-testing-bundle
629+
if: build.env("TEST_RC") == null || build.env("TEST_RC") == "FALSE"
630630
depends_on:
631631
- trigger-build-windows-artifacts
632632
command: nix build -o result/windows-tests .#ci.artifacts.win64.tests
@@ -635,7 +635,7 @@ steps:
635635
system: ${linux}
636636

637637
- label: Tag as Release Candidate (windows)
638-
if: build.env("RELEASE_CANDIDATE") != null
638+
if: build.env("RELEASE_CANDIDATE") == null || build.env("TEST_RC") == "FALSE"
639639
depends_on:
640640
- windows-package
641641
- windows-testing-bundle
@@ -650,21 +650,20 @@ steps:
650650
- linux-artifacts
651651
steps:
652652

653-
- block: Docker Build
654-
depends_on: []
655-
if: build.env("TEST_RC") == "TRUE"
656-
key: docker-build-block
657-
658653
- label: Build Docker Image
659654
key: docker-build
660-
depends_on: docker-build-block
661655
commands:
662656
./scripts/buildkite/main/docker-build.sh
663657
artifact_paths:
664658
- ./artifacts/*.tgz
665659
agents:
666660
system: x86_64-linux
667661

662+
- block: Docker Build
663+
depends_on: []
664+
if: build.env("TEST_RC") == "TRUE"
665+
key: docker-build-block
666+
668667
- label: Push Docker Image
669668
depends_on:
670669
- docker-build

.buildkite/release.yml

+80-10
Original file line numberDiff line numberDiff line change
@@ -24,22 +24,63 @@ steps:
2424
commands:
2525
- ./scripts/buildkite/release/generate-trigger.sh | buildkite-agent pipeline upload
2626

27-
- label: Push swagger daily
28-
depends_on: main-pipeline-build
27+
- label: Collect changes
28+
key: collect-changes
29+
depends_on: add-release-commits
2930
commands:
30-
- nix develop path:$RELEASE_SCRIPTS_DIR -c $RELEASE_SCRIPTS_DIR/push-to-bump.sh
31-
artifacts:
32-
- artifacts/api-diffs.md
33-
env:
34-
RELEASE: false
31+
- nix develop path:$RELEASE_SCRIPTS_DIR -c $RELEASE_SCRIPTS_DIR/make_changelog.sh
3532
agents:
3633
system: x86_64-linux
34+
artifacts:
35+
- artifacts/changes.md
36+
37+
- group : Nightly
38+
key: nightly
39+
depends_on: main-pipeline-build
40+
steps:
41+
- label: Push swagger nightly
42+
commands:
43+
- nix develop path:$RELEASE_SCRIPTS_DIR -c $RELEASE_SCRIPTS_DIR/push-to-bump.sh
44+
artifacts:
45+
- artifacts/api-diffs.md
46+
env:
47+
RELEASE: false
48+
agents:
49+
system: x86_64-linux
50+
51+
- label: Push nightly release tag
52+
key: push-nightly-tag
53+
commands:
54+
- nix develop path:$RELEASE_SCRIPTS_DIR -c $RELEASE_SCRIPTS_DIR/push-tag.sh
55+
agents:
56+
system: x86_64-linux
57+
env:
58+
RELEASE: false
59+
60+
- label: Push nightly release
61+
depends_on: push-nightly-tag
62+
key: push-nightly-release
63+
commands:
64+
- nix develop path:$RELEASE_SCRIPTS_DIR -c $RELEASE_SCRIPTS_DIR/push-release.sh
65+
agents:
66+
system: x86_64-linux
67+
env:
68+
RELEASE: false
69+
70+
- label: Push nightly release artifacts
71+
depends_on: push-nightly-release
72+
commands:
73+
- nix develop path:$RELEASE_SCRIPTS_DIR -c $RELEASE_SCRIPTS_DIR/push-artifacts.sh
74+
agents:
75+
system: x86_64-linux
76+
env:
77+
RELEASE: false
3778

3879
- group: Release
39-
if: build.branch =~ /^release-candidate/
80+
depends_on: nightly
81+
if: build.branch == "master"
4082
steps:
4183
- block: Create a release
42-
depends_on: main-pipeline-build
4384
key: create-release
4485

4586
- label: Push swagger release
@@ -51,4 +92,33 @@ steps:
5192
env:
5293
RELEASE: true
5394
agents:
54-
system: x86_64-linux
95+
system: x86_64-linux
96+
97+
- label: Push release tag
98+
key: push-release-tag
99+
depends_on: create-release
100+
commands:
101+
- nix develop path:$RELEASE_SCRIPTS_DIR -c $RELEASE_SCRIPTS_DIR/push-tag.sh
102+
agents:
103+
system: x86_64-linux
104+
env:
105+
RELEASE: true
106+
107+
- label: Push release
108+
depends_on: push-release-tag
109+
key: push-release
110+
commands:
111+
- nix develop path:$RELEASE_SCRIPTS_DIR -c $RELEASE_SCRIPTS_DIR/push-release.sh
112+
agents:
113+
system: x86_64-linux
114+
env:
115+
RELEASE: true
116+
117+
- label: Push release artifacts
118+
depends_on: push-release
119+
commands:
120+
- nix develop path:$RELEASE_SCRIPTS_DIR -c $RELEASE_SCRIPTS_DIR/push-artifacts.sh
121+
agents:
122+
system: x86_64-linux
123+
env:
124+
RELEASE: true

scripts/buildkite/release/flake.nix

+2
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@
3232
pkgs.gnutar
3333
pkgs.gnupg
3434
pkgs.nodejs_22
35+
pkgs.gh
36+
pkgs.gettext
3537
];
3638
shellHook = ''
3739
# use this hook to set up additional environment variables

scripts/buildkite/release/generate-trigger.sh

+10-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
#!/bin/bash
1+
#! /usr/bin/env bash
22

33
set -euo pipefail
44

@@ -7,6 +7,13 @@ VERSION=$(buildkite-agent meta-data get "release-version")
77
BRANCH=$(buildkite-agent meta-data get "release-candidate-branch")
88
CABAL=$(buildkite-agent meta-data get "release-cabal-version")
99
TEST_RC=$(buildkite-agent meta-data get "test-rc")
10+
BASE_BUILD=$(buildkite-agent meta-data get "base-build")
11+
12+
if [ "$TEST_RC" == "TRUE" ]; then
13+
title="Test Release Candidate of $VERSION"
14+
else
15+
title="Release Candidate of $VERSION"
16+
fi
1017

1118
cat << YAML
1219
steps:
@@ -17,7 +24,7 @@ steps:
1724
build:
1825
commit: $COMMIT
1926
branch: $BRANCH
20-
message: Release Candidate of $VERSION
27+
message: $title
2128
env:
2229
RELEASE_CANDIDATE: "$VERSION"
2330
TEST_RC: "$TEST_RC"
@@ -26,5 +33,6 @@ steps:
2633
release-candidate-commit: "$COMMIT"
2734
release-candidate-branch: "$BRANCH"
2835
release-cabal-version: "$CABAL"
36+
triggered-by: "$BASE_BUILD"
2937
3038
YAML
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
#!/usr/bin/env bash
2+
3+
set -euo pipefail
4+
5+
since_date="$(buildkite-agent meta-data get last-release-date)"
6+
7+
fetch_prs() {
8+
curl --silent \
9+
-H "Accept: application/vnd.github+json" \
10+
-H "Authorization: Bearer $GITHUB_TOKEN" \
11+
-H "X-GitHub-Api-Version: 2022-11-28" \
12+
"https://api.github.com/search/issues?q=repo:cardano-foundation/cardano-wallet+is:pr+is:merged+merged:%3E$since_date"
13+
}
14+
15+
prs=$(fetch_prs | jq '.items | map({date:.pull_request.merged_at | split("T")[0], number:.number,title:.title,labels:.labels| map(.name),author:.user.login })')
16+
17+
items=$(jq 'map("\(.date), #\(.number), \(.author), \(.labels | join(", ")), \(.title)")' <<< "$prs")
18+
item_max=$(jq 'length - 1' <<< "$items")
19+
20+
mkdir -p artifacts
21+
22+
for i in $(seq 0 "$item_max"); do
23+
item=$(jq -r ".[$i]" <<< "$items")
24+
echo "$item" \
25+
| sed -E 's,\[(ADP\-[0-9]+)\],[\1](https://cardanofoundation.atlassian.net/browse/\1),g' \
26+
| sed -E 's,\[ADP-x+\],,g' \
27+
| sed -E 's,#([0-9]+),[#\1](https://github.com/cardano-foundation/cardano-wallet/pull/\1),g' \
28+
>> artifacts/changes.md
29+
done
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
#! /usr/bin/env bash
2+
3+
set -euox pipefail
4+
5+
base_build=$(buildkite-agent meta-data get base-build)
6+
NEW_GIT_TAG=$(buildkite-agent meta-data get release-version)
7+
8+
if [ "$RELEASE" == "false" ]; then
9+
TAG=nightly
10+
else
11+
TAG=$NEW_GIT_TAG
12+
fi
13+
14+
main_build=$(curl -H "Authorization: Bearer $BUILDKITE_API_TOKEN" \
15+
-X GET "https://api.buildkite.com/v2/builds" \
16+
| jq ".[] | select(.meta_data.\"triggered-by\" == \"$base_build\")" \
17+
| jq .number)
18+
19+
mkdir -p artifacts
20+
21+
artifact() {
22+
local artifact_name=$1
23+
# shellcheck disable=SC2155
24+
local artifact_value=$(curl -H "Authorization: Bearer $BUILDKITE_API_TOKEN" \
25+
-X GET "https://api.buildkite.com/v2/organizations/cardano-foundation/pipelines/cardano-wallet/builds/$main_build/artifacts" \
26+
| jq -r ".[] | select(.filename == \"$artifact_name\") \
27+
| .download_url")
28+
curl -H "Authorization: Bearer $BUILDKITE_API_TOKEN" -L \
29+
-o "artifacts/$artifact_name" \
30+
"$artifact_value"
31+
gh release upload "$TAG" "artifacts/$artifact_name"
32+
}
33+
34+
artifact "cardano-wallet-$NEW_GIT_TAG-linux64.tar.gz"
35+
artifact "cardano-wallet.exe-$NEW_GIT_TAG-win64.zip"
36+
artifact "cardano-wallet-$NEW_GIT_TAG-macos-silicon.tar.gz"
37+
artifact "cardano-wallet-$NEW_GIT_TAG-macos-intel.tar.gz"
38+
artifact "cardano-wallet-$NEW_GIT_TAG-docker-image.tgz"
+41
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
#! /usr/bin/env bash
2+
3+
set -euox pipefail
4+
5+
NEW_GIT_TAG=$(buildkite-agent meta-data get release-version)
6+
7+
if [ "$RELEASE" == "false" ]; then
8+
TAG=nightly
9+
title="Nightly $NEW_GIT_TAG"
10+
else
11+
TAG=$NEW_GIT_TAG
12+
title="Release $TAG"
13+
fi
14+
15+
buildkite-agent artifact download artifacts/changes.md .
16+
# shellcheck disable=SC2155
17+
export CHANGES=$(cat artifacts/changes.md)
18+
19+
# shellcheck disable=SC2155
20+
export NODE_TAG=$(buildkite-agent meta-data get node-tag)
21+
22+
# shellcheck disable=SC2034
23+
export BUMP_CHANGES=xxx
24+
25+
# shellcheck disable=SC2034
26+
export DOCKER_SHA=xxx
27+
28+
# shellcheck disable=SC2016
29+
envsubst \
30+
< "$RELEASE_SCRIPTS_DIR/release-template.md" \
31+
> "$RELEASE_SCRIPTS_DIR/release-template-final.md"
32+
33+
if [ "$RELEASE" == "false" ]; then
34+
gh release delete nightly --yes || true
35+
fi
36+
37+
gh release create \
38+
-d \
39+
-F "$RELEASE_SCRIPTS_DIR/release-template-final.md" \
40+
-t "$title" \
41+
"$TAG"

scripts/buildkite/release/push-tag.sh

+26
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
#! /usr/bin/env bash
2+
3+
set -euox pipefail
4+
5+
RELEASE_GIT_COMMIT=$(buildkite-agent meta-data get release-candidate-commit)
6+
7+
git tag -l | xargs git tag -d
8+
git fetch --tags
9+
10+
if [ "$RELEASE" == "false" ]; then
11+
git tag -d nightly || true
12+
TAG=nightly
13+
else
14+
TAG=$(buildkite-agent meta-data get release-version)
15+
exists=$(git tag -l "$TAG")
16+
if [ -n "$exists" ]; then
17+
echo "Tag $TAG already exists. Remove it before proceeding."
18+
exit 1
19+
fi
20+
fi
21+
22+
git tag -m "$TAG" "$TAG" "$RELEASE_GIT_COMMIT"
23+
24+
git remote set-url origin "https://$GITHUB_TOKEN@github.com/cardano-foundation/cardano-wallet.git"
25+
26+
git push origin -f "$TAG"

scripts/buildkite/release/push-to-bump.sh

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
#! /bin/bash
1+
#! /usr/bin/env bash
22

33
set -euox pipefail
44

scripts/buildkite/release/release-candidate.sh

+7-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,8 @@ tag_cabal_ver() {
1414
tag_date "$1" | sed -e s/-0/-/g -e s/-/./g
1515
}
1616

17-
git fetch --tags --force
17+
git tag -l | xargs git tag -d
18+
git fetch --tags
1819

1920
BASE_COMMIT=$(git rev-parse HEAD)
2021

@@ -28,6 +29,8 @@ NEW_CABAL_VERSION=$(tag_cabal_ver "$NEW_GIT_TAG")
2829

2930
OLD_GIT_TAG=$( git tag -l "v2*-*-*" | sort | tail -n1)
3031

32+
LAST_RELEASE_DATE=$(tag_date "$OLD_GIT_TAG")
33+
3134
OLD_CABAL_VERSION=$(tag_cabal_ver "$OLD_GIT_TAG")
3235

3336
CARDANO_NODE_TAG=$(cardano-node version | head -n1 | awk '{print $2}')
@@ -72,3 +75,6 @@ buildkite-agent meta-data set "release-candidate-commit" "$RELEASE_COMMIT"
7275
buildkite-agent meta-data set "release-candidate-branch" "$RELEASE_CANDIDATE_BRANCH"
7376
buildkite-agent meta-data set "release-cabal-version" "$NEW_CABAL_VERSION"
7477
buildkite-agent meta-data set "test-rc" "$TEST_RC"
78+
buildkite-agent meta-data set "base-build" "$BUILDKITE_BUILD_ID"
79+
buildkite-agent meta-data set "node-tag" "$CARDANO_NODE_TAG"
80+
buildkite-agent meta-data set "last-release-date" "$LAST_RELEASE_DATE"

0 commit comments

Comments
 (0)