diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 9a708a52..d7a7d52c 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -25,12 +25,22 @@ jobs: repository: 'microsoft/monaco-editor' path: './monaco-editor' + - name: Compute state + id: state + run: node ./monaco-editor/.github/workflows/publish/computeState.js "${{github.event_name}}" "${{github.event.inputs.nightly}}" + # outputs: version, vscode_branch, skip_monaco_editor_core, skip_monaco_editor + - name: (vscode) checkout uses: actions/checkout@v2 with: repository: 'microsoft/vscode' + ref: ${{ steps.state.outputs.vscode_branch }}" path: './vscode' + # TODO + - name: Early stop + run: exit 1 + - name: (vscode-loc) checkout uses: actions/checkout@v2 with: diff --git a/.github/workflows/publish/computeState.js b/.github/workflows/publish/computeState.js new file mode 100644 index 00000000..7c450105 --- /dev/null +++ b/.github/workflows/publish/computeState.js @@ -0,0 +1,96 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +//@ts-check + +const fs = require('fs'); +const cp = require('child_process'); +const packageJson = require('../../../package.json'); + +if (process.argv.length !== 4) { + console.error(`usage: node computeState.js <"workflow_dispatch"|"schedule"> <"true"|"false">`); + process.exit(1); +} + +const EVENT_NAME = /** @type {'workflow_dispatch'|'schedule'} */ (process.argv[2]); +const STR_NIGHTLY = /** @type {'true'|'false'|''} */ (process.argv[3]); + +if (!/^((workflow_dispatch)|(schedule))$/.test(EVENT_NAME)) { + console.error(`usage: node computeState.js <"workflow_dispatch"|"schedule"> <"true"|"false">`); + process.exit(2); +} + +if (!/^((true)|(false)|())$/.test(STR_NIGHTLY)) { + console.error(`usage: node computeState.js <"workflow_dispatch"|"schedule"> <"true"|"false">`); + process.exit(3); +} + +const NIGHTLY = EVENT_NAME === 'schedule' || STR_NIGHTLY === 'true'; + +const latestMonacoEditorVersion = npmGetLatestVersion('monaco-editor'); +const version = (() => { + if (NIGHTLY) { + const pieces = latestMonacoEditorVersion.split('.'); + const minor = parseInt(pieces[1], 10); + const date = new Date(); + const yyyy = date.getUTCFullYear(); + const mm = String(date.getUTCMonth() + 1).padStart(2, '0'); + const dd = String(date.getUTCDate()).padStart(2, '0'); + return `0.${minor + 1}.0-dev.${yyyy}${mm}${dd}`; + } else { + return packageJson.version; + } +})(); + +const vscodeBranch = (() => { + if (NIGHTLY) { + return 'main'; + } else { + return packageJson.vscode; + } +})(); + +const skipMonacoEditorCore = (() => { + return /** @type {'true'|'false'} */ (String(npmExists('monaco-editor-core', version))); +})(); + +const skipMonacoEditor = (() => { + return /** @type {'true'|'false'} */ (String(npmExists('monaco-editor-core', version))); +})(); + +console.log(` +::set-output name=version::${version} +::set-output name=vscode_branch::${vscodeBranch} +::set-output name=skip_monaco_editor_core::${skipMonacoEditorCore} +::set-output name=skip_monaco_editor::${skipMonacoEditor} +`); + +/** + * @param {string} packageName + * @returns {string} + */ +function npmGetLatestVersion(packageName) { + const output = cp.execSync(`npm show ${packageName} version`).toString(); + const version = output.split(/\r\n|\r|\n/g)[0]; + if (!/^0\.(\d+)\.(\d+)$/.test(version)) { + console.error(`version ${version} does not match 0.x.y`); + process.exit(1); + } + return version; +} + +/** + * @param {string} packageName + * @param {string} version + * @returns {boolean} + */ +function npmExists(packageName, version) { + const output = cp.execSync(`npm show ${packageName}@${version} version`).toString(); + const result = output.split(/\r\n|\r|\n/g)[0]; + if (result.trim().length === 0) { + return false; + } + return true; +} diff --git a/.github/workflows/publish/setNightlyVersion.js b/.github/workflows/publish/setNightlyVersion.js index 42473ef8..eefa0e3e 100644 --- a/.github/workflows/publish/setNightlyVersion.js +++ b/.github/workflows/publish/setNightlyVersion.js @@ -9,7 +9,7 @@ const fs = require('fs'); const cp = require('child_process'); if (process.argv.length !== 3) { - console.error(`usage: node updateVersion.js `); + console.error(`usage: node setNightlyVersion.js `); process.exit(1); }