-
Notifications
You must be signed in to change notification settings - Fork 754
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
0df1dfb
commit 54f16ae
Showing
6 changed files
with
912 additions
and
1 deletion.
There are no files selected for viewing
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
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,197 @@ | ||
#!/usr/bin/env bash | ||
|
||
# Set the new version by replacing the value of the constant given as pattern | ||
# in the file. | ||
# | ||
# input: pattern, version, file | ||
#output: none | ||
set_version() { | ||
pattern=$1 | ||
version=$2 | ||
file=$3 | ||
|
||
sed -i "s/$pattern/\1\"${version}\"/g" $file | ||
return 0 | ||
} | ||
|
||
# Commit changes to git with specific message. | ||
# "|| true" does not let script to fail with exit code 1, | ||
# in case there is nothing to commit. | ||
# | ||
# input: MESSAGE (any message which should be used for the commit) | ||
# output: none | ||
commit_with_message() { | ||
MESSAGE=$1 | ||
git commit -a -m "$MESSAGE" || true | ||
} | ||
|
||
# Retun list of the runtimes filterd | ||
# input: none | ||
# output: list of filtered runtimes | ||
get_filtered_runtimes_list() { | ||
grep_filters=("runtime.*" "test|template|starters|substrate") | ||
|
||
git grep spec_version: | grep .rs: | grep -e "${grep_filters[0]}" | grep "lib.rs" | grep -vE "${grep_filters[1]}" | cut -d: -f1 | ||
} | ||
|
||
# Sets provided spec version | ||
# input: version | ||
set_spec_versions() { | ||
NEW_VERSION=$1 | ||
runtimes_list=(${@:2}) | ||
|
||
printf "Setting spec_version to $NEW_VERSION\n" | ||
|
||
for f in ${runtimes_list[@]}; do | ||
printf " processing $f" | ||
sed -ri "s/spec_version: [0-9]+_[0-9]+_[0-9]+,/spec_version: $NEW_VERSION,/" $f | ||
done | ||
|
||
commit_with_message "Bump spec_version to $NEW_VERSION" | ||
|
||
git_show_log 'spec_version' | ||
} | ||
|
||
# Displays formated results of the git log command | ||
# for the given pattern which needs to be found in logs | ||
# input: pattern, count (optional, default is 10) | ||
git_show_log() { | ||
PATTERN="$1" | ||
COUNT=${2:-10} | ||
git log --pretty=format:"%h %ad | %s%d [%an]" --graph --date=iso-strict | \ | ||
head -n $COUNT | grep -iE "$PATTERN" --color=always -z | ||
} | ||
|
||
# Get a spec_version number from the crate version | ||
# | ||
# ## inputs | ||
# - v1.12.0 or 1.12.0 | ||
# | ||
# ## output: | ||
# 1_012_000 or 1_012_001 if SUFFIX is set | ||
function get_spec_version() { | ||
INPUT=$1 | ||
SUFFIX=${SUFFIX:-000} #this variable makes it possible to set a specific ruuntime version like 93826 it can be intialised as sestem variable | ||
[[ $INPUT =~ .*([0-9]+\.[0-9]+\.[0-9]{1,2}).* ]] | ||
VERSION="${BASH_REMATCH[1]}" | ||
MATCH="${BASH_REMATCH[0]}" | ||
if [ -z $MATCH ]; then | ||
return 1 | ||
else | ||
SPEC_VERSION="$(sed -e "s/\./_0/g" -e "s/_[^_]*\$/_$SUFFIX/" <<< $VERSION)" | ||
echo "$SPEC_VERSION" | ||
return 0 | ||
fi | ||
} | ||
|
||
# Reorganize the prdoc files for the release | ||
# | ||
# input: VERSION (e.g. v1.0.0) | ||
# output: none | ||
reorder_prdocs() { | ||
VERSION="$1" | ||
|
||
printf "[+] ℹ️ Reordering prdocs:" | ||
|
||
VERSION=$(sed -E 's/^v([0-9]+\.[0-9]+\.[0-9]+).*$/\1/' <<< "$VERSION") #getting reed of the 'v' prefix | ||
mkdir -p "prdoc/$VERSION" | ||
mv prdoc/pr_*.prdoc prdoc/$VERSION | ||
git add -A | ||
commit_with_message "Reordering prdocs for the release $VERSION" | ||
} | ||
|
||
# Bump the binary version of the polkadot-parachain binary with the | ||
# new bumped version and commit changes. | ||
# | ||
# input: version e.g. 1.16.0 | ||
set_polkadot_parachain_binary_version() { | ||
bumped_version="$1" | ||
cargo_toml_file="$2" | ||
|
||
set_version "\(^version = \)\".*\"" $bumped_version $cargo_toml_file | ||
|
||
cargo update --workspace --offline # we need this to update Cargo.loc with the new versions as well | ||
|
||
MESSAGE="Bump versions in: ${cargo_toml_file}" | ||
commit_with_message "$MESSAGE" | ||
git_show_log "$MESSAGE" | ||
} | ||
|
||
|
||
upload_s3_release() { | ||
alias aws='podman run --rm -it docker.io/paritytech/awscli -e AWS_ACCESS_KEY_ID -e AWS_SECRET_ACCESS_KEY -e AWS_BUCKET aws' | ||
|
||
product=$1 | ||
version=$2 | ||
target=$3 | ||
|
||
echo "Working on product: $product " | ||
echo "Working on version: $version " | ||
echo "Working on platform: $target " | ||
|
||
URL_BASE=$(get_s3_url_base $product) | ||
|
||
echo "Current content, should be empty on new uploads:" | ||
aws s3 ls "s3://${URL_BASE}/${version}/${target}" --recursive --human-readable --summarize || true | ||
echo "Content to be uploaded:" | ||
artifacts="release-artifacts/$target/$product/" | ||
ls "$artifacts" | ||
aws s3 sync --acl public-read "$artifacts" "s3://${URL_BASE}/${version}/${target}" | ||
echo "Uploaded files:" | ||
aws s3 ls "s3://${URL_BASE}/${version}/${target}" --recursive --human-readable --summarize | ||
echo "✅ The release should be at https://${URL_BASE}/${version}/${target}" | ||
} | ||
|
||
# Upload runtimes artifacts to s3 release bucket | ||
# | ||
# input: version (stable release tage.g. polkadot-stable2412 or polkadot-stable2412-rc1) | ||
# output: none | ||
upload_s3_runtimes_release_artifacts() { | ||
alias aws='podman run --rm -it docker.io/paritytech/awscli -e AWS_ACCESS_KEY_ID -e AWS_SECRET_ACCESS_KEY -e AWS_BUCKET aws' | ||
|
||
version=$1 | ||
|
||
echo "Working on version: $version " | ||
|
||
echo "Current content, should be empty on new uploads:" | ||
aws s3 ls "s3://releases.parity.io/polkadot/runtimes/${version}/" --recursive --human-readable --summarize || true | ||
echo "Content to be uploaded:" | ||
artifacts="artifacts/runtimes/" | ||
ls "$artifacts" | ||
aws s3 sync --acl public-read "$artifacts" "s3://releases.parity.io/polkadot/runtimes/${version}/" | ||
echo "Uploaded files:" | ||
aws s3 ls "s3://releases.parity.io/polkadot/runtimes/${version}/" --recursive --human-readable --summarize | ||
echo "✅ The release should be at https://releases.parity.io/polkadot/runtimes/${version}" | ||
} | ||
|
||
|
||
# Pass the name of the binary as input, it will | ||
# return the s3 base url | ||
function get_s3_url_base() { | ||
name=$1 | ||
case $name in | ||
polkadot | polkadot-execute-worker | polkadot-prepare-worker ) | ||
printf "releases.parity.io/polkadot" | ||
;; | ||
|
||
polkadot-parachain) | ||
printf "releases.parity.io/polkadot-parachain" | ||
;; | ||
|
||
polkadot-omni-node) | ||
printf "releases.parity.io/polkadot-omni-node" | ||
;; | ||
|
||
chain-spec-builder) | ||
printf "releases.parity.io/chain-spec-builder" | ||
;; | ||
|
||
frame-omni-bencher) | ||
printf "releases.parity.io/frame-omni-bencher" | ||
;; | ||
*) | ||
printf "UNSUPPORTED BINARY $name" | ||
exit 1 | ||
;; | ||
esac | ||
} |
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,125 @@ | ||
name: Release - Promote RC to final candidate on S3 | ||
|
||
on: | ||
workflow_dispatch: | ||
inputs: | ||
binary: | ||
description: Binary to be build for the release | ||
default: all | ||
type: choice | ||
options: | ||
- polkadot | ||
- polkadot-parachain | ||
- polkadot-omni-node | ||
- frame-omni-bencher | ||
- chain-spec-builder | ||
- all | ||
release_tag: | ||
description: Tag matching the actual release candidate with the format polkadot-stableYYMM(-X)-rcX | ||
type: string | ||
|
||
|
||
jobs: | ||
|
||
check-synchronization: | ||
uses: paritytech-release/sync-workflows/.github/workflows/check-syncronization.yml@main | ||
|
||
validate-inputs: | ||
needs: [ check-synchronization ] | ||
if: ${{ needs.check-synchronization.outputs.checks_passed }} == 'true' | ||
runs-on: ubuntu-latest | ||
outputs: | ||
release_tag: ${{ steps.validate_inputs.outputs.release_tag }} | ||
final_tag: ${{ steps.validate_inputs.outputs.final_tag }} | ||
|
||
steps: | ||
- name: Checkout sources | ||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 | ||
|
||
- name: Validate inputs | ||
id: validate_inputs | ||
run: | | ||
. ./.github/scripts/common/lib.sh | ||
RELEASE_TAG=$(validate_stable_tag ${{ inputs.release_tag }}) | ||
echo "release_tag=${RELEASE_TAG}" >> $GITHUB_OUTPUT | ||
promote-polkadot-rc-to-final: | ||
if: ${{ inputs.binary == 'polkadot' || inputs.binary == 'all' }} | ||
needs: [ validate-inputs ] | ||
uses: ./.github/workflows/release-reusable-promote-to-final.yml | ||
strategy: | ||
matrix: | ||
target: [ x86_64-unknown-linux-gnu, aarch64-apple-darwin ] | ||
with: | ||
package: polkadot | ||
release_tag: ${{ needs.validate-inputs.outputs.release_tag }} | ||
target: ${{ matrix.target }} | ||
secrets: | ||
AWS_DEFAULT_REGION: ${{ secrets.AWS_DEFAULT_REGION }} | ||
AWS_RELEASE_ACCESS_KEY_ID: ${{ secrets.AWS_RELEASE_ACCESS_KEY_ID }} | ||
AWS_RELEASE_SECRET_ACCESS_KEY: ${{ secrets.AWS_RELEASE_SECRET_ACCESS_KEY }} | ||
|
||
promote-polkadot-parachain-rc-to-final: | ||
if: ${{ inputs.binary == 'polkadot-parachain' || inputs.binary == 'all' }} | ||
needs: [ validate-inputs ] | ||
uses: ./.github/workflows/release-reusable-promote-to-final.yml | ||
strategy: | ||
matrix: | ||
target: [ x86_64-unknown-linux-gnu, aarch64-apple-darwin ] | ||
with: | ||
package: polkadot-parachain | ||
release_tag: ${{ needs.validate-inputs.outputs.release_tag }} | ||
target: ${{ matrix.target }} | ||
secrets: | ||
AWS_DEFAULT_REGION: ${{ secrets.AWS_DEFAULT_REGION }} | ||
AWS_RELEASE_ACCESS_KEY_ID: ${{ secrets.AWS_RELEASE_ACCESS_KEY_ID }} | ||
AWS_RELEASE_SECRET_ACCESS_KEY: ${{ secrets.AWS_RELEASE_SECRET_ACCESS_KEY }} | ||
|
||
promote-polkadot-omni-node-rc-to-final: | ||
if: ${{ inputs.binary == 'polkadot-omni-node' || inputs.binary == 'all' }} | ||
needs: [ validate-inputs ] | ||
uses: ./.github/workflows/release-reusable-promote-to-final.yml | ||
strategy: | ||
matrix: | ||
target: [ x86_64-unknown-linux-gnu, aarch64-apple-darwin ] | ||
with: | ||
package: polkadot-omni-node | ||
release_tag: ${{ needs.validate-inputs.outputs.release_tag }} | ||
target: ${{ matrix.target }} | ||
secrets: | ||
AWS_DEFAULT_REGION: ${{ secrets.AWS_DEFAULT_REGION }} | ||
AWS_RELEASE_ACCESS_KEY_ID: ${{ secrets.AWS_RELEASE_ACCESS_KEY_ID }} | ||
AWS_RELEASE_SECRET_ACCESS_KEY: ${{ secrets.AWS_RELEASE_SECRET_ACCESS_KEY }} | ||
|
||
promote-frame-omni-bencher-rc-to-final: | ||
if: ${{ inputs.binary == 'frame-omni-bencher' || inputs.binary == 'all' }} | ||
needs: [ validate-inputs ] | ||
uses: ./.github/workflows/release-reusable-promote-to-final.yml | ||
strategy: | ||
matrix: | ||
target: [ x86_64-unknown-linux-gnu, aarch64-apple-darwin ] | ||
with: | ||
package: frame-omni-bencher | ||
release_tag: ${{ needs.validate-inputs.outputs.release_tag }} | ||
target: ${{ matrix.target }} | ||
secrets: | ||
AWS_DEFAULT_REGION: ${{ secrets.AWS_DEFAULT_REGION }} | ||
AWS_RELEASE_ACCESS_KEY_ID: ${{ secrets.AWS_RELEASE_ACCESS_KEY_ID }} | ||
AWS_RELEASE_SECRET_ACCESS_KEY: ${{ secrets.AWS_RELEASE_SECRET_ACCESS_KEY }} | ||
|
||
promote-chain-spec-builder-rc-to-final: | ||
if: ${{ inputs.binary == 'chain-spec-builder' || inputs.binary == 'all' }} | ||
needs: [ validate-inputs ] | ||
uses: ./.github/workflows/release-reusable-promote-to-final.yml | ||
strategy: | ||
matrix: | ||
target: [ x86_64-unknown-linux-gnu, aarch64-apple-darwin ] | ||
with: | ||
package: chain-spec-builder | ||
release_tag: ${{ needs.validate-inputs.outputs.release_tag }} | ||
target: ${{ matrix.target }} | ||
secrets: | ||
AWS_DEFAULT_REGION: ${{ secrets.AWS_DEFAULT_REGION }} | ||
AWS_RELEASE_ACCESS_KEY_ID: ${{ secrets.AWS_RELEASE_ACCESS_KEY_ID }} | ||
AWS_RELEASE_SECRET_ACCESS_KEY: ${{ secrets.AWS_RELEASE_SECRET_ACCESS_KEY }} |
Oops, something went wrong.