fix(kernel): package cache fails under parallelism #8518
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Workflows pertaining to the main branch | |
name: Main | |
on: | |
merge_group: {} | |
pull_request: | |
branches: [main, release] | |
push: | |
branches: [main, release] | |
env: | |
DOTNET_NOLOGO: true | |
NODE_OPTIONS: --max-old-space-size=4096 | |
# This workflows currently has the following jobs: | |
# - build : Builds the source tree as-is | |
# - test : Runs all unit tests against the build result | |
# - create-release-package : Prepares a release package with the "real" version | |
# - integ-test : Runs integration tests against the release package | |
jobs: | |
build: | |
name: Build | |
permissions: | |
contents: read | |
runs-on: ubuntu-latest | |
steps: | |
# Check out the code | |
- name: Check out | |
uses: actions/checkout@v3 | |
# Set up all of our standard runtimes | |
- name: Set up .NET 6 | |
uses: actions/setup-dotnet@v3 | |
with: | |
dotnet-version: '6.0.x' | |
- name: Set up Go 1.18 | |
uses: actions/setup-go@v4 | |
with: | |
go-version: '1.18' | |
- name: Set up Java 8 | |
uses: actions/setup-java@v3 | |
with: | |
distribution: 'zulu' | |
java-version: '8' | |
- name: Set up Node 16 | |
uses: actions/setup-node@v3 | |
with: | |
cache: yarn | |
node-version: '16' | |
- name: Set up Python 3.7 | |
uses: actions/setup-python@v4 | |
with: | |
python-version: '3.7' | |
cache: pip | |
- name: Install python3-venv | |
run: sudo apt install -y python3-venv | |
- name: Cache | |
uses: actions/cache@v3 | |
with: | |
path: |- | |
~/.m2/repository | |
!~/.m2/repository/software/amazon/jsii/ | |
~/.nuget/packages | |
!~/.nuget/packages/amazon.jsii.* | |
key: ${{ runner.os }}-${{ hashFiles('**/Directory.Build.targets') }} | |
restore-keys: |- | |
${{ runner.os }}- | |
# Prepare dependencies and build | |
- name: Install Dependencies | |
run: |- | |
yarn install --frozen-lockfile | |
- name: Full Build | |
run: |- | |
yarn build | |
- name: Prepare Artifact | |
run: |- | |
tar zcvf ${{ runner.temp }}/built-tree.tgz \ | |
--exclude='**/.env' \ | |
--exclude='**/.nuget' \ | |
--exclude='**/node_modules' \ | |
--exclude='**/project/.m2/repository' \ | |
--exclude-tag-all='pyenv.cfg' \ | |
--directory=${{ github.workspace }} \ | |
. | |
# Upload artifact (we'll tar it up to save time) | |
- name: 'Upload Artifact: built-tree' | |
uses: actions/upload-artifact@v3 | |
with: | |
name: built-tree | |
path: ${{ runner.temp }}/built-tree.tgz | |
# Ensure working directory is clean (build should not change checked in source code) | |
- name: 'Assert clean working directory' | |
if: runner.os != 'Windows' # Windows will see artificial permission changes, so we ignore it | |
run: |- | |
# Make sure the index is up-to-date (git diff-index assumes it was done) | |
git update-index --refresh | |
# Check for modifications in tracked files | |
git diff-index --exit-code --stat HEAD | |
# Check for new untracked files | |
untracked=$(git ls-files --others --exclude-standard) \ | |
&& echo "Untracked files: ${untracked:-<none>}" \ | |
&& test -z "${untracked}" | |
shell: bash | |
create-release-package: | |
name: Create Release Package | |
permissions: | |
contents: read | |
runs-on: ubuntu-latest | |
steps: | |
# Check out the code | |
- name: Check out | |
uses: actions/checkout@v3 | |
# Set up all of our standard runtimes | |
- name: Set up .NET 6 | |
uses: actions/setup-dotnet@v3 | |
with: | |
dotnet-version: '6.0.x' | |
- name: Set up Go 1.18 | |
uses: actions/setup-go@v4 | |
with: | |
go-version: '1.18' | |
- name: Set up Java 8 | |
uses: actions/setup-java@v3 | |
with: | |
distribution: 'zulu' | |
java-version: '8' | |
- name: Set up Node 16 | |
uses: actions/setup-node@v3 | |
with: | |
cache: yarn | |
node-version: '16' | |
- name: Set up Python 3.7 | |
uses: actions/setup-python@v4 | |
with: | |
python-version: '3.7' | |
cache: pip | |
- name: Install python3-venv | |
run: sudo apt install -y python3-venv | |
- name: Cache | |
uses: actions/cache@v3 | |
with: | |
path: |- | |
~/.m2/repository | |
!~/.m2/repository/software/amazon/jsii/ | |
~/.nuget/packages | |
!~/.nuget/packages/amazon.jsii.* | |
key: ${{ runner.os }}-${{ hashFiles('**/Directory.Build.targets') }} | |
restore-keys: |- | |
${{ runner.os }}- | |
# Prepare dependencies and build | |
- name: Install Dependencies | |
run: yarn install --frozen-lockfile | |
# Determine a prerelease version (depending on whether this is a PR or Push event) | |
- name: Standard Version (PR) | |
if: github.event_name == 'pull_request' | |
run: |- | |
npx standard-version \ | |
--compareUrlFormat='{{host}}/{{owner}}/{{repository}}/compare/{{previousTag}}...${{ github.sha }}' \ | |
--prerelease=dev.${{ github.event.pull_request.number }} \ | |
--skip.commit | |
- name: Standard Version (Nightly) | |
if: github.event_name == 'push' | |
run: |- | |
npx standard-version \ | |
--compareUrlFormat='{{host}}/{{owner}}/{{repository}}/compare/{{previousTag}}...${{ github.sha }}' \ | |
--prerelease=dev.$(date -u +'%Y%m%d') \ | |
--skip.commit | |
# Now we'll be preparing a release package (with the "real" version) | |
- name: Run "align-version.sh" | |
run: |- | |
./scripts/align-version.sh | |
- name: Full Build | |
run: |- | |
yarn build | |
- name: Package | |
run: |- | |
yarn package | |
# Upload artifacts | |
- name: 'Upload Artifact: release-package' | |
uses: actions/upload-artifact@v3 | |
with: | |
name: release-package | |
path: ${{ github.workspace }}/dist/ | |
test: | |
permissions: | |
contents: none | |
name: Test (${{ matrix.title }}) | |
needs: build | |
strategy: | |
fail-fast: false | |
matrix: | |
title: ['baseline'] | |
dotnet: ['6.0.x'] | |
go: ['1.18'] | |
java: ['8'] | |
node: ['16'] # EOL 2023-09-11 | |
os: [ubuntu-latest] | |
python: ['3.7'] | |
# Add specific combinations to be tested against "node 14" (to restrict cardinality) | |
include: | |
# Test using Windows | |
- title: 'Windows' | |
os: windows-latest | |
dotnet: '6.0.x' | |
go: '1.18' | |
java: '8' | |
node: '16' | |
python: '3.7' | |
# Test using macOS | |
- title: 'macOS' | |
os: macos-latest | |
dotnet: '6.0.x' | |
go: '1.18' | |
java: '8' | |
node: '16' | |
python: '3.7' | |
# Test alternate Nodes | |
- title: 'Node 16' | |
java: '8' | |
dotnet: '6.0.x' | |
go: '1.18' | |
node: '16' # EOL 2023-09-11 | |
os: ubuntu-latest | |
python: '3.7' | |
- title: 'Node 18' | |
java: '8' | |
dotnet: '6.0.x' | |
go: '1.18' | |
node: '18' # EOL 2025-04-30 | |
os: ubuntu-latest | |
python: '3.7' | |
- title: 'Node 20' | |
java: '8' | |
dotnet: '6.0.x' | |
go: '1.18' | |
node: '20' # EOL 2026-04-30 | |
os: ubuntu-latest | |
python: '3.7' | |
# Test alternate .NETs | |
- title: '.NET 7.0' | |
java: '8' | |
dotnet: '7.0.x' | |
go: '1.18' | |
node: '16' | |
os: ubuntu-latest | |
python: '3.7' | |
# Test alternate Gos | |
- title: 'Go 1.19' | |
java: '8' | |
dotnet: '6.0.x' | |
go: '1.19' | |
node: '16' | |
os: ubuntu-latest | |
python: '3.7' | |
# Test alternate Javas | |
- title: 'Java 11' | |
java: '11' | |
dotnet: '6.0.x' | |
go: '1.18' | |
node: '16' | |
os: ubuntu-latest | |
python: '3.7' | |
# Test alternate Pythons | |
- title: 'Python 3.8' | |
python: '3.8' | |
dotnet: '6.0.x' | |
go: '1.18' | |
java: '8' | |
node: '16' | |
os: ubuntu-latest | |
- title: 'Python 3.9' | |
python: '3.9' | |
dotnet: '6.0.x' | |
go: '1.18' | |
java: '8' | |
node: '16' | |
os: ubuntu-latest | |
- title: 'Python 3.10' | |
python: '3.10' | |
dotnet: '6.0.x' | |
go: '1.18' | |
java: '8' | |
node: '16' | |
os: ubuntu-latest | |
- title: 'Python 3.11' | |
python: '3.11' | |
dotnet: '6.0.x' | |
go: '1.18' | |
java: '8' | |
node: '16' | |
os: ubuntu-latest | |
runs-on: ${{ matrix.os }} | |
steps: | |
# Check out the code | |
- name: Download Artifact | |
uses: actions/download-artifact@v3 | |
with: | |
name: built-tree | |
- name: Extract Artifact | |
run: |- | |
echo "::group::Untar Archive" | |
tar zxvf built-tree.tgz | |
echo "::endgroup" | |
rm built-tree.tgz | |
# Set up all of our standard runtimes (this is matrix-based) | |
- name: Set up .NET ${{ matrix.dotnet }} | |
uses: actions/setup-dotnet@v3 | |
with: | |
dotnet-version: ${{ matrix.dotnet }} | |
- name: Set up Go ${{ matrix.go }} | |
uses: actions/setup-go@v4 | |
with: | |
go-version: ${{ matrix.go }} | |
- name: Set up Java ${{ matrix.java }} | |
uses: actions/setup-java@v3 | |
with: | |
distribution: 'zulu' | |
java-version: ${{ matrix.java }} | |
- name: Set up Node ${{ matrix.node }} | |
uses: actions/setup-node@v3 | |
with: | |
cache: yarn | |
node-version: ${{ matrix.node }} | |
- name: Set up Python ${{ matrix.python }} | |
uses: actions/setup-python@v4 | |
with: | |
python-version: ${{ matrix.python }} | |
cache: pip | |
- name: 'Linux: Install python3-venv' | |
if: runner.os == 'Linux' | |
run: sudo apt install -y python3-venv | |
- name: Cache | |
uses: actions/cache@v3 | |
with: | |
path: |- | |
~/.m2/repository | |
!~/.m2/repository/software/amazon/jsii/ | |
~/.nuget/packages | |
!~/.nuget/packages/amazon.jsii.* | |
# Not including .NET / Java in the cache keys, those artifacts are SDK-version-independent | |
key: ${{ runner.os }}-${{ hashFiles('**/Directory.Build.targets') }} | |
restore-keys: |- | |
${{ runner.os }}- | |
# Run the tests | |
- name: Install Dependencies | |
run: |- | |
yarn install --frozen-lockfile | |
- name: Test | |
run: |- | |
yarn test | |
# Ensure working directory is clean (tests should not change checked in source code) | |
- name: 'Assert clean working directory' | |
if: runner.os != 'Windows' # Windows will see artificial permission changes, so we ignore it | |
run: |- | |
# Make sure the index is up-to-date (git diff-index assumes it was done) | |
git update-index --refresh | |
# Check for modifications in tracked files | |
git diff-index --exit-code --stat HEAD | |
# Check for new untracked files | |
untracked=$(git ls-files --others --exclude-standard) \ | |
&& echo "Untracked files: ${untracked:-<none>}" \ | |
&& test -z "${untracked}" | |
shell: bash | |
test-ok: | |
name: Unit Tests | |
runs-on: ubuntu-latest | |
needs: test | |
steps: | |
- name: OK | |
# This is just a join target to simplify branch protection setup | |
run: echo OK | |
benchmark: | |
name: Run benchmark suite | |
runs-on: ubuntu-latest | |
permissions: | |
contents: read | |
pull-requests: write | |
needs: build | |
steps: | |
# Check out the code | |
- name: Download Artifact | |
uses: actions/download-artifact@v3 | |
with: | |
name: built-tree | |
- name: Extract Artifact | |
run: |- | |
echo "::group::Untar Archive" | |
tar zxvf built-tree.tgz | |
echo "::endgroup" | |
rm built-tree.tgz | |
- name: Set up Node | |
uses: actions/setup-node@v3 | |
with: | |
cache: yarn | |
node-version: '18' | |
- name: Install Dependencies | |
run: yarn install --frozen-lockfile | |
- name: Run Benchmark | |
working-directory: packages/@jsii/benchmarks | |
run: yarn bench --output ${{ runner.temp }}/bench-output.json | |
- name: Compare Benchmark Results | |
if: github.event_name == 'pull_request' | |
uses: benchmark-action/github-action-benchmark@v1 | |
with: | |
name: jsii Benchmark Regression | |
tool: 'customSmallerIsBetter' | |
output-file-path: ${{ runner.temp }}/bench-output.json | |
comment-always: true | |
github-token: ${{ secrets.GITHUB_TOKEN }} | |
fail-on-alert: true | |
- name: Upload Benchmark Results | |
if: github.event_name == 'push' | |
uses: benchmark-action/github-action-benchmark@v1 | |
with: | |
name: jsii Benchmark | |
tool: 'customSmallerIsBetter' | |
output-file-path: ${{ runner.temp }}/bench-output.json | |
github-token: ${{ secrets.PROJEN_GITHUB_TOKEN }} | |
auto-push: true | |
pacmak-integration-test: | |
name: Integration test (jsii-pacmak) | |
runs-on: ubuntu-latest | |
needs: create-release-package | |
steps: | |
# Check out the code | |
- name: Download Artifact | |
uses: actions/download-artifact@v3 | |
with: | |
name: release-package | |
path: ${{ runner.temp }}/release-package | |
# Set up all of our standard runtimes | |
- name: Set up .NET 7 | |
uses: actions/setup-dotnet@v3 | |
with: | |
dotnet-version: '7.0.x' | |
- name: Set up Go 1.20 | |
uses: actions/setup-go@v4 | |
with: | |
go-version: '1.20' | |
- name: Set up Java 20 | |
uses: actions/setup-java@v3 | |
with: | |
distribution: 'corretto' | |
java-version: '20' | |
- name: Set up Node 20 | |
uses: actions/setup-node@v3 | |
with: | |
node-version: '20' | |
- name: Set up Python 3.11 | |
uses: actions/setup-python@v4 | |
with: | |
python-version: '3.11' | |
- name: Install python3-venv | |
run: sudo apt install -y python3-venv | |
# Show time! | |
- name: Prepare Work Tree | |
run: |- | |
npm install --no-save aws-cdk-lib@2 constructs@10 \ | |
${{ runner.temp }}/release-package/js/*.tgz \ | |
${{ runner.temp }}/release-package/private/*.tgz | |
- name: Run jsii-pacmak on aws-cdk-lib | |
env: | |
NODE_OPTIONS: --max-old-space-size=6144 | |
# We run with --no-parallel to avoid running out of memory... | |
run: |- | |
./node_modules/.bin/jsii-pacmak --no-parallel ./node_modules/aws-cdk-lib | |
# Upload artifact (we'll tar it up to save time) | |
- name: 'Upload Artifact: integtest_aws-cdk-lib' | |
uses: actions/upload-artifact@v3 | |
with: | |
name: integtest_aws-cdk-lib | |
path: ./node_modules/aws-cdk-lib/dist/ | |