Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/main' into v2
Browse files Browse the repository at this point in the history
  • Loading branch information
timostamm committed Apr 19, 2024
2 parents 7775ee0 + 8252042 commit 9cf3b0b
Show file tree
Hide file tree
Showing 2 changed files with 76 additions and 0 deletions.
1 change: 1 addition & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -170,6 +170,7 @@ setversion: ## Set a new version in for the project, i.e. make setversion SET_VE
release: all ## Release @bufbuild/protobuf
@[ -z "$(shell git status --short)" ] || (echo "Uncommitted changes found." && exit 1);
npm publish \
--tag $(shell node scripts/get-workspace-publish-tag.js || kill $$PPID;) \
--workspace packages/protobuf \
--workspace packages/protoplugin \
--workspace packages/protoc-gen-es
Expand Down
75 changes: 75 additions & 0 deletions scripts/get-workspace-publish-tag.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
// Copyright 2021-2024 Buf Technologies, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

import { readdirSync, readFileSync } from "fs";
import { join } from "path";
import { existsSync } from "node:fs";

/*
USAGE: node get-workspace-publish-tag.js
Looks at the version used in the workspace, and returns one of:
- latest - for versions such as 3.1.4, 2.0.0, but also 0.1.2
- alpha - for versions such as 1.0.0-alpha.8
- beta - for versions such as 1.0.0-beta.8
- rc - for versions such as 1.0.0-rc.8
*/

const version = findWorkspaceVersion("packages");

if (/^\d\.\d\.\d$/.test(version)) {
process.stdout.write("latest");
} else if (/^\d\.\d\.\d-alpha.*$/.test(version)) {
process.stdout.write("alpha");
} else if (/^\d\.\d\.\d-beta.*$/.test(version)) {
process.stdout.write("beta");
} else if (/^\d\.\d\.\d-rc.*$/.test(version)) {
process.stdout.write("rc");
} else {
throw new Error(`Unable to determine publish tag from version ${version}`);
}

/**
* @param {string} packagesDir
* @returns {string}
*/
function findWorkspaceVersion(packagesDir) {
let version = undefined;
for (const entry of readdirSync(packagesDir, { withFileTypes: true })) {
if (!entry.isDirectory()) {
continue;
}
const path = join(packagesDir, entry.name, "package.json");
if (existsSync(path)) {
const pkg = JSON.parse(readFileSync(path, "utf-8"));
if (pkg.private === true) {
continue;
}
if (!pkg.version) {
throw new Error(`${path} is missing "version"`);
}
if (version === undefined) {
version = pkg.version;
} else if (version !== pkg.version) {
throw new Error(`${path} has unexpected version ${pkg.version}`);
}
}
}
if (version === undefined) {
throw new Error(`unable to find workspace version`);
}
return version;
}

0 comments on commit 9cf3b0b

Please sign in to comment.