Skip to content

Build & Tests

Build & Tests #376

Workflow file for this run

name: Build & Tests
on:
push:
branches:
- master
tags:
- "!v*"
pull_request:
workflow_dispatch:
schedule:
- cron: "00 05 * * 1" # 5AM weekly on mondays
jobs:
build:
name: Build Srtool Docker image
runs-on: ubuntu-latest
continue-on-error: false
steps:
- uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0
with:
ref: ${{ github.event.pull_request.head.sha }}
- name: Build image
run: |
SRTOOL_VERSION=$(cat VERSION)
RUSTC_VERSION=$(cat RUSTC_VERSION)
echo Building tag $RUSTC_VERSION:$SRTOOL_VERSION
echo "SRTOOL_VERSION=$SRTOOL_VERSION" >> $GITHUB_ENV
echo "RUSTC_VERSION=$RUSTC_VERSION" >> $GITHUB_ENV
docker --version
docker build $@ --build-arg RUSTC_VERSION=$RUSTC_VERSION -t srtool .
docker run -t --rm srtool version -cM
- name: Export docker image
run: |
docker save srtool | gzip > srtool.tar.gz
- name: Cache the image
uses: actions/cache@9b0c1fce7a93df8e3bb8926b0d6e9d89e92f20a7 # v3.0.11
with:
key: srtool-docker-image-${{ github.sha }}
path: |
srtool.tar.gz
common:
runs-on: ubuntu-latest
needs: build
continue-on-error: false
steps:
- name: Cache the image
uses: actions/cache@9b0c1fce7a93df8e3bb8926b0d6e9d89e92f20a7 # v3.0.11
with:
key: srtool-docker-image-${{ github.sha }}
path: |
srtool.tar.gz
- name: Load Docker image
run: |
docker load -i srtool.tar.gz
docker images --digests
- name: Check the version
run: |
VERSION=$(docker run -t --rm srtool version -cM)
if [[ \
$( echo $VERSION | jq .name -cMr | wc -c ) -le 5 ||
$( echo $VERSION | jq .version -cMr | wc -c ) -le 5 ||
$( echo $VERSION | jq .rustc -cMr | wc -c ) -le 5 \
]] ; then
echo "Invalid version output"
exit 1
else
echo $VERSION
fi
container-structure-test:
runs-on: ubuntu-latest
needs: build
continue-on-error: false
steps:
- uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0
with:
ref: ${{ github.event.pull_request.head.sha }}
- name: Show files
run: |
ls -al
- name: Cache the image
uses: actions/cache@9b0c1fce7a93df8e3bb8926b0d6e9d89e92f20a7 # v3.0.11
with:
key: srtool-docker-image-${{ github.sha }}
path: |
srtool.tar.gz
- name: Install tooling
run: |
curl -LO https://storage.googleapis.com/container-structure-test/latest/container-structure-test-linux-amd64 && \
chmod +x container-structure-test-linux-amd64 && \
mkdir -p $HOME/bin && \
export PATH=$PATH:$HOME/bin && \
mv container-structure-test-linux-amd64 $HOME/bin/container-structure-test
echo "Installed version:"
container-structure-test version
- name: Load Docker image
run: |
docker load -i srtool.tar.gz
docker images --digests
- name: Run the tests
run: |
export PATH=$PATH:$HOME/bin
TESTS=$(find tests -type f | sed -e 's/^/ --config /g' | tr -d '\n')
echo "Running tests:"
find tests -type f
container-structure-test test --image srtool --verbosity info ${TESTS}
polkadot:
runs-on: ubuntu-latest
needs: build
continue-on-error: false
strategy:
fail-fast: false
matrix:
chain: ["westend"]
steps:
- name: Cache the image
uses: actions/cache@9b0c1fce7a93df8e3bb8926b0d6e9d89e92f20a7 # v3.0.11
with:
key: srtool-docker-image-${{ github.sha }}
path: |
srtool.tar.gz
- name: Load Docker image
run: |
docker load -i srtool.tar.gz
docker images --digests
- name: Check out the Polkadot repo
uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0
with:
repository: paritytech/polkadot-sdk
ref: ${{ github.event.inputs.ref }}
fetch-depth: 0
path: sdk
- name: Run srtool info
env:
PACKAGE: ${{ matrix.chain }}-runtime
RUNTIME_DIR: polkadot/runtime/${{ matrix.chain }}
working-directory: sdk
run: |
INFO=$(docker run --rm -i \
-e PACKAGE=$PACKAGE \
-e RUNTIME_DIR=$RUNTIME_DIR \
-v "${PWD}":/build \
srtool info -cM)
if [ $( echo $INFO | jq .src -r ) != "git" ] ; then
echo Invalid info output, got $( echo $INFO | jq .src -r )
exit 1
else
echo $INFO
fi
- name: Debugging
env:
PACKAGE: ${{ matrix.chain }}-runtime
RUNTIME_DIR: polkadot/runtime/${{ matrix.chain }}
working-directory: sdk
run: |
ls -al runtime || true
ls -al runtime/${{ matrix.chain }} || true
id -u runner || true
id -g runner || true
id -u docker || true
docker info --format "{{ .ClientInfo.Context }}"
- name: Run srtool build for ${{ matrix.chain }}
id: srtool_build
env:
PACKAGE: ${{ matrix.chain }}-runtime
RUNTIME_DIR: polkadot/runtime/${{ matrix.chain }}
working-directory: sdk
run: |
CMD="docker run --rm -i \
-e PACKAGE=$PACKAGE \
-e RUNTIME_DIR=$RUNTIME_DIR \
-e WASM_BUILD_STD=0 \
-v ${PWD}:/build \
srtool build --app --json"
echo ::debug::build::docker_run $CMD
echo "::group::SRTOOL Build Output"
stdbuf -oL $CMD | {
while IFS= read -r line
do
echo ║ $line
JSON="$line"
done
echo "json=$JSON" >> $GITHUB_OUTPUT
echo "JSON=$JSON" >> $GITHUB_ENV
echo $JSON | jq .
WASM=`echo $JSON | jq -r .runtimes.compact.wasm`
echo "wasm=$WASM" >> $GITHUB_OUTPUT
Z_WASM=`echo $JSON | jq -r .runtimes.compressed.wasm`
echo "wasm_compressed=$Z_WASM" >> $GITHUB_OUTPUT
}
echo "::endgroup::"
- name: Summary for ${{ matrix.chain }}
working-directory: sdk
run: |
echo "::group::JSON digest"
echo $JSON | jq . | tee ${{ matrix.chain }}-srtool-digest.json
echo "::endgroup::"
echo "::group::Runtimes paths"
echo "Compact Runtime: ${{ steps.srtool_build.outputs.wasm }}"
echo "Compressed Runtime: ${{ steps.srtool_build.outputs.wasm_compressed }}"
echo "::endgroup::"
echo "::group::Debugging"
pwd; ls -al
ls -al ${{ steps.srtool_build.outputs.wasm_compressed }}
ls -al ${{ steps.srtool_build.outputs.wasm_compressed }}
echo "::endgroup::"
- name: Archive Artifacts for ${{ matrix.chain }}
uses: actions/upload-artifact@3cea5372237819ed00197afe530f5a7ea3e805c8 # v3.1.0
with:
name: ${{ matrix.chain }}-runtime
path: |
polkadot/${{ steps.srtool_build.outputs.wasm }}
polkadot/${{ steps.srtool_build.outputs.wasm_compressed }}
polkadot/${{ matrix.chain }}-srtool-digest.json
fellowship:
runs-on: ubuntu-latest
needs: build
continue-on-error: false
strategy:
fail-fast: false
matrix:
include:
# Relay
- runtime_dir: relay/kusama
runtime: staging-kusama-runtime
chain: staging-kusama
- runtime_dir: relay/polkadot
runtime: polkadot-runtime
chain: polkadot
# System parachains / Asset Hub
- runtime_dir: system-parachains/asset-hubs/asset-hub-kusama
runtime: asset-hub-kusama-runtime
chain: asset-hub-kusama
- runtime_dir: system-parachains/asset-hubs/asset-hub-polkadot
runtime: asset-hub-polkadot-runtime
chain: asset-hub-polkadot
# System parachains / Bridge Hub
- runtime_dir: system-parachains/bridge-hubs/bridge-hub-kusama
runtime: bridge-hub-kusama-runtime
chain: bridge-hub-kusama
- runtime_dir: system-parachains/bridge-hubs/bridge-hub-polkadot
runtime: bridge-hub-polkadot-runtime
chain: bridge-hub-polkadot
# System parachains / Collectives
- runtime_dir: system-parachains/collectives/collectives-polkadot
runtime: collectives-polkadot-runtime
chain: collectives-polkadot
steps:
- name: Cache the image
uses: actions/cache@9b0c1fce7a93df8e3bb8926b0d6e9d89e92f20a7 # v3.0.11
with:
key: srtool-docker-image-${{ github.sha }}
path: |
srtool.tar.gz
- name: Load Docker image
run: |
docker load -i srtool.tar.gz
docker images --digests
- name: Check out the Fellowship repo
uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0
with:
repository: polkadot-fellows/runtimes
ref: ${{ github.event.inputs.ref }}
fetch-depth: 0
path: fellowship
- name: Run srtool info
env:
PACKAGE: ${{ matrix.runtime }}
RUNTIME_DIR: ${{ matrix.runtime_dir }}
working-directory: fellowship
run: |
INFO=$(docker run --rm -i \
-e PACKAGE=$PACKAGE \
-e RUNTIME_DIR=$RUNTIME_DIR \
-v "${PWD}":/build \
srtool info -cM)
if [ $( echo $INFO | jq .src -r ) != "git" ] ; then
echo Invalid info output, got $( echo $INFO | jq .src -r )
exit 1
else
echo $INFO
fi
- name: Debugging
env:
PACKAGE: ${{ matrix.runtime }}
RUNTIME_DIR: ${{ matrix.runtime_dir }}
working-directory: fellowship
run: |
ls -al runtime || true
ls -al runtime/${{ matrix.chain }} || true
id -u runner || true
id -g runner || true
id -u docker || true
docker info --format "{{ .ClientInfo.Context }}"
- name: Run srtool build for ${{ matrix.chain }}
id: srtool_build
env:
PACKAGE: ${{ matrix.runtime }}
RUNTIME_DIR: ${{ matrix.runtime_dir }}
working-directory: fellowship
run: |
CMD="docker run --rm -i \
-e PACKAGE=$PACKAGE \
-e RUNTIME_DIR=$RUNTIME_DIR \
-e WASM_BUILD_STD=0 \
-v ${PWD}:/build \
srtool build --app --json"
echo ::debug::build::docker_run $CMD
echo "::group::SRTOOL Build Output"
stdbuf -oL $CMD | {
while IFS= read -r line
do
echo ║ $line
JSON="$line"
done
echo "json=$JSON" >> $GITHUB_OUTPUT
echo "JSON=$JSON" >> $GITHUB_ENV
echo $JSON | jq .
WASM=`echo $JSON | jq -r .runtimes.compact.wasm`
echo "wasm=$WASM" >> $GITHUB_OUTPUT
Z_WASM=`echo $JSON | jq -r .runtimes.compressed.wasm`
echo "wasm_compressed=$Z_WASM" >> $GITHUB_OUTPUT
}
echo "::endgroup::"
- name: Summary for ${{ matrix.chain }}
working-directory: fellowship
run: |
echo "::group::JSON digest"
echo $JSON | jq . | tee ${{ matrix.chain }}-srtool-digest.json
echo "::endgroup::"
echo "::group::Runtimes paths"
echo "Compact Runtime: ${{ steps.srtool_build.outputs.wasm }}"
echo "Compressed Runtime: ${{ steps.srtool_build.outputs.wasm_compressed }}"
echo "::endgroup::"
echo "::group::Debugging"
pwd; ls -al
ls -al ${{ steps.srtool_build.outputs.wasm_compressed }}
ls -al ${{ steps.srtool_build.outputs.wasm_compressed }}
echo "::endgroup::"
- name: Archive Artifacts for ${{ matrix.chain }}
uses: actions/upload-artifact@3cea5372237819ed00197afe530f5a7ea3e805c8 # v3.1.0
with:
name: ${{ matrix.runtime }}
path: |
polkadot/${{ steps.srtool_build.outputs.wasm }}
polkadot/${{ steps.srtool_build.outputs.wasm_compressed }}
polkadot/${{ matrix.chain }}-srtool-digest.json
cumulus:
runs-on: ubuntu-latest
needs: build
continue-on-error: true
strategy:
fail-fast: false
matrix:
include:
- category: contracts
chain: contracts-rococo
- category: assets
chain: asset-hub-westend
- category: starters
chain: shell
steps:
- name: Cache the image
uses: actions/cache@9b0c1fce7a93df8e3bb8926b0d6e9d89e92f20a7 # v3.0.11
with:
key: srtool-docker-image-${{ github.sha }}
path: |
srtool.tar.gz
- name: Load Docker image
run: |
docker load -i srtool.tar.gz
docker images --digests
- name: Check out the Cumulus repo
uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0
with:
repository: paritytech/polkadot-sdk
ref: ${{ github.event.inputs.ref }}
fetch-depth: 0
path: sdk
- name: Run srtool info
env:
PACKAGE: ${{ matrix.chain }}-runtime
RUNTIME_DIR: cumulus/parachains/runtimes/${{ matrix.category }}/${{ matrix.chain }}
working-directory: sdk
run: |
INFO=$(docker run --rm -i \
-e PACKAGE=$PACKAGE \
-e RUNTIME_DIR=$RUNTIME_DIR \
-v "${PWD}":/build \
srtool info -cM)
if [ $( echo $INFO | jq .src -r ) != "git" ] ; then
echo Invalid info output, got $( echo $INFO | jq .src -r )
exit 1
else
echo $INFO
fi
- name: Run srtool build for ${{ matrix.chain }}
id: srtool_build
env:
PACKAGE: ${{ matrix.chain }}-runtime
RUNTIME_DIR: cumulus/parachains/runtimes/${{ matrix.category }}/${{ matrix.chain }}
working-directory: sdk
run: |
CMD="docker run --rm -i \
-e PACKAGE=$PACKAGE \
-e RUNTIME_DIR=$RUNTIME_DIR \
-e WASM_BUILD_STD=0 \
-v ${PWD}:/build \
srtool build --app --json"
echo ::debug::build::docker_run $CMD
echo "::group::SRTOOL Build Output"
stdbuf -oL $CMD | {
while IFS= read -r line
do
echo ║ $line
JSON="$line"
done
echo "json=$JSON" >> $GITHUB_OUTPUT
echo "JSON=$JSON" >> $GITHUB_ENV
echo $JSON | jq .
WASM=`echo $JSON | jq -r .runtimes.compact.wasm`
echo "wasm=$WASM" >> $GITHUB_OUTPUT
Z_WASM=`echo $JSON | jq -r .runtimes.compressed.wasm`
echo "wasm_compressed=$Z_WASM" >> $GITHUB_OUTPUT
}
echo "::endgroup::"
- name: Summary for ${{ matrix.chain }}
working-directory: sdk
run: |
echo "::group::JSON digest"
echo $JSON | jq . | tee ${{ matrix.chain }}-srtool-digest.json
echo "::endgroup::"
echo "::group::Runtimes paths"
echo "Compact Runtime: ${{ steps.srtool_build.outputs.wasm }}"
echo "Compressed Runtime: ${{ steps.srtool_build.outputs.wasm_compressed }}"
echo "::endgroup::"
echo "::group::Debugging"
pwd; ls -al
ls -al ${{ steps.srtool_build.outputs.wasm_compressed }}
ls -al ${{ steps.srtool_build.outputs.wasm_compressed }}
echo "::endgroup::"
- name: Archive Artifacts for ${{ matrix.chain }}
uses: actions/upload-artifact@3cea5372237819ed00197afe530f5a7ea3e805c8 # v3.1.0
with:
name: ${{ matrix.chain }}-runtime
path: |
cumulus/${{ steps.srtool_build.outputs.wasm }}
cumulus/${{ steps.srtool_build.outputs.wasm_compressed }}
cumulus/${{ matrix.chain }}-srtool-digest.json