From 14badb50f64edaadc5fa0f0f073f0c40fe9ddcd6 Mon Sep 17 00:00:00 2001 From: Conor Schaefer Date: Wed, 20 Sep 2023 16:52:57 -0700 Subject: [PATCH 1/2] ci: update containerfile with penumbra support Creates a container image that builds a version of Hermes for compatibility with Penumbra chains. Defaults to building the Penumbra dependency from the upstream "main" branch in [0], but the gitref can be overridden to be a stable tag. [0] https://github.com/penumbra-zone/penumbra --- .dockerignore | 5 ++++- ci/release/Containerfile | 24 ++++++++++++++++++++++++ ci/release/hermes.Dockerfile | 25 ------------------------- 3 files changed, 28 insertions(+), 26 deletions(-) create mode 100644 ci/release/Containerfile delete mode 100644 ci/release/hermes.Dockerfile diff --git a/.dockerignore b/.dockerignore index 9f970225ad..8dfd37d768 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1 +1,4 @@ -target/ \ No newline at end of file +** +!crates/ +!tools/ +!Cargo.* diff --git a/ci/release/Containerfile b/ci/release/Containerfile new file mode 100644 index 0000000000..d728650fe2 --- /dev/null +++ b/ci/release/Containerfile @@ -0,0 +1,24 @@ +FROM docker.io/rust:1-bookworm AS builder +COPY . /usr/src/hermes +WORKDIR /usr/src/hermes + +# Support building from a specific git dependency of the upstream Penumbra repo. +# Eventually we'll pull from crates.io; for now, we use a git dep. +# N.B. tags earlier than v0.61.0 will fail, due to lack of git-lfs support. +ARG PENUMBRA_VERSION=main +# ARG PENUMBRA_VERSION=v0.61.0 +# Set the desired PENUMBRA_VERSION in the Cargo.toml file prior to building. +RUN sed -i -e "s/^\(penumbra-proto.*\)\(branch = \".*\".*\)$/\1branch = \"${PENUMBRA_VERSION}\" }/" ./crates/relayer/Cargo.toml +RUN cargo build --release + +# Runtime container, with binary and normal user account. +FROM docker.io/debian:bookworm-slim +LABEL maintainer="team@penumbralabs.xyz" + +COPY --from=builder /usr/src/hermes/target/release/hermes /usr/bin/hermes +RUN apt-get update && apt-get install -y --no-install-recommends ca-certificates +RUN groupadd --gid 1000 hermes \ + && useradd -m -d /home/hermes -g 1000 -u 1000 hermes +WORKDIR /home/hermes +USER hermes +ENTRYPOINT ["/usr/bin/hermes"] diff --git a/ci/release/hermes.Dockerfile b/ci/release/hermes.Dockerfile deleted file mode 100644 index 863f62be68..0000000000 --- a/ci/release/hermes.Dockerfile +++ /dev/null @@ -1,25 +0,0 @@ -# -# Used for running hermes in docker containers -# -# Usage: -# docker build . --build-arg TAG=v0.3.0 -t informalsystems/hermes:0.3.0 -f hermes.Dockerfile - -FROM rust:1-buster AS build-env - -ARG TAG -WORKDIR /root - -RUN git clone -b ${TAG} --depth 1 https://github.com/informalsystems/hermes \ - && cd hermes \ - && cargo build --release - -FROM ubuntu:rolling -LABEL maintainer="hello@informal.systems" -RUN apt-get update && apt-get install -y --no-install-recommends ca-certificates -RUN update-ca-certificates -RUN useradd -m hermes -s /bin/bash -WORKDIR /home/hermes -USER hermes:hermes -ENTRYPOINT ["/usr/bin/hermes"] - -COPY --chown=0:0 --from=build-env /root/hermes/target/release/hermes /usr/bin/hermes From d144e87fec0b0bad8695e0e008ed3f478dcb9c9a Mon Sep 17 00:00:00 2001 From: Conor Schaefer Date: Thu, 21 Sep 2023 09:13:18 -0700 Subject: [PATCH 2/2] ci: add container build workflow Removes prior workflows that used by the upstream project repo. Creates a new container build workflow. --- .github/workflows/audit.yaml | 19 - .github/workflows/cargo-doc.yaml | 38 -- .github/workflows/container.yml | 62 +++ .github/workflows/guide-templates.yaml | 46 -- .github/workflows/guide.yml | 40 -- .github/workflows/integration.yaml | 567 ---------------------- .github/workflows/markdown-link-check.yml | 19 - .github/workflows/misbehaviour.yml | 96 ---- .github/workflows/multi-chains.yaml | 117 ----- .github/workflows/publish.yml | 21 - .github/workflows/release.yml | 174 ------- .github/workflows/rust.yml | 129 ----- .github/workflows/scripts.yaml | 24 - .github/workflows/specs.yml | 35 -- 14 files changed, 62 insertions(+), 1325 deletions(-) delete mode 100644 .github/workflows/audit.yaml delete mode 100644 .github/workflows/cargo-doc.yaml create mode 100644 .github/workflows/container.yml delete mode 100644 .github/workflows/guide-templates.yaml delete mode 100644 .github/workflows/guide.yml delete mode 100644 .github/workflows/integration.yaml delete mode 100644 .github/workflows/markdown-link-check.yml delete mode 100644 .github/workflows/misbehaviour.yml delete mode 100644 .github/workflows/multi-chains.yaml delete mode 100644 .github/workflows/publish.yml delete mode 100644 .github/workflows/release.yml delete mode 100644 .github/workflows/rust.yml delete mode 100644 .github/workflows/scripts.yaml delete mode 100644 .github/workflows/specs.yml diff --git a/.github/workflows/audit.yaml b/.github/workflows/audit.yaml deleted file mode 100644 index ef1844d30b..0000000000 --- a/.github/workflows/audit.yaml +++ /dev/null @@ -1,19 +0,0 @@ -name: Security Audit -on: - schedule: - - cron: '0 0 * * *' - -jobs: - security_audit: - name: Security Audit - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - - name: Cache cargo bin - uses: actions/cache@v3 - with: - path: ~/.cargo/bin - key: ${{ runner.os }}-cargo-audit-v0.11.2 - - uses: actions-rs/audit-check@v1.2.0 - with: - token: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/cargo-doc.yaml b/.github/workflows/cargo-doc.yaml deleted file mode 100644 index 1b841139e4..0000000000 --- a/.github/workflows/cargo-doc.yaml +++ /dev/null @@ -1,38 +0,0 @@ -name: API Docs - -on: - push: - branches: - - master - pull_request: {} - -# Cancel previous runs of this workflow when a new commit is added to the PR, branch or tag -concurrency: - group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} - cancel-in-progress: true - -jobs: - cargo-doc: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - - uses: actions-rs/toolchain@v1 - with: - toolchain: nightly-2023-07-13 - override: true - - - name: Build API documentation - uses: actions-rs/cargo@v1 - env: - RUSTDOCFLAGS: "--cfg docsrs" - with: - command: doc - args: --all-features - - - name: Push API documentation to GitHub Pages - if: github.ref == 'refs/heads/master' - uses: peaceiris/actions-gh-pages@v3 - with: - deploy_key: ${{ secrets.IBC_RS_DOC_PRIVATE_KEY }} - external_repository: informalsystems/hermes-api-doc - publish_dir: ./target/doc diff --git a/.github/workflows/container.yml b/.github/workflows/container.yml new file mode 100644 index 0000000000..7e056c0d39 --- /dev/null +++ b/.github/workflows/container.yml @@ -0,0 +1,62 @@ +--- +name: Build container image +on: + workflow_call: + workflow_dispatch: + inputs: + penumbra_version: + description: 'Git ref (e.g. branch or tag) of Penumbra repo for building' + default: "main" + required: true + push: + branches: + - main + tags: + - '**' +jobs: + hermes: + runs-on: buildjet-16vcpu-ubuntu-2004 + permissions: + contents: read + packages: write + + steps: + - name: Checkout repository + uses: actions/checkout@v3 + + - name: Log in to the Docker Hub container registry (for pulls) + uses: docker/login-action@v2 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + + - name: Log in to the GitHub container registry (for pushes) + uses: docker/login-action@v2 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Extract metadata (tags, labels) for Docker + id: meta + uses: docker/metadata-action@v4 + with: + images: ghcr.io/penumbra-zone/hermes + + - name: Build and push Docker image + uses: docker/build-push-action@v3 + with: + context: . + platforms: linux/amd64 + file: ci/release/Containerfile + push: true + # We include a tag with the associated Penumbra, e.g. `penumbra-v0.61.0`. + # This is important to maintain compatibility with a long-running testnet. + tags: ${{ steps.meta.outputs.tags }},ghcr.io/penumbra-zone/hermes:penumbra-${{ github.event.inputs.penumbra_version || 'main' }} + build-args: | + PENUMBRA_VERSION=${{ github.event.inputs.penumbra_version || 'main' }} + # We disable layer caching to ensure that the most recent penumbra repo is used. + # Otherwise, the static git url for the repo will always result in a cache hit. + # TODO: update with dynamic build-args using e.g. current date to bust cache. + no-cache: true + labels: ${{ steps.meta.outputs.labels }} diff --git a/.github/workflows/guide-templates.yaml b/.github/workflows/guide-templates.yaml deleted file mode 100644 index 80c0d43fc4..0000000000 --- a/.github/workflows/guide-templates.yaml +++ /dev/null @@ -1,46 +0,0 @@ -name: Guide Template Checker -on: - pull_request: - paths: - - .github/workflows/guide-templates.yaml - - crates/relayer-cli/** - - scripts/** - - tools/check-guide/** - - guide/src/templates/** - - push: - branches: master - paths: - - .github/workflows/guide-templates.yaml - - crates/relayer-cli/** - - scripts/** - - tools/check-guide/** - - guide/src/templates/** - -# Cancel previous runs of this workflow when a new commit is added to the PR, branch or tag -concurrency: - group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} - cancel-in-progress: true - -jobs: - template-checker: - runs-on: ubuntu-latest - timeout-minutes: 60 - steps: - - uses: actions/checkout@v3 - - uses: actions-rs/toolchain@v1 - with: - toolchain: stable - override: true - - name: Check templates - run: bash scripts/auto_gen_templates.sh --mode "check" - - uses: actions-rs/cargo@v1 - name: Update lockfile - with: - command: generate-lockfile - args: --manifest-path tools/check-guide/Cargo.toml - - uses: actions-rs/cargo@v1 - name: Check guide - with: - command: run - args: --manifest-path tools/check-guide/Cargo.toml diff --git a/.github/workflows/guide.yml b/.github/workflows/guide.yml deleted file mode 100644 index 11d3851f66..0000000000 --- a/.github/workflows/guide.yml +++ /dev/null @@ -1,40 +0,0 @@ -name: Hermes Guide - -on: - push: - branches: - - master - tags: - - v[0-9]+.* - pull_request: - paths: - - guide/** - -# Cancel previous runs of this workflow when a new commit is added to the PR, branch or tag -concurrency: - group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} - cancel-in-progress: true - -jobs: - guide: - runs-on: ubuntu-22.04 - steps: - - uses: actions/checkout@v3 - - - name: Install mdbook and plugins - uses: taiki-e/install-action@v2 - with: - tool: mdbook,mdbook-mermaid,mdbook-template,mdbook-toc - - - name: Build guide - run: | - cd guide - mdbook build - - # Only deploy guide when releasing a new version of Hermes - - name: Deploy to GitHub Pages - uses: peaceiris/actions-gh-pages@v3 - if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags') - with: - github_token: ${{ secrets.GITHUB_TOKEN }} - publish_dir: ./guide/book diff --git a/.github/workflows/integration.yaml b/.github/workflows/integration.yaml deleted file mode 100644 index eaee23632c..0000000000 --- a/.github/workflows/integration.yaml +++ /dev/null @@ -1,567 +0,0 @@ -name: Integration -on: - pull_request: - paths: - - .github/workflows/integration.yaml - - Cargo.toml - - Cargo.lock - - flake.nix - - flake.lock - - ci/** - - e2e/** - - crates/** - - tools/** - push: - branches: master - paths: - - .github/workflows/integration.yaml - - Cargo.toml - - Cargo.lock - - flake.nix - - flake.lock - - ci/** - - e2e/** - - crates/** - - tools/** - -env: - CARGO_INCREMENTAL: 0 - CARGO_PROFILE_DEV_DEBUG: 1 - CARGO_PROFILE_RELEASE_DEBUG: 1 - RUST_BACKTRACE: short - CARGO_NET_RETRY: 10 - RUSTUP_MAX_RETRIES: 10 - -# Cancel previous runs of this workflow when a new commit is added to the PR, branch or tag -concurrency: - group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} - cancel-in-progress: true - -jobs: - integration-test: - runs-on: ubuntu-20.04 - timeout-minutes: 180 - strategy: - fail-fast: false - matrix: - chain: - - package: gaia8 - command: gaiad - account_prefix: cosmos - - package: gaia9 - command: gaiad - account_prefix: cosmos - - package: ibc-go-v4-simapp - command: simd - account_prefix: cosmos - - package: ibc-go-v5-simapp - command: simd - account_prefix: cosmos - - package: ibc-go-v6-simapp - command: simd - account_prefix: cosmos - - package: ibc-go-v7-simapp - command: simd - account_prefix: cosmos - - package: wasmd - command: wasmd - account_prefix: wasm - - package: evmos - command: evmosd - account_prefix: evmos - - package: osmosis - command: osmosisd - account_prefix: osmo - - package: stride - command: strided - account_prefix: stride - - package: juno - command: junod - account_prefix: juno - - steps: - - uses: actions/checkout@v3 - - uses: cachix/install-nix-action@v22 - with: - install_url: https://nixos-nix-install-tests.cachix.org/serve/vij683ly7sl95nnhb67bdjjfabclr85m/install - install_options: '--tarball-url-prefix https://nixos-nix-install-tests.cachix.org/serve' - extra_nix_config: | - experimental-features = nix-command flakes - - uses: cachix/cachix-action@v12 - with: - name: cosmos - - uses: actions-rs/toolchain@v1 - with: - toolchain: stable - override: true - - uses: Swatinem/rust-cache@v2 - - uses: actions-rs/cargo@v1 - with: - command: test - args: -p ibc-integration-test --no-fail-fast --no-run - - uses: nick-fields/retry@v2 - env: - RUST_LOG: info - RUST_BACKTRACE: 1 - NO_COLOR_LOG: 1 - CHAIN_COMMAND_PATHS: ${{ matrix.chain.command }} - ACCOUNT_PREFIXES: ${{ matrix.chain.account_prefix }} - with: - max_attempts: 2 - timeout_minutes: 90 - command: | - nix shell .#python .#${{ matrix.chain.package }} -c cargo \ - test -p ibc-integration-test --no-fail-fast -- \ - --nocapture --test-threads=2 - - ordered-channel-test: - runs-on: ubuntu-20.04 - timeout-minutes: 60 - steps: - - uses: actions/checkout@v3 - - uses: cachix/install-nix-action@v22 - with: - install_url: https://nixos-nix-install-tests.cachix.org/serve/vij683ly7sl95nnhb67bdjjfabclr85m/install - install_options: '--tarball-url-prefix https://nixos-nix-install-tests.cachix.org/serve' - extra_nix_config: | - experimental-features = nix-command flakes - - uses: cachix/cachix-action@v12 - with: - name: cosmos - - uses: actions-rs/toolchain@v1 - with: - toolchain: stable - override: true - - uses: Swatinem/rust-cache@v2 - - uses: actions-rs/cargo@v1 - with: - command: test - args: -p ibc-integration-test --no-fail-fast --no-run - - env: - RUST_LOG: info - RUST_BACKTRACE: 1 - NO_COLOR_LOG: 1 - run: | - nix shell .#python .#gaia6-ordered -c cargo \ - test -p ibc-integration-test --features ordered --no-fail-fast -- \ - --nocapture --test-threads=1 test_ordered_channel - - ica-filter-test: - runs-on: ubuntu-20.04 - strategy: - fail-fast: false - matrix: - chain: - - package: ibc-go-v6-simapp - command: simd - account_prefix: cosmos - - package: ibc-go-v7-simapp - command: simd - account_prefix: cosmos - steps: - - uses: actions/checkout@v3 - - uses: cachix/install-nix-action@v22 - with: - install_url: https://nixos-nix-install-tests.cachix.org/serve/vij683ly7sl95nnhb67bdjjfabclr85m/install - install_options: '--tarball-url-prefix https://nixos-nix-install-tests.cachix.org/serve' - extra_nix_config: | - experimental-features = nix-command flakes - - uses: cachix/cachix-action@v12 - with: - name: cosmos - - uses: actions-rs/toolchain@v1 - with: - toolchain: stable - override: true - - uses: Swatinem/rust-cache@v2 - - uses: actions-rs/cargo@v1 - with: - command: test - args: -p ibc-integration-test --no-fail-fast --no-run - - env: - RUST_LOG: info - RUST_BACKTRACE: 1 - NO_COLOR_LOG: 1 - CHAIN_COMMAND_PATHS: ${{ matrix.chain.command }} - ACCOUNT_PREFIXES: ${{ matrix.chain.account_prefix }} - run: | - nix shell .#${{ matrix.chain.package }} -c cargo \ - test -p ibc-integration-test --features ica --no-fail-fast -- \ - --nocapture --test-threads=1 test_ica_filter - - ics29-fee-test: - runs-on: ubuntu-20.04 - strategy: - fail-fast: false - matrix: - chain: - - package: ibc-go-v5-simapp - command: simd - account_prefix: cosmos - - package: ibc-go-v6-simapp - command: simd - account_prefix: cosmos - - package: ibc-go-v7-simapp - command: simd - account_prefix: cosmos - - package: migaloo - command: migalood - account_prefix: migaloo - steps: - - uses: actions/checkout@v3 - - uses: cachix/install-nix-action@v22 - with: - install_url: https://nixos-nix-install-tests.cachix.org/serve/vij683ly7sl95nnhb67bdjjfabclr85m/install - install_options: '--tarball-url-prefix https://nixos-nix-install-tests.cachix.org/serve' - extra_nix_config: | - experimental-features = nix-command flakes - - uses: cachix/cachix-action@v12 - with: - name: cosmos - - uses: actions-rs/toolchain@v1 - with: - toolchain: stable - override: true - - uses: Swatinem/rust-cache@v2 - - uses: actions-rs/cargo@v1 - with: - command: test - args: -p ibc-integration-test --features ics29-fee --no-fail-fast --no-run - - env: - RUST_LOG: info - RUST_BACKTRACE: 1 - NO_COLOR_LOG: 1 - CHAIN_COMMAND_PATHS: ${{ matrix.chain.command }} - ACCOUNT_PREFIXES: ${{ matrix.chain.account_prefix }} - run: | - nix shell .#${{ matrix.chain.package }} -c cargo \ - test -p ibc-integration-test --features ics29-fee --no-fail-fast -- \ - --nocapture --test-threads=1 fee:: - - forward-packet: - runs-on: ubuntu-20.04 - strategy: - fail-fast: false - matrix: - chain: - - package: gaia8 - command: gaiad - account_prefix: cosmos - - package: gaia9 - command: gaiad - account_prefix: cosmos - - package: juno - command: junod - account_prefix: juno - steps: - - uses: actions/checkout@v3 - - uses: cachix/install-nix-action@v22 - with: - install_url: https://nixos-nix-install-tests.cachix.org/serve/vij683ly7sl95nnhb67bdjjfabclr85m/install - install_options: '--tarball-url-prefix https://nixos-nix-install-tests.cachix.org/serve' - extra_nix_config: | - experimental-features = nix-command flakes - - uses: cachix/cachix-action@v12 - with: - name: cosmos - - uses: actions-rs/toolchain@v1 - with: - toolchain: stable - override: true - - uses: Swatinem/rust-cache@v2 - - uses: actions-rs/cargo@v1 - with: - command: test - args: -p ibc-integration-test --features forward-packet --no-fail-fast --no-run - - env: - RUST_LOG: info - RUST_BACKTRACE: 1 - NO_COLOR_LOG: 1 - CHAIN_COMMAND_PATHS: ${{ matrix.chain.command }} - ACCOUNT_PREFIXES: ${{ matrix.chain.account_prefix }} - run: | - nix shell .#${{ matrix.chain.package }} -c cargo \ - test -p ibc-integration-test --features forward-packet --no-fail-fast -- \ - --nocapture --test-threads=1 forward:: - - ics31: - runs-on: ubuntu-20.04 - strategy: - fail-fast: false - matrix: - chain: - - package: .#gaia8 .#stride-no-admin - command: gaiad,strided - account_prefix: cosmos,stride - steps: - - uses: actions/checkout@v3 - - uses: cachix/install-nix-action@v22 - with: - install_url: https://nixos-nix-install-tests.cachix.org/serve/vij683ly7sl95nnhb67bdjjfabclr85m/install - install_options: '--tarball-url-prefix https://nixos-nix-install-tests.cachix.org/serve' - extra_nix_config: | - experimental-features = nix-command flakes - - uses: cachix/cachix-action@v12 - with: - name: cosmos - - uses: actions-rs/toolchain@v1 - with: - toolchain: stable - override: true - - uses: Swatinem/rust-cache@v2 - - uses: actions-rs/cargo@v1 - with: - command: test - args: -p ibc-integration-test --features ics31 --no-fail-fast --no-run - - env: - RUST_LOG: info - RUST_BACKTRACE: 1 - NO_COLOR_LOG: 1 - CHAIN_COMMAND_PATHS: ${{ matrix.chain.command }} - ACCOUNT_PREFIXES: ${{ matrix.chain.account_prefix }} - run: | - nix shell ${{ matrix.chain.package }} -c cargo \ - test -p ibc-integration-test --features ics31 --no-fail-fast -- \ - --nocapture --test-threads=1 ics31:: - fee-grant: - runs-on: ubuntu-20.04 - strategy: - fail-fast: false - matrix: - chain: - - package: stride - command: strided - account_prefix: stride - - package: evmos - command: evmosd - account_prefix: evmos - steps: - - uses: actions/checkout@v3 - - uses: cachix/install-nix-action@v22 - with: - install_url: https://nixos-nix-install-tests.cachix.org/serve/vij683ly7sl95nnhb67bdjjfabclr85m/install - install_options: '--tarball-url-prefix https://nixos-nix-install-tests.cachix.org/serve' - extra_nix_config: | - experimental-features = nix-command flakes - - uses: cachix/cachix-action@v12 - with: - name: cosmos - - uses: actions-rs/toolchain@v1 - with: - toolchain: stable - override: true - - uses: Swatinem/rust-cache@v2 - - uses: actions-rs/cargo@v1 - with: - command: test - args: -p ibc-integration-test --features fee-grant --no-fail-fast --no-run - - env: - RUST_LOG: info - RUST_BACKTRACE: 1 - NO_COLOR_LOG: 1 - CHAIN_COMMAND_PATHS: ${{ matrix.chain.command }} - ACCOUNT_PREFIXES: ${{ matrix.chain.account_prefix }} - run: | - nix shell .#${{ matrix.chain.package }} -c cargo \ - test -p ibc-integration-test --features fee-grant --no-fail-fast -- \ - --nocapture --test-threads=1 fee_grant:: - - clean-workers: - runs-on: ubuntu-20.04 - strategy: - fail-fast: false - matrix: - chain: - - package: gaia9 - command: gaiad - account_prefix: cosmos - steps: - - uses: actions/checkout@v3 - - uses: cachix/install-nix-action@v22 - with: - install_url: https://nixos-nix-install-tests.cachix.org/serve/vij683ly7sl95nnhb67bdjjfabclr85m/install - install_options: '--tarball-url-prefix https://nixos-nix-install-tests.cachix.org/serve' - extra_nix_config: | - experimental-features = nix-command flakes - - uses: cachix/cachix-action@v12 - with: - name: cosmos - - uses: actions-rs/toolchain@v1 - with: - toolchain: stable - override: true - - uses: Swatinem/rust-cache@v2 - - uses: actions-rs/cargo@v1 - with: - command: test - args: -p ibc-integration-test --features ics31 --no-fail-fast --no-run - - env: - RUST_LOG: info - RUST_BACKTRACE: 1 - NO_COLOR_LOG: 1 - CHAIN_COMMAND_PATHS: ${{ matrix.chain.command }} - ACCOUNT_PREFIXES: ${{ matrix.chain.account_prefix }} - run: | - nix shell .#${{ matrix.chain.package }} -c cargo \ - test -p ibc-integration-test --features clean-workers --no-fail-fast -- \ - --nocapture --test-threads=1 clean_workers:: - - interchain-security-no-ica: - runs-on: ubuntu-20.04 - strategy: - fail-fast: false - matrix: - chain: - - package: neutron - command: neutrond - account_prefix: neutron - steps: - - uses: actions/checkout@v3 - - uses: cachix/install-nix-action@v22 - with: - install_url: https://nixos-nix-install-tests.cachix.org/serve/vij683ly7sl95nnhb67bdjjfabclr85m/install - install_options: '--tarball-url-prefix https://nixos-nix-install-tests.cachix.org/serve' - extra_nix_config: | - experimental-features = nix-command flakes - - uses: cachix/cachix-action@v12 - with: - name: cosmos - - uses: actions-rs/toolchain@v1 - with: - toolchain: stable - override: true - - uses: Swatinem/rust-cache@v2 - - uses: actions-rs/cargo@v1 - with: - command: test - args: -p ibc-integration-test --features interchain-security --no-fail-fast --no-run - - env: - RUST_LOG: info - RUST_BACKTRACE: 1 - NO_COLOR_LOG: 1 - CHAIN_COMMAND_PATHS: gaiad,${{ matrix.chain.command }} - ACCOUNT_PREFIXES: cosmos,${{ matrix.chain.account_prefix }} - run: | - nix shell .#gaia9 .#${{ matrix.chain.package }} -c cargo \ - test -p ibc-integration-test --features interchain-security --no-fail-fast -- \ - --nocapture --test-threads=1 interchain_security:: - - interchain-security-ica: - runs-on: ubuntu-20.04 - strategy: - fail-fast: false - matrix: - chain: - - package: stride-consumer - command: strided - account_prefix: stride - steps: - - uses: actions/checkout@v3 - - uses: cachix/install-nix-action@v22 - with: - install_url: https://nixos-nix-install-tests.cachix.org/serve/vij683ly7sl95nnhb67bdjjfabclr85m/install - install_options: '--tarball-url-prefix https://nixos-nix-install-tests.cachix.org/serve' - extra_nix_config: | - experimental-features = nix-command flakes - - uses: cachix/cachix-action@v12 - with: - name: cosmos - - uses: actions-rs/toolchain@v1 - with: - toolchain: stable - override: true - - uses: Swatinem/rust-cache@v2 - - uses: actions-rs/cargo@v1 - with: - command: test - args: -p ibc-integration-test --features interchain-security --no-fail-fast --no-run - - env: - RUST_LOG: info - RUST_BACKTRACE: 1 - NO_COLOR_LOG: 1 - CHAIN_COMMAND_PATHS: gaiad,${{ matrix.chain.command }} - ACCOUNT_PREFIXES: cosmos,${{ matrix.chain.account_prefix }} - run: | - nix shell .#gaia9 .#${{ matrix.chain.package }} -c cargo \ - test -p ibc-integration-test --features interchain-security,ica --no-fail-fast -- \ - --nocapture --test-threads=1 interchain_security:: - - interchain-security-icq: - runs-on: ubuntu-20.04 - strategy: - fail-fast: false - matrix: - chain: - - package: stride-consumer-no-admin - command: strided - account_prefix: stride - steps: - - uses: actions/checkout@v3 - - uses: cachix/install-nix-action@v22 - with: - install_url: https://nixos-nix-install-tests.cachix.org/serve/vij683ly7sl95nnhb67bdjjfabclr85m/install - install_options: '--tarball-url-prefix https://nixos-nix-install-tests.cachix.org/serve' - extra_nix_config: | - experimental-features = nix-command flakes - - uses: cachix/cachix-action@v12 - with: - name: cosmos - - uses: actions-rs/toolchain@v1 - with: - toolchain: stable - override: true - - uses: Swatinem/rust-cache@v2 - - uses: actions-rs/cargo@v1 - with: - command: test - args: -p ibc-integration-test --features interchain-security --no-fail-fast --no-run - - env: - RUST_LOG: info - RUST_BACKTRACE: 1 - NO_COLOR_LOG: 1 - CHAIN_COMMAND_PATHS: gaiad,${{ matrix.chain.command }} - ACCOUNT_PREFIXES: cosmos,${{ matrix.chain.account_prefix }} - run: | - nix shell .#gaia9 .#${{ matrix.chain.package }} -c cargo \ - test -p ibc-integration-test --features interchain-security,ics31 --no-fail-fast -- \ - --nocapture --test-threads=1 interchain_security:: - - model-based-test: - runs-on: ubuntu-20.04 - timeout-minutes: 60 - strategy: - matrix: - gaiad: - - gaia6 - steps: - - uses: actions/checkout@v3 - - uses: cachix/install-nix-action@v22 - with: - install_url: https://nixos-nix-install-tests.cachix.org/serve/vij683ly7sl95nnhb67bdjjfabclr85m/install - install_options: '--tarball-url-prefix https://nixos-nix-install-tests.cachix.org/serve' - extra_nix_config: | - experimental-features = nix-command flakes - - uses: cachix/cachix-action@v12 - with: - name: cosmos - - uses: actions-rs/toolchain@v1 - with: - toolchain: stable - override: true - - uses: Swatinem/rust-cache@v2 - - uses: actions-rs/cargo@v1 - with: - command: test - args: -p ibc-integration-test --features mbt --no-fail-fast --no-run - # Disable running MBT tests until flakiness is addressed - # - env: - # RUST_LOG: debug - # RUST_BACKTRACE: 1 - # NO_COLOR_LOG: 1 - # run: | - # nix shell \ - # .#${{ matrix.gaiad }} \ - # .#apalache \ - # -c cargo \ - # test -p ibc-integration-test --features mbt --no-fail-fast -- \ - # --nocapture --test-threads=1 mbt diff --git a/.github/workflows/markdown-link-check.yml b/.github/workflows/markdown-link-check.yml deleted file mode 100644 index ae3b402566..0000000000 --- a/.github/workflows/markdown-link-check.yml +++ /dev/null @@ -1,19 +0,0 @@ -name: Check Markdown links - -on: - schedule: - - cron: '0 0 * * *' - - workflow_dispatch: - -jobs: - md-link-check: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - - name: markdown-link-check - uses: gaurav-nelson/github-action-markdown-link-check@v1 - with: - config-file: '.github/markdown-link-check.json' - use-quiet-mode: 'yes' - use-verbose-mode: 'yes' diff --git a/.github/workflows/misbehaviour.yml b/.github/workflows/misbehaviour.yml deleted file mode 100644 index d6790317d5..0000000000 --- a/.github/workflows/misbehaviour.yml +++ /dev/null @@ -1,96 +0,0 @@ -name: Misbehaviour -on: - pull_request: - paths: - - .github/workflows/misbehaviour.yaml - - Cargo.toml - - Cargo.lock - - flake.nix - - flake.lock - - ci/** - - scripts/** - - crates/** - push: - branches: master - paths: - - .github/workflows/misbehaviour.yaml - - Cargo.toml - - Cargo.lock - - flake.nix - - flake.lock - - ci/** - - scripts/** - - crates/** - -env: - CARGO_INCREMENTAL: 0 - CARGO_PROFILE_DEV_DEBUG: 1 - CARGO_PROFILE_RELEASE_DEBUG: 1 - RUST_BACKTRACE: short - CARGO_NET_RETRY: 10 - RUSTUP_MAX_RETRIES: 10 - -# Cancel previous runs of this workflow when a new commit is added to the PR, branch or tag -concurrency: - group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} - cancel-in-progress: true - -jobs: - misbehaviour: - runs-on: ubuntu-20.04 - timeout-minutes: 20 - strategy: - fail-fast: false - matrix: - chain: - - package: gaia8 - command: gaiad - account_prefix: cosmos - - package: gaia9 - command: gaiad - account_prefix: cosmos - steps: - - uses: actions/checkout@v3 - - name: Install Nix - uses: cachix/install-nix-action@v22 - with: - extra_nix_config: | - experimental-features = nix-command flakes - - name: Use cachix cache - uses: cachix/cachix-action@v12 - with: - name: cosmos - - name: Install sconfig - uses: jaxxstorm/action-install-gh-release@v1.10.0 - with: - repo: freshautomations/sconfig - platform: linux - arch: amd64 - extension-matching: disable - rename-to: sconfig - chmod: 0755 - - name: Install stoml - uses: jaxxstorm/action-install-gh-release@v1.10.0 - with: - repo: freshautomations/stoml - platform: linux - arch: amd64 - extension-matching: disable - rename-to: stoml - chmod: 0755 - - name: Install Rust - uses: actions-rs/toolchain@v1 - with: - toolchain: stable - override: true - - name: Use Rust cache - uses: Swatinem/rust-cache@v2 - - name: Build Hermes - uses: actions-rs/cargo@v1 - with: - command: build - - name: Run test - working-directory: ci/misbehaviour - run: | - nix shell .#${{ matrix.chain.package }} -c bash misbehaviour_test.sh - diff --git a/.github/workflows/multi-chains.yaml b/.github/workflows/multi-chains.yaml deleted file mode 100644 index 4b8a44e015..0000000000 --- a/.github/workflows/multi-chains.yaml +++ /dev/null @@ -1,117 +0,0 @@ -name: Integration - Multi-chains -on: - pull_request: - types: - - opened - - reopened - - synchronize - - labeled - - unlabeled - paths: - - .github/workflows/multi-chains.yaml - - Cargo.toml - - Cargo.lock - - flake.nix - - flake.lock - - ci/** - - e2e/** - - crates/** - - tools/** - push: - branches: master - paths: - - .github/workflows/multi-chains.yaml - - Cargo.toml - - Cargo.lock - - flake.nix - - flake.lock - - ci/** - - e2e/** - - crates/** - - tools/** - -env: - CARGO_INCREMENTAL: 0 - CARGO_PROFILE_DEV_DEBUG: 1 - CARGO_PROFILE_RELEASE_DEBUG: 1 - RUST_BACKTRACE: short - CARGO_NET_RETRY: 10 - RUSTUP_MAX_RETRIES: 10 - -# Cancel previous runs of this workflow when a new commit is added to the PR, branch or tag -concurrency: - group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} - cancel-in-progress: true - -jobs: - multi-chains-test: - runs-on: ubuntu-20.04 - if: | - github.ref == 'refs/heads/master' || ( - (github.event.action == 'opened' || github.event.action == 'reopened' || github.event.action == 'synchronize') && - contains(github.event.pull_request.labels.*.name, 'CI: multi-chains') - ) || ( - github.event.action == 'labeled' && github.event.label.name == 'CI: multi-chains' - ) - timeout-minutes: 60 - strategy: - fail-fast: false - matrix: - first-package: - - package: gaia9 - command: gaiad - account_prefix: cosmos - - package: ibc-go-v7-simapp - command: simd - account_prefix: cosmos - - package: wasmd - command: wasmd - account_prefix: wasm - second-package: - - package: evmos - command: evmosd - account_prefix: evmos - - package: osmosis - command: osmosisd - account_prefix: osmo - - package: stride - command: strided - account_prefix: stride - - package: juno - command: junod - account_prefix: juno - - steps: - - uses: actions/checkout@v3 - - uses: cachix/install-nix-action@v22 - with: - install_url: https://nixos-nix-install-tests.cachix.org/serve/vij683ly7sl95nnhb67bdjjfabclr85m/install - install_options: '--tarball-url-prefix https://nixos-nix-install-tests.cachix.org/serve' - extra_nix_config: | - experimental-features = nix-command flakes - - uses: cachix/cachix-action@v12 - with: - name: cosmos - - uses: actions-rs/toolchain@v1 - with: - toolchain: stable - override: true - - uses: Swatinem/rust-cache@v2 - - uses: actions-rs/cargo@v1 - with: - command: test - args: -p ibc-integration-test --no-fail-fast --no-run - - uses: nick-fields/retry@v2 - env: - RUST_LOG: info - RUST_BACKTRACE: 1 - NO_COLOR_LOG: 1 - ACCOUNT_PREFIXES: ${{ matrix.first-package.account_prefix }},${{ matrix.second-package.account_prefix }} - with: - max_attempts: 2 - timeout_minutes: 60 - command: | - CHAIN_COMMAND_PATHS=$(nix shell .#${{ matrix.first-package.package }} -c which ${{ matrix.first-package.command }}),$(nix shell .#${{ matrix.second-package.package }} -c which ${{ matrix.second-package.command }}) \ - nix shell .#python -c cargo \ - test -p ibc-integration-test --no-fail-fast -- \ - --nocapture --test-threads=2 diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml deleted file mode 100644 index e3757cbc8c..0000000000 --- a/.github/workflows/publish.yml +++ /dev/null @@ -1,21 +0,0 @@ -name: Publish (dry-run) - -on: - push: - branches: - - 'release/*' - -jobs: - publish: - name: Publish (dry-run) - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - - uses: actions-rs/toolchain@v1 - with: - toolchain: stable - override: true - - uses: katyo/publish-crates@v2 - with: - dry-run: true - diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml deleted file mode 100644 index 240a21da98..0000000000 --- a/.github/workflows/release.yml +++ /dev/null @@ -1,174 +0,0 @@ -# Uploads Hermes binary. -# Ref: https://github.com/marketplace/actions/build-and-upload-rust-binary-to-github-releases - -name: Release - -on: - push: - tags: - - v[0-9]+.* - -env: - REGISTRY_IMAGE: informalsystems/hermes - -jobs: - create-release: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - - uses: taiki-e/create-gh-release-action@v1 - env: - # (required) - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - upload-assets: - needs: - - create-release - strategy: - fail-fast: false - matrix: - config: - - { os: ubuntu-latest, target: x86_64-unknown-linux-gnu } - - { os: ubuntu-latest, target: aarch64-unknown-linux-gnu } - - { os: macos-latest, target: x86_64-apple-darwin } - - { os: macos-latest, target: aarch64-apple-darwin } - runs-on: ${{ matrix.config.os }} - steps: - - uses: actions/checkout@v3 - - uses: taiki-e/upload-rust-binary-action@v1 - with: - # (required) - bin: hermes - # (optional) Target triple - target: ${{ matrix.config.target }} - # (optional) On which platform to distribute the `.tar.gz` file. - # [default value: unix] - # [possible values: all, unix, windows, none] - tar: unix - # (optional) On which platform to distribute the `.zip` file. - # [default value: windows] - # [possible values: all, unix, windows, none] - zip: unix - # (optional) Archive name (non-extension portion of filename) to be uploaded. - # [default value: $bin-$target] - # [possible values: the following variables and any string] - # variables: - # - $bin - Binary name (non-extension portion of filename). - # - $target - Target triple. - # - $tag - Tag of this release. - archive: $bin-$tag-$target - env: - # (required) - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - # (optional) - CARGO_PROFILE_RELEASE_LTO: true - - docker-build: - runs-on: ubuntu-latest - strategy: - fail-fast: false - matrix: - platform: - - linux/amd64 - - linux/arm64 - steps: - - name: Checkout - uses: actions/checkout@v3 - - - name: Docker meta - id: meta - uses: docker/metadata-action@v4 - with: - images: ${{ env.REGISTRY_IMAGE }} - - - name: Set up QEMU - uses: docker/setup-qemu-action@v2 - - - name: Set up Docker Buildx - id: buildx - uses: docker/setup-buildx-action@v2 - - - name: Login to Docker Hub - uses: docker/login-action@v2 - with: - username: ${{ secrets.DOCKER_HUB_USERNAME }} - password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }} - - - name: Get release version - run: echo "TAG=${GITHUB_REF#refs/tags/v}" >> $GITHUB_ENV - - - name: Build and push by digest - id: build - uses: docker/build-push-action@v4 - with: - context: ./ci/release/ - file: ./ci/release/hermes.Dockerfile - build-args: TAG=v${{env.TAG}} - platforms: ${{ matrix.platform }} - labels: ${{ steps.meta.outputs.labels }} - outputs: type=image,name=${{ env.REGISTRY_IMAGE }},push-by-digest=true,name-canonical=true,push=true - cache-from: type=gha - cache-to: type=gha,mode=max - - - name: Export digest - run: | - mkdir -p /tmp/digests - digest="${{ steps.build.outputs.digest }}" - touch "/tmp/digests/${digest#sha256:}" - - - name: Upload digest - uses: actions/upload-artifact@v3 - with: - name: digests - path: /tmp/digests/* - if-no-files-found: error - retention-days: 1 - - docker-merge: - runs-on: ubuntu-latest - needs: - - docker-build - steps: - - name: Download digests - uses: actions/download-artifact@v3 - with: - name: digests - path: /tmp/digests - - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v2 - - - name: Docker meta - id: meta - uses: docker/metadata-action@v4 - with: - images: ${{ env.REGISTRY_IMAGE }} - - - name: Login to Docker Hub - uses: docker/login-action@v2 - with: - username: ${{ secrets.DOCKER_HUB_USERNAME }} - password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }} - - - name: Create manifest list and push - working-directory: /tmp/digests - run: | - docker buildx imagetools create --tag ${{ env.REGISTRY_IMAGE }}:${{ steps.meta.outputs.version }} \ - $(printf '${{ env.REGISTRY_IMAGE }}@sha256:%s ' *) - - - name: Inspect image - run: | - docker buildx imagetools inspect ${{ env.REGISTRY_IMAGE }}:${{ steps.meta.outputs.version }} - - - name: Login to GitHub Container Registry - uses: docker/login-action@v2 - with: - registry: ghcr.io - username: ${{ github.repository_owner }} - password: ${{ secrets.GITHUB_TOKEN }} - - - name: Push image to GHCR - run: | - docker buildx imagetools create \ - --tag ghcr.io/${{ env.REGISTRY_IMAGE }}:${{ steps.meta.outputs.version }} \ - ${{ env.REGISTRY_IMAGE }}:${{ steps.meta.outputs.version }} diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml deleted file mode 100644 index a9495e3d2d..0000000000 --- a/.github/workflows/rust.yml +++ /dev/null @@ -1,129 +0,0 @@ -name: Rust -on: - pull_request: - paths: - - .github/workflows/rust.yml - - Cargo.toml - - Cargo.lock - - ci/** - - e2e/** - - crates/** - - tools/** - push: - branches: master - paths: - - .github/workflows/rust.yml - - Cargo.toml - - Cargo.lock - - ci/** - - e2e/** - - crates/** - - tools/** - -env: - CARGO_INCREMENTAL: 0 - CARGO_PROFILE_DEV_DEBUG: 1 - CARGO_PROFILE_RELEASE_DEBUG: 1 - RUST_BACKTRACE: short - CARGO_NET_RETRY: 10 - RUSTUP_MAX_RETRIES: 10 - -# Cancel previous runs of this workflow when a new commit is added to the PR, branch or tag -concurrency: - group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} - cancel-in-progress: true - -jobs: - fmt: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - - uses: actions-rs/toolchain@v1 - with: - toolchain: stable - override: true - - uses: actions-rs/cargo@v1 - with: - command: fmt - args: --all -- --check - - clippy-all-features: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - - uses: actions-rs/toolchain@v1 - with: - toolchain: stable - components: clippy - override: true - - uses: Swatinem/rust-cache@v2 - - uses: actions-rs/clippy-check@v1 - with: - name: clippy-all-features - token: ${{ secrets.GITHUB_TOKEN }} - args: --all-features --all-targets -- -D warnings - - clippy-no-default-features: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - - uses: actions-rs/toolchain@v1 - with: - toolchain: stable - components: clippy - override: true - - uses: Swatinem/rust-cache@v2 - - uses: actions-rs/clippy-check@v1 - with: - name: clippy-no-default-features - token: ${{ secrets.GITHUB_TOKEN }} - args: --no-default-features --all-targets -- -D warnings - - test-stable: - runs-on: ubuntu-latest - timeout-minutes: 30 - steps: - - uses: actions/checkout@v3 - - uses: actions-rs/toolchain@v1 - with: - toolchain: stable - override: true - - uses: Swatinem/rust-cache@v2 - - uses: actions-rs/cargo@v1 - with: - command: test - args: --all-features --no-fail-fast --no-run - - uses: actions-rs/cargo@v1 - with: - command: test - args: --all-features --no-fail-fast --workspace --exclude ibc-integration-test -- --nocapture - - # test-coverage: - # runs-on: ubuntu-latest - # steps: - # - uses: actions/checkout@v3 - # with: - # fetch-depth: 0 - # - uses: actions-rs/toolchain@v1 - # with: - # toolchain: stable - # override: true - # - uses: actions-rs/cargo@v1 - # with: - # command: clean - # - name: Run cargo-tarpaulin - # uses: actions-rs/tarpaulin@v0.1 - # with: - # version: '0.16.0' - # args: '-- --test-threads 1' - # timeout: 600 - # - name: Upload coverage to Codecov - # uses: codecov/codecov-action@v1 - # with: - # token: ${{ secrets.CODECOV_TOKEN }} - # fail_ci_if_error: true - # - name: Archive code coverage results - # uses: actions/upload-artifact@v2 - # with: - # name: code-coverage-report - # path: cobertura.xml diff --git a/.github/workflows/scripts.yaml b/.github/workflows/scripts.yaml deleted file mode 100644 index 52dc6cfa8d..0000000000 --- a/.github/workflows/scripts.yaml +++ /dev/null @@ -1,24 +0,0 @@ -name: ShellCheck Scripts -on: - pull_request: - paths: - - scripts/** - push: - branches: master - paths: - - scripts/** - -# Cancel previous runs of this workflow when a new commit is added to the PR, branch or tag -concurrency: - group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} - cancel-in-progress: true - -jobs: - shellcheck: - runs-on: ubuntu-latest - steps: - - name: Run ShellCheck - uses: ludeeus/action-shellcheck@master - with: - scandir: './scripts' - additional_files: 'scripts/dev-env scripts/one-chain scripts/init-hermes' diff --git a/.github/workflows/specs.yml b/.github/workflows/specs.yml deleted file mode 100644 index 62e0ce1d9a..0000000000 --- a/.github/workflows/specs.yml +++ /dev/null @@ -1,35 +0,0 @@ -name: TLA+ Specs -on: - pull_request: - paths: - - docs/spec/tla/** - push: - branches: master - paths: - - docs/specs/tla/** - -# Cancel previous runs of this workflow when a new commit is added to the PR, branch or tag -concurrency: - group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} - cancel-in-progress: true - -jobs: - typecheck-specs: - runs-on: ubuntu-latest - container: apalache/mc:0.15.2 - env: - working-directory: docs/spec/tla - steps: - - uses: actions/checkout@v3 - - name: IBC Core - run: apalache-mc typecheck IBCCore.tla | grep -F 'Type checker [OK]' - working-directory: ${{env.working-directory}}/ibc-core - - name: Fungible Token Transfer - run: apalache-mc typecheck IBCTokenTransfer.tla | grep -F 'Type checker [OK]' - working-directory: ${{env.working-directory}}/fungible-token-transfer - - name: ICS 02 Client / Single Chain - run: apalache-mc typecheck ICS02SingleChainEnvironment.tla | grep -F 'Type checker [OK]' - working-directory: ${{env.working-directory}}/client - - name: ICS 02 Client / Two Chains - run: apalache-mc typecheck ICS02TwoChainsEnvironment.tla | grep -F 'Type checker [OK]' - working-directory: ${{env.working-directory}}/client