Skip to content

Commit e63a279

Browse files
committed
Add --version flag for protoc-gen-js
This flag is intended to be used directly against protoc-gen-js (e.g. protoc-gen-js --version) as opposed to being passed to the plugin via protoc. Additionally, in order to make version updating a bit easier (and more consistent), we also script version management based on the top-level package.json.
1 parent 5c70f21 commit e63a279

File tree

8 files changed

+72
-7
lines changed

8 files changed

+72
-7
lines changed

BUILD.bazel

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
1-
# Protobuf JS runtime
1+
# Protobuf JavaScript runtime
22
#
33
# See also code generation logic under generator/
44

55
load("@rules_pkg//:mappings.bzl", "pkg_attributes", "pkg_files", "strip_prefix")
66
load("@rules_pkg//:pkg.bzl", "pkg_tar", "pkg_zip")
77
load("//:protobuf_javascript_release.bzl", "package_naming")
88

9+
exports_files(["generate-version-header.js", "package.json"])
10+
911
config_setting(
1012
name = "x64_x86_windows",
1113
values = {"cpu": "x64_x86_windows"},
@@ -55,7 +57,7 @@ pkg_files(
5557
srcs = glob([
5658
"google/protobuf/*.js",
5759
"google/protobuf/compiler/*.js"
58-
]) + [
60+
], allow_empty = True) + [
5961
"google-protobuf.js",
6062
"package.json",
6163
"README.md",

MODULE.bazel.lock

Lines changed: 6 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

conformance/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
"LICENSE.md"
1212
],
1313
"dependencies": {
14-
"google-protobuf": "file:../google-protobuf-3.21.4.tgz"
14+
"google-protobuf": "file:../google-protobuf-4.0.0.tgz"
1515
},
1616
"author": "Google Protocol Buffers Team",
1717
"license": "BSD-3-Clause"

generate-version-header.js

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
const fs = require('fs');
2+
const path = require('path');
3+
4+
const version = require('./package.json').version;
5+
const headerContent = `// Generated by generate-version-header.js
6+
#ifndef PROTOBUF_JAVASCRIPT_VERSION_H__
7+
#define PROTOBUF_JAVASCRIPT_VERSION_H__
8+
9+
const char* const kProtobufJavascriptVersion = "${version}";
10+
11+
#endif // PROTOBUF_JAVASCRIPT_VERSION_H__
12+
`;
13+
14+
fs.writeFileSync(process.argv[2], headerContent);

generator/BUILD.bazel

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,11 @@
1+
genrule(
2+
name = "generate_version_header",
3+
srcs = ["//:package.json"],
4+
outs = ["version.h"],
5+
cmd = "node $(location //:generate-version-header.js) $(OUTS)",
6+
tools = ["//:generate-version-header.js"],
7+
)
8+
19
cc_binary(
210
name = "protoc-gen-js",
311
srcs = [
@@ -6,6 +14,7 @@ cc_binary(
614
"protoc-gen-js.cc",
715
"well_known_types_embed.cc",
816
"well_known_types_embed.h",
17+
":version.h",
918
],
1019
visibility = ["//visibility:public"],
1120
deps = [

generator/protoc-gen-js.cc

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,10 +29,19 @@
2929
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
3030

3131
#include <google/protobuf/compiler/plugin.h>
32+
#include <iostream>
33+
#include <string>
3234

3335
#include "generator/js_generator.h"
36+
#include "generator/version.h"
3437

3538
int main(int argc, char** argv) {
39+
for (int i = 1; i < argc; ++i) {
40+
if (std::string(argv[i]) == "--version") {
41+
std::cout << "protoc-gen-js version " << kProtobufJavascriptVersion << std::endl;
42+
return 0;
43+
}
44+
}
3645
std::unique_ptr<google::protobuf::compiler::CodeGenerator> generator(
3746
new google::protobuf::compiler::js::Generator());
3847
return google::protobuf::compiler::PluginMain(argc, argv, generator.get());

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
"jasmine": "~3.5.0"
2222
},
2323
"scripts": {
24+
"prebuild": "node update-bazel-versions.js",
2425
"build": "node ./node_modules/gulp/bin/gulp.js dist",
2526
"test": "node ./node_modules/gulp/bin/gulp.js test",
2627
"clean": "node ./node_modules/gulp/bin/gulp.js clean"

update-bazel-versions.js

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
const fs = require('fs');
2+
const path = require('path');
3+
4+
const version = require('./package.json').version;
5+
6+
// Update MODULE.bazel
7+
const moduleBazelPath = path.join(__dirname, 'MODULE.bazel');
8+
let moduleBazelContent = fs.readFileSync(moduleBazelPath, 'utf8');
9+
moduleBazelContent = moduleBazelContent.replace(/version = ".*"/, `version = "${version}"`);
10+
fs.writeFileSync(moduleBazelPath, moduleBazelContent);
11+
12+
// Update protobuf_javascript_release.bzl
13+
const releaseBzlPath = path.join(__dirname, 'protobuf_javascript_release.bzl');
14+
let releaseBzlContent = fs.readFileSync(releaseBzlPath, 'utf8');
15+
releaseBzlContent = releaseBzlContent.replace(/_PROTOBUF_JAVASCRIPT_VERSION = ".*"/, `_PROTOBUF_JAVASCRIPT_VERSION = "${version}"`);
16+
fs.writeFileSync(releaseBzlPath, releaseBzlContent);
17+
18+
// Update conformance/package.json
19+
const conformancePackageJsonPath =
20+
path.join(__dirname, 'conformance', 'package.json');
21+
let conformancePackageJsonContent =
22+
fs.readFileSync(conformancePackageJsonPath, 'utf8');
23+
const conformancePackageJson = JSON.parse(conformancePackageJsonContent);
24+
conformancePackageJson.dependencies['google-protobuf'] =
25+
`file:../google-protobuf-${version}.tgz`;
26+
fs.writeFileSync(
27+
conformancePackageJsonPath,
28+
JSON.stringify(conformancePackageJson, null, 2) + '\n');

0 commit comments

Comments
 (0)