name: Verdaccio Website CI on: workflow_dispatch: pull_request: paths: - 'website/**' - './.github/workflows/website.yml' schedule: - cron: '0 0 * * *' permissions: contents: read # to fetch code (actions/checkout) jobs: build: permissions: contents: read # to fetch code (actions/checkout) deployments: write pull-requests: write # to comment on pull-requests runs-on: ubuntu-latest env: NODE_OPTIONS: --max_old_space_size=4096 steps: - uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3 - name: Use Node 16 uses: actions/setup-node@1a4442cacd436585916779262731d5b162bc6ec7 # v3 with: node-version: 16 - name: Cache pnpm modules uses: actions/cache@88522ab9f39a2ea568f7027eddc7d8d8bc9d59c8 # 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@d882d12c64e032187b2edb46d3a0d003b7a43598 # tag=v2.4.0 with: version: latest-8 run_install: | - recursive: true args: [--frozen-lockfile] - name: Build run: pnpm build - name: Build Translations percentage run: pnpm --filter @verdaccio/crowdin-translations build - name: Cache Docusaurus Build uses: actions/cache@88522ab9f39a2ea568f7027eddc7d8d8bc9d59c8 # 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 --filter @verdaccio/website netlify:build:production - 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 --filter ...@verdaccio/website netlify:build:deployPreview - 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@03becbfc543944dd6e7534f7ff768abb8a296826 # tag=10.1.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@d7906e4ad0b1822421a7e6a35d5ca353c962f410 # 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@efaaab3fd41a9c3de579aba759d2552635e590fd # v2 with: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} number: ${{ github.event.issue.number }} delete: true header: lighthouse message: | ${{ steps.format_lighthouse_score.outputs.comment }}