Skip to content

Running workflow for smart contracts #2612

Running workflow for smart contracts

Running workflow for smart contracts #2612

name: "<Callable> Run checks & build"
run-name: "Running workflow for smart contracts"
on:
workflow_dispatch:
inputs:
upload-artifacts:
description: "Upload optimized builds as artifacts."
required: true
default: false
type: "boolean"
push:
branches:
- "main"
- "ci+*"
- "*feat-currency-generation"
tags:
- "*"
paths-ignore:
- "**/*.md"
pull_request:
branches:
- "main"
paths-ignore:
- "**/*.md"
concurrency:
cancel-in-progress: true
group: |-
${{ format('{0}-{1}-{2}', github.ref_name, github.ref_type, github.event_name, inputs.upload-artifacts) }}
defaults:
run:
shell: "sh"
env:
CARGO_TERM_COLOR: "always"
RELEASE_VERSION: "ci"
UPLOAD_ARTIFACTS: |-
${{ toJSON(github.ref_type == 'tag' || (github.event_name == 'workflow_dispatch' && inputs.upload-artifacts)) }}
jobs:
load-configuration:
runs-on: "ubuntu-latest"
outputs:
dex-types-json: |-
${{ steps.configuration.outputs.dex-types-json }}
profiles-json: |-
${{ steps.configuration.outputs.profiles-json }}
workspaces-json: |-
${{ steps.configuration.outputs.workspaces-json }}
steps:
- uses: "actions/checkout@v4"
- id: "configuration"
run: |-
set -eu
. "./scripts/check/configuration.sh"
workspaces_quoted="$(
"jq" \
--raw-input \
<<EOF
${workspaces:?}
EOF
)"
workspaces_json="$(
"jq" \
--slurp \
<<EOF
${workspaces_quoted:?}
EOF
)"
dex_types_quoted="$(
"jq" \
--raw-input \
<<EOF
${dex_types:?}
EOF
)"
dex_types_json="$(
"jq" \
--slurp \
<<EOF
${dex_types_quoted:?}
EOF
)"
profiles_quoted="$(
"jq" \
--raw-input \
<<EOF
${profiles:?}
EOF
)"
profiles_json="$(
"jq" \
--slurp \
<<EOF
${profiles_quoted:?}
EOF
)"
"echo" \
"workspaces-json<<EOF
${workspaces_json:?}
EOF
dex-types-json<<EOF
${dex_types_json:?}
EOF
profiles-json<<EOF
${profiles_json:?}
EOF" \
>>"${GITHUB_OUTPUT}"
prepare_tool_caches:
runs-on: "ubuntu-latest"
strategy:
fail-fast: true
matrix:
include:
- local: "false"
tool: "cargo-audit"
- local: "false"
tool: "cargo-udeps"
- local: "true"
tool: "cargo-each"
steps:
- uses: "actions/checkout@v4"
- uses: "./.github/actions/install-tool"
with:
fail-on-cache-miss: "false"
local: "${{ matrix.local }}"
no-fetching: "true"
tool: "${{ matrix.tool }}"
workspace_check:
needs:
- "load-configuration"
- "prepare_tool_caches"
strategy:
fail-fast: true
matrix:
workspace: "${{ fromJSON(needs.load-configuration.outputs.workspaces-json) }}"
runs-on: "ubuntu-latest"
env:
workspace: |-
${{ matrix.workspace }}
steps:
- uses: "actions/checkout@v4"
- uses: "./.github/actions/install-tool"
with:
fail-on-cache-miss: "true"
local: "false"
no-fetching: "false"
tool: "cargo-audit"
- run: |-
set -eu
"cp" \
-R \
"./.cargo" \
"./${workspace:?}/.cargo"
- run: |-
set -eu
"sh" \
-eu \
"./scripts/check/workspace_checks.sh" \
"./${workspace:?}"
instance_lint:
needs:
- "load-configuration"
- "prepare_tool_caches"
strategy:
fail-fast: true
matrix:
dex-type: "${{ fromJSON(needs.load-configuration.outputs.dex-types-json) }}"
profile: "${{ fromJSON(needs.load-configuration.outputs.profiles-json) }}"
workspace: "${{ fromJSON(needs.load-configuration.outputs.workspaces-json) }}"
runs-on: "ubuntu-latest"
steps:
- uses: "actions/checkout@v4"
- uses: "./.github/actions/install-tool"
with:
fail-on-cache-miss: "true"
local: "true"
no-fetching: "false"
tool: "cargo-each"
- run: |-
"cp" \
-R \
"./.github/test-data/build-configuration" \
"./"
- env:
dex_type: |-
${{ matrix.dex-type }}
profile: |-
${{ matrix.profile }}
workspace: |-
${{ matrix.workspace }}
run: |-
set -eu
"sh" \
-eu \
"./scripts/check/instance_lint.sh" \
"./${workspace:?}" \
"${dex_type:?}" \
"${profile:?}"
instance_check_deps:
needs:
- "load-configuration"
- "prepare_tool_caches"
strategy:
fail-fast: true
matrix:
dex-type: "${{ fromJSON(needs.load-configuration.outputs.dex-types-json) }}"
workspace: "${{ fromJSON(needs.load-configuration.outputs.workspaces-json) }}"
runs-on: "ubuntu-latest"
steps:
- uses: "actions/checkout@v4"
- uses: "./.github/actions/install-tool"
with:
fail-on-cache-miss: "true"
local: "false"
no-fetching: "false"
tool: "cargo-udeps"
- uses: "./.github/actions/install-tool"
with:
fail-on-cache-miss: "true"
local: "true"
no-fetching: "false"
tool: "cargo-each"
- run: |-
"rustup" \
"toolchain" \
"add" \
"nightly"
- run: |-
"cp" \
-R \
"./.github/test-data/build-configuration" \
"./"
- env:
dex_type: |-
${{ matrix.dex-type }}
workspace: |-
${{ matrix.workspace }}
run: |-
set -eu
"sh" \
-eu \
"./scripts/check/protocol_check_deps.sh" \
"./${workspace:?}" \
"${dex_type:?}"
instance_tests:
needs:
- "load-configuration"
- "prepare_tool_caches"
strategy:
fail-fast: true
matrix:
dex-type: "${{ fromJSON(needs.load-configuration.outputs.dex-types-json) }}"
profile: "${{ fromJSON(needs.load-configuration.outputs.profiles-json) }}"
workspace: "${{ fromJSON(needs.load-configuration.outputs.workspaces-json) }}"
runs-on: "ubuntu-latest"
steps:
- uses: "actions/checkout@v4"
- uses: "./.github/actions/install-tool"
with:
fail-on-cache-miss: "true"
local: "true"
no-fetching: "false"
tool: "cargo-each"
- run: |-
"cp" \
-R \
"./.github/test-data/build-configuration" \
"./"
- env:
dex_type: |-
${{ matrix.dex-type }}
profile: |-
${{ matrix.profile }}
workspace: |-
${{ matrix.workspace }}
run: |-
set -eu
"sh" \
-eu \
"./scripts/check/instance_tests.sh" \
"./${workspace:?}" \
"${dex_type:?}" \
"${profile:?}"
build:
needs:
- "load-configuration"
- "workspace_check"
- "instance_lint"
- "instance_check_deps"
- "instance_tests"
runs-on: "ubuntu-latest"
steps:
- uses: "actions/checkout@v4"
with:
fetch-depth: "0"
fetch-tags: "true"
- id: "restore-builder-base-container-cache"
uses: "actions/cache/restore@v4"
with:
key: "builder-base-container"
path: |-
builder-base-container.tar
- if: |-
!steps.restore-builder-base-container-cache.outputs.cache-hit
run: |-
"docker" \
"buildx" \
"build" \
--file "build.Containerfile" \
--tag "builder-base" \
--target "builder-base" \
"."
- if: |-
!steps.restore-builder-base-container-cache.outputs.cache-hit
run: |-
"docker" \
"save" \
--output "builder-base-container.tar" \
"builder-base"
- if: |-
!steps.restore-builder-base-container-cache.outputs.cache-hit
uses: "actions/cache/save@v4"
with:
key: "builder-base-container"
path: |-
builder-base-container.tar
- if: |-
steps.restore-builder-base-container-cache.outputs.cache-hit
run: |-
"docker" \
"load" \
--input "builder-base-container.tar"
- run: |-
set -eu
builder_image() {
target="${1:?}"
"docker" \
"buildx" \
"build" \
--build-arg "check_dependencies_updated=${UPLOAD_ARTIFACTS:?}" \
--file "build.Containerfile" \
--tag "${target:?}-builder" \
--target "${target:?}-builder" \
"."
}
for workspace in \
"platform" \
"protocol"
do
"builder_image" "${workspace:?}"
done
- run: |-
set -eux
build_and_pack() {
network="${1:?}"
"mkdir" "./artifacts-${network:?}/"
"docker" \
"run" \
--volume "./artifacts-${network:?}/:/artifacts/" \
"platform-builder" \
"${network:?}"
}
for network in \
"test-net" \
"production-net"
do
"build_and_pack" "${network:?}"
done
- run: |-
"docker" \
"image" \
"save" \
--output "protocol-builder.tar" \
"protocol-builder"
- uses: "actions/upload-artifact@v4"
with:
if-no-files-found: "error"
name: "platform-test-net"
path: |-
./artifacts-test-net/*
- uses: "actions/upload-artifact@v4"
with:
if-no-files-found: "error"
name: "platform-production-net"
path: |-
./artifacts-production-net/*
- uses: "actions/upload-artifact@v4"
with:
if-no-files-found: "error"
name: "protocol-builder"
path: |-
protocol-builder.tar