name: Verdaccio Website CI on: workflow_dispatch: pull_request: paths: - 'website/**' - './.github/workflows/website.yml' schedule: - cron: '0 0 * * *' jobs: build: runs-on: ubuntu-latest env: NODE_OPTIONS: --max_old_space_size=4096 steps: - uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # tag=v3 - name: Use Node 16 uses: actions/setup-node@969bd2663942d722d85b6a8626225850c2f7be4b # tag=v3 with: node-version: 16 - name: Cache pnpm modules uses: actions/cache@56461b9eb0f8438fd15c7a9968e3c9ebb18ceff1 # tag=v3 env: cache-name: cache-pnpm-modules with: path: ~/.pnpm-store key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ matrix.node-version }}-${{ hashFiles('**/pnpm-lock.yaml') }} restore-keys: | ${{ runner.os }}-build-${{ env.cache-name }}-${{ matrix.node-version }}- - uses: pnpm/action-setup@c3b53f6a16e57305370b4ae5a540c2077a1d50dd # tag=v2.2.4 with: version: 6.32.15 run_install: | - recursive: true args: [--frozen-lockfile] - name: Build run: pnpm build - name: Build Translations percentage run: pnpm build --filter "@verdaccio/crowdin-translations" - name: Cache Docusaurus Build uses: actions/cache@56461b9eb0f8438fd15c7a9968e3c9ebb18ceff1 # tag=v3 with: path: website/node_modules/.cache/webpack key: cache/webpack-${{github.ref}}-${{ hashFiles('**/pnpm-lock.yaml') }} restore-keys: cache/webpack-${{github.ref}} # Will deploy to production on: # 1st: When a push occurs on master branch # 2nd: When we force the worflow dispatch through the UI - name: Build Production if: (github.event_name == 'push' && github.ref == 'refs/heads/master') || github.event_name == 'workflow_dispatch' env: CROWDIN_VERDACCIO_API_KEY: ${{ secrets.CROWDIN_VERDACCIO_API_KEY }} SENTRY_KEY: ${{ secrets.SENTRY_KEY }} CONTEXT: production run: pnpm netlify:build:production --filter ...@verdaccio/website - name: 🔥 Deploy Production Netlify if: (github.event_name == 'push' && github.ref == 'refs/heads/master') || github.event_name == 'workflow_dispatch' uses: semoal/action-netlify-deploy@1a53f098745bf78555d11b436f5ee3af87e6b566 with: github-token: ${{ secrets.GITHUB_TOKEN }} netlify-auth-token: ${{ secrets.NETLIFY_AUTH_TOKEN }} netlify-site-id: ${{ secrets.NETLIFY_SITE_ID }} build-dir: './website/build' # Will deploy to Preview URL, only when a pull request is open with changes on the website - name: Build Deployment Preview env: CONTEXT: deploy-preview run: pnpm netlify:build:deployPreview --filter ...@verdaccio/website - name: 🤖 Deploy Preview Netlify if: github.repository == 'verdaccio/verdaccio' uses: semoal/action-netlify-deploy@1a53f098745bf78555d11b436f5ee3af87e6b566 id: netlify_preview with: draft: true comment-on-pull-request: true github-deployment-is-production: false github-deployment-is-transient: true github-token: ${{ secrets.GITHUB_TOKEN }} netlify-auth-token: ${{ secrets.NETLIFY_AUTH_TOKEN }} netlify-site-id: ${{ secrets.NETLIFY_SITE_ID }} build-dir: './website/build' - name: Audit preview URL with Lighthouse if: github.repository == 'verdaccio/verdaccio' id: lighthouse_audit uses: treosh/lighthouse-ci-action@b4dfae3eb959c5226e2c5c6afd563d493188bfaf # tag=9.3.0 with: urls: | ${{ steps.netlify_preview.outputs.preview-url }} uploadArtifacts: true temporaryPublicStorage: true - name: Format lighthouse score id: format_lighthouse_score uses: actions/github-script@7dff1a87643417cf3b95bb10b29f4c4bc60d8ebd # tag=v6 with: github-token: ${{secrets.GITHUB_TOKEN}} script: | const result = ${{ steps.lighthouse_audit.outputs.manifest }}[0].summary const links = ${{ steps.lighthouse_audit.outputs.links }} const formatResult = (res) => Math.round((res * 100)) Object.keys(result).forEach(key => result[key] = formatResult(result[key])) const score = res => res >= 90 ? '🟢' : res >= 50 ? '🟠' : '🔴' const comment = [ `⚡️ [Lighthouse report](${Object.values(links)[0]}) for the changes in this PR:`, '| Category | Score |', '| --- | --- |', `| ${score(result.performance)} Performance | ${result.performance} |`, `| ${score(result.accessibility)} Accessibility | ${result.accessibility} |`, `| ${score(result['best-practices'])} Best practices | ${result['best-practices']} |`, `| ${score(result.seo)} SEO | ${result.seo} |`, ' ', `*Lighthouse ran on [${Object.keys(links)[0]}](${Object.keys(links)[0]})*` ].join('\n') core.setOutput("comment", comment); - name: Add comment to PR if: github.repository == 'verdaccio/verdaccio' id: comment_to_pr uses: marocchino/sticky-pull-request-comment@39c5b5dc7717447d0cba270cd115037d32d28443 # tag=v2 with: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} number: ${{ github.event.issue.number }} delete: true header: lighthouse message: | ${{ steps.format_lighthouse_score.outputs.comment }}