Skip to content

[M3-8991 + M3-6911] - Select Components + Managed Replacement #20681

[M3-8991 + M3-6911] - Select Components + Managed Replacement

[M3-8991 + M3-6911] - Select Components + Managed Replacement #20681

Workflow file for this run

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: actions/setup-node@v4
with:
node-version: "20.17"
- uses: actions/cache@v4
with:
path: |
**/node_modules
key: ${{ runner.os }}-${{ hashFiles('**/yarn.lock') }}
- run: yarn --frozen-lockfile
- run: yarn workspace ${{ matrix.package }} run lint
build-validation:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: "20.17"
- uses: actions/cache@v4
with:
path: |
**/node_modules
key: ${{ runner.os }}-${{ hashFiles('**/yarn.lock') }}
- run: yarn --frozen-lockfile
- run: yarn workspace @linode/validation run 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: actions/setup-node@v4
with:
node-version: "20.17"
- uses: actions/cache@v4
with:
path: |
**/node_modules
key: ${{ runner.os }}-${{ hashFiles('**/yarn.lock') }}
- run: yarn --frozen-lockfile
- uses: actions/download-artifact@v4
with:
name: packages-validation-lib
path: packages/validation/lib
- run: yarn workspace @linode/api-v4 run test
build-sdk:
runs-on: ubuntu-latest
needs: build-validation
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: "20.17"
- uses: actions/cache@v4
with:
path: |
**/node_modules
key: ${{ runner.os }}-${{ hashFiles('**/yarn.lock') }}
- uses: actions/download-artifact@v4
with:
name: packages-validation-lib
path: packages/validation/lib
- run: yarn --frozen-lockfile
- run: yarn workspace @linode/api-v4 run 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: actions/setup-node@v4
with:
node-version: "20.17"
# 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: actions/setup-node@v4
with:
node-version: "20.17"
- uses: actions/cache@v4
with:
path: |
**/node_modules
key: ${{ runner.os }}-${{ hashFiles('**/yarn.lock') }}
- 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: yarn --frozen-lockfile
- run: yarn workspace linode-manager run test
test-search:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: "20.17"
- uses: actions/cache@v4
with:
path: |
**/node_modules
key: ${{ runner.os }}-${{ hashFiles('**/yarn.lock') }}
- run: yarn --frozen-lockfile
- run: yarn workspace @linode/search run test
test-ui:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: "20.17"
- uses: actions/cache@v4
with:
path: |
**/node_modules
key: ${{ runner.os }}-${{ hashFiles('**/yarn.lock') }}
- run: yarn --frozen-lockfile
- run: yarn workspace @linode/ui run test
typecheck-ui:
runs-on: ubuntu-latest
needs: build-sdk
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: "20.17"
- uses: actions/cache@v4
with:
path: |
**/node_modules
key: ${{ runner.os }}-${{ hashFiles('**/yarn.lock') }}
- run: yarn --frozen-lockfile
- run: yarn workspace @linode/ui run typecheck
typecheck-manager:
runs-on: ubuntu-latest
needs: build-sdk
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: "20.17"
- uses: actions/cache@v4
with:
path: |
**/node_modules
key: ${{ runner.os }}-${{ hashFiles('**/yarn.lock') }}
- 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: yarn --frozen-lockfile
- run: yarn workspace linode-manager run typecheck
build-manager:
runs-on: ubuntu-latest
if: github.ref == 'refs/heads/master'
needs: build-sdk
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: "20.17"
- uses: actions/cache@v4
with:
path: |
**/node_modules
key: ${{ runner.os }}-${{ hashFiles('**/yarn.lock') }}
- 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: yarn --frozen-lockfile
- run: yarn workspace 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: actions/setup-node@v4
with:
node-version: "20.17"
- uses: actions/cache@v4
with:
path: |
**/node_modules
key: ${{ runner.os }}-${{ hashFiles('**/yarn.lock') }}
- 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: yarn --frozen-lockfile
- run: yarn workspace linode-manager run 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