# Publish Website workflow (microsoft/monaco-editor)

> The Publish Website workflow from microsoft/monaco-editor, explained and optimized by Latchkey.

Source: https://latchkey.dev/workflows/microsoft-monaco-editor-website  
Upstream: [microsoft/monaco-editor](https://github.com/microsoft/monaco-editor/blob/main/.github/workflows/website.yml) (.github/workflows/website.yml), licence MIT

## What it does

This is the Publish Website workflow from the microsoft/monaco-editor repository, a real project running GitHub Actions. It is shown here with attribution under its MIT license.

Below, Latchkey shows a faster, safer version produced by its optimization engine.

## The workflow

```yaml
name: Publish Website

on:
  schedule:
    - cron: 0 23 * * *
  workflow_dispatch: {}

# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages
permissions:
  contents: read
  pages: write
  id-token: write

# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued.
# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete.
concurrency:
  group: 'pages'
  cancel-in-progress: false

jobs:
  deploy:
    environment:
      name: github-pages
      url: ${{ steps.deployment.outputs.page_url }}
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v6
      - uses: actions/setup-node@v6
        with:
          node-version-file: .nvmrc
      - name: Cache node modules
        id: cacheNodeModules
        uses: actions/cache@v5
        with:
          path: '**/node_modules'
          key: ${{ runner.os }}-cacheNodeModules2-${{ hashFiles('**/package-lock.json') }}
          restore-keys: ${{ runner.os }}-cacheNodeModules2-
      - name: execute `npm ci` (1)
        if: ${{ steps.cacheNodeModules.outputs.cache-hit != 'true' }}
        run: npm ci

      # For TypeDoc
      - name: Build
        run: npm run build

      - name: Install website node modules
        working-directory: website
        run: npm ci

      - name: Install most recent version of monaco-editor
        working-directory: website
        run: npm install monaco-editor

      - name: Build website
        working-directory: website
        run: npm run build

      - name: Test website
        working-directory: website
        run: npm run test

      - name: Setup Pages
        uses: actions/configure-pages@v5
      - name: Upload artifact
        uses: actions/upload-pages-artifact@v4
        with:
          # Upload entire repository
          path: './website/dist'
      - name: Deploy to GitHub Pages
        id: deployment
        uses: actions/deploy-pages@v4
```

## FAQ

### What does the Publish Website workflow (microsoft/monaco-editor) workflow do?

This is the Publish Website workflow from the microsoft/monaco-editor repository, a real project running GitHub Actions. It is shown here with attribution under its MIT license.

### What CI health grade does this workflow get?

This Node.js workflow grades C. Paste your own workflow into the Latchkey grader to see its grade and the exact fixes.

### How can I improve this Node.js workflow?

Add caching and job timeouts. Latchkey applies these automatically on managed runners when you point runs-on at Latchkey.

---

Latchkey runs CI/CD that repairs its own failures. Agent entry points: https://latchkey.dev/agent.txt, https://latchkey.dev/openapi.json, https://latchkey.dev/llms.txt
