Skip to content

Allow participating buildpacks to opt-out of Node.js build scripts (#… #1621

Allow participating buildpacks to opt-out of Node.js build scripts (#…

Allow participating buildpacks to opt-out of Node.js build scripts (#… #1621

Workflow file for this run

name: CI
on:
push:
branches: ["main"]
pull_request:
permissions:
contents: read
jobs:
shell-lint:
runs-on: ubuntu-24.04
container:
image: koalaman/shellcheck-alpine:v0.9.0
steps:
- run: apk add git
- run: apk add shfmt --repository=http://dl-3.alpinelinux.org/alpine/edge/community
- uses: actions/checkout@v4
- name: shellcheck
run: shfmt -f . | grep -v ^test/ | xargs shellcheck
- name: shfmt
run: shfmt -f . | grep -v ^test/ | grep -v '_shpec.sh$' | xargs shfmt -d
rust-lint:
runs-on: ubuntu-24.04
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Update Rust toolchain
run: rustup update
- name: Rust Cache
uses: Swatinem/[email protected]
- name: Clippy
run: cargo clippy --all-targets --locked -- --deny warnings
- name: rustfmt
run: cargo fmt -- --check
rust-unit-test:
runs-on: ubuntu-24.04
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Update Rust toolchain
run: rustup update
- name: Rust Cache
uses: Swatinem/[email protected]
- name: Run unit tests
run: cargo test --locked
find-libcnb-buildpacks:
name: Find libcnb buildpacks
runs-on: ubuntu-24.04
outputs:
libcnb-buildpacks: ${{ steps.find-buildpack-dirs.outputs.buildpacks }}
steps:
- name: Checkout
uses: actions/checkout@v4
with:
submodules: true
- id: find-buildpack-dirs
name: Find libcnb buildpack directories
run: |
echo "buildpacks=$( \
find . -type d -execdir test -e "{}/buildpack.toml" -a -e "{}/Cargo.toml" \; -print \
| sort \
| uniq \
| jq -nRc '[inputs]
| map({ dir: ., name: split("/") | last | split("nodejs-") | last }
| [
. + { builder_tag: 20, arch: "amd64" },
. + { builder_tag: 22, arch: "amd64" },
. + { builder_tag: 24, arch: "amd64" },
. + { builder_tag: 24, arch: "arm64" }
])
| flatten' \
)" >> $GITHUB_OUTPUT
rust-integration-test:
name: ${{ matrix.name }} (${{ matrix.builder_tag }}, ${{ matrix.arch }})
runs-on: ${{ matrix.arch == 'arm64' && 'pub-hk-ubuntu-24.04-arm-medium' || 'ubuntu-24.04' }}
env:
INTEGRATION_TEST_CNB_BUILDER: heroku/builder:${{ matrix.builder_tag }}
needs: find-libcnb-buildpacks
strategy:
fail-fast: false
matrix:
include: ${{ fromJson(needs.find-libcnb-buildpacks.outputs.libcnb-buildpacks) }}
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Install musl-tools
run: sudo apt-get install musl-tools -y --no-install-recommends
- name: Update Rust toolchain
run: rustup update
- name: Install Rust linux-musl target
run: rustup target add ${{ matrix.arch == 'arm64' && 'aarch64-unknown-linux-musl' || 'x86_64-unknown-linux-musl' }}
- name: Rust Cache
uses: Swatinem/[email protected]
- name: Install Pack CLI
uses: buildpacks/github-actions/[email protected]
- name: Pull builder image
run: docker pull ${{ env.INTEGRATION_TEST_CNB_BUILDER }}
- name: Pull run image
run: |
RUN_IMAGE=$(
docker inspect --format='{{index .Config.Labels "io.buildpacks.builder.metadata"}}' '${{ env.INTEGRATION_TEST_CNB_BUILDER }}' \
| jq --exit-status --raw-output '.stack.runImage.image'
)
docker pull "${RUN_IMAGE}"
- name: Run integration tests
working-directory: ${{ matrix.dir }}
run: cargo test --locked -- --ignored --test-threads 16
shpec:
runs-on: ubuntu-24.04
container:
image: heroku/heroku:${{ matrix.stack-version }}-build
strategy:
matrix:
stack-version:
- '20'
- '22'
buildpack-dir:
- buildpacks/npm
defaults:
run:
shell: bash
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Install shpec
run: sh -c "`curl -L https://raw.githubusercontent.com/rylnd/shpec/master/install.sh`"
- name: Shpec unit tests on heroku-${{ matrix.stack-version }}
run: shpec ${{ matrix.buildpack-dir }}/shpec/*_shpec.sh
metrics-test:
strategy:
fail-fast: false
matrix:
# check the minimum node version supported by the metrics script and the latest node version
# (assumes the versions between have backwards-compatible APIs)
version: [14.10.0, latest]
name: Test Metrics (${{ matrix.version }})
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: ${{ matrix.version }}
- run: npx mocha buildpacks/nodejs-engine/node_runtime_metrics/test/metrics.spec.cjs