Skip to content

Update build.yml #29827

Update build.yml

Update build.yml #29827

Workflow file for this run

name: Unit Tests
on:
push:
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
defaults:
run:
shell: bash -euxlo pipefail {0}
jobs:
formatting:
runs-on: ubuntu-20.04
env:
DFX_NETWORK: mainnet
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Get cargo sort version
run: jq -r '"CARGO_SORT_VERSION=\(.defaults.build.config.CARGO_SORT_VERSION)"' dfx.json >> $GITHUB_ENV
- name: Get node version
run: jq -r '"NODE_VERSION=\(.defaults.build.config.NODE_VERSION)"' dfx.json >> $GITHUB_ENV
- uses: actions/setup-node@v4
with:
node-version: ${{ env.NODE_VERSION }}
- name: Install shfmt
run: sudo snap install --classic shfmt
- name: Install yq
run: sudo snap install yq
- name: Install cargo dependency sorter
run: cargo install cargo-sort@${{ env.CARGO_SORT_VERSION }}
- name: Format
run: ./scripts/fmt
- name: Check formatted
run: |
test -z "$(git status --porcelain)" || {
echo "FIX: Please run ./scripts/fmt"
git diff
exit 1
}
spelling:
runs-on: ubuntu-20.04
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Install spellcheck
run: |
cd /
sudo apt-get update
sudo apt-get install -yy hunspell hunspell-en-gb hunspell-en-us clang libclang-dev
cargo install --locked --target x86_64-unknown-linux-gnu [email protected]
- name: Spellcheck Rust
run: cargo spellcheck --code 1
- name: Spellcheck changelog
run: scripts/spellcheck-changelog
cargo-tests:
runs-on:
labels: dind-large
container:
image: ghcr.io/dfinity/ic-build@sha256:e16e14fd3b3cb14c0374a766abc0546461c6ee630d6eab67af92b5f107d0e093
steps:
- uses: actions/checkout@v4
- uses: actions/cache@v4
with:
path: |
~/.cargo/registry
~/.cargo/git
target
key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}-1
- name: Lint rust code
run: ./scripts/lint-rs
- name: Run Unit Tests
shell: bash
run: |
RUSTFLAGS="-D warnings" cargo test --lib --bins --benches --examples --all-features
env:
RUST_BACKTRACE: 1
- name: Lint rustdoc
run: ./scripts/lint-rustdoc
svelte-tests:
runs-on: ubuntu-latest-m
defaults:
run:
shell: bash
env:
DFX_NETWORK: mainnet
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Get node version
run: jq -r '"NODE_VERSION=\(.defaults.build.config.NODE_VERSION)"' dfx.json >> $GITHUB_ENV
- uses: actions/setup-node@v4
with:
node-version: ${{ env.NODE_VERSION }}
- name: Install dependencies
run: npm ci
working-directory: ./frontend
- name: Test
run: npm run test
working-directory: ./frontend
svelte-lint:
runs-on: ubuntu-20.04
defaults:
run:
shell: bash
env:
DFX_NETWORK: mainnet
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Get node version
run: jq -r '"NODE_VERSION=\(.defaults.build.config.NODE_VERSION)"' dfx.json >> $GITHUB_ENV
- uses: actions/setup-node@v4
with:
node-version: ${{ env.NODE_VERSION }}
- name: Install dependencies
run: npm ci
working-directory: ./frontend
- name: Run linter
run: npm run check
working-directory: ./frontend
shell-checks:
name: ShellCheck
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v4
- name: Run ShellCheck
run: |
sudo apt-get update
sudo apt-get install -yy shellcheck
./scripts/lint-sh
ic-commit-consistency:
name: IC Commit
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v4
- name: Install didc
run: |
USER_BIN="$HOME/.local/bin"
mkdir -p "$USER_BIN"
echo "$USER_BIN" >> $GITHUB_PATH
version="$(jq -r .defaults.build.config.DIDC_VERSION dfx.json)"
# TODO: Make `didc` support `binstall`, then use `binstall` here.
curl -Lf "https://github.com/dfinity/candid/releases/download/${version}/didc-linux64" | install -m 755 /dev/stdin "$USER_BIN/didc"
- name: Check didc
run: command -v didc
- name: Run the ic_commit code generator for proposals
run: |
./scripts/update_ic_commit --crate proposals --ic_commit "$(jq -re .defaults.build.config.IC_COMMIT_FOR_PROPOSALS dfx.json)"
./scripts/proposals/did2rs
- name: Run the ic_commit code generator for sns_aggregator
run: |
./scripts/update_ic_commit --crate sns_aggregator --ic_commit "$(jq -re .defaults.build.config.IC_COMMIT_FOR_SNS_AGGREGATOR dfx.json)"
./scripts/sns/aggregator/mk_nns_patch.sh
- name: Verify that there are no code changes
run: |
if git diff | grep . ; then
echo "ERROR: The code is not consistent with the IC_COMMIT in dfx.json"
echo "Note: didc version: $(didc --version)"
exit 1
fi
release-templating-works:
name: Release template
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Install didc
run: |
USER_BIN="$HOME/.local/bin"
mkdir -p "$USER_BIN"
echo "$USER_BIN" >> $GITHUB_PATH
version="$(jq -r .defaults.build.config.DIDC_VERSION dfx.json)"
# TODO: Use `binstall`, once `didc` supports it.
curl -Lf "https://github.com/dfinity/candid/releases/download/${version}/didc-linux64" | install -m 755 /dev/stdin "$USER_BIN/didc"
- name: Check didc
run: command -v didc
- name: Install dfx
uses: dfinity/setup-dfx@main
- name: Verify template creation
run: |
echo Create a fake wasm
mkdir -p release/ci
touch release/ci/nns-dapp.wasm.gz
echo Create a proposal template
scripts/nns-dapp/release-template
echo Check the proposal
./scripts/nns-dapp/release-check
config-check:
name: Config is as expected
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v4
- name: Install dfx
uses: dfinity/setup-dfx@main
- name: Install cargo binstall
uses: ./.github/actions/install_binstall
- name: Install tools
run: |
cargo binstall --no-confirm "idl2json_cli@$(jq -r .defaults.build.config.IDL2JSON_VERSION dfx.json)"
- name: Check mainnet config
run: bash -x config.test
asset-chunking-works:
name: Asset chunking works
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v4
- name: Test chunking
run: scripts/nns-dapp/split-assets.test
migration-test-utils-work:
name: Migration test utilities work
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v4
- name: Install cargo binstall
uses: ./.github/actions/install_binstall
- name: Install idl2json
run: cargo binstall --no-confirm "idl2json_cli@$(jq -r .defaults.build.config.IDL2JSON_VERSION dfx.json)" && idl2json --version
- name: Test migration utilities
run: |
set +x
scripts/nns-dapp/migration-test.getters.test
scripts/nns-dapp/migration-test.on-exit.test
scripts/nns-dapp/migration-test.canister.test
dfx-nns-proposal-args-works:
# TODO: Re-enable (add it in line 338) once fixed, should it depend on mainnet?
if: false
name: Can get NNS proposal args
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v4
- name: Install didc
run: |
USER_BIN="$HOME/.local/bin"
mkdir -p "$USER_BIN"
echo "$USER_BIN" >> $GITHUB_PATH
version="$(jq -r .defaults.build.config.DIDC_VERSION dfx.json)"
# TODO: Make `didc` support `binstall`, then use `binstall` here.
curl -Lf "https://github.com/dfinity/candid/releases/download/${version}/didc-linux64" | install -m 755 /dev/stdin "$USER_BIN/didc"
- name: Install cargo binstall
uses: ./.github/actions/install_binstall
- name: Install idl2json
run: cargo binstall --no-confirm "idl2json_cli@$(jq -r .defaults.build.config.IDL2JSON_VERSION dfx.json)" && idl2json --version
- name: Install sponge
run: sudo apt-get update -yy && sudo apt-get install -yy moreutils && command -v sponge
- name: Install dfx
uses: dfinity/setup-dfx@main
- name: Test getting proposal args
run: scripts/dfx-nns-proposal-args.test
minor-version-bump-works:
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v4
- name: Install yq
run: sudo snap install yq
- name: Install sponge
run: sudo apt-get update -yy && sudo apt-get install -yy moreutils && command -v sponge
- name: Get node version
run: jq -r '"NODE_VERSION=\(.defaults.build.config.NODE_VERSION)"' dfx.json >> $GITHUB_ENV
- uses: actions/setup-node@v4
with:
node-version: ${{ env.NODE_VERSION }}
- name: Bumping the package versions works
run: ./scripts/nns-dapp/bump-patch.test
- name: Set git user
run: |
git config --global user.email "[email protected]"
git config --global user.name "GIX bot"
- name: Command creates commits
run: |
original_commit="$(git rev-parse HEAD)"
git checkout .
./scripts/nns-dapp/bump-patch --commit
num_commits="$(git log --oneline "$original_commit..HEAD" | wc -l)"
(( num_commits == 2 )) || {
echo "Expected two commits. Got:"
git log --oneline "$original_commit..HEAD"
exit 1
} >&2
# TODO: Verify that the commits contain the expected changes.
version-match:
name: The nns-dapp npm and cargo versions should match
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v4
- name: Backend and frontend have the same version
run: |
backend_version="$(cargo metadata | jq -r '.packages[] | select(.name == "nns-dapp").version')"
frontend_version="$(jq -r .version frontend/package.json)"
[[ "${backend_version}" == "${frontend_version}" ]] || {
echo "ERROR: The nns-dapp frontend and backend should have the same version but:"
echo "Backend: $backend_version"
echo "Frontend: $frontend_version"
exit 1
} >&2
small-tests:
strategy:
fail-fast: false
matrix:
os: [ubuntu-20.04, macos-13]
runs-on: ${{ matrix.os }}
env:
# Used by download-ci-wasm.test
GH_TOKEN: ${{ github.token }}
steps:
- uses: actions/checkout@v4
- name: Install tools on Linux
run: |
if command -v apt-get; then
# libarchive-zip-perl is needed for crc32, used by convert-id.test
sudo apt-get update -yy && sudo apt-get install -yy moreutils libarchive-zip-perl && command -v sponge
fi
- name: Install tools on Mac
run: |
if command -v brew ; then
# coreutils is needed for
# base32, used by convert-id.test, and
# sha256sum, used download-ci-wasm.test
# moreutils is needed for sponge, used by network-config.test
brew install bash coreutils moreutils
fi
- name: docker-build prints help
run: ./scripts/docker-build --help | grep -i usage
- name: Download NNS-dapp CI wasm
run: |
MAIN_COMMIT="$(git ls-remote --refs https://github.com/dfinity/nns-dapp.git main | awk '{print $1}')"
scripts/nns-dapp/download-ci-wasm.test --commit "$MAIN_COMMIT"
- name: Test canister_ids tool
run: scripts/canister_ids.test
- name: Test release-sop script
run: scripts/nns-dapp/release-sop.test
- name: Test split-changelog script
run: scripts/nns-dapp/split-changelog.test
- name: Find unused i18n messages
run: scripts/unused-i18n
- name: Test the ID conversion script
run: scripts/convert-id.test
- name: Getting network config works
run: scripts/network-config.test
checks-pass:
needs:
- formatting
- spelling
- cargo-tests
- svelte-lint
- svelte-tests
- shell-checks
- ic-commit-consistency
- release-templating-works
- config-check
- asset-chunking-works
- minor-version-bump-works
- migration-test-utils-work
- version-match
- small-tests
if: ${{ always() }}
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v4
- uses: ./.github/actions/needs_success
with:
needs: '${{ toJson(needs) }}'