name: Publish to npm on: schedule: - cron: '0 7 * * *' # enable users to manually trigger with workflow_dispatch workflow_dispatch: inputs: nightly: description: 'is nightly?' required: true default: 'true' jobs: publish: name: Publish to npm runs-on: ubuntu-latest steps: - uses: actions/setup-node@v2 with: node-version: 14 - name: (monaco-editor) checkout uses: actions/checkout@v2 with: repository: 'microsoft/monaco-editor' path: './monaco-editor' - name: Compute state id: state run: | echo '::echo::on' node ./monaco-editor/.github/workflows/publish/computeState.js "${{github.event_name}}" "${{github.event.inputs.nightly}}" # outputs: dist_tag, version, vscode_branch, skip_monaco_editor_core, skip_monaco_editor - name: (vscode) checkout if: ${{ steps.state.outputs.skip_monaco_editor_core == 'false' }} uses: actions/checkout@v2 with: repository: 'microsoft/vscode' ref: ${{ steps.state.outputs.vscode_branch }} path: './vscode' - name: (vscode-loc) checkout if: ${{ steps.state.outputs.skip_monaco_editor_core == 'false' }} uses: actions/checkout@v2 with: repository: 'microsoft/vscode-loc' path: './vscode-loc' - name: (vscode) execute `yarn` if: ${{ steps.state.outputs.skip_monaco_editor_core == 'false' }} working-directory: './vscode' run: yarn --frozen-lockfile --network-timeout 180000 - name: (vscode) Run Hygiene Checks if: ${{ steps.state.outputs.skip_monaco_editor_core == 'false' }} working-directory: './vscode' run: yarn gulp hygiene - name: (vscode) Run Valid Layers Checks if: ${{ steps.state.outputs.skip_monaco_editor_core == 'false' }} working-directory: './vscode' run: yarn valid-layers-check - name: (vscode) Compile /build/ if: ${{ steps.state.outputs.skip_monaco_editor_core == 'false' }} working-directory: './vscode' run: yarn --cwd build compile - name: (vscode) Run eslint if: ${{ steps.state.outputs.skip_monaco_editor_core == 'false' }} working-directory: './vscode' run: yarn eslint - name: (vscode) Run Monaco Editor Checks if: ${{ steps.state.outputs.skip_monaco_editor_core == 'false' }} working-directory: './vscode' run: yarn monaco-compile-check - name: (vscode) Compile if: ${{ steps.state.outputs.skip_monaco_editor_core == 'false' }} working-directory: './vscode' run: yarn --max_old_space_size=4095 compile - name: (vscode) Run Unit Tests (Browser) if: ${{ steps.state.outputs.skip_monaco_editor_core == 'false' }} working-directory: './vscode' run: yarn test-browser --browser chromium - name: (vscode) Patch package.json version if: ${{ steps.state.outputs.skip_monaco_editor_core == 'false' }} run: node ./monaco-editor/.github/workflows/publish/setVersion.js ./vscode/build/monaco/package.json ${{ steps.state.outputs.version }} - name: (vscode) Editor Distro if: ${{ steps.state.outputs.skip_monaco_editor_core == 'false' }} working-directory: './vscode' run: yarn gulp editor-distro - name: (vscode) Typings validation prep if: ${{ steps.state.outputs.skip_monaco_editor_core == 'false' }} working-directory: './vscode' run: mkdir typings-test - name: (vscode) Typings validation if: ${{ steps.state.outputs.skip_monaco_editor_core == 'false' }} working-directory: ./vscode/typings-test run: | yarn init -yp ../node_modules/.bin/tsc --init echo "import '../out-monaco-editor-core';" > a.ts ../node_modules/.bin/tsc --noEmit - name: (vscode) Webpack Editor if: ${{ steps.state.outputs.skip_monaco_editor_core == 'false' }} working-directory: ./vscode/test/monaco run: yarn run bundle - name: (vscode) Compile Editor Tests if: ${{ steps.state.outputs.skip_monaco_editor_core == 'false' }} working-directory: ./vscode/test/monaco run: yarn run compile - name: (vscode) Download Playwright if: ${{ steps.state.outputs.skip_monaco_editor_core == 'false' }} working-directory: ./vscode run: yarn playwright-install - name: (vscode) Run Editor Tests if: ${{ steps.state.outputs.skip_monaco_editor_core == 'false' }} timeout-minutes: 5 working-directory: ./vscode/test/monaco run: yarn test - name: Set `npm` config if: ${{ steps.state.outputs.skip_monaco_editor_core == 'false' }} run: npm config set //registry.npmjs.org/:_authToken ${NPM_TOKEN} env: NPM_TOKEN: ${{ secrets.NPM_TOKEN }} - name: Publish `monaco-editor-core` if: ${{ steps.state.outputs.skip_monaco_editor_core == 'false' }} working-directory: './vscode/out-monaco-editor-core' run: npm publish --tag ${{ steps.state.outputs.dist_tag }} - name: Delete `npm` config if: ${{ steps.state.outputs.skip_monaco_editor_core == 'false' }} run: npm config delete //registry.npmjs.org/:_authToken - name: (monaco-editor) Patch package.json version if: ${{ steps.state.outputs.skip_monaco_editor == 'false' }} run: node ./monaco-editor/.github/workflows/publish/setVersion.js ./monaco-editor/package.json ${{ steps.state.outputs.version }} - name: (monaco-editor) execute `npm ci` (1) if: ${{ steps.state.outputs.skip_monaco_editor == 'false' }} working-directory: './monaco-editor' run: npm ci - name: (monaco-editor) execute `npm ci` (2) if: ${{ steps.state.outputs.skip_monaco_editor == 'false' }} working-directory: './monaco-editor/webpack-plugin' run: npm ci - name: (monaco-editor) Patch package.json monaco-editor-core dev dependency version if: ${{ steps.state.outputs.skip_monaco_editor == 'false' }} run: node ./monaco-editor/.github/workflows/publish/setDevDependencyVersion.js ./monaco-editor/package.json monaco-editor-core ${{ steps.state.outputs.version }} - name: (monaco-editor) execute `npm install` to pick up local monaco-editor-core if: ${{ steps.state.outputs.skip_monaco_editor == 'false' }} working-directory: './monaco-editor' run: npm install - name: (monaco-editor) Install OS Dependencies for Playwright if: ${{ steps.state.outputs.skip_monaco_editor == 'false' }} working-directory: './monaco-editor' run: sudo npm run playwright-install-deps - name: (monaco-editor) Check prettier if: ${{ steps.state.outputs.skip_monaco_editor == 'false' }} working-directory: './monaco-editor' run: npm run prettier-check - name: (monaco-editor) Build if: ${{ steps.state.outputs.skip_monaco_editor == 'false' }} working-directory: './monaco-editor' run: npm run release - name: (monaco-editor) Run unit tests if: ${{ steps.state.outputs.skip_monaco_editor == 'false' }} working-directory: './monaco-editor' run: npm test - name: (monaco-editor) Compile webpack plugin if: ${{ steps.state.outputs.skip_monaco_editor == 'false' }} working-directory: './monaco-editor' run: npm run compile --prefix webpack-plugin - name: (monaco-editor) Package using webpack plugin if: ${{ steps.state.outputs.skip_monaco_editor == 'false' }} working-directory: './monaco-editor' run: npm run package-for-smoketest --prefix webpack-plugin - name: (monaco-editor) Run smoke test if: ${{ steps.state.outputs.skip_monaco_editor == 'false' }} working-directory: './monaco-editor' run: npm run smoketest - name: (monaco-editor) Build website if: ${{ steps.state.outputs.skip_monaco_editor == 'false' }} working-directory: './monaco-editor' run: npm run build-website - name: Set `npm` config if: ${{ steps.state.outputs.skip_monaco_editor == 'false' }} run: npm config set //registry.npmjs.org/:_authToken ${NPM_TOKEN} env: NPM_TOKEN: ${{ secrets.NPM_TOKEN }} - name: Publish `monaco-editor` if: ${{ steps.state.outputs.skip_monaco_editor == 'false' }} working-directory: './monaco-editor/release' run: npm publish --tag ${{ steps.state.outputs.dist_tag }}