Skip to content

Commit 3a2c0c0

Browse files
authored
fix: remove rules_shell dep (#23)
# Cleanup and Improve Bazel Module Configuration ### TL;DR Reorganize dependencies, implement a native `formatjs_verify_test` rule, and improve documentation. ### What changed? - Reorganized Bazel module dependencies: - Properly categorized core vs. development dependencies - Added descriptive comments for each dependency - Removed unused `rules_shell` dependency - Uncommented the `compatibility_level = 0` setting - Replaced the shell-based `formatjs_verify_test` macro with a native Bazel rule implementation: - Removed dependency on `rules_shell` - Improved error handling and test output - Enhanced documentation with better examples - Added links to FormatJS CLI documentation in all rule docstrings - Cleaned up test comments and improved readability in example code ### How to test? 1. Run the example tests to verify the new `formatjs_verify_test` rule works correctly: ``` bazel test //examples/simple/tests_verify/... ``` 2. Verify that the module loads correctly without the removed dependencies: ``` bazel build //... ``` ### Why make this change? - **Improved maintainability**: Native rule implementation is more robust than shell scripts - **Better developer experience**: Enhanced documentation and clearer dependency structure - **Reduced dependencies**: Removing `rules_shell` simplifies the dependency graph - **Consistency**: Better organization of the module structure follows Bazel best practices
1 parent 5da7705 commit 3a2c0c0

10 files changed

Lines changed: 180 additions & 151 deletions

File tree

MODULE.bazel

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ module(
1818
# https://bazelbuild.slack.com/archives/CA31HN1T3/p1750406404452179
1919

2020
# NOTE:
21-
# compatibility_level = 0,
21+
compatibility_level = 0,
2222
#
2323
# Bumping compatibility_level too frequently is discouraged because it's
2424
# very disruptive: as soon as a module is requested at two different
@@ -30,22 +30,18 @@ module(
3030
# (breaking) change.
3131
)
3232

33+
# Core dependencies required by rules_formatjs
3334
bazel_dep(name = "bazel_skylib", version = "1.8.2")
34-
bazel_dep(name = "package_metadata", version = "0.0.6")
35+
bazel_dep(name = "jq.bzl", version = "0.4.0") # JSON manipulation in aggregation aspect
36+
bazel_dep(name = "package_metadata", version = "0.0.6") # Package metadata for BCR
3537
bazel_dep(name = "platforms", version = "1.0.0")
3638

37-
# jq for JSON manipulation in aggregation aspect
38-
bazel_dep(name = "jq.bzl", version = "0.4.0")
39-
40-
# rules_shell for sh_test in verify rule
41-
bazel_dep(name = "rules_shell", version = "0.6.1")
42-
43-
bazel_dep(name = "gazelle", version = "0.47.0", dev_dependency = True, repo_name = "bazel_gazelle")
44-
bazel_dep(name = "bazel_skylib_gazelle_plugin", version = "1.8.2", dev_dependency = True)
39+
# Development dependencies
4540
bazel_dep(name = "bazel_lib", version = "3.0.0", dev_dependency = True)
41+
bazel_dep(name = "bazelrc-preset.bzl", version = "1.8.0", dev_dependency = True)
42+
bazel_dep(name = "bazel_skylib_gazelle_plugin", version = "1.8.2", dev_dependency = True)
4643
bazel_dep(name = "buildifier_prebuilt", version = "8.2.1", dev_dependency = True)
47-
48-
bazel_dep(name = "bazelrc-preset.bzl", version = "1.8.0")
44+
bazel_dep(name = "gazelle", version = "0.47.0", dev_dependency = True, repo_name = "bazel_gazelle")
4945

5046
# FormatJS CLI toolchain
5147
formatjs_cli = use_extension("//formatjs_cli:extensions.bzl", "formatjs_cli")

MODULE.bazel.lock

Lines changed: 1 addition & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

examples/aggregate/MODULE.bazel.lock

Lines changed: 1 addition & 5 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

examples/simple/MODULE.bazel.lock

Lines changed: 1 addition & 5 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

examples/simple/tests_verify/BUILD.bazel

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ formatjs_verify_test(
1616
# Test 2: Missing keys should fail (negative test)
1717
formatjs_verify_test(
1818
name = "test_missing_keys_fails",
19-
expected_exit_code = 1, # Expect failure
19+
expected_exit_code = 1,
2020
source_locale = "en",
2121
translations = [
2222
"en.json",
@@ -27,7 +27,7 @@ formatjs_verify_test(
2727
# Test 3: Extra keys should fail (negative test)
2828
formatjs_verify_test(
2929
name = "test_extra_keys_fails",
30-
expected_exit_code = 1, # Expect failure
30+
expected_exit_code = 1,
3131
source_locale = "en",
3232
translations = [
3333
"en.json",
@@ -38,7 +38,7 @@ formatjs_verify_test(
3838
# Test 4: Invalid format should fail (negative test)
3939
formatjs_verify_test(
4040
name = "test_invalid_format_fails",
41-
expected_exit_code = 1, # Expect failure
41+
expected_exit_code = 1,
4242
source_locale = "en",
4343
translations = [
4444
"en.json",
@@ -59,7 +59,7 @@ formatjs_verify_test(
5959
],
6060
)
6161

62-
# Test 6: Only check extra keys (expected to fail)
62+
# Test 6: Only check extra keys (passes - not checking for missing keys)
6363
formatjs_verify_test(
6464
name = "test_only_extra_keys",
6565
check_extra_keys = True,
@@ -68,7 +68,7 @@ formatjs_verify_test(
6868
source_locale = "en",
6969
translations = [
7070
"en.json",
71-
"de_missing_keys.json", # Missing keys but we're only checking for extra keys
71+
"de_missing_keys.json", # Missing keys but we're only checking for extra keys - should pass
7272
],
7373
)
7474

examples/simple/tests_verify/README.md

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ This directory contains comprehensive tests for the `formatjs_verify_test` rule.
4242
- Tests: en.json, es.json, fr.json
4343
- Expected: ✅ Pass
4444

45-
### Negative Tests (use `expected_exit_code=1`)
45+
### Negative Tests (using `expected_exit_code=1`)
4646

4747
These tests verify error detection by expecting the formatjs verify command to fail:
4848

@@ -106,7 +106,6 @@ formatjs_verify_test(
106106
"incomplete.json", # Missing some keys
107107
],
108108
expected_exit_code = 1, # We expect this to fail
109-
formatjs_cli = "//:formatjs_cli",
110109
)
111110
```
112111

formatjs/aggregate.bzl

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,9 @@ Aggregation can be used via:
3333
This module depends on:
3434
- `jq.bzl` toolchain for JSON merging and sorting operations
3535
- `FormatjsExtractInfo` provider from extract.bzl for message collection
36+
37+
For more information about FormatJS message aggregation workflows, see:
38+
https://formatjs.github.io/docs/tooling/cli
3639
"""
3740

3841
load(":extract.bzl", "FormatjsExtractInfo")
@@ -435,5 +438,6 @@ formatjs_aggregate = rule(
435438
- `formatjs_aggregate_aspect`: Lower-level aspect for advanced use cases
436439
- `formatjs_verify_test`: Verify translations against aggregated messages
437440
- `formatjs_compile`: Compile aggregated messages for production
441+
- FormatJS CLI documentation: https://formatjs.github.io/docs/tooling/cli
438442
""",
439443
)

formatjs/compile.bzl

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@ reduced bundle size in production applications.
77
88
Compiled messages are optimized for runtime performance and can be used directly
99
with react-intl or other FormatJS libraries.
10+
11+
For more information about the FormatJS CLI and its compilation features, see:
12+
https://formatjs.github.io/docs/tooling/cli
1013
"""
1114

1215
def _formatjs_compile_impl(ctx):
@@ -111,6 +114,7 @@ formatjs_compile = rule(
111114
112115
- `formatjs_extract`: Extract messages from source files
113116
- `formatjs_verify_test`: Verify translations before compilation
117+
- FormatJS CLI documentation: https://formatjs.github.io/docs/tooling/cli
114118
""",
115119
attrs = {
116120
"src": attr.label(

formatjs/extract.bzl

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,9 @@ The FormatJS CLI supports various message formats including:
1212
1313
Message IDs can be automatically generated using content-based hashing patterns,
1414
ensuring consistent IDs across your codebase.
15+
16+
For more information about the FormatJS CLI and its extraction features, see:
17+
https://formatjs.github.io/docs/tooling/cli
1518
"""
1619

1720
FormatjsExtractInfo = provider(
@@ -150,6 +153,7 @@ formatjs_extract = rule(
150153
- `formatjs_compile`: Compile messages for runtime use
151154
- `formatjs_aggregate`: Merge messages from multiple extraction targets
152155
- `formatjs_verify_test`: Verify translation files against extracted messages
156+
- FormatJS CLI documentation: https://formatjs.github.io/docs/tooling/cli
153157
""",
154158
attrs = {
155159
"srcs": attr.label_list(

0 commit comments

Comments
 (0)