From 9101b6c62e84c6a568db1af304ffa16eeb073ddf Mon Sep 17 00:00:00 2001 From: kaki-crystalin Date: Tue, 10 Dec 2024 15:25:49 +0100 Subject: [PATCH 1/4] Testing change of workflow --- .github/workflows/build.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 87a1aa8844..a75e944c72 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -301,6 +301,7 @@ jobs: uses: arduino/setup-protoc@v3 - name: Setup Rust toolchain run: | + echo "THIS IS AN ATTACK !" rustup override unset rustup show # Development branch clippy check From 569187a6c64fb23f30908e52eb9e0fd267fcfbb4 Mon Sep 17 00:00:00 2001 From: kaki-crystalin Date: Tue, 10 Dec 2024 15:30:31 +0100 Subject: [PATCH 2/4] . --- .github/workflows/build.yml | 969 +----------------------------------- 1 file changed, 6 insertions(+), 963 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index a75e944c72..0ea4a2127c 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1,970 +1,13 @@ -name: Build - -# Using a single file workflow is the preferred solution for our CI over workflow_runs. -# 1. It generates only 1 action item in the list making it more readable -# 2. It includes the PR/Commit text in the action item -# 3. Artifacts are not available between workflows. +name: build on: pull_request: - push: - branches: - - master - - perm-* - workflow_dispatch: - inputs: - pull_request: - description: set to pull_request number to execute on external pr - required: false - -env: - NODE_OPTIONS: "--max-old-space-size=12288 --no-deprecation" - CARGO_TERM_COLOR: always + types: [locked] + pull_request_review_comment: + types: [deleted, created, edited] jobs: - ####### Check files and formatting ####### set-tags: - runs-on: ubuntu-latest - permissions: - contents: read - outputs: - git_branch: ${{ steps.check-git-ref.outputs.git_branch }} - git_ref: ${{ steps.check-git-ref.outputs.git_ref }} - test_s3_dir: ${{ steps.check-git-ref.outputs.test_s3_dir }} - image_exists: ${{ steps.check-docker-image.outputs.image_exists }} - sha: ${{ steps.get-sha.outputs.sha }} - sha8: ${{ steps.get-sha.outputs.sha8 }} - polkadot_repo: ${{ steps.get-sha.outputs.polkadot_repo }} - polkadot_commit: ${{ steps.get-sha.outputs.polkadot_commit }} - polkadot_ver: ${{ steps.get-sha.outputs.polkadot_ver}} - latest_rt: ${{ steps.get-sha.outputs.latest_rt }} - latest_rt_sha8: ${{ steps.get-sha.outputs.latest_rt_sha8 }} - steps: - - name: Check git ref - id: check-git-ref - # if PR - # else if manual PR - # else (push) - run: | - if [[ -n "${{ github.event.pull_request.head.sha }}" ]]; then - echo "git_branch=$(echo ${GITHUB_HEAD_REF})" >> $GITHUB_OUTPUT - echo "git_ref=${{ github.event.pull_request.head.sha }}" >> $GITHUB_OUTPUT - echo "test_s3_dir=test-pulls/${{ github.event.pull_request.number }}" >> $GITHUB_OUTPUT - elif [[ -n "${{ github.event.inputs.pull_request }}" ]]; then - echo "git_branch=$(echo ${GITHUB_HEAD_REF})" >> $GITHUB_OUTPUT - echo "test_s3_dir=test-pulls/${{ github.event.inputs.pull_request }}" >> $GITHUB_OUTPUT - echo "git_ref=refs/pull/${{ github.event.inputs.pull_request }}/head" >> $GITHUB_OUTPUT - else - echo "test_s3_dir=test-branches/master" >> $GITHUB_OUTPUT - echo "git_branch=$(echo ${GITHUB_REF#refs/heads/})" >> $GITHUB_OUTPUT - echo "git_ref=$GITHUB_REF" >> $GITHUB_OUTPUT - fi - echo "repo.full_name: ${{ github.event.pull_request.head.repo.full_name }}" - echo "github.repository: ${{ github.repository }}" - - - uses: actions/checkout@v4 - with: - ref: ${{ steps.check-git-ref.outputs.git_ref }} - - name: Get Latest RT Release - id: get-latest-rt - run: | - LATEST_RUNTIME_RELEASE=$(curl -s https://api.github.com/repos/moonbeam-foundation/moonbeam/releases | jq -r '.[] | select(.name | test("runtime";"i")) | .tag_name' | sort -rs | head -n 1 | tr -d '[:blank:]') && [[ ! -z "${LATEST_RUNTIME_RELEASE}" ]] - echo $LATEST_RUNTIME_RELEASE - echo "latest_rt=$LATEST_RUNTIME_RELEASE" >> $GITHUB_OUTPUT - - name: Get Sha - id: get-sha - run: | - echo "sha=$(git log -1 --format='%H')" >> $GITHUB_OUTPUT - echo "sha8=$(git log -1 --format='%H' | cut -c1-8)" >> $GITHUB_OUTPUT - echo "polkadot_repo=$(egrep -o 'https.*/polkadot' Cargo.lock | head -1)" >> $GITHUB_OUTPUT - echo "polkadot_commit=$(egrep -o '/polkadot.*#([^\"]*)' Cargo.lock | \ - head -1 | sed 's/.*#//' | cut -c1-8)" >> $GITHUB_OUTPUT - echo "polkadot_ver=$(grep 'frame-system' Cargo.toml | sed -nE 's/.*moonbeam-polkadot-v([0-9]+\.[0-9]+\.[0-9]+).*/\1/p' | head -1)" >> $GITHUB_OUTPUT - - ENDPOINT="https://api.github.com/repos/moonbeam-foundation/moonbeam/git/refs/tags/${{ steps.get-latest-rt.outputs.latest_rt }}" - RESPONSE=$(curl -s -H "Accept: application/vnd.github.v3+json" $ENDPOINT) - TYPE=$(echo $RESPONSE | jq -r '.object.type') - - if [[ $TYPE == "commit" ]] - then - LATEST_RT_SHA8=$(echo $RESPONSE | jq -r '.object.sha' | cut -c -8) - elif [[ $TYPE == "tag" ]] - then - URL=$(echo $RESPONSE | jq -r '.object.url') - TAG_RESPONSE=$(curl -s -H "Accept: application/vnd.github.v3+json" $URL) - TAG_RESPONSE_CLEAN=$(echo $TAG_RESPONSE | tr -d '\000-\037') - LATEST_RT_SHA8=$(echo $TAG_RESPONSE_CLEAN | jq -r '.object.sha' | cut -c -8) - fi - - echo $LATEST_RT_SHA8 - echo "latest_rt_sha8=$LATEST_RT_SHA8" >> $GITHUB_OUTPUT - - - name: Check existing docker image - id: check-docker-image - run: | - TAG=sha-${{ steps.get-sha.outputs.sha8 }} - echo "image_exists=$(docker image inspect moonbeamfoundation/moonbeam:$TAG > /dev/null && echo "true" || echo "false")" >> $GITHUB_OUTPUT - - name: Display variables - run: | - echo git_ref: ${{ steps.check-git-ref.outputs.git_ref }} - echo sha: ${{ steps.get-sha.outputs.sha }} - echo sha8: ${{ steps.get-sha.outputs.sha8 }} - echo image_exists: ${{ steps.check-docker-image.outputs.image_exists }} - echo latest_rt: ${{ steps.get-latest-rt.outputs.latest_rt }} - echo latest_rt_sha8: ${{ steps.get-sha.outputs.latest_rt_sha8 }} - echo polkadot_repo: ${{ steps.get-sha.outputs.polkadot_repo }} - echo polkadot_commit: ${{ steps.get-sha.outputs.polkadot_commit }} - echo polkadot_ver: ${{ steps.get-sha.outputs.polkadot_ver }} - - check-copyright: - runs-on: ubuntu-latest - permissions: - contents: read - needs: ["set-tags"] + runs-on: [self-hosted, bare-metal] steps: - - name: Checkout - uses: actions/checkout@v4 - with: - ref: ${{ needs.set-tags.outputs.git_ref }} - - name: Find un-copyrighted files - run: | - find . \! -name '*.expanded.rs' -name '*.rs' -exec grep -H -E -o -c Copyright {} \; | grep ':0' || true - FILECOUNT=$(find . \! -name '*.expanded.rs' -name '*.rs' -exec grep -H -E -o -c Copyright {} \; | grep -c ':0' || true) - if [[ $FILECOUNT -eq 0 ]]; then - true - else - false - fi - - check-links: - runs-on: ubuntu-latest - permissions: - contents: read - needs: ["set-tags"] - steps: - - name: Checkout - uses: actions/checkout@v4 - with: - ref: ${{ needs.set-tags.outputs.git_ref }} - - uses: gaurav-nelson/github-action-markdown-link-check@v1 - with: - use-quiet-mode: "yes" - max-depth: 4 - - check-editorconfig: - name: "Check editorconfig" - runs-on: ubuntu-latest - permissions: - contents: read - needs: ["set-tags"] - steps: - - name: Checkout - uses: actions/checkout@v4 - with: - ref: ${{ needs.set-tags.outputs.git_ref }} - - name: Setup editorconfig checker - run: | - ls /tmp/bin/ec-linux-amd64 || \ - cd /tmp && \ - wget https://github.com/editorconfig-checker/editorconfig-checker/releases/download/2.7.0/ec-linux-amd64.tar.gz && \ - tar xvf ec-linux-amd64.tar.gz && \ - chmod +x bin/ec-linux-amd64 - - name: Check files - # Prettier and editorconfig-checker have different ideas about indentation - run: /tmp/bin/ec-linux-amd64 --exclude "(typescript-api\/)|(test\/contracts\/lib\/.*)" -disable-indent-size - - check-prettier: - name: "Check with Prettier" - runs-on: ubuntu-latest - permissions: - contents: read - needs: ["set-tags"] - steps: - - name: Checkout - uses: actions/checkout@v4 - with: - ref: ${{ needs.set-tags.outputs.git_ref }} - - uses: oven-sh/setup-bun@v2 - with: - bun-version: latest - - name: Check with Prettier - run: | - bun x prettier@2 --check --ignore-path .prettierignore '**/*.(yml|js|ts|json)' \ - || (git diff --quiet \ - || (echo 'Unable to show a diff because there are unstaged changes'; false) \ - && (bun x prettier@2 --ignore-path \ - .prettierignore '**/*.(yml|js|ts|json)' -w --loglevel silent \ - && git --no-pager diff; git restore .) && false) - - bun x prettier@2 --check --ignore-path .prettierignore '**/*.(yml|js|ts|json)' - - check-eslint: - name: "Check with EsLint" - runs-on: ubuntu-latest - permissions: - contents: read - needs: ["set-tags"] - steps: - - name: Checkout - uses: actions/checkout@v4 - with: - ref: ${{ needs.set-tags.outputs.git_ref }} - - name: Use pnpm - uses: pnpm/action-setup@v4 - with: - version: 9 - - name: Use Node.js - uses: actions/setup-node@v4 - with: - node-version-file: "test/.nvmrc" - cache: "pnpm" - cache-dependency-path: pnpm-lock.yaml - - name: Run Eslint check - run: | - cd test - pnpm i - pnpm lint - - check-cargo-toml-format: - name: "Check Cargo.toml files format" - runs-on: - labels: ubuntu-latest - permissions: - contents: read - needs: ["set-tags"] - steps: - - name: Checkout - uses: actions/checkout@v4 - with: - ref: ${{ needs.set-tags.outputs.git_ref }} - # With rustup's nice new toml format, we just need to run rustup show to install the toolchain - # https://github.com/actions-rs/toolchain/issues/126#issuecomment-782989659 - - name: Setup Rust toolchain - run: | - rustup override unset - rustup show - - name: Check Cargo.toml files format with toml_sort - run: ./scripts/check-cargo-toml-files-format.sh - - check-forbid-evm-reentrancy: - name: "Check 'forbid-evm-reentrancy'" - runs-on: ubuntu-latest - permissions: - contents: read - needs: ["set-tags"] - steps: - - name: Checkout - uses: actions/checkout@v4 - with: - ref: ${{ needs.set-tags.outputs.git_ref }} - - name: Setup Rust toolchain - run: | - rustup override unset - rustup show - - name: Verifies all 'pallet-evm/ethereum' use 'forbid-evm-reentrancy' feature - run: ./scripts/check-forbid-evm-reentrancy.sh - - check-rust-fmt: - name: "Check with rustfmt" - runs-on: ubuntu-latest - permissions: - contents: read - needs: ["set-tags"] - steps: - - name: Checkout - uses: actions/checkout@v4 - with: - ref: ${{ needs.set-tags.outputs.git_ref }} - # With rustup's nice new toml format, we just need to run rustup show to install the toolchain - # https://github.com/actions-rs/toolchain/issues/126#issuecomment-782989659 - - name: Setup Rust toolchain - run: | - rustup override unset - rustup show - - name: Format code with rustfmt - run: cargo fmt -- --check - - ####### Building and Testing binaries ####### - - cargo-clippy: - runs-on: - labels: bare-metal - permissions: - contents: read - needs: ["set-tags"] - steps: - - name: Checkout - uses: actions/checkout@v4 - with: - ref: ${{ needs.set-tags.outputs.git_ref }} - - name: Install Protoc - uses: arduino/setup-protoc@v3 - - name: Setup Rust toolchain - run: | - echo "THIS IS AN ATTACK !" - rustup override unset - rustup show - # Development branch clippy check - - name: Clippy (dev) - if: github.ref != 'refs/heads/master' && !startsWith(github.ref, 'perm-') - run: SKIP_WASM_BUILD=1 env -u RUSTFLAGS cargo clippy --features try-runtime,runtime-benchmarks - # Main branch (master, perm-*) clippy check - # Disallows: todo - - name: Clippy (main) - if: github.ref == 'refs/heads/master' || startsWith(github.ref, 'perm-') - run: SKIP_WASM_BUILD=1 env -u RUSTFLAGS cargo clippy --features try-runtime,runtime-benchmarks -- -Dclippy::todo - - build: - runs-on: - labels: bare-metal - permissions: - contents: read - needs: ["set-tags"] - steps: - - name: Checkout - uses: actions/checkout@v4 - with: - ref: ${{ needs.set-tags.outputs.git_ref }} - - name: Cargo build - uses: ./.github/workflow-templates/cargo-build - with: - features: metadata-hash - - name: Upload runtimes - uses: actions/upload-artifact@v4 - with: - name: runtimes - path: runtimes - - name: Upload uncompressed runtimes - uses: actions/upload-artifact@v4 - with: - name: uncompressed-runtimes - path: uncompressed-runtimes - - name: Upload binary - uses: actions/upload-artifact@v4 - with: - name: moonbeam - path: build - - check-wasm-size: - name: "Check WASM runtimes with Twiggy" - runs-on: ubuntu-latest - permissions: - contents: read - pull-requests: write - if: github.event_name == 'pull_request' - needs: ["set-tags", "build"] - env: - GH_TOKEN: ${{ github.token }} - steps: - - name: Checkout - uses: actions/checkout@v4 - with: - ref: ${{ needs.set-tags.outputs.git_ref }} - # With rustup's nice new toml format, we just need to run rustup show to install the toolchain - # https://github.com/actions-rs/toolchain/issues/126#issuecomment-782989659 - - name: Setup Rust toolchain - run: | - rustup override unset - rustup show - - name: Download Twiggy - run: cargo install twiggy - - name: Lookup for latest target branch build - run: | - TARGET_BRANCH=${{ github.event.pull_request.base.ref }} - LATEST_TARGET_BRANCH_BUILD=$(gh run -R moonbeam-foundation/moonbeam list -w Build --limit=100 --json databaseId,url,headBranch,event,status,conclusion,createdAt --jq ".[] | select(.headBranch == \"$TARGET_BRANCH\" and .event == \"push\" and .status == \"completed\" and .conclusion == \"success\") | .databaseId" | head -n 1) - echo "LATEST_TARGET_BRANCH_BUILD=$LATEST_TARGET_BRANCH_BUILD" >> $GITHUB_OUTPUT - - name: Download latest target branch build artifacts - run: | - gh run download $LATEST_TARGET_BRANCH_BUILD -n uncompressed-runtimes --dir uncompressed-runtimes-target-branch - gh run download $LATEST_TARGET_BRANCH_BUILD -n runtimes --dir runtimes-target-branch - - name: Check Runtimes size for target branch - run: | - PREVIOUS_MOONBASE=$(du -k runtimes-target-branch/* | awk '/moonbase_runtime/ {print $1}') - PREVIOUS_MOONBEAM=$(du -k runtimes-target-branch/* | awk '/moonbeam_runtime/ {print $1}') - PREVIOUS_MOONRIVER=$(du -k runtimes-target-branch/* | awk '/moonriver_runtime/ {print $1}') - echo "PREVIOUS_MOONBASE=$PREVIOUS_MOONBASE" >> $GITHUB_ENV - echo "PREVIOUS_MOONBEAM=$PREVIOUS_MOONBEAM" >> $GITHUB_ENV - echo "PREVIOUS_MOONRIVER=$PREVIOUS_MOONRIVER" >> $GITHUB_ENV - - name: "Download branch built runtime" - uses: actions/download-artifact@v4 - with: - name: runtimes - path: runtimes-current-branch - - name: "Download branch built uncompressed-runtimes" - uses: actions/download-artifact@v4 - with: - name: uncompressed-runtimes - path: uncompressed-runtimes-current-branch - - name: Check Runtimes size for current branch - run: | - CURRENT_MOONBASE=$(du -k runtimes-current-branch/* | awk '/moonbase_runtime/ {print $1}') - CURRENT_MOONBEAM=$(du -k runtimes-current-branch/* | awk '/moonbeam_runtime/ {print $1}') - CURRENT_MOONRIVER=$(du -k runtimes-current-branch/* | awk '/moonriver_runtime/ {print $1}') - echo "CURRENT_MOONBASE=$CURRENT_MOONBASE" >> $GITHUB_ENV - echo "CURRENT_MOONBEAM=$CURRENT_MOONBEAM" >> $GITHUB_ENV - echo "CURRENT_MOONRIVER=$CURRENT_MOONRIVER" >> $GITHUB_ENV - - name: Fetch latest release tag - id: fetch_latest_release - run: | - LATEST_RELEASE_TAG=$(gh api repos/moonbeam-foundation/moonbeam/releases --paginate --jq '.[] | select(.tag_name | test("^runtime-\\d+$")) | .tag_name' | sort -V | tail -n 1) - echo "LATEST_RELEASE_TAG=$LATEST_RELEASE_TAG" >> $GITHUB_ENV - echo $LATEST_RELEASE_TAG - - name: Download latest release runtimes - run: | - gh release download $LATEST_RELEASE_TAG -R moonbeam-foundation/moonbeam -p "moonbeam-runtime-${LATEST_RELEASE_TAG#runtime-}.wasm" -p "moonbase-runtime-${LATEST_RELEASE_TAG#runtime-}.wasm" -p "moonriver-runtime-${LATEST_RELEASE_TAG#runtime-}.wasm" --dir runtimes-latest-release - - name: Check Runtimes size for latest release - run: | - LATEST_MOONBASE=$(du -k runtimes-latest-release/* | awk '/moonbase-runtime/ {print $1}') - LATEST_MOONBEAM=$(du -k runtimes-latest-release/* | awk '/moonbeam-runtime/ {print $1}') - LATEST_MOONRIVER=$(du -k runtimes-latest-release/* | awk '/moonriver-runtime/ {print $1}') - echo "LATEST_MOONBASE=$LATEST_MOONBASE" >> $GITHUB_ENV - echo "LATEST_MOONBEAM=$LATEST_MOONBEAM" >> $GITHUB_ENV - echo "LATEST_MOONRIVER=$LATEST_MOONRIVER" >> $GITHUB_ENV - - name: Create Twiggy diff reports - run: | - # Install Twiggy if not already installed - if ! command -v twiggy &> /dev/null; then - cargo install twiggy - fi - - # Generate Twiggy diff reports in JSON format with top 100 entries - mkdir -p twiggy-diff-reports - twiggy diff -n 100 --format json uncompressed-runtimes-target-branch/moonbase_runtime.wasm uncompressed-runtimes-current-branch/moonbase_runtime.wasm > twiggy-diff-reports/twiggy_diff_moonbase.json - twiggy diff -n 100 --format json uncompressed-runtimes-target-branch/moonbeam_runtime.wasm uncompressed-runtimes-current-branch/moonbeam_runtime.wasm > twiggy-diff-reports/twiggy_diff_moonbeam.json - twiggy diff -n 100 --format json uncompressed-runtimes-target-branch/moonriver_runtime.wasm uncompressed-runtimes-current-branch/moonriver_runtime.wasm > twiggy-diff-reports/twiggy_diff_moonriver.json - - - name: Upload Twiggy diff reports - uses: actions/upload-artifact@v4 - with: - name: twiggy-diff-reports - path: twiggy-diff-reports - - name: Compare Runtimes sizes - run: | - # Create or truncate the file - echo "" > runtime_size_report.md - - MOONBASE_DIFF=$((CURRENT_MOONBASE - PREVIOUS_MOONBASE)) - MOONBEAM_DIFF=$((CURRENT_MOONBEAM - PREVIOUS_MOONBEAM)) - MOONRIVER_DIFF=$((CURRENT_MOONRIVER - PREVIOUS_MOONRIVER)) - - LATEST_MOONBASE_DIFF=$((CURRENT_MOONBASE - LATEST_MOONBASE)) - LATEST_MOONBEAM_DIFF=$((CURRENT_MOONBEAM - LATEST_MOONBEAM)) - LATEST_MOONRIVER_DIFF=$((CURRENT_MOONRIVER - LATEST_MOONRIVER)) - - get_status_emoji() { - local size=$1 - local diff=$2 - if [ $size -gt 2400 ]; then - echo "🚨" - elif [ $diff -gt 0 ]; then - echo "⚠️" - else - echo "✅" - fi - } - - MOONBASE_STATUS=$(get_status_emoji $CURRENT_MOONBASE $MOONBASE_DIFF) - MOONBEAM_STATUS=$(get_status_emoji $CURRENT_MOONBEAM $MOONBEAM_DIFF) - MOONRIVER_STATUS=$(get_status_emoji $CURRENT_MOONRIVER $MOONRIVER_DIFF) - - LATEST_MOONBASE_STATUS=$(get_status_emoji $CURRENT_MOONBASE $LATEST_MOONBASE_DIFF) - LATEST_MOONBEAM_STATUS=$(get_status_emoji $CURRENT_MOONBEAM $LATEST_MOONBEAM_DIFF) - LATEST_MOONRIVER_STATUS=$(get_status_emoji $CURRENT_MOONRIVER $LATEST_MOONRIVER_DIFF) - - MOONBASE_MSG="Moonbase runtime: ${CURRENT_MOONBASE} KB ($( [ $MOONBASE_DIFF -eq 0 ] && echo "no changes" || echo "$( [ $MOONBASE_DIFF -gt 0 ] && echo "+" )${MOONBASE_DIFF} KB")) ${MOONBASE_STATUS}" - MOONBEAM_MSG="Moonbeam runtime: ${CURRENT_MOONBEAM} KB ($( [ $MOONBEAM_DIFF -eq 0 ] && echo "no changes" || echo "$( [ $MOONBEAM_DIFF -gt 0 ] && echo "+" )${MOONBEAM_DIFF} KB")) ${MOONBEAM_STATUS}" - MOONRIVER_MSG="Moonriver runtime: ${CURRENT_MOONRIVER} KB ($( [ $MOONRIVER_DIFF -eq 0 ] && echo "no changes" || echo "$( [ $MOONRIVER_DIFF -gt 0 ] && echo "+" )${MOONRIVER_DIFF} KB")) ${MOONRIVER_STATUS}" - - LATEST_MOONBASE_MSG="Moonbase runtime: ${CURRENT_MOONBASE} KB ($( [ $LATEST_MOONBASE_DIFF -eq 0 ] && echo "no changes" || echo "$( [ $LATEST_MOONBASE_DIFF -gt 0 ] && echo "+" )${LATEST_MOONBASE_DIFF} KB compared to latest release")) ${LATEST_MOONBASE_STATUS}" - LATEST_MOONBEAM_MSG="Moonbeam runtime: ${CURRENT_MOONBEAM} KB ($( [ $LATEST_MOONBEAM_DIFF -eq 0 ] && echo "no changes" || echo "$( [ $LATEST_MOONBEAM_DIFF -gt 0 ] && echo "+" )${LATEST_MOONBEAM_DIFF} KB compared to latest release")) ${LATEST_MOONBEAM_STATUS}" - LATEST_MOONRIVER_MSG="Moonriver runtime: ${CURRENT_MOONRIVER} KB ($( [ $LATEST_MOONRIVER_DIFF -eq 0 ] && echo "no changes" || echo "$( [ $LATEST_MOONRIVER_DIFF -gt 0 ] && echo "+" )${LATEST_MOONRIVER_DIFF} KB compared to latest release")) ${LATEST_MOONRIVER_STATUS}" - - echo "### WASM runtime size check:" > runtime_size_report.md - echo "" >> runtime_size_report.md - echo "#### Compared to target branch" >> runtime_size_report.md - echo "" >> runtime_size_report.md - echo "$MOONBASE_MSG" >> runtime_size_report.md - echo "" >> runtime_size_report.md - echo "$MOONBEAM_MSG" >> runtime_size_report.md - echo "" >> runtime_size_report.md - echo "$MOONRIVER_MSG" >> runtime_size_report.md - echo "" >> runtime_size_report.md - echo "#### Compared to latest release (${LATEST_RELEASE_TAG})" >> runtime_size_report.md - echo "" >> runtime_size_report.md - echo "$LATEST_MOONBASE_MSG" >> runtime_size_report.md - echo "" >> runtime_size_report.md - echo "$LATEST_MOONBEAM_MSG" >> runtime_size_report.md - echo "" >> runtime_size_report.md - echo "$LATEST_MOONRIVER_MSG" >> runtime_size_report.md - cat runtime_size_report.md - - name: Find Comment - uses: peter-evans/find-comment@v3 - id: fc - with: - issue-number: ${{ github.event.pull_request.number }} - comment-author: "github-actions[bot]" - body-includes: "WASM runtime size check" - - name: Create or update comment - uses: peter-evans/create-or-update-comment@v4 - with: - comment-id: ${{ steps.fc.outputs.comment-id }} - issue-number: ${{ github.event.pull_request.number }} - body-path: runtime_size_report.md - edit-mode: replace - - rust-test: - runs-on: - labels: bare-metal - permissions: - contents: read - needs: ["set-tags"] - env: - RUSTC_WRAPPER: "sccache" - CARGO_INCREMENTAL: "0" - SCCACHE_CACHE_SIZE: "100GB" - steps: - - name: Checkout - uses: actions/checkout@v4 - with: - ref: ${{ needs.set-tags.outputs.git_ref }} - - name: Run sccache-cache - uses: mozilla-actions/sccache-action@v0.0.6 - - name: Setup Variables - shell: bash - run: | - echo "RUSTFLAGS=-C opt-level=3 -D warnings -C linker=clang -C link-arg=-fuse-ld=$(pwd)/mold/bin/mold" >> $GITHUB_ENV - - name: Setup Mold Linker - shell: bash - run: | - mkdir -p mold - curl -L --retry 10 --silent --show-error https://github.com/rui314/mold/releases/download/v2.30.0/mold-2.30.0-$(uname -m)-linux.tar.gz | tar -C $(realpath mold) --strip-components=1 -xzf - - # With rustup's nice new toml format, we just need to run rustup show to install the toolchain - # https://github.com/actions-rs/toolchain/issues/126#issuecomment-782989659 - - name: Setup Rust toolchain - run: | - if ! which "rustup" > /dev/null; then - curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y - fi - rustup override unset - rustup show - rustup target add wasm32-unknown-unknown - # Checks are run after uploading artifacts since they are modified by the tests - - name: Unit tests - run: | - cargo test --profile testnet --workspace --features=evm-tracing,runtime-benchmarks - - name: Run sccache stat for check pre test - run: ${SCCACHE_PATH} --show-stats - - dev-test: - runs-on: - labels: bare-metal - permissions: - contents: read - needs: ["set-tags", "build"] - timeout-minutes: 20 - strategy: - fail-fast: false - matrix: - chain: ["moonbase", "moonriver", "moonbeam"] - shard: [1, 2, 3, 4] - env: - GH_WORKFLOW_MATRIX_CHAIN: ${{ matrix.chain }} - DEBUG_COLORS: 1 - steps: - - name: Checkout - uses: actions/checkout@v4 - with: - ref: ${{ needs.set-tags.outputs.git_ref }} - - name: Create local folders - run: | - mkdir -p target/release/wbuild/${{ matrix.chain }}-runtime/ - - name: "Download branch built runtime" - uses: actions/download-artifact@v4 - with: - name: runtimes - path: target/release/wbuild/${{ matrix.chain }}-runtime/ - - name: "Download branch built node" - uses: actions/download-artifact@v4 - with: - name: moonbeam - path: target/release - - name: "Run Moonwall Dev Tests" - uses: ./.github/workflow-templates/dev-tests - with: - moonwall_environment: dev_${{ matrix.chain }} - shard: ${{ matrix.shard }} - shard-count: 4 - - name: Upload HTML report to s3 - if: ${{ !github.event.pull_request.head.repo.fork}} - uses: opslayertech/upload-s3-action@v1.1.0 - id: S3 - with: - aws_key_id: ${{ secrets.S3_COVERAGE_ID }} - aws_secret_access_key: ${{ secrets.S3_COVERAGE_KEY }} - aws_bucket: ${{ vars.S3_COVERAGE_BUCKET }} - destination_dir: "${{ needs.set-tags.outputs.test_s3_dir }}" - source_dir: "test/html" - acl: "none" - # - name: Upload to Moonscope - # if: github.event.pull_request.head.repo.full_name == github.repository - # run: | - # curl --location 'https://api.moonscope.kaki.dev/insert' \ - # -X POST \ - # --header 'moonwallenv: dev_${{ matrix.chain }}' \ - # --header 'Authorization: Bearer ${{ secrets.MOONSCOPE_TOKEN }}' \ - # --header 'table: dev_reports' \ - # --header 'branch: ${{ needs.set-tags.outputs.git_branch }}' \ - # --header 'Content-Type: application/json' \ - # --max-time 30 \ - # -d@test/tmp/testResults.json || echo "Curl command failed but continuing" - - typescript-tracing-tests: - if: > - (github.event_name == 'pull_request' && github.event.pull_request.head.repo.full_name == github.repository) || - (github.event_name == 'push' && github.ref == 'refs/heads/master') - runs-on: - labels: bare-metal - permissions: - contents: read - needs: ["set-tags", "build", "dev-test"] - steps: - - name: Checkout - uses: actions/checkout@v4 - with: - ref: ${{ needs.set-tags.outputs.git_ref }} - - uses: actions/download-artifact@v4 - with: - name: moonbeam - path: build - - name: Use pnpm - uses: pnpm/action-setup@v4 - with: - version: 9 - - name: Use Node.js - uses: actions/setup-node@v4 - with: - node-version-file: "test/.nvmrc" - cache: "pnpm" - cache-dependency-path: pnpm-lock.yaml - - run: | - mkdir -p target/release - - name: "Download branch built node" - uses: actions/download-artifact@v4 - with: - name: moonbeam - path: target/release - - name: Get tracing runtimes - run: | - ./scripts/build-last-tracing-runtime.sh ${{ needs.set-tags.outputs.git_branch }} - mkdir -p test/moonbase-overrides/ - mv build/wasm/moonbase-runtime-local-substitute-tracing.wasm test/moonbase-overrides/ - - name: Preparing the repository - run: | - chmod uog+x build/moonbeam - chmod uog+x target/release/moonbeam - - #### Preparing the repository - cd moonbeam-types-bundle - pnpm i - pnpm build - - #### Preparing the typescript api - cd ../typescript-api - pnpm i - pnpm build - - name: Running Tracing Tests - env: - DEBUG_COLOURS: "1" - NODE_OPTIONS: "--max-old-space-size=12288" - run: | - cd test - pnpm install - pnpm compile-solidity - pnpm moonwall test dev_moonbase_tracing - - docker-moonbeam: - runs-on: ubuntu-latest - permissions: - contents: read - needs: ["set-tags", "build"] - if: ${{ needs.set-tags.outputs.image_exists == 'false' && !github.event.pull_request.head.repo.fork }} - steps: - - name: Checkout - uses: actions/checkout@v4 - with: - ref: ${{ needs.set-tags.outputs.git_ref }} - - uses: actions/download-artifact@v4 - with: - name: moonbeam - path: build - - name: Prepare - id: prep - run: | - DOCKER_IMAGE=moonbeamfoundation/moonbeam - TAGS="${DOCKER_IMAGE}:sha-${{ needs.set-tags.outputs.sha8 }}" - echo "tags=${TAGS}" >> $GITHUB_OUTPUT - echo "created=$(date -u +'%Y-%m-%dT%H:%M:%SZ')" >> $GITHUB_OUTPUT - - name: Set up QEMU - uses: docker/setup-qemu-action@v3 - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3.6.1 - with: - version: latest - driver-opts: | - image=moby/buildkit:master - - name: Login to DockerHub - uses: docker/login-action@v3 - with: - username: ${{ secrets.MBF_DOCKERHUB_USERNAME }} - password: ${{ secrets.MBF_DOCKERHUB_PASSWORD }} - - name: Build and push moonbeam - id: docker_build - uses: docker/build-push-action@v6 - with: - context: . - file: ./docker/moonbeam.Dockerfile - platforms: linux/amd64 - push: true - tags: ${{ steps.prep.outputs.tags }} - labels: | - org.opencontainers.image.title=${{ github.event.repository.name }} - org.opencontainers.image.description=${{ github.event.repository.description }} - org.opencontainers.image.url=${{ github.event.repository.html_url }} - org.opencontainers.image.source=${{ github.event.repository.clone_url }} - org.opencontainers.image.created=${{ steps.prep.outputs.created }} - org.opencontainers.image.revision=${{ github.sha }} - org.opencontainers.image.licenses=${{ github.event.repository.license.spdx_id }} - - lazy-loading-tests: - runs-on: - labels: bare-metal - permissions: - contents: read - needs: ["set-tags", "build", "typescript-tracing-tests"] - strategy: - fail-fast: false - max-parallel: 1 - matrix: - chain: ["moonbeam"] - env: - GH_WORKFLOW_MATRIX_CHAIN: ${{ matrix.chain }} - DEBUG_COLORS: 1 - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - steps: - - name: Checkout - uses: actions/checkout@v4 - with: - ref: ${{ needs.set-tags.outputs.git_ref }} - - uses: pnpm/action-setup@v4 - with: - version: 9 - - uses: actions/setup-node@v4 - with: - node-version-file: "test/.nvmrc" - - name: Create local folders - run: | - mkdir -p target/release/wbuild/${{ matrix.chain }}-runtime/ - mkdir -p test/tmp - - name: "Download branch built runtime" - uses: actions/download-artifact@v4 - with: - name: runtimes - path: target/release/wbuild/${{ matrix.chain }}-runtime/ - - name: "Download branch built node" - uses: actions/download-artifact@v4 - with: - name: moonbeam - path: target/release - - name: Setup Moonbeam PolkadotJS types - shell: bash - run: | - #### Preparing the legacy types - cd moonbeam-types-bundle - pnpm i - pnpm build - - #### Preparing the typescript api - cd ../typescript-api - pnpm i - pnpm build - - cd ../test - pnpm add ../typescript-api - - name: "Run lazy loading tests" - run: | - chmod uog+x target/release/moonbeam - cd test - pnpm install - pnpm moonwall test lazy_loading_${{ matrix.chain }} - - name: Zip and Upload Node Logs on Failure - if: failure() - run: | - TIMESTAMP=$(date +%Y%m%d%H%M%S) - export NODE_LOGS_ZIP="node_logs_$TIMESTAMP.zip" - MOST_RECENT_ZOMBIE_DIR=$(ls -td /tmp/zombie-* | head -n 1) - find $MOST_RECENT_ZOMBIE_DIR -maxdepth 1 -type f -name '*.log' -exec zip -r $NODE_LOGS_ZIP {} \; - echo "NODE_LOGS_ZIP=${NODE_LOGS_ZIP}" >> $GITHUB_ENV - - uses: actions/upload-artifact@v4 - if: failure() - with: - name: failed-node-logs - path: ${{ env.NODE_LOGS_ZIP }} - - chopsticks-upgrade-test: - runs-on: - labels: bare-metal - needs: ["set-tags", "build", "typescript-tracing-tests"] - strategy: - fail-fast: false - matrix: - chain: ["moonbase", "moonriver", "moonbeam"] - env: - GH_WORKFLOW_MATRIX_CHAIN: ${{ matrix.chain }} - DEBUG_COLORS: 1 - steps: - - name: Checkout - uses: actions/checkout@v4 - with: - ref: ${{ needs.set-tags.outputs.git_ref }} - - uses: pnpm/action-setup@v4 - with: - version: 9 - - uses: actions/setup-node@v4 - with: - node-version-file: "test/.nvmrc" - cache: "pnpm" - cache-dependency-path: pnpm-lock.yaml - - name: Create local folders - run: | - mkdir -p target/release/wbuild/${{ matrix.chain }}-runtime/ - mkdir -p test/tmp/node_logs - - name: "Download runtime" - uses: actions/download-artifact@v4 - with: - name: runtimes - path: target/release/wbuild/${{ matrix.chain }}-runtime/ - - name: Setup Moonbeam PolkadotJS types - shell: bash - run: | - #### Preparing the legacy types - cd moonbeam-types-bundle - pnpm i - pnpm build - - #### Preparing the typescript api - cd ../typescript-api - pnpm i - pnpm build - - cd ../test - pnpm add ../typescript-api - - name: "Install and run upgrade test" - run: | - cd test - pnpm install - - name: Run Upgrade Test (with retry) - uses: nick-fields/retry@v3 - with: - max_attempts: 3 - timeout_minutes: 2 - retry_on: error - command: | - cd test - pnpm moonwall test upgrade_${{matrix.chain}} - - zombie_upgrade_test: - runs-on: - labels: bare-metal - needs: ["set-tags", "build", "typescript-tracing-tests"] - strategy: - fail-fast: false - max-parallel: 1 - matrix: - ## TODO: add moonriver here when it is ready - chain: ["moonbase", "moonbeam"] - env: - GH_WORKFLOW_MATRIX_CHAIN: ${{ matrix.chain }} - DEBUG_COLORS: 1 - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - steps: - - name: Checkout - uses: actions/checkout@v4 - with: - ref: ${{ needs.set-tags.outputs.git_ref }} - - uses: pnpm/action-setup@v4 - with: - version: 9 - - uses: actions/setup-node@v4 - with: - node-version-file: "test/.nvmrc" - - name: Create local folders - run: | - mkdir -p target/release/wbuild/${{ matrix.chain }}-runtime/ - mkdir -p test/tmp - - name: "Download branch built runtime" - uses: actions/download-artifact@v4 - with: - name: runtimes - path: target/release/wbuild/${{ matrix.chain }}-runtime/ - - name: "Download branch built node" - uses: actions/download-artifact@v4 - with: - name: moonbeam - path: target/release - - name: Retrieve moonbeam binary from docker (for plainSpec generation) - run: | - MOONBEAM_COMMIT=${{ needs.set-tags.outputs.latest_rt_sha8 }} - DOCKER_TAG="moonbeamfoundation/moonbeam:sha-$MOONBEAM_COMMIT" - - docker rm -f moonbeam_container 2> /dev/null | true - docker create --name moonbeam_container $DOCKER_TAG bash - docker cp moonbeam_container:moonbeam/moonbeam test/tmp/moonbeam_rt - docker rm -f moonbeam_container - - name: Setup Moonbeam PolkadotJS types - shell: bash - run: | - #### Preparing the legacy types - cd moonbeam-types-bundle - pnpm i - pnpm build - - #### Preparing the typescript api - cd ../typescript-api - pnpm i - pnpm build - - cd ../test - pnpm add ../typescript-api - - name: Prepare Chainspecs - run: | - cd test - pnpm install - - ## Generate old spec using latest published node, modify it, and generate raw spec - chmod uog+x tmp/moonbeam_rt - chmod uog+x ../target/release/moonbeam - tmp/moonbeam_rt build-spec --chain ${{ matrix.chain }}-local > tmp/${{ matrix.chain }}-plain-spec.json - pnpm tsx scripts/modify-plain-specs.ts process tmp/${{ matrix.chain }}-plain-spec.json tmp/${{ matrix.chain }}-modified-spec.json - tmp/moonbeam_rt build-spec --chain tmp/${{ matrix.chain }}-modified-spec.json --raw > tmp/${{ matrix.chain }}-raw-spec.json - pnpm tsx scripts/preapprove-rt-rawspec.ts process tmp/${{ matrix.chain }}-raw-spec.json tmp/${{ matrix.chain }}-modified-raw-spec.json ../target/release/wbuild/${{ matrix.chain }}-runtime/${{ matrix.chain }}_runtime.compact.compressed.wasm - - name: "Run zombie upgrade test" - run: | - cd test - pnpm moonwall test zombie_${{ matrix.chain }} - - name: "Run zombie RPC test" - run: | - cd test - pnpm moonwall test zombie_${{ matrix.chain }}_rpc - - name: Zip and Upload Node Logs on Failure - if: failure() - run: | - TIMESTAMP=$(date +%Y%m%d%H%M%S) - export NODE_LOGS_ZIP="node_logs_$TIMESTAMP.zip" - MOST_RECENT_ZOMBIE_DIR=$(ls -td /tmp/zombie-* | head -n 1) - find $MOST_RECENT_ZOMBIE_DIR -maxdepth 1 -type f -name '*.log' -exec zip -r $NODE_LOGS_ZIP {} \; - echo "NODE_LOGS_ZIP=${NODE_LOGS_ZIP}" >> $GITHUB_ENV - - uses: actions/upload-artifact@v4 - if: failure() - with: - name: failed-node-logs - path: ${{ env.NODE_LOGS_ZIP }} + - run: echo "THIS IS ANOTHER CHANGE" From 1d66816062ab3bb3d7ae2b21e8802585252369ec Mon Sep 17 00:00:00 2001 From: kaki-crystalin Date: Tue, 10 Dec 2024 15:34:40 +0100 Subject: [PATCH 3/4] add image --- "Capture d'\303\251cran 2024-12-10 153355.png" | Bin 0 -> 15162 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 "Capture d'\303\251cran 2024-12-10 153355.png" diff --git "a/Capture d'\303\251cran 2024-12-10 153355.png" "b/Capture d'\303\251cran 2024-12-10 153355.png" new file mode 100644 index 0000000000000000000000000000000000000000..28f70b7c92f9d886d83fd83b1c0e2374067f1c13 GIT binary patch literal 15162 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 literal 0 HcmV?d00001 From acff11359fb6d39585469c5c0455542b4684da4e Mon Sep 17 00:00:00 2001 From: kaki-crystalin Date: Tue, 10 Dec 2024 15:37:36 +0100 Subject: [PATCH 4/4] better logo (test) --- README.md | 2 +- ... d'\303\251cran 2024-12-10 153355.png" => mb.png | Bin 2 files changed, 1 insertion(+), 1 deletion(-) rename "Capture d'\303\251cran 2024-12-10 153355.png" => mb.png (100%) diff --git a/README.md b/README.md index d65d1edf06..712f56784a 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# ![Moonbeam](media/Banner.jpg) +# ![Moonbeam](mb.png) # Information diff --git "a/Capture d'\303\251cran 2024-12-10 153355.png" b/mb.png similarity index 100% rename from "Capture d'\303\251cran 2024-12-10 153355.png" rename to mb.png