Publish Runtime Draft #221
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
name: Publish Runtime Draft | |
# The code (like generate-release-body) will be taken from the tag versions, not master | |
on: | |
workflow_dispatch: | |
inputs: | |
from: | |
description: tag (ex. runtime-53) to retrieve commit diff from | |
required: true | |
to: | |
description: tag (ex. runtime-155) to generate release note and srtool runtimes from | |
required: true | |
jobs: | |
####### Build runtimes with srtool ####### | |
setup-scripts: | |
runs-on: bare-metal | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Upload scripts | |
uses: actions/upload-artifact@v4 | |
with: | |
name: original-scripts | |
path: scripts | |
- name: Upload tools | |
uses: actions/upload-artifact@v4 | |
with: | |
name: original-tools | |
path: tools | |
read-rust-version: | |
runs-on: bare-metal | |
outputs: | |
rust_version: ${{ steps.get-version.outputs.rust_version }} | |
steps: | |
- uses: actions/checkout@v4 | |
- id: get-version | |
run: | | |
RUST_VERSION=$(cat rust-toolchain | grep channel | grep --only-matching --perl-regexp "(\d+\.){2}\d+(-nightly)?") | |
echo "rust_version=$RUST_VERSION" >> $GITHUB_OUTPUT | |
build-srtool-runtimes: | |
needs: ["setup-scripts", "read-rust-version"] | |
runs-on: bare-metal | |
strategy: | |
matrix: | |
chain: ["moonbase", "moonriver", "moonbeam"] | |
srtool_image: | |
- moonbeamfoundation/srtool | |
srtool_image_tag: | |
- ${{ needs.read-rust-version.outputs.rust_version }} | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
ref: ${{ github.event.inputs.to }} | |
- name: Login to DockerHub | |
uses: docker/login-action@v3 | |
if: github.repository == 'moonbeam-foundation/moonbeam' | |
with: | |
username: ${{ secrets.MBF_DOCKERHUB_USERNAME }} | |
password: ${{ secrets.MBF_DOCKERHUB_PASSWORD }} | |
registry: index.docker.io | |
- name: Download original scripts | |
uses: actions/download-artifact@v4 | |
with: | |
name: original-scripts | |
path: original-scripts | |
- name: Build & Push moonbeamfoundation/srtool image | |
if: github.repository == 'moonbeam-foundation/moonbeam' | |
run: | | |
docker pull "${{ matrix.srtool_image }}:${{ matrix.srtool_image_tag }}" && image_exists=true || image_exists=false | |
if [[ $image_exists = "false" ]]; then | |
echo building "${{ matrix.srtool_image }}:${{ matrix.srtool_image_tag }}" | |
docker build --pull --no-cache . \ | |
-f docker/moonbeam-srtool.Dockerfile \ | |
--build-arg SRTOOL_IMAGE_TAG=${{ matrix.srtool_image_tag }} \ | |
-t ${{ matrix.srtool_image }}:${{ matrix.srtool_image_tag }} | |
echo pushing "${{ matrix.srtool_image }}:${{ matrix.srtool_image_tag }}" | |
docker push "${{ matrix.srtool_image }}:${{ matrix.srtool_image_tag }}" | |
else | |
echo skiping build "${{ matrix.srtool_image }}:${{ matrix.srtool_image_tag }}", image already exists | |
fi | |
- name: Build runtime using "${{ matrix.srtool_image }}:${{ matrix.srtool_image_tag }}" | |
id: srtool_build | |
env: | |
GH_WORKFLOW_MATRIX_CHAIN: ${{ matrix.chain }} | |
GH_WORKFLOW_MATRIX_SRTOOL_IMAGE: ${{ matrix.srtool_image }} | |
GH_WORKFLOW_MATRIX_SRTOOL_IMAGE_TAG: ${{ matrix.srtool_image_tag }} | |
RUNTIME_BUILD_OPTS: "--features=on-chain-release-build" | |
RUNTIME_BUILD_PROFILE: "production" | |
run: | | |
# Ensure we have permissions to write to the runtime folder target for the docker user | |
mkdir -p runtime/${GH_WORKFLOW_MATRIX_CHAIN}/target | |
chmod uog+rwX runtime/${GH_WORKFLOW_MATRIX_CHAIN}/target | |
chmod u+x ./original-scripts/build-runtime-srtool.sh | |
./original-scripts/build-runtime-srtool.sh | |
- name: Summary | |
run: | | |
echo '${{ steps.srtool_build.outputs.json }}' | jq . > ${{ matrix.chain }}-srtool-digest.json | |
cat ${{ matrix.chain }}-srtool-digest.json | |
cp ${{ steps.srtool_build.outputs.wasm_compressed }} ${{ matrix.chain }}-runtime.compact.compressed.wasm | |
- name: Archive Artifacts for ${{ matrix.chain }} | |
uses: actions/upload-artifact@v4 | |
with: | |
name: ${{ matrix.chain }}-runtime | |
path: | | |
${{ matrix.chain }}-runtime.compact.compressed.wasm | |
${{ matrix.chain }}-srtool-digest.json | |
- name: Cleanup | |
run: | | |
echo "Removing runtime/${{ matrix.chain }}/target" | |
ls -lna runtime/${{ matrix.chain }}/target | |
# Removing using docker root to ensure we have permissions | |
docker run -u 0 -v $(pwd)/runtime/${{ matrix.chain }}/:/runtime \ | |
-it --entrypoint bash ${{ matrix.srtool_image }}:${{ matrix.srtool_image_tag }} -c "id; ls -lna /runtime/target; rm -rf /runtime/target" | |
####### Prepare the release draft ####### | |
publish-draft-release: | |
runs-on: ubuntu-latest | |
needs: ["setup-scripts", "build-srtool-runtimes"] | |
outputs: | |
release_url: ${{ steps.create-release.outputs.html_url }} | |
asset_upload_url: ${{ steps.create-release.outputs.upload_url }} | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
with: | |
ref: ${{ github.event.inputs.to }} | |
fetch-depth: 0 | |
- name: Download moonbase runtime | |
uses: actions/download-artifact@v4 | |
with: | |
name: moonbase-runtime | |
path: build | |
- name: Download moonriver runtime | |
uses: actions/download-artifact@v4 | |
with: | |
name: moonriver-runtime | |
path: build | |
- name: Download moonbeam runtime | |
uses: actions/download-artifact@v4 | |
with: | |
name: moonbeam-runtime | |
path: build | |
- name: Use Node.js | |
uses: actions/setup-node@v4 | |
with: | |
node-version: 20.10.0 | |
- name: Download Original Tools | |
uses: actions/download-artifact@v4 | |
with: | |
name: original-tools | |
path: original-tools | |
- name: Generate release body | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
id: generate-release-body | |
working-directory: original-tools | |
run: | | |
yarn | |
yarn -s run ts-node github/generate-runtimes-body.ts --owner "${{ github.repository_owner }}" --repo "$(basename ${{ github.repository }})" --from "${{ github.event.inputs.from }}" --to "${{ github.event.inputs.to }}" --srtool-report-folder '../build/' > ../body.md | |
- name: Get runtime version | |
id: get-runtime-ver | |
run: | | |
runtime_moonbase_ver="$(cat ./runtime/moonbase/src/lib.rs | grep -o 'spec_version: [0-9]*' | tail -1 | grep -o '[0-9]*')" | |
echo "runtime_moonbase_ver=$runtime_moonbase_ver" >> $GITHUB_OUTPUT | |
mv build/moonbase-runtime.compact.compressed.wasm moonbase-runtime-${runtime_moonbase_ver}.wasm | |
mv build/moonbase-srtool-digest.json moonbase-runtime-${runtime_moonbase_ver}-srtool-digest.json | |
runtime_moonriver_ver="$(cat ./runtime/moonriver/src/lib.rs | grep -o 'spec_version: [0-9]*' | tail -1 | grep -o '[0-9]*')" | |
echo "runtime_moonriver_ver=$runtime_moonriver_ver" >> $GITHUB_OUTPUT | |
mv build/moonriver-runtime.compact.compressed.wasm moonriver-runtime-${runtime_moonriver_ver}.wasm | |
mv build/moonriver-srtool-digest.json moonriver-runtime-${runtime_moonriver_ver}-srtool-digest.json | |
runtime_moonbeam_ver="$(cat ./runtime/moonbeam/src/lib.rs | grep -o 'spec_version: [0-9]*' | tail -1 | grep -o '[0-9]*')" | |
echo "runtime_moonbeam_ver=$runtime_moonbeam_ver" >> $GITHUB_OUTPUT | |
mv build/moonbeam-runtime.compact.compressed.wasm moonbeam-runtime-${runtime_moonbeam_ver}.wasm | |
mv build/moonbeam-srtool-digest.json moonbeam-runtime-${runtime_moonbeam_ver}-srtool-digest.json | |
- name: Create draft release | |
id: create-release | |
uses: actions/create-release@v1 | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
with: | |
tag_name: ${{ github.event.inputs.to }} | |
release_name: Runtime ${{ github.event.inputs.to }} | |
body_path: body.md | |
draft: true | |
- name: Upload moonbase wasm | |
uses: actions/upload-release-asset@v1 | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
with: | |
upload_url: ${{ steps.create-release.outputs.upload_url }} | |
asset_path: moonbase-runtime-${{ steps.get-runtime-ver.outputs.runtime_moonbase_ver }}.wasm | |
asset_name: moonbase-runtime-${{ steps.get-runtime-ver.outputs.runtime_moonbase_ver }}.wasm | |
asset_content_type: application/octet-stream | |
- name: Upload moonbase srtool digest | |
uses: actions/upload-release-asset@v1 | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
with: | |
upload_url: ${{ steps.create-release.outputs.upload_url }} | |
asset_path: moonbase-runtime-${{ steps.get-runtime-ver.outputs.runtime_moonbase_ver }}-srtool-digest.json | |
asset_name: moonbase-runtime-${{ steps.get-runtime-ver.outputs.runtime_moonbase_ver }}.srtool-digest.json | |
asset_content_type: application/json | |
- name: Upload moonriver wasm | |
uses: actions/upload-release-asset@v1 | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
with: | |
upload_url: ${{ steps.create-release.outputs.upload_url }} | |
asset_path: moonriver-runtime-${{ steps.get-runtime-ver.outputs.runtime_moonriver_ver }}.wasm | |
asset_name: moonriver-runtime-${{ steps.get-runtime-ver.outputs.runtime_moonriver_ver }}.wasm | |
asset_content_type: application/octet-stream | |
- name: Upload moonriver srtool digest | |
uses: actions/upload-release-asset@v1 | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
with: | |
upload_url: ${{ steps.create-release.outputs.upload_url }} | |
asset_path: moonriver-runtime-${{ steps.get-runtime-ver.outputs.runtime_moonriver_ver }}-srtool-digest.json | |
asset_name: moonriver-runtime-${{ steps.get-runtime-ver.outputs.runtime_moonriver_ver }}.srtool-digest.json | |
asset_content_type: application/json | |
- name: Upload moonbeam wasm | |
uses: actions/upload-release-asset@v1 | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
with: | |
upload_url: ${{ steps.create-release.outputs.upload_url }} | |
asset_path: moonbeam-runtime-${{ steps.get-runtime-ver.outputs.runtime_moonbeam_ver }}.wasm | |
asset_name: moonbeam-runtime-${{ steps.get-runtime-ver.outputs.runtime_moonbeam_ver }}.wasm | |
asset_content_type: application/octet-stream | |
- name: Upload moonbeam srtool digest | |
uses: actions/upload-release-asset@v1 | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
with: | |
upload_url: ${{ steps.create-release.outputs.upload_url }} | |
asset_path: moonbeam-runtime-${{ steps.get-runtime-ver.outputs.runtime_moonbeam_ver }}-srtool-digest.json | |
asset_name: moonbeam-runtime-${{ steps.get-runtime-ver.outputs.runtime_moonbeam_ver }}.srtool-digest.json | |
asset_content_type: application/json |