Release Build #99
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: Release | |
on: | |
create: | |
tags: | |
- v* | |
jobs: | |
build-runtime: | |
runs-on: ubuntu-latest | |
env: | |
SUBWASM_VERSION: 0.15.0 | |
strategy: | |
matrix: | |
chain: ["alpha","main","ipci"] | |
steps: | |
- uses: actions/checkout@v2 | |
with: | |
fetch-depth: 0 | |
- name: Srtool build | |
id: srtool_build | |
uses: chevdor/srtool-actions@v0.3.0 | |
with: | |
chain: ${{ matrix.chain }} | |
- name: Summary | |
shell: bash | |
run: | | |
echo '${{ steps.srtool_build.outputs.json }}' | jq > ${{ matrix.chain }}-srtool-digest.json | |
cat ${{ matrix.chain }}-srtool-digest.json | |
echo "Compact Runtime: ${{ steps.srtool_build.outputs.wasm }}" | |
echo "Compressed Runtime: ${{ steps.srtool_build.outputs.wasm_compressed }}" | |
- name: Archive Artifacts for ${{ matrix.chain }} | |
uses: actions/upload-artifact@v2 | |
with: | |
name: ${{ matrix.chain }}-runtime | |
path: | | |
${{ steps.srtool_build.outputs.wasm }} | |
${{ steps.srtool_build.outputs.wasm_compressed }} | |
${{ matrix.chain }}-srtool-digest.json | |
- name: Install subwasm | |
shell: bash | |
run: | | |
wget https://github.com/chevdor/subwasm/releases/download/v${{ env.SUBWASM_VERSION }}/subwasm_linux_amd64_v${{ env.SUBWASM_VERSION }}.deb | |
sudo dpkg -i subwasm_linux_amd64_v${{ env.SUBWASM_VERSION }}.deb | |
subwasm --version | |
- name: Install deps | |
run: sudo apt-get -y install protobuf-compiler | |
- name: Show Runtime information | |
shell: bash | |
run: | | |
subwasm info ${{ steps.srtool_build.outputs.wasm }} | |
subwasm info ${{ steps.srtool_build.outputs.wasm_compressed }} | |
subwasm --json info ${{ steps.srtool_build.outputs.wasm }} > ${{ matrix.chain }}-info.json | |
subwasm --json info ${{ steps.srtool_build.outputs.wasm_compressed }} > ${{ matrix.chain }}-compressed-info.json | |
- name: Extract the metadata | |
shell: bash | |
run: | | |
subwasm meta ${{ steps.srtool_build.outputs.wasm }} | |
subwasm --json meta ${{ steps.srtool_build.outputs.wasm }} > ${{ matrix.chain }}-metadata.json | |
- name: Check the metadata diff | |
shell: bash | |
run: | | |
subwasm diff ${{ steps.srtool_build.outputs.wasm }} --chain-b ${{ matrix.chain }} || \ | |
echo "Subwasm call failed, check the logs. This is likely because ${{ matrix.chain }} is not known by subwasm" | \ | |
tee ${{ matrix.chain }}-diff.txt | |
- name: Archive Subwasm results | |
uses: actions/upload-artifact@v2 | |
with: | |
name: ${{ matrix.chain }}-runtime | |
path: | | |
${{ matrix.chain }}-info.json | |
${{ matrix.chain }}-compressed-info.json | |
${{ matrix.chain }}-metadata.json | |
${{ matrix.chain }}-diff.txt | |
build-binary: | |
name: Build binary | |
runs-on: ubuntu-20.04 | |
strategy: | |
matrix: | |
target: | |
- x86_64-unknown-linux-gnu | |
- aarch64-unknown-linux-gnu | |
steps: | |
- name: Checkout the source code | |
uses: actions/checkout@v2 | |
- name: Install deps | |
run: sudo apt-get -y install protobuf-compiler | |
- name: Install ARM64 multilib | |
if: contains(matrix.target, 'aarch64') | |
shell: bash | |
run: | | |
sudo apt-get update | |
sudo apt-get install -y gcc-multilib g++-multilib | |
sudo apt-get install -y gcc-aarch64-linux-gnu g++-aarch64-linux-gnu | |
mkdir .cargo | |
printf '[target.aarch64-unknown-linux-gnu]\nlinker = "aarch64-linux-gnu-gcc"' > .cargo/config | |
- name: Install Rust toolchain | |
uses: actions-rs/toolchain@v1 | |
with: | |
toolchain: nightly-2022-08-05 | |
target: ${{ matrix.target }} | |
components: rustfmt, clippy | |
default: true | |
- name: Install WASM target (for runtime building) | |
shell: bash | |
run: rustup target add wasm32-unknown-unknown --toolchain nightly-2022-08-05 | |
- name: Build optimized binary | |
uses: actions-rs/cargo@v1 | |
with: | |
command: build | |
args: --release --locked --target ${{ matrix.target }} | |
- name: Upload build artifacts | |
uses: actions/upload-artifact@master | |
with: | |
name: ${{ matrix.target }} | |
path: target/${{ matrix.target }}/release/robonomics | |
docker: | |
name: Docker | |
needs: build-binary | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout the source code | |
uses: actions/checkout@v2 | |
- name: Set up QEMU | |
uses: docker/setup-qemu-action@v2.1.0 | |
- name: Set up Docker Buildx | |
uses: docker/setup-buildx-action@v2.2.1 | |
- name: Login to DockerHub | |
uses: docker/login-action@v2.1.0 | |
with: | |
username: ${{ secrets.DOCKER_USERNAME }} | |
password: ${{ secrets.DOCKER_PASSWORD }} | |
- name: Docker meta | |
id: docker_meta | |
uses: crazy-max/ghaction-docker-meta@v1 | |
with: | |
images: robonomics/robonomics | |
tag-custom: latest | |
tag-sha: true # add git short SHA as Docker tag | |
- name: create dirs | |
shell: bash | |
run: mkdir scripts/docker/amd64/ scripts/docker/arm64/ | |
- name: get amd64 binary | |
uses: actions/download-artifact@v2 | |
with: | |
name: x86_64-unknown-linux-gnu | |
path: scripts/docker/amd64/ | |
- name: get aarch64 binary | |
uses: actions/download-artifact@v2 | |
with: | |
name: aarch64-unknown-linux-gnu | |
path: scripts/docker/arm64/ | |
- name: Chmod binary | |
shell: bash | |
run: | | |
chmod +x scripts/docker/amd64/robonomics | |
chmod +x scripts/docker/arm64/robonomics | |
- name: Push docker image | |
uses: docker/build-push-action@v3 | |
with: | |
context: scripts/docker | |
platforms: linux/amd64,linux/arm64 | |
labels: ${{ steps.docker_meta.outputs.labels }} | |
tags: ${{ steps.docker_meta.outputs.tags }} | |
push: true | |
docs: | |
name: Documentation | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout the source code | |
uses: actions/checkout@v2 | |
- uses: cachix/install-nix-action@v12 | |
with: | |
nix_path: nixpkgs=channel:nixos-21.11 | |
- name: Build crates documentation | |
run: nix-shell --run "cargo doc --workspace --no-deps" | |
- name: Push index.html | |
run: echo "<meta http-equiv=\"refresh\" content=\"0; URL='./robonomics/index.html'\" />" > ./target/doc/index.html | |
- name: Deploy crates.robonomics.network | |
uses: peaceiris/actions-gh-pages@v3 | |
with: | |
github_token: ${{ secrets.GITHUB_TOKEN }} | |
publish_dir: ./target/doc | |
cname: crates.robonomics.network | |
release: | |
name: Release | |
needs: | |
- build-binary | |
- build-runtime | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout the source code | |
uses: actions/checkout@v2 | |
- id: get_version | |
uses: battila7/get-version-action@v2 | |
- name: Create dir | |
shell: bash | |
run: | | |
mkdir -p release/tmp/ | |
cd release/tmp/ | |
mkdir robonomics robonomics-alpha robonomics-ipci x86_64 aarch64 | |
- name: get x86_64 binary | |
uses: actions/download-artifact@v2 | |
with: | |
name: x86_64-unknown-linux-gnu | |
path: release/tmp/x86_64/ | |
- name: get aarch64 binary | |
uses: actions/download-artifact@v2 | |
with: | |
name: aarch64-unknown-linux-gnu | |
path: release/tmp/aarch64/ | |
- uses: actions/download-artifact@v2 | |
with: | |
name: main-runtime | |
path: release/tmp/robonomics | |
- uses: actions/download-artifact@v2 | |
with: | |
name: alpha-runtime | |
path: release/tmp/robonomics-alpha | |
- uses: actions/download-artifact@v2 | |
with: | |
name: ipci-runtime | |
path: release/tmp/robonomics-ipci | |
- id: compress_artefacts | |
shell: bash | |
run: | | |
cd release/ | |
echo "::set-output name=main::$(jq -r '.core_version' tmp/robonomics/main-info.json | awk '{print $1}')" | |
echo "::set-output name=alpha::$(jq -r '.core_version' tmp/robonomics-alpha/alpha-info.json | awk '{print $1}')" | |
chmod +x tmp/x86_64/robonomics tmp/aarch64/robonomics | |
tar -czvf robonomics-"${{ steps.get_version.outputs.version-without-v }}"-x86_64-unknown-linux-gnu.tar.gz -C tmp/x86_64/ robonomics | |
tar -czvf robonomics-"${{ steps.get_version.outputs.version-without-v }}"-aarch64-unknown-linux-gnu.tar.gz -C tmp/aarch64/ robonomics | |
cd tmp/robonomics;tar -czvf ../../runtime-"$(jq -r '.core_version' main-info.json | awk '{print $1}')".tar.gz *;cd ../../ | |
cd tmp/robonomics-alpha;tar -czvf ../../runtime-"$(jq -r '.core_version' alpha-info.json | awk '{print $1}')".tar.gz *;cd ../../ | |
cd tmp/robonomics-ipci;tar -czvf ../../runtime-"$(jq -r '.core_version' ipci-info.json | awk '{print $1}')".tar.gz *;cd ../../ | |
echo "${{ steps.get_version.outputs.version-without-v }}" > version | |
sha256sum *.tar.gz > sha256sum | |
rm -rf tmp/ | |
- uses: actions/setup-node@v3 | |
with: | |
node-version: 16 | |
- name: Pining artefacts to IPFS | |
uses: aquiladev/ipfs-action@v0.2.0 | |
id: ipfs | |
with: | |
path: ./release/ | |
service: pinata | |
pinataKey: ${{ secrets.PINATA_KEY }} | |
pinataSecret: ${{ secrets.PINATA_SECRET }} | |
pinataPinName: ${{ steps.get_version.outputs.version }} | |
- name: Update DNS | |
if: contains(github.ref, 'rc') == false | |
shell: bash | |
run: | | |
curl -X PUT -H"Authorization: sso-key ${{ secrets.GODADDY_KEY }}:${{ secrets.GODADDY_SECRET }}" "https://api.godaddy.com/v1/domains/robonomics.network/records/TXT/_dnslink.get" -H "Content-Type: application/json" -d "[{\"data\": \"dnslink=\/ipfs\/${{ steps.ipfs.outputs.ipfs }}\"}]" | |
- name: Create changelog text | |
id: changelog | |
uses: loopwerk/tag-changelog@v1 | |
with: | |
token: ${{ secrets.GITHUB_TOKEN }} | |
- name: Create release body | |
id: gen_release_body | |
shell: bash | |
run: | | |
r="> Native runtimes: \`${{ steps.compress_artefacts.outputs.main }}\`, \`${{ steps.compress_artefacts.outputs.alpha }}\`"$'\n' | |
r=$r$'\n' | |
r=$r$'\n'"Changelog" | |
r=$r$'\n'"--------------" | |
r=$r$'\n' | |
r=$r$'\n'"$(echo '${{ steps.changelog.outputs.changes }}' | sed '1d')" | |
r=$r$'\n' | |
r=$r$'\n'"Downloads" | |
r=$r$'\n'"--------------" | |
r=$r$'\n' | |
r=$r$'\n'"[<img src=\"https://raw.githubusercontent.com/ipfs/logo/f5a1564a99db3244e288473f1a4d597f66f10df5/vector/ipfs-logo-vector-ice-text.svg\" width=\"200px\">](https://ipfs.io/ipfs/${{ steps.ipfs.outputs.ipfs }}) [<img src=\"https://www.docker.com/sites/default/files/d8/2019-07/vertical-logo-monochromatic.png\" height=\"200px\">](https://hub.docker.com/layers/robonomics/robonomics)" | |
r=$r$'\n' | |
r=$r$'\n'"| OS | ARCH | Link |" | |
r=$r$'\n'"|------|------|------|" | |
r=$r$'\n'"| Ubuntu | x86_64 | [Download](https://github.com/airalab/robonomics/releases/download/${{ steps.get_version.outputs.version }}/robonomics-${{ steps.get_version.outputs.version-without-v }}-x86_64-unknown-linux-gnu.tar.gz) |" | |
r=$r$'\n'"| Ubuntu | aarch64 | [Download](https://github.com/airalab/robonomics/releases/download/${{ steps.get_version.outputs.version }}/robonomics-${{ steps.get_version.outputs.version-without-v }}-aarch64-unknown-linux-gnu.tar.gz) |" | |
r=$r$'\n' | |
r="${r//'%'/'%25'}" # Multiline escape sequences for % | |
r="${r//$'\n'/'%0A'}" # Multiline escape sequences for '\n' | |
r="${r//$'\r'/'%0D'}" # Multiline escape sequences for '\r' | |
echo "::set-output name=RELEASE_BODY::$r" | |
- name: Upload assets to release | |
uses: softprops/action-gh-release@v1 | |
with: | |
name: Robonomics ${{ steps.get_version.outputs.version }} | |
body: ${{ steps.gen_release_body.outputs.RELEASE_BODY }} | |
files: ./release/* | |
draft: true |