Merge pull request #1363 from securityscorecard/PLAT-1438-button-corn… #4490
This file contains hidden or 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: CD | |
| permissions: | |
| contents: write | |
| packages: write | |
| on: | |
| push: | |
| jobs: | |
| unit-tests: | |
| name: '🛟 Run unit tests' | |
| runs-on: ubuntu-latest | |
| strategy: | |
| matrix: | |
| node: ['18','20','22.4.1'] | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| - name: Use Node.js | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: ${{ matrix.node }} | |
| - name: Cache yarn files | |
| uses: actions/cache@v4 | |
| id: cache | |
| with: | |
| path: | | |
| .yarn/install-state.gz | |
| node_modules | |
| key: node-modules-node-${{ matrix.node }}-${{ hashFiles('**/yarn.lock', '**/package.json') }} | |
| - name: Install Packages | |
| if: steps.cache.outputs.cache-hit != 'true' | |
| run: yarn install --immutable | |
| - name: Run Unit Tests | |
| run: yarn test | |
| types: | |
| name: '🪪 Check typings' | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| - name: Use Node.js | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: '22.4.1' | |
| - name: Cache yarn files | |
| uses: actions/cache@v4 | |
| id: cache | |
| with: | |
| path: | | |
| .yarn/install-state.gz | |
| node_modules | |
| key: node-modules-node-22.4.1-${{ hashFiles('**/yarn.lock', '**/package.json') }} | |
| - name: Install Packages | |
| if: steps.cache.outputs.cache-hit != 'true' | |
| run: yarn install --immutable | |
| - name: Run Types Check | |
| run: yarn types | |
| visual-tests: | |
| name: '🖼 Run visual tests' | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| - name: Use Node.js | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: '22.4.1' | |
| - name: Cache yarn files | |
| uses: actions/cache@v4 | |
| id: cache | |
| with: | |
| path: | | |
| .yarn/install-state.gz | |
| node_modules | |
| key: node-modules-node-22.4.1-${{ hashFiles('**/yarn.lock', '**/package.json') }} | |
| - name: Install Packages | |
| if: steps.cache.outputs.cache-hit != 'true' | |
| run: yarn install --immutable | |
| - name: Cache storybook build | |
| id: storybook-build-cache | |
| uses: actions/cache@v4 | |
| with: | |
| path: storybook-static | |
| key: storybook-tests-node-22.4.1-${{ hashFiles('**/yarn.lock', '**/package.json', 'src/**', '!.storybook/image-snapshots/**' ,'.storybook/**') }} | |
| - name: Build Storybook | |
| if: steps.storybook-build-cache.outputs.cache-hit != 'true' | |
| run: yarn storybook:build | |
| - name: Run Visual Regressions | |
| run: yarn test:storybook:visual:ci | |
| - name: Tar artifacts | |
| if: failure() | |
| run: tar -cvf visual-test-reports.tar .storybook/image-snapshots | |
| - name: Archive visual artifacts | |
| if: failure() | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: visual-test-reports | |
| path: visual-test-reports.tar | |
| a11y-tests: | |
| name: '♿ Check basic a11y tests' | |
| runs-on: ubuntu-latest | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| shard: ['1','2','3','4'] | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| - name: Use Node.js | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: '22.4.1' | |
| - name: Cache yarn files | |
| uses: actions/cache@v4 | |
| id: cache | |
| with: | |
| path: | | |
| .yarn/install-state.gz | |
| node_modules | |
| key: node-modules-node-22.4.1-${{ hashFiles('**/yarn.lock', '**/package.json') }} | |
| - name: Install Packages | |
| if: steps.cache.outputs.cache-hit != 'true' | |
| run: yarn install --immutable | |
| - name: Install Playwright Browsers | |
| run: npx playwright install chromium --with-deps | |
| - name: Cache storybook build | |
| id: storybook-build-cache | |
| uses: actions/cache@v4 | |
| with: | |
| path: storybook-static | |
| key: storybook-tests-node-22.4.1-${{ hashFiles('**/yarn.lock', '**/package.json', 'src/**', '!.storybook/image-snapshots/**' ,'.storybook/**') }} | |
| - name: Build Storybook | |
| if: steps.storybook-build-cache.outputs.cache-hit != 'true' | |
| run: yarn storybook:build | |
| - name: Run A11y tests | |
| id: 'a11yTests' | |
| run: yarn test:a11y:ci | |
| env: | |
| SHARD: ${{matrix.shard}} | |
| MAX_SHARDS: '4' | |
| - run: echo "OK" | |
| if: job.steps.a11yTests.status == failure() | |
| lint: | |
| name: '🧹 Run lint' | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| - name: Use Node.js | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: '22.4.1' | |
| - name: Cache yarn files | |
| uses: actions/cache@v4 | |
| id: cache | |
| with: | |
| path: | | |
| .yarn/install-state.gz | |
| node_modules | |
| key: node-modules-node-22.4.1-${{ hashFiles('**/yarn.lock', '**/package.json') }} | |
| - name: Install Packages | |
| if: steps.cache.outputs.cache-hit != 'true' | |
| run: yarn install --immutable | |
| - name: Run Lint | |
| run: yarn lint | |
| lint-css: | |
| name: '🎨 Lint CSS' | |
| runs-on: ubuntu-latest | |
| strategy: | |
| matrix: | |
| type: ['css', 'css-jsx'] | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| - name: Use Node.js | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: '22.4.1' | |
| - name: Cache yarn files | |
| uses: actions/cache@v4 | |
| id: cache | |
| with: | |
| path: | | |
| .yarn/install-state.gz | |
| node_modules | |
| key: node-modules-node-22.4.1-${{ hashFiles('**/yarn.lock', '**/package.json') }} | |
| - name: Install Packages | |
| if: steps.cache.outputs.cache-hit != 'true' | |
| run: yarn install --immutable | |
| - name: Run Lint | |
| run: yarn lint:${{matrix.type}} | |
| build: | |
| name: '🧰 Build package' | |
| runs-on: ubuntu-latest | |
| strategy: | |
| matrix: | |
| node: ['18','20','22.4.1'] | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| - name: Use Node.js | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: ${{ matrix.node }} | |
| - name: Cache yarn files | |
| uses: actions/cache@v4 | |
| id: cache | |
| with: | |
| path: | | |
| .yarn/install-state.gz | |
| node_modules | |
| key: node-modules-node-${{ matrix.node }}-${{ hashFiles('**/yarn.lock', '**/package.json') }} | |
| - name: Install Packages | |
| if: steps.cache.outputs.cache-hit != 'true' | |
| run: yarn install --immutable | |
| - name: Cache build | |
| id: library-build-cache | |
| uses: actions/cache@v4 | |
| with: | |
| path: build | |
| key: build-node-${{ matrix.node }}-${{ hashFiles('**/yarn.lock', '**/package.json', '**/rollup.config.js', 'src/**') }} | |
| - name: Build Step | |
| run: yarn build | |
| - uses: actions/upload-artifact@v4 | |
| with: | |
| name: bundle-stats-${{ matrix.node }} | |
| path: stats | |
| get-next-version: | |
| name: '📟 Get next released version' | |
| if: github.event_name == 'push' && (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/beta') && !contains(github.event.head_commit.message, 'chore(release):') | |
| continue-on-error: true | |
| needs: [unit-tests, visual-tests, types, lint, lint-css, build, a11y-tests] | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| - name: Setup Node.js | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: '22.4.1' | |
| - name: Cache yarn files | |
| uses: actions/cache@v4 | |
| id: cache | |
| with: | |
| path: | | |
| .yarn/install-state.gz | |
| node_modules | |
| key: node-modules-node-22.4.1-${{ hashFiles('**/yarn.lock', '**/package.json') }} | |
| - name: Install Packages | |
| if: steps.cache.outputs.cache-hit != 'true' | |
| run: yarn install --immutable | |
| - name: Run Semantic Release | |
| run: yarn semantic-release --dry-run | |
| id: get-next-version | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| - name: Show release | |
| run: | | |
| echo The new version will be released: ${{steps.get-next-version.outputs.new-release-published}} | |
| echo Number of the new vesion will be: ${{steps.get-next-version.outputs.new-release-version}} | |
| outputs: | |
| new-release-published: ${{ steps.get-next-version.outputs.new-release-published }} | |
| new-release-version: ${{ steps.get-next-version.outputs.new-release-version }} | |
| status: ${{ job.status }} | |
| build-and-publish: | |
| name: '🚀 Publish new version' | |
| if: github.event_name == 'push' && (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/beta') && !contains(github.event.head_commit.message, 'chore(release):') | |
| needs: get-next-version | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| - name: Use Node.js | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: '22.4.1' | |
| # Use repo .npmrc to route @securityscorecard to GitHub Packages | |
| - name: Cache yarn files | |
| uses: actions/cache@v4 | |
| id: cache | |
| with: | |
| path: | | |
| .yarn/install-state.gz | |
| node_modules | |
| key: node-modules-node-22.4.1-${{ hashFiles('**/yarn.lock', '**/package.json') }} | |
| - name: Install Packages | |
| if: steps.cache.outputs.cache-hit != 'true' | |
| run: yarn install --immutable | |
| - name: Cache build | |
| id: library-build-cache | |
| uses: actions/cache@v4 | |
| with: | |
| path: build | |
| key: build-node-22.4.1-${{ hashFiles('**/yarn.lock', '**/package.json', '**/rollup.config.js', 'src/**') }} | |
| - name: Build Step | |
| if: steps.library-build-cache.outputs.cache-hit != 'true' | |
| run: yarn build | |
| - name: Run Semantic Release | |
| run: yarn semantic-release | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| build-docs: | |
| name: '📒 Build documentation' | |
| if: needs.get-next-version.outputs.new-release-published == 'true' && needs.get-next-version.outputs.status == 'success' | |
| needs: [get-next-version, build-and-publish] | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 | |
| ref: main | |
| - name: Setup Node.js | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: '22.4.1' | |
| - name: Cache yarn files | |
| uses: actions/cache@v4 | |
| id: cache | |
| with: | |
| path: | | |
| .yarn/install-state.gz | |
| node_modules | |
| key: node-modules-node-22.4.1-${{ hashFiles('**/yarn.lock', '**/package.json') }} | |
| - name: Install Packages | |
| if: steps.cache.outputs.cache-hit != 'true' | |
| run: yarn install --immutable | |
| - name: Cache storybook build | |
| id: storybook-build-cache | |
| uses: actions/cache@v4 | |
| with: | |
| path: docs-build | |
| key: storybook-docs-${{ needs.get-next-version.outputs.new-release-version }}-${{ hashFiles('**/yarn.lock', '**/package.json', 'src/**', '!.storybook/image-snapshots/**' ,'.storybook/**') }} | |
| - name: Build Storybook | |
| if: steps.storybook-build-cache.outputs.cache-hit != 'true' | |
| env: | |
| DOCS: true | |
| VERSION: ${{ needs.get-next-version.outputs.new-release-version }} | |
| run: yarn storybook:build -o ./docs-build/${{ needs.get-next-version.outputs.new-release-version }} | |
| - name: Generate redirect index | |
| if: github.ref == 'refs/heads/main' | |
| env: | |
| VERSION: ${{ needs.get-next-version.outputs.new-release-version }} | |
| run: | | |
| yarn node ./scripts/generate-index.js | |
| - name: Upload Storybook artifact | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: storybook | |
| path: ./docs-build | |
| retention-days: 1 | |
| deploy-docs: | |
| name: '📤 Deploy documentation' | |
| needs: [get-next-version, build-docs] | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| with: | |
| ref: gh-pages | |
| - name: Download Storybook artifact | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: storybook | |
| - name: Commit storybook | |
| run: | | |
| git config --global user.name "Continuous Integration" | |
| git config --global user.email "username@users.noreply.github.com" | |
| git add -A | |
| git commit -m "Publish docs for ${{ needs.get-next-version.outputs.new-release-version }}" | |
| git push |