Skip to content

Commit

Permalink
wip: debug build system test
Browse files Browse the repository at this point in the history
  • Loading branch information
galargh committed Feb 11, 2025
1 parent 71d666f commit e277b4a
Show file tree
Hide file tree
Showing 2 changed files with 5 additions and 260 deletions.
263 changes: 4 additions & 259 deletions .github/workflows/v-next-ci.yml
Original file line number Diff line number Diff line change
@@ -1,261 +1,23 @@
name: vNext CI

on:
merge_group:
push:
branches:
- v-next
pull_request:
workflow_dispatch:
- build-system-debug

concurrency:
group: ${{github.workflow}}-${{github.ref}}
cancel-in-progress: true

jobs:
is-v-next:
runs-on: ubuntu-latest
outputs:
is_v_next: ${{ steps.check.outputs.folder_exists }}

steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Check if the folder v-next exists
id: check
run: |
if [ -d "./v-next" ]; then
echo "folder_exists=true" >> $GITHUB_OUTPUT
else
echo "folder_exists=false" >> $GITHUB_OUTPUT
fi
check_dependencies:
name: Check dependency versions
needs: is-v-next
if: ${{ needs.is-v-next.outputs.is_v_next == 'true' }}
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 22
- name: Run check
run: node scripts/check-v-next-dependencies.js

check_npm_scripts:
name: Check that the npm scripts are consistent
needs: is-v-next
if: ${{ needs.is-v-next.outputs.is_v_next == 'true' }}
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 22
- name: Run check
run: node scripts/check-v-next-npm-scripts.js

list-packages:
name: List packages
needs: is-v-next
if: ${{ needs.is-v-next.outputs.is_v_next == 'true' }}
runs-on: ubuntu-latest
outputs:
packages: ${{ steps.filter.outputs.changes }}
should_bundle: ${{ contains(steps.filter.outputs.hardhat_files, '.github/workflows/v-next-ci.yml') || contains(steps.filter.outputs.hardhat_files, 'pnpm-lock.yaml') }}
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 22
- run: yq -p yaml -o json pnpm-lock.yaml | tee pnpm-lock.json
- id: generate
env:
PACKAGE_IGNORE: |
[
".",
"packages/",
"v-next/hardhat/templates/"
]
COMMON_FILTERS: |
[
".github/workflows/v-next-ci.yml",
"config-v-next/**",
"pnpm-lock.yaml"
]
run: |
echo "filters<<EOF" >> $GITHUB_OUTPUT
node scripts/generate-filters.js |
yq -Po yaml 'with_entries(.key |= sub("^v-next/", ""))' |
tee -a $GITHUB_OUTPUT
echo "EOF" >> $GITHUB_OUTPUT
- id: filter
uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3.0.2
with:
list-files: json
filters: ${{ steps.generate.outputs.filters }}
base: v-next # TODO: Remove once v-next becomes the default branch

bundle:
# Depending on list-packages only to check whether pnpm-lock.yaml has changed
# This could be handled by a simpler job, but an extra runner would have to be allocated for it
needs: list-packages

if: needs.list-packages.outputs.should_bundle == 'true'

# Using a matrix strategy even though there's only one package
# because we will want to add, at least, hardhat-toolbox in the future
strategy:
fail-fast: false
matrix:
package: ["hardhat"]

name: "[${{ matrix.package }}] bundle"
runs-on: ubuntu-latest
defaults:
run:
working-directory: v-next/${{ matrix.package }}
steps:
- uses: actions/checkout@v4
- uses: ./.github/actions/setup-env
with:
node-version: 22
- name: Install dependencies
run: pnpm install --frozen-lockfile --prefer-offline
- name: Build
run: pnpm build
# https://github.com/pnpm/pnpm/issues/6166
- name: Deploy
run: |
pnpm deploy --config.shamefully-hoist=true --config.hoist=true --config.node-linker=true --config.shared-workspace-lockfile=false --filter="$(jq -r .name package.json)" --prod --no-optional bundle
# We need to move the node_modules links from v-next/hardhat/bundle to bundle because
# https://github.com/pnpm/pnpm/pull/8465 broke modules generation with the set of options we provide
for old_link in $(find v-next/hardhat/bundle -type l); do
echo "Processing link $old_link"
new_link="${old_link#v-next/hardhat/}"
new_link_dir="$(dirname "$new_link")"
old_link_target="$(readlink -f "$old_link")"
mkdir -p "$new_link_dir"
ln -rs "$old_link_target" "$new_link"
new_link_target="$(readlink "$new_link")"
echo "Created link $new_link -> $new_link_target"
done
rm -rf v-next
- uses: actions/upload-artifact@v4
with:
name: ${{ matrix.package }}
path: |
v-next/${{ matrix.package }}/bundle
bundle-aggregate:
needs: bundle

if: ${{ !cancelled() }}

name: bundle
runs-on: ubuntu-latest

permissions:
pull-requests: write

steps:
- env:
result: ${{ needs.bundle.result }}
run: |
if [[ "$result" == "failure" ]]; then
exit 1
fi
shell: bash
- uses: actions/download-artifact@v4
- id: download
run: ls -1 | wc -l | xargs -I {} -0 echo "count={}" | tee -a $GITHUB_OUTPUT
shell: bash
- id: comment
if: steps.download.outputs.count != '0'
run: |
echo 'body<<EOF' >> $GITHUB_OUTPUT
for bundle in *; do
echo "# $bundle" | tee -a $GITHUB_OUTPUT
echo '' | tee -a $GITHUB_OUTPUT
echo "Total size of the bundle: "'`'"$(du -sh $bundle --exclude=$bundle/node_modules/.pnpm | cut -f1)"'`' | tee -a $GITHUB_OUTPUT
echo "Total number of dependencies (including transitive): "'`'"$(find $bundle/node_modules/@* $bundle/node_modules -mindepth 1 -maxdepth 1 -type d ! -name '.*' ! -name '@*' | wc -l)"'`' | tee -a $GITHUB_OUTPUT
echo '' | tee -a $GITHUB_OUTPUT
echo '<details>' | tee -a $GITHUB_OUTPUT
echo '<summary>List of dependencies (sorted by size)</summary>' | tee -a $GITHUB_OUTPUT
echo '' | tee -a $GITHUB_OUTPUT
echo '```' | tee -a $GITHUB_OUTPUT
du -shc $bundle/node_modules/@*/* $bundle/node_modules/* |
grep -Ev '/node_modules/@[^/]+$' | sort -rh |
sed "s|$bundle/node_modules/||" | tee -a $GITHUB_OUTPUT
echo '```' | tee -a $GITHUB_OUTPUT
echo '</details>' | tee -a $GITHUB_OUTPUT
echo '' | tee -a $GITHUB_OUTPUT
done
echo 'EOF' >> $GITHUB_OUTPUT
- if: github.event_name == 'pull_request' && steps.download.outputs.count != '0'
uses: marocchino/sticky-pull-request-comment@331f8f5b4215f0445d3c07b4967662a32a2d3e31 # v2.9.0
with:
header: bundle
message: ${{ steps.comment.outputs.body }}

lint:
needs: list-packages

if: needs.list-packages.outputs.packages != '[]'

strategy:
fail-fast: false
matrix:
package: ${{ fromJson(needs.list-packages.outputs.packages) }}

name: "[${{ matrix.package }}] lint"
runs-on: ubuntu-latest
defaults:
run:
working-directory: v-next/${{ matrix.package }}

steps:
- uses: actions/checkout@v4
- uses: ./.github/actions/setup-env
with:
node-version: 22
- name: Install dependencies
run: pnpm install --frozen-lockfile --prefer-offline
- name: Build
run: pnpm build
- name: Lint
run: pnpm lint

lint-aggregate:
needs: lint

if: ${{ !cancelled() }}

name: lint
runs-on: ubuntu-latest

steps:
- env:
result: ${{ needs.lint.result }}
run: |
if [[ "$result" == "failure" ]]; then
exit 1
fi
shell: bash

ci:
needs: list-packages

if: needs.list-packages.outputs.packages != '[]'

strategy:
fail-fast: false
matrix:
package: ${{ fromJson(needs.list-packages.outputs.packages) }}
os: [ubuntu-latest, macos-13, macos-latest, windows-latest]
package: [hardhat]
os: [windows-latest]
node: [22]
attempt: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100]

name: "[${{ matrix.package }}] ci on ${{ matrix.os }} (Node ${{ matrix.node }})"
runs-on: ${{ matrix.os }}
Expand All @@ -276,20 +38,3 @@ jobs:
env:
__DO_NOT_USE_IS_HARDHAT_CI: true
run: pnpm run test

ci-aggregate:
needs: ci

if: ${{ !cancelled() }}

name: ci
runs-on: ubuntu-latest

steps:
- env:
result: ${{ needs.ci.result }}
run: |
if [[ "$result" == "failure" ]]; then
exit 1
fi
shell: bash
2 changes: 1 addition & 1 deletion v-next/hardhat/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@
"lint:fix": "pnpm prettier --write && pnpm eslint --fix",
"eslint": "eslint \"src/**/*.ts\" \"test/**/*.ts\"",
"prettier": "prettier \"**/*.{ts,js,md,json}\"",
"test": "node --import tsx/esm --test --test-reporter=@ignored/hardhat-vnext-node-test-reporter \"test/*.ts\" \"test/!(fixture-projects|helpers)/**/*.ts\"",
"test": "node --import tsx/esm --test \"test/*.ts\" \"test/!(fixture-projects|helpers)/**/*.ts\"",
"test:only": "node --import tsx/esm --test --test-only --test-reporter=@ignored/hardhat-vnext-node-test-reporter \"test/*.ts\" \"test/!(fixture-projects|helpers)/**/*.ts\"",
"pretest": "pnpm build",
"pretest:only": "pnpm build",
Expand Down

0 comments on commit e277b4a

Please sign in to comment.