refactor: [M3-8632] - Use pnpm
as our package manager
#20105
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
name: ci | |
on: | |
push: | |
branches: | |
- master | |
- staging | |
- develop | |
pull_request: | |
jobs: | |
lint: | |
strategy: | |
matrix: | |
package: ["@linode/manager", "@linode/api-v4", "@linode/validation", "@linode/ui"] | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: pnpm/action-setup@v4 | |
with: | |
run_install: false | |
- uses: actions/setup-node@v4 | |
with: | |
node-version: "20.17" | |
cache: "pnpm" | |
- run: pnpm install --frozen-lockfile | |
- run: pnpm run --filter ${{ matrix.package }} lint | |
build-validation: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: pnpm/action-setup@v4 | |
with: | |
run_install: false | |
- uses: actions/setup-node@v4 | |
with: | |
node-version: "20.17" | |
cache: "pnpm" | |
- run: pnpm install --frozen-lockfile | |
- run: pnpm run --filter @linode/validation build | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: packages-validation-lib | |
path: packages/validation/lib | |
publish-validation: | |
runs-on: ubuntu-latest | |
if: github.ref == 'refs/heads/master' | |
needs: build-validation | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: actions/download-artifact@v4 | |
with: | |
name: packages-validation-lib | |
path: packages/validation/lib | |
- uses: JS-DevTools/npm-publish@v1 | |
id: npm-publish | |
with: | |
token: ${{ secrets.NPM_AUTH_TOKEN }} | |
package: ./packages/validation/package.json | |
- name: slack-notify | |
uses: rtCamp/action-slack-notify@master | |
if: steps.npm-publish.outputs.type != 'none' | |
env: | |
SLACK_CHANNEL: api-js-client | |
SLACK_TITLE: "Linode Validation v${{ steps.npm-publish.outputs.version}}" | |
SLACK_MESSAGE: ":rocket: Linode Validation Library has been published to NPM: ${{ steps.npm-publish.outputs.old-version }} => ${{ steps.npm-publish.outputs.version }}. View the changelog at https://github.com/linode/manager/blob/master/packages/validation/CHANGELOG.md" | |
SLACK_USERNAME: npm-bot | |
SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK }} | |
SLACK_ICON_EMOJI: ":package:" | |
MSG_MINIMAL: true | |
test-sdk: | |
runs-on: ubuntu-latest | |
needs: build-validation | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: pnpm/action-setup@v4 | |
with: | |
run_install: false | |
- uses: actions/setup-node@v4 | |
with: | |
node-version: "20.17" | |
cache: "pnpm" | |
- run: pnpm install --frozen-lockfile | |
- uses: actions/download-artifact@v4 | |
with: | |
name: packages-validation-lib | |
path: packages/validation/lib | |
- run: pnpm run --filter @linode/api-v4 test | |
build-sdk: | |
runs-on: ubuntu-latest | |
needs: build-validation | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: pnpm/action-setup@v4 | |
with: | |
run_install: false | |
- uses: actions/setup-node@v4 | |
with: | |
node-version: "20.17" | |
cache: "pnpm" | |
- uses: actions/download-artifact@v4 | |
with: | |
name: packages-validation-lib | |
path: packages/validation/lib | |
- run: pnpm install --frozen-lockfile | |
- run: pnpm run --filter @linode/api-v4 build | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: packages-api-v4-lib | |
path: packages/api-v4/lib | |
validate-sdk: | |
runs-on: ubuntu-latest | |
needs: build-sdk | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: pnpm/action-setup@v4 | |
with: | |
run_install: false | |
- uses: actions/setup-node@v4 | |
with: | |
node-version: "20.17" | |
cache: "pnpm" | |
- run: pnpm install --frozen-lockfile | |
# Download the validation and api-v4 artifacts (built packages) | |
- uses: actions/download-artifact@v4 | |
with: | |
name: packages-validation-lib | |
path: packages/validation/lib | |
- uses: actions/download-artifact@v4 | |
with: | |
name: packages-api-v4-lib | |
path: packages/api-v4/lib | |
# Create an api-v4 tarball | |
- run: cd packages/api-v4 && npm pack --pack-destination ../../ | |
# Create an validation tarball | |
- run: cd packages/validation && npm pack --pack-destination ../../ | |
# Test @linode/api-v4 as an ES Module | |
- run: mkdir test-sdk-esm && cd test-sdk-esm && npm init es6 -y && npm install ../$(ls ../ | grep "linode-api-v4-.*\.tgz") ../$(ls ../ | grep "linode-validation-.*\.tgz") | |
- run: cp scripts/validatePackages/sdk-esm.js test-sdk-esm/ | |
- run: cd test-sdk-esm && node ./sdk-esm.js | |
# Verify @linode/api-v4 as CommonJS | |
- run: mkdir test-sdk-cjs && cd test-sdk-cjs && npm init -y && npm install ../$(ls ../ | grep "linode-api-v4-.*\.tgz") ../$(ls ../ | grep "linode-validation-.*\.tgz") | |
- run: cp scripts/validatePackages/sdk-commonjs.cjs test-sdk-cjs/ | |
- run: cd test-sdk-cjs && node ./sdk-commonjs.cjs | |
test-manager: | |
runs-on: ubuntu-latest | |
needs: build-sdk | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: pnpm/action-setup@v4 | |
with: | |
run_install: false | |
- uses: actions/setup-node@v4 | |
with: | |
node-version: "20.17" | |
cache: "pnpm" | |
- uses: actions/download-artifact@v4 | |
with: | |
name: packages-validation-lib | |
path: packages/validation/lib | |
- uses: actions/download-artifact@v4 | |
with: | |
name: packages-api-v4-lib | |
path: packages/api-v4/lib | |
- run: pnpm install --frozen-lockfile | |
- run: pnpm run --filter @linode/manager test | |
test-search: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: pnpm/action-setup@v4 | |
with: | |
run_install: false | |
- uses: actions/setup-node@v4 | |
with: | |
node-version: "20.17" | |
cache: "pnpm" | |
- run: pnpm install --frozen-lockfile | |
- run: pnpm run --filter @linode/search test | |
test-ui: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: pnpm/action-setup@v4 | |
with: | |
run_install: false | |
- uses: actions/setup-node@v4 | |
with: | |
node-version: "20.17" | |
cache: "pnpm" | |
- run: pnpm install --frozen-lockfile | |
- run: pnpm run --filter @linode/ui test | |
typecheck-ui: | |
runs-on: ubuntu-latest | |
needs: build-sdk | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: pnpm/action-setup@v4 | |
with: | |
run_install: false | |
- uses: actions/setup-node@v4 | |
with: | |
node-version: "20.17" | |
cache: "pnpm" | |
- run: pnpm install --frozen-lockfile | |
- run: pnpm run --filter @linode/ui typecheck | |
typecheck-manager: | |
runs-on: ubuntu-latest | |
needs: build-sdk | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: pnpm/action-setup@v4 | |
with: | |
run_install: false | |
- uses: actions/setup-node@v4 | |
with: | |
node-version: "20.17" | |
cache: "pnpm" | |
- uses: actions/download-artifact@v4 | |
with: | |
name: packages-validation-lib | |
path: packages/validation/lib | |
- uses: actions/download-artifact@v4 | |
with: | |
name: packages-api-v4-lib | |
path: packages/api-v4/lib | |
- run: pnpm install --frozen-lockfile | |
- run: pnpm run --filter @linode/manager typecheck | |
build-manager: | |
runs-on: ubuntu-latest | |
if: github.ref == 'refs/heads/master' | |
needs: build-sdk | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: pnpm/action-setup@v4 | |
with: | |
run_install: false | |
- uses: actions/setup-node@v4 | |
with: | |
node-version: "20.17" | |
cache: "pnpm" | |
- uses: actions/download-artifact@v4 | |
with: | |
name: packages-validation-lib | |
path: packages/validation/lib | |
- uses: actions/download-artifact@v4 | |
with: | |
name: packages-api-v4-lib | |
path: packages/api-v4/lib | |
- run: pnpm install --frozen-lockfile | |
- run: pnpm run --filter @linode/manager run build | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: packages-manager-build | |
path: packages/manager/build | |
publish-sdk: | |
runs-on: ubuntu-latest | |
if: github.ref == 'refs/heads/master' | |
needs: | |
- test-sdk | |
- validate-sdk | |
# If the validation publish failed we could have mismatched versions and a broken JS client | |
- publish-validation | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: actions/download-artifact@v4 | |
with: | |
name: packages-api-v4-lib | |
path: packages/api-v4/lib | |
- uses: JS-DevTools/npm-publish@v1 | |
id: npm-publish | |
with: | |
token: ${{ secrets.NPM_AUTH_TOKEN }} | |
package: ./packages/api-v4/package.json | |
- name: slack-notify | |
uses: rtCamp/action-slack-notify@master | |
if: steps.npm-publish.outputs.type != 'none' | |
env: | |
SLACK_CHANNEL: api-js-client | |
SLACK_TITLE: "Linode JS Client v${{ steps.npm-publish.outputs.version}}" | |
SLACK_MESSAGE: ":rocket: Linode JS Client has been published to NPM: ${{ steps.npm-publish.outputs.old-version }} => ${{ steps.npm-publish.outputs.version }}. View the changelog at https://github.com/linode/manager/blob/master/packages/api-v4/CHANGELOG.md" | |
SLACK_USERNAME: npm-bot | |
SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK }} | |
SLACK_ICON_EMOJI: ":package:" | |
MSG_MINIMAL: true | |
build-storybook: | |
runs-on: ubuntu-latest | |
needs: build-sdk | |
env: | |
NODE_OPTIONS: --max-old-space-size=4096 | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: pnpm/action-setup@v4 | |
with: | |
run_install: false | |
- uses: actions/setup-node@v4 | |
with: | |
node-version: "20.17" | |
cache: "pnpm" | |
- uses: actions/download-artifact@v4 | |
with: | |
name: packages-validation-lib | |
path: packages/validation/lib | |
- uses: actions/download-artifact@v4 | |
with: | |
name: packages-api-v4-lib | |
path: packages/api-v4/lib | |
- run: pnpm install --frozen-lockfile | |
- run: pnpm run --filter @linode/manager build-storybook | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: storybook-build | |
path: packages/manager/storybook-static | |
publish-storybook: | |
runs-on: ubuntu-latest | |
if: github.ref == 'refs/heads/master' | |
needs: build-storybook | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: actions/download-artifact@v4 | |
with: | |
name: storybook-build | |
path: storybook/build | |
- uses: jakejarvis/s3-sync-action@master | |
with: | |
args: --acl public-read --follow-symlinks --delete | |
env: | |
AWS_S3_ENDPOINT: https://us-east-1.linodeobjects.com | |
AWS_S3_BUCKET: ${{ secrets.STORYBOOK_BUCKET }} | |
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} | |
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} | |
AWS_REGION: us-east-1 | |
SOURCE_DIR: storybook/build |