Skip to content
This repository has been archived by the owner on Nov 15, 2023. It is now read-only.

[CI] Build wasm blob with srtool and include prop hashes and blobs in release notes #1506

Merged
merged 19 commits into from Jul 31, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
86 changes: 80 additions & 6 deletions .github/workflows/publish-draft-release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,51 @@ on:
- v**.**.**

jobs:
build-runtimes:
runs-on: ubuntu-latest
strategy:
matrix:
runtime: ['polkadot', 'kusama']
container:
image: chevdor/srtool:nightly-2020-07-20
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

afaiu according to our Docker images maintenance policy only official images or images based on them should be used.

volumes:
- ${{ github.workspace }}:/build
env:
PACKAGE: ${{ matrix.runtime }}-runtime
RUSTC_VERSION: nightly-2020-07-20
steps:
- uses: actions/checkout@v2
- name: Cache target dir
uses: actions/cache@v2
with:
path: '${{ github.workspace }}/target'
key: srtool-target-${{ matrix.runtime }}-${{ github.sha }}
restore-keys: |
srtool-target-${{ matrix.runtime }}-
srtool-target-
- name: Build ${{ matrix.runtime }} runtime
id: build-runtime
shell: bash
run: |
cd /build
pwd
ls -la
build --json | tee srtool_output.json
cat srtool_output.json
while IFS= read -r line; do
echo "::set-output name=$line::$(jq -r ".$line" < srtool_output.json)"
done <<< "$(jq -r 'keys[]' < srtool_output.json)"
- name: Upload ${{ matrix.runtime }} srtool json
uses: actions/upload-artifact@v2
with:
name: ${{ matrix.runtime }}-srtool-json
path: srtool_output.json
- name: Upload ${{ matrix.runtime }} runtime
uses: actions/upload-artifact@v2
with:
name: ${{ matrix.runtime }}-runtime
path: "${{ steps.build-runtime.outputs.wasm }}"

get-rust-versions:
runs-on: ubuntu-latest
container:
Expand All @@ -21,9 +66,10 @@ jobs:

publish-draft-release:
runs-on: ubuntu-latest
needs: get-rust-versions
needs: ['get-rust-versions', 'build-runtimes']
outputs:
release_url: ${{ steps.create-release.outputs.html_url }}
asset_upload_url: ${{ steps.create-release.outputs.upload_url }}
steps:
- uses: actions/checkout@v2
with:
Expand All @@ -33,17 +79,15 @@ jobs:
uses: actions/setup-ruby@v1
with:
ruby-version: 2.7
- name: Download srtool json output
uses: actions/download-artifact@v2
- name: Generate release text
env:
RUSTC_STABLE: ${{ needs.get-rust-versions.outputs.rustc-stable }}
RUSTC_NIGHTLY: ${{ needs.get-rust-versions.outputs.rustc-nightly }}
run: |
gem install changelogerator git toml
ruby $GITHUB_WORKSPACE/polkadot/scripts/github/generate_release_text.rb > release_text.md
- uses: actions/upload-artifact@v2
with:
name: release_text
path: release_text.md
ruby $GITHUB_WORKSPACE/polkadot/scripts/github/generate_release_text.rb | tee release_text.md
- name: Create draft release
id: create-release
uses: actions/create-release@v1
Expand All @@ -66,3 +110,33 @@ jobs:
access_token: ${{ secrets.MATRIX_ACCESS_TOKEN }}
message: "**New version of polkadot tagged**: ${{ github.ref }}<br/>Gav: Draft release created: ${{ needs.publish-draft-release.outputs.release_url }}"
server: "matrix.parity.io"

publish-runtimes:
runs-on: ubuntu-latest
needs: ['publish-draft-release']
strategy:
matrix:
runtime: ['polkadot', 'kusama']
steps:
- uses: actions/checkout@v2
- uses: actions/download-artifact@v2
with:
name: ${{ matrix.runtime }}-runtime
- name: Set up Ruby 2.7
uses: actions/setup-ruby@v1
with:
ruby-version: 2.7
- name: Get runtime version
id: get-runtime-ver
run: |
runtime_ver="$(ruby -e 'require "./scripts/github/lib.rb"; puts get_runtime("${{ matrix.runtime }}")')"
echo "::set-output name=runtime_ver::$runtime_ver"
- name: Upload ${{ matrix.runtime }} wasm
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ needs.publish-draft-release.outputs.asset_upload_url }}
asset_path: ./${{ matrix.runtime }}_runtime.compact.wasm
asset_name: ${{ matrix.runtime }}_runtime-v${{ steps.get-runtime-ver.outputs.runtime_ver }}.compact.wasm
asset_content_type: application/wasm
29 changes: 20 additions & 9 deletions scripts/github/generate_release_text.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@
require 'git'
require 'erb'
require 'toml'
require 'json'
require_relative './lib.rb'

version = ENV['GITHUB_REF']
token = ENV['GITHUB_TOKEN']
Expand Down Expand Up @@ -61,14 +63,23 @@
rustc_stable = ENV['RUSTC_STABLE']
rustc_nightly = ENV['RUSTC_NIGHTLY']

polkadot_runtime = File.open(polkadot_path + '/runtime/polkadot/src/lib.rs') do |f|
f.find { |l| l =~ /spec_version/ }.match(/[0-9]+/)[0]
end
kusama_runtime = File.open(polkadot_path + '/runtime/kusama/src/lib.rs') do |f|
f.find { |l| l =~ /spec_version/ }.match(/[0-9]+/)[0]
end
westend_runtime = File.open(polkadot_path + '/runtime/westend/src/lib.rs') do |f|
f.find { |l| l =~ /spec_version/ }.match(/[0-9]+/)[0]
end
polkadot_runtime = get_runtime('polkadot', polkadot_path)
kusama_runtime = get_runtime('kusama', polkadot_path)
westend_runtime = get_runtime('westend', polkadot_path)

# These json files should have been downloaded as part of the build-runtimes
# github action

polkadot_json = JSON.parse(
File.read(
ENV['GITHUB_WORKSPACE'] + '/polkadot-srtool-json/srtool_output.json'
)
)

kusama_json = JSON.parse(
File.read(
ENV['GITHUB_WORKSPACE'] + '/kusama-srtool-json/srtool_output.json'
)
)

puts renderer.result
12 changes: 12 additions & 0 deletions scripts/github/lib.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
# frozen_string_literal: true

# A collection of helper functions that might be useful for various scripts

# Gets the runtime version for a given runtime.
# Optionally accepts a path that is the root of the project which defaults to
# the current working directory
def get_runtime(runtime, path = '.')
File.open(path + "/runtime/#{runtime}/src/lib.rs") do |f|
f.find { |l| l =~ /spec_version/ }.match(/[0-9]+/)[0]
end
end
6 changes: 6 additions & 0 deletions scripts/github/polkadot_release.erb
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,12 @@ This release was tested against the following versions of `rustc`. Other version
- <%= rustc_stable %>
- <%= rustc_nightly %>

WASM runtimes built with [srtool](https://gitlab.com/chevdor/srtool) using `<%= polkadot_json['rustc'] %>`.

Proposal hashes:
* `polkadot_runtime-v<%= polkadot_runtime %>.compact.wasm - <%= polkadot_json['prop'] %>`
* `kusama_runtime-v<%= kusama_runtime %>.compact.wasm - <%= kusama_json['prop'] %>`

<% unless misc_changes.empty? %>
## Changes

Expand Down