Running workflow for smart contracts #2611
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: "<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 |