From a29fd0e0736c653a1ffc3fe07c76f2b171ad9bb5 Mon Sep 17 00:00:00 2001 From: Bartek Tofel Date: Wed, 18 Sep 2024 17:15:50 +0200 Subject: [PATCH] use reusable Solidity Review Artifacts workflow from .github --- .github/actions/setup-nodejs/action.yaml | 34 ++++++++++++++ .github/workflows/changeset.yml | 10 ++--- .github/workflows/ci-core.yml | 10 ++--- .../workflows/solidity-foundry-artifacts.yml | 2 +- .github/workflows/solidity-foundry.yml | 44 ++++++++----------- .github/workflows/solidity-hardhat.yml | 4 +- .github/workflows/solidity-tracability.yml | 16 +++---- .github/workflows/solidity-wrappers.yml | 3 +- .github/workflows/solidity.yml | 23 +++------- contracts/.tool-versions | 1 + 10 files changed, 80 insertions(+), 67 deletions(-) create mode 100644 .github/actions/setup-nodejs/action.yaml create mode 100644 contracts/.tool-versions diff --git a/.github/actions/setup-nodejs/action.yaml b/.github/actions/setup-nodejs/action.yaml new file mode 100644 index 00000000000..e0de9b01382 --- /dev/null +++ b/.github/actions/setup-nodejs/action.yaml @@ -0,0 +1,34 @@ +name: Setup NodeJS +inputs: + prod: + default: "false" + description: Set to 'true' to do a prod only install + base-path: + description: Path to the base of the repo + required: false + default: . +description: Setup pnpm for contracts +runs: + using: composite + steps: + - uses: pnpm/action-setup@a3252b78c470c02df07e9d59298aecedc3ccdd6d # v3.0.0 + with: + version: ^9.0.0 + + - uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4.0.2 + with: + node-version: "20" + cache: "pnpm" + cache-dependency-path: "${{ inputs.base-path }}/contracts/pnpm-lock.yaml" + + - if: ${{ inputs.prod == 'false' }} + name: Install dependencies + shell: bash + run: pnpm i + working-directory: ${{ inputs.base-path }}/contracts + + - if: ${{ inputs.prod == 'true' }} + name: Install prod dependencies + shell: bash + run: pnpm i --prod + working-directory: ${{ inputs.base-path }}/contracts diff --git a/.github/workflows/changeset.yml b/.github/workflows/changeset.yml index e9a07e262cb..100bbae42b0 100644 --- a/.github/workflows/changeset.yml +++ b/.github/workflows/changeset.yml @@ -86,18 +86,18 @@ jobs: id: find-git-top-level-dir run: echo "top_level_dir=$(pwd)" >> $GITHUB_OUTPUT - - name: Checkout Chainlink Github Actions repository + - name: Checkout .Github repository uses: actions/checkout@9bb56186c3b09b4f86b1c65136769dd318469633 # v4.1.2 with: - repository: smartcontractkit/chainlink-github-actions - ref: 2951e97b9bfca4226bc4294148c322824aad5c0f - path: .chainlink-github-actions + repository: smartcontractkit/.github + ref: 228acc0a7f9f0092450a7673786462832bf3d19c + path: ./dot_github - name: Update Jira ticket for core id: jira if: ${{ steps.files-changed.outputs.core == 'true' || steps.files-changed.outputs.shared == 'true' }} shell: bash - working-directory: ./.chainlink-github-actions/jira/scripts + working-directory: ./dot_github/libs/jira-tracing run: | echo "COMMIT_MESSAGE=$(git log -1 --pretty=format:'%s')" >> $GITHUB_ENV pnpm install && pnpm issue:update diff --git a/.github/workflows/ci-core.yml b/.github/workflows/ci-core.yml index ae3b3f4fa49..9a1a707c194 100644 --- a/.github/workflows/ci-core.yml +++ b/.github/workflows/ci-core.yml @@ -126,9 +126,8 @@ jobs: uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4.0.2 - name: Setup NodeJS if: ${{ needs.filter.outputs.changes == 'true' }} - uses: smartcontractkit/chainlink-github-actions/solidity/setup-nodejs@2951e97b9bfca4226bc4294148c322824aad5c0f + uses: ./.github/actions/setup-nodejs with: - contracts_dir: './contracts' prod: "true" - name: Setup Go if: ${{ needs.filter.outputs.changes == 'true' }} @@ -275,9 +274,8 @@ jobs: uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4.0.2 - name: Setup NodeJS if: ${{ needs.filter.outputs.changes == 'true' }} - uses: smartcontractkit/chainlink-github-actions/solidity/setup-nodejs@2951e97b9bfca4226bc4294148c322824aad5c0f + uses: ./.github/actions/setup-nodejs with: - contracts_dir: './contracts' prod: "true" - name: Setup Go if: ${{ needs.filter.outputs.changes == 'true' }} @@ -448,9 +446,7 @@ jobs: - name: Install protoc-gen-go-wsrpc run: curl https://github.com/smartcontractkit/wsrpc/raw/main/cmd/protoc-gen-go-wsrpc/protoc-gen-go-wsrpc --output $HOME/go/bin/protoc-gen-go-wsrpc && chmod +x $HOME/go/bin/protoc-gen-go-wsrpc - name: Setup NodeJS - uses: smartcontractkit/chainlink-github-actions/solidity/setup-nodejs@2951e97b9bfca4226bc4294148c322824aad5c0f - with: - contracts_dir: './contracts' + uses: ./.github/actions/setup-nodejs - name: make generate run: | make rm-mocked diff --git a/.github/workflows/solidity-foundry-artifacts.yml b/.github/workflows/solidity-foundry-artifacts.yml index e63a69b7c22..57a9d79b69a 100644 --- a/.github/workflows/solidity-foundry-artifacts.yml +++ b/.github/workflows/solidity-foundry-artifacts.yml @@ -147,7 +147,7 @@ jobs: generate-artifacts: name: Generate Solidity Review Artifacts needs: [changes, prepare-workflow-inputs] - uses: smartcontractkit/chainlink-github-actions/.github/workflows/review-artifacts.yml@2951e97b9bfca4226bc4294148c322824aad5c0f + uses: smartcontractkit/.github/.github/workflows/solidity-review-artifacts.yml@61aba0208a59032b1360cd3906d0f62faeb359a7 with: product: ${{ inputs.product }} commit_to_use: ${{ inputs.commit_to_use }} diff --git a/.github/workflows/solidity-foundry.yml b/.github/workflows/solidity-foundry.yml index a07ed6ee104..0e852a5709c 100644 --- a/.github/workflows/solidity-foundry.yml +++ b/.github/workflows/solidity-foundry.yml @@ -160,9 +160,9 @@ jobs: if: ${{ contains(fromJson(needs.changes.outputs.all_changes), matrix.product.name) || contains(fromJson(needs.changes.outputs.all_changes), 'shared') || needs.changes.outputs.non_src_changes == 'true' }} - uses: smartcontractkit/chainlink-github-actions/solidity/setup-nodejs@2951e97b9bfca4226bc4294148c322824aad5c0f + uses: ./.github/actions/setup-nodejs with: - contracts_dir: './contracts' + prod: "true" - name: Install Foundry if: ${{ contains(fromJson(needs.changes.outputs.all_changes), matrix.product.name) @@ -273,20 +273,18 @@ jobs: if: needs.changes.outputs.not_test_sol_modified == 'true' runs-on: ubuntu-22.04 steps: - - name: Checkout the repo + - name: Checkout this repository uses: actions/checkout@9bb56186c3b09b4f86b1c65136769dd318469633 # v4.1.2 - - name: Checkout the repo + - name: Checkout .github repository uses: actions/checkout@9bb56186c3b09b4f86b1c65136769dd318469633 # v4.1.2 with: - repository: smartcontractkit/chainlink-github-actions - ref: 2951e97b9bfca4226bc4294148c322824aad5c0f - path: ./chainlink-github-actions + repository: smartcontractkit/.github + ref: 228acc0a7f9f0092450a7673786462832bf3d19c + path: ./dot_github - name: Setup NodeJS - uses: smartcontractkit/chainlink-github-actions/solidity/setup-nodejs@2951e97b9bfca4226bc4294148c322824aad5c0f - with: - contracts_dir: './contracts' + uses: ./.github/actions/setup-nodejs - name: Install Foundry uses: foundry-rs/foundry-toolchain@8f1998e9878d786675189ef566a2e4bf24869773 # v1.2.0 @@ -299,19 +297,19 @@ jobs: python-version: '3.8' - name: Install solc-select and solc - uses: smartcontractkit/chainlink-github-actions/solidity/setup-solc-select@2951e97b9bfca4226bc4294148c322824aad5c0f + uses: smartcontractkit/.github/actions/setup-solc-select@228acc0a7f9f0092450a7673786462832bf3d19c with: to_install: '0.8.24' to_use: '0.8.24' - name: Install Slither - uses: smartcontractkit/chainlink-github-actions/solidity/setup-slither@2951e97b9bfca4226bc4294148c322824aad5c0f + uses: smartcontractkit/.github/actions/setup-slither@228acc0a7f9f0092450a7673786462832bf3d19c - name: Run Slither shell: bash run: | # modify remappings so that solc can find dependencies - ./chainlink-github-actions/solidity/scripts/modify_remappings.sh contracts contracts/remappings.txt + ./dot_github/tools/scripts/solidity/modify_remappings.sh contracts contracts/remappings.txt mv remappings_modified.txt remappings.txt # without it Slither sometimes fails to use remappings correctly @@ -327,7 +325,7 @@ jobs: echo "::debug::No Slither config found for $PRODUCT, using default" SLITHER_CONFIG="contracts/configs/slither/.slither.config-default-pr.json" fi - ./chainlink-github-actions/solidity/scripts/generate_slither_report.sh "${{ github.server_url }}/${{ github.repository }}/blob/${{ github.sha }}/" "$SLITHER_CONFIG" "./contracts" "$FILE" "contracts/slither-reports-current" "--solc-remaps @=contracts/node_modules/@" + ./dot_github/tools/scripts/solidity/generate_slither_report.sh "${{ github.server_url }}/${{ github.repository }}/blob/${{ github.sha }}/" "$SLITHER_CONFIG" "./contracts" "$FILE" "contracts/slither-reports-current" "--solc-remaps @=contracts/node_modules/@" done # all the actions below, up to printing results, run only if any existing contracts were modified @@ -363,7 +361,7 @@ jobs: path: contracts/configs retention-days: 7 - - name: Checkout the repo + - name: Checkout earlier version of this repository if: needs.changes.outputs.sol_mod_only == 'true' uses: actions/checkout@9bb56186c3b09b4f86b1c65136769dd318469633 # v4.1.2 with: @@ -386,21 +384,19 @@ jobs: # since we have just checked out the repository again, we lose NPM dependencies installs previously, we need to install them again to compile contracts - name: Setup NodeJS if: needs.changes.outputs.sol_mod_only == 'true' - uses: smartcontractkit/chainlink-github-actions/solidity/setup-nodejs@2951e97b9bfca4226bc4294148c322824aad5c0f - with: - contracts_dir: './contracts' + uses: ./.github/actions/setup-nodejs - name: Run Slither for base reference if: needs.changes.outputs.sol_mod_only == 'true' shell: bash run: | # we need to set file permission again since they are lost during download - for file in ./chainlink-github-actions/solidity/scripts/*.sh; do + for file in ./dot_github/tools/scripts/solidity/*.sh; do chmod +x "$file" done # modify remappings so that solc can find dependencies - ./chainlink-github-actions/solidity/scripts/modify_remappings.sh contracts contracts/remappings.txt + ./dot_github/tools/scripts/solidity/modify_remappings.sh contracts contracts/remappings.txt mv remappings_modified.txt remappings.txt # without it Slither sometimes fails to use remappings correctly @@ -416,7 +412,7 @@ jobs: echo "::debug::No Slither config found for $PRODUCT, using default" SLITHER_CONFIG="contracts/configs/slither/.slither.config-default-pr.json" fi - ./chainlink-github-actions/solidity/scripts/generate_slither_report.sh "${{ github.server_url }}/${{ github.repository }}/blob/${{ github.sha }}/" "$SLITHER_CONFIG" "./contracts" "$FILE" "contracts/slither-reports-base-ref" "--solc-remaps @=contracts/node_modules/@" + ./dot_github/tools/scripts/solidity/generate_slither_report.sh "${{ github.server_url }}/${{ github.repository }}/blob/${{ github.sha }}/" "$SLITHER_CONFIG" "./contracts" "$FILE" "contracts/slither-reports-base-ref" "--solc-remaps @=contracts/node_modules/@" done - name: Upload Slither report @@ -479,7 +475,7 @@ jobs: done - name: Validate if all Slither run for all contracts - uses: smartcontractkit/chainlink-github-actions/solidity/validate-solidity-artifacts@2951e97b9bfca4226bc4294148c322824aad5c0f + uses: smartcontractkit/.github/actions/validate-solidity-artifacts@228acc0a7f9f0092450a7673786462832bf3d19c with: validate_slither_reports: 'true' slither_reports_path: 'contracts/slither-reports-current' @@ -567,9 +563,7 @@ jobs: - name: Setup NodeJS if: ${{ (contains(fromJson(needs.changes.outputs.all_changes), matrix.product.name) || needs.changes.outputs.non_src_changes == 'true') && matrix.product.setup.run-forge-fmt }} - uses: smartcontractkit/chainlink-github-actions/solidity/setup-nodejs@2951e97b9bfca4226bc4294148c322824aad5c0f - with: - contracts_dir: './contracts' + uses: ./.github/actions/setup-nodejs - name: Install Foundry if: ${{ (contains(fromJson(needs.changes.outputs.all_changes), matrix.product.name) || needs.changes.outputs.non_src_changes == 'true') && matrix.product.setup.run-forge-fmt }} diff --git a/.github/workflows/solidity-hardhat.yml b/.github/workflows/solidity-hardhat.yml index 19544c452ab..fe965bee0ef 100644 --- a/.github/workflows/solidity-hardhat.yml +++ b/.github/workflows/solidity-hardhat.yml @@ -41,9 +41,9 @@ jobs: - name: Checkout the repo uses: actions/checkout@9bb56186c3b09b4f86b1c65136769dd318469633 # v4.1.2 - name: Setup NodeJS - uses: smartcontractkit/chainlink-github-actions/solidity/setup-nodejs@2951e97b9bfca4226bc4294148c322824aad5c0f + uses: ./.github/actions/setup-nodejs with: - contracts_dir: './contracts' + prod: "true" - name: Setup Hardhat uses: ./.github/actions/setup-hardhat with: diff --git a/.github/workflows/solidity-tracability.yml b/.github/workflows/solidity-tracability.yml index 3ff6ed27792..45fc4a448fc 100644 --- a/.github/workflows/solidity-tracability.yml +++ b/.github/workflows/solidity-tracability.yml @@ -89,28 +89,26 @@ jobs: exit 1 - name: Setup NodeJS - uses: smartcontractkit/chainlink-github-actions/solidity/setup-nodejs@2951e97b9bfca4226bc4294148c322824aad5c0f - with: - contracts_dir: './contracts' + uses: ./.github/actions/setup-nodejs - - name: Checkout Chainlink Github Actions repository + - name: Checkout .Github repository uses: actions/checkout@9bb56186c3b09b4f86b1c65136769dd318469633 # v4.1.2 with: - repository: smartcontractkit/chainlink-github-actions - ref: 2951e97b9bfca4226bc4294148c322824aad5c0f - path: .chainlink-github-actions + repository: smartcontractkit/.github + ref: 228acc0a7f9f0092450a7673786462832bf3d19c + path: ./dot_github - name: Setup git top level directory id: find-git-top-level-dir run: echo "top_level_dir=$(pwd)" >> $GITHUB_OUTPUT - name: Setup Jira - working-directory: ./.chainlink-github-actions/jira/scripts + working-directory: ./dot_github/libs/jira-tracing run: pnpm i # Because of our earlier checks, we know that both the source and changeset files have changed - name: Enforce Traceability - working-directory: ./.chainlink-github-actions/jira/scripts + working-directory: ./dot_github/libs/jira-tracing run: | echo "COMMIT_MESSAGE=$(git log -1 --pretty=format:'%s')" >> $GITHUB_ENV pnpm issue:enforce diff --git a/.github/workflows/solidity-wrappers.yml b/.github/workflows/solidity-wrappers.yml index 06701ed0435..5f593f3a334 100644 --- a/.github/workflows/solidity-wrappers.yml +++ b/.github/workflows/solidity-wrappers.yml @@ -46,9 +46,8 @@ jobs: uses: ./.github/actions/setup-go - name: Setup NodeJS - uses: smartcontractkit/chainlink-github-actions/solidity/setup-nodejs@2951e97b9bfca4226bc4294148c322824aad5c0f + uses: ./.github/actions/setup-nodejs with: - contracts_dir: './contracts' prod: "true" - name: Run native compile and generate wrappers diff --git a/.github/workflows/solidity.yml b/.github/workflows/solidity.yml index 36a328eebe6..ad8742ddf30 100644 --- a/.github/workflows/solidity.yml +++ b/.github/workflows/solidity.yml @@ -63,9 +63,9 @@ jobs: - name: Checkout the repo uses: actions/checkout@9bb56186c3b09b4f86b1c65136769dd318469633 # v4.1.2 - name: Setup NodeJS - uses: smartcontractkit/chainlink-github-actions/solidity/setup-nodejs@2951e97b9bfca4226bc4294148c322824aad5c0f + uses: smartcontractkit/.github/actions/setup-nodejs@bff23e98280a3f60233e7ab2d5675a006843732c with: - contracts_dir: './contracts' + package-json-directory: '.contracts' - name: Run Prepublish test working-directory: contracts run: pnpm prepublishOnly @@ -97,9 +97,8 @@ jobs: - name: Install diff-so-fancy run: echo "$GITHUB_WORKSPACE/diff-so-fancy" >> $GITHUB_PATH - name: Setup NodeJS - uses: smartcontractkit/chainlink-github-actions/solidity/setup-nodejs@2951e97b9bfca4226bc4294148c322824aad5c0f + uses: ./.github/actions/setup-nodejs with: - contracts_dir: './contracts' prod: "true" - name: Setup Go uses: ./.github/actions/setup-go @@ -136,9 +135,7 @@ jobs: - name: Checkout the repo uses: actions/checkout@9bb56186c3b09b4f86b1c65136769dd318469633 # v4.1.2 - name: Setup NodeJS - uses: smartcontractkit/chainlink-github-actions/solidity/setup-nodejs@2951e97b9bfca4226bc4294148c322824aad5c0f - with: - contracts_dir: './contracts' + uses: ./.github/actions/setup-nodejs - name: Run pnpm lint run: pnpm lint - name: Run solhint @@ -166,9 +163,7 @@ jobs: - name: Checkout the repo uses: actions/checkout@9bb56186c3b09b4f86b1c65136769dd318469633 # v4.1.2 - name: Setup NodeJS - uses: smartcontractkit/chainlink-github-actions/solidity/setup-nodejs@2951e97b9bfca4226bc4294148c322824aad5c0f - with: - contracts_dir: './contracts' + uses: ./.github/actions/setup-nodejs - name: Run prettier check run: pnpm prettier:check - name: Collect Metrics @@ -193,9 +188,7 @@ jobs: uses: actions/checkout@9bb56186c3b09b4f86b1c65136769dd318469633 # v4.1.2 - name: Setup NodeJS - uses: smartcontractkit/chainlink-github-actions/solidity/setup-nodejs@2951e97b9bfca4226bc4294148c322824aad5c0f - with: - contracts_dir: './contracts' + uses: ./.github/actions/setup-nodejs - name: Version package.json working-directory: contracts @@ -235,9 +228,7 @@ jobs: uses: actions/checkout@9bb56186c3b09b4f86b1c65136769dd318469633 # v4.1.2 - name: Setup NodeJS - uses: smartcontractkit/chainlink-github-actions/solidity/setup-nodejs@2951e97b9bfca4226bc4294148c322824aad5c0f - with: - contracts_dir: './contracts' + uses: ./.github/actions/setup-nodejs - name: Validate version working-directory: contracts diff --git a/contracts/.tool-versions b/contracts/.tool-versions new file mode 100644 index 00000000000..dfe63496b38 --- /dev/null +++ b/contracts/.tool-versions @@ -0,0 +1 @@ +nodejs 20.13.1