diff --git a/.github/workflows/sync_release-manifest.yml b/.github/workflows/sync_release-manifest.yml index 48a0cc12ed..e41fc6604a 100644 --- a/.github/workflows/sync_release-manifest.yml +++ b/.github/workflows/sync_release-manifest.yml @@ -23,15 +23,8 @@ jobs: git config --global user.name 'Github versions workflow' - name: Create release run: | - node scripts/assemble-manifest.js ${{ github.event.inputs.version }} versions/v1/releases + node scripts/assemble-manifest.js ${{ github.event.inputs.version }} cd versions - if [[ "${{ github.event.inputs.version }}" == *"next"* ]]; then - echo Updating next tag - rm -f v1/tags/next && ln -s ../releases/${{ github.event.inputs.version }} v1/tags/next - else - echo Updating main tag - rm -f v1/tags/main && ln -s ../releases/${{ github.event.inputs.version }} v1/tags/main - fi git add . git commit -am "${{ github.event.inputs.version }}" git push diff --git a/scripts/assemble-manifest.js b/scripts/assemble-manifest.js index 9d16d83aa0..09ba3e9329 100755 --- a/scripts/assemble-manifest.js +++ b/scripts/assemble-manifest.js @@ -16,17 +16,21 @@ * limitations under the License. */ +const semver = require('semver'); const fs = require('fs-extra'); const { getPackages } = require('@manypkg/get-packages'); const path = require('path'); async function main() { - const [script, version, outputPath] = process.argv.slice(1); - if (!version || !outputPath) { - throw new Error(`Argument must be ${script} `); + const [script, version] = process.argv.slice(1); + if (!version) { + throw new Error(`Argument must be ${script} `); + } + if (!semver.valid(version)) { + throw new Error(`version '${version}' must be a valid semver`); } - const manifestDir = path.resolve(outputPath, version); + const manifestDir = path.resolve('versions', 'v1', 'releases', version); if (await fs.pathExists(manifestDir)) { throw new Error( `Release manifest path for version ${version} already exists`, @@ -49,9 +53,20 @@ async function main() { await fs.mkdir(manifestDir); await fs.writeJSON( path.resolve(manifestDir, 'manifest.json'), - { packages: versions }, + { releaseVersion: version, packages: versions }, { spaces: 2 }, ); + const tag = version.includes('next') ? 'next' : 'main'; + const tagPath = path.resolve('versions', 'v1', 'tags', tag); + const currentTag = await fs.readJSON(path.resolve(tagPath, 'manifest.json')); + if (semver.gt(currentTag.releaseVersion, version)) { + console.log( + `Skipping update of ${tagPath} since current current ${tag} version is ${currentTag.releaseVersion}`, + ); + return; + } + await fs.remove(tagPath); + await fs.ensureSymlink(path.join('..', 'releases', version), tagPath); } main().catch(error => {