├── .github └── workflows │ ├── auto-review.yml │ ├── ci.yml │ └── codeql-analysis.yml ├── .gitignore ├── BUILD ├── CONTRIBUTING.md ├── LICENSE ├── MODULE.bazel ├── MODULE.bazel.lock ├── Makefile ├── README.md ├── WORKSPACE ├── cronutils.spec ├── debian ├── changelog ├── compat ├── control ├── copyright ├── dirs ├── docs ├── gbp.conf ├── rules ├── source │ └── format └── watch ├── examples ├── regtest.sh ├── runalarm.1 ├── runalarm.c ├── runcron ├── runlock.1 ├── runlock.c ├── runstat.1 ├── runstat.c ├── subprocess.c ├── subprocess.h ├── tempdir.c ├── tempdir.h ├── tests ├── 1.out ├── 1.sh ├── 2.out ├── 2.sh ├── 3.out ├── 3.sh ├── 4.out ├── 4.sh ├── 5.out └── 5.sh └── version /.github/workflows/auto-review.yml: -------------------------------------------------------------------------------- 1 | # This is a single-maintainer project but I want to require reviews before 2 | # merge, which means that I need a bot to review my own work. 3 | name: Automatic pull request approvals 4 | on: 5 | pull_request_target: 6 | types: 7 | - opened 8 | - reopened 9 | - synchronize 10 | - ready_for_review 11 | check_suite: 12 | types: 13 | - completed 14 | jobs: 15 | auto-approve: 16 | runs-on: ubuntu-latest 17 | if: > 18 | github.event.pull_request.head.repo.full_name == github.repository && 19 | github.event.pull_request.draft == false && ( 20 | github.event.action == 'opened' || 21 | github.event.action == 'reopened' || 22 | github.event.action == 'synchronize' 23 | ) && ( 24 | github.actor == 'jaqx0r' 25 | ) 26 | permissions: 27 | # wait on check 28 | checks: read 29 | # create review 30 | pull-requests: write 31 | steps: 32 | - uses: lewagon/wait-on-check-action@v1.1.1 33 | with: 34 | ref: ${{ github.event.pull_request.head.sha }} 35 | check-name: test 36 | repo-token: ${{ github.token }} 37 | wait-interval: 60 38 | 39 | - uses: "actions/github-script@v5" 40 | with: 41 | github-token: ${{ github.token }} 42 | script: | 43 | await github.rest.pulls.createReview({ 44 | event: "APPROVE", 45 | owner: context.repo.owner, 46 | pull_number: context.payload.pull_request.number, 47 | repo: context.repo.repo, 48 | }) 49 | -------------------------------------------------------------------------------- /.github/workflows/ci.yml: -------------------------------------------------------------------------------- 1 | name: CI 2 | 3 | on: 4 | # Filter on branch so this isn't double-run on a PR's push 5 | push: 6 | tags: 7 | - v* 8 | - version* 9 | branches: 10 | - main 11 | pull_request: 12 | 13 | permissions: 14 | # none-all, which doesn't exist, but 15 | # https://docs.github.com/en/actions/reference/authentication-in-a-workflow#using-the-github_token-in-a-workflow 16 | # implies that the token still gets created. Elsewhere we learn that any 17 | # permission not mentioned here gets turned to `none`. 18 | actions: none 19 | 20 | jobs: 21 | test: 22 | runs-on: ubuntu-latest 23 | steps: 24 | - uses: actions/checkout@v2 25 | - name: test 26 | run: make test 27 | - uses: codecov/codecov-action@v2.1.0 28 | if: always() 29 | with: 30 | directory: . 31 | 32 | fmt-lint: 33 | runs-on: ubuntu-latest 34 | steps: 35 | - uses: actions/checkout@v2 36 | - uses: jidicula/clang-format-action@v4.3.1 37 | with: 38 | fallback-style: "Google" 39 | -------------------------------------------------------------------------------- /.github/workflows/codeql-analysis.yml: -------------------------------------------------------------------------------- 1 | # For most projects, this workflow file will not need changing; you simply need 2 | # to commit it to your repository. 3 | # 4 | # You may wish to alter this file to override the set of languages analyzed, 5 | # or to provide custom queries or build logic. 6 | # 7 | # ******** NOTE ******** 8 | # We have attempted to detect the languages in your repository. Please check 9 | # the `language` matrix defined below to confirm you have the correct set of 10 | # supported CodeQL languages. 11 | # 12 | name: "CodeQL" 13 | 14 | on: 15 | push: 16 | branches: [ master ] 17 | pull_request: 18 | # The branches below must be a subset of the branches above 19 | branches: [ master ] 20 | schedule: 21 | - cron: '38 5 * * 3' 22 | 23 | jobs: 24 | analyze: 25 | name: Analyze 26 | runs-on: ubuntu-latest 27 | 28 | strategy: 29 | fail-fast: false 30 | matrix: 31 | language: [ 'cpp' ] 32 | # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python' ] 33 | # Learn more: 34 | # https://docs.github.com/en/free-pro-team@latest/github/finding-security-vulnerabilities-and-errors-in-your-code/configuring-code-scanning#changing-the-languages-that-are-analyzed 35 | 36 | steps: 37 | - name: Checkout repository 38 | uses: actions/checkout@v2 39 | 40 | # Initializes the CodeQL tools for scanning. 41 | - name: Initialize CodeQL 42 | uses: github/codeql-action/init@v1 43 | with: 44 | languages: ${{ matrix.language }} 45 | # If you wish to specify custom queries, you can do so here or in a config file. 46 | # By default, queries listed here will override any specified in a config file. 47 | # Prefix the list here with "+" to use these queries and those in the config file. 48 | # queries: ./path/to/local/query, your-org/your-repo/queries@main 49 | 50 | # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). 51 | # If this step fails, then you should remove it and run the build manually (see below) 52 | - name: Autobuild 53 | uses: github/codeql-action/autobuild@v1 54 | 55 | # ℹ️ Command-line programs to run using the OS shell. 56 | # 📚 https://git.io/JvXDl 57 | 58 | # ✏️ If the Autobuild fails above, remove it and uncomment the following three lines 59 | # and modify them (or add more) to build your code if your project 60 | # uses a compiled language 61 | 62 | #- run: | 63 | # make bootstrap 64 | # make release 65 | 66 | - name: Perform CodeQL Analysis 67 | uses: github/codeql-action/analyze@v1 68 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | runalarm 2 | runlock 3 | runstat 4 | debian/cronutils/* 5 | debian/cronutils.substvars 6 | debian/cronutils.debhelper.log 7 | debian/files 8 | debian/patches 9 | .pc 10 | /*.gcov 11 | /*.gcda 12 | /*.gcno 13 | /bazel-bin 14 | /bazel-cronutils 15 | /bazel-out 16 | /bazel-testlogs 17 | -------------------------------------------------------------------------------- /BUILD: -------------------------------------------------------------------------------- 1 | cc_library( 2 | name = "subprocess", 3 | srcs = ["subprocess.c"], 4 | hdrs = ["subprocess.h"], 5 | ) 6 | 7 | cc_library( 8 | name = "tempdir", 9 | srcs = ["tempdir.c"], 10 | hdrs = ["tempdir.h"], 11 | ) 12 | 13 | cc_binary( 14 | name = "runalarm", 15 | srcs = ["runalarm.c"], 16 | deps = [":subprocess"], 17 | ) 18 | 19 | cc_binary( 20 | name = "runlock", 21 | srcs = ["runlock.c"], 22 | deps = [ 23 | ":subprocess", 24 | ":tempdir", 25 | ], 26 | ) 27 | 28 | cc_binary( 29 | name = "runstat", 30 | srcs = ["runstat.c"], 31 | deps = [ 32 | ":subprocess", 33 | ":tempdir", 34 | ], 35 | ) 36 | 37 | filegroup( 38 | name = "tests", 39 | srcs = glob(["tests/*.sh"]), 40 | ) 41 | 42 | filegroup( 43 | name = "goldens", 44 | srcs = glob(["tests/*.out"]), 45 | ) 46 | 47 | sh_test( 48 | name = "regtest", 49 | srcs = ["regtest.sh"], 50 | data = [ 51 | ":goldens", 52 | ":runalarm", 53 | ":runlock", 54 | ":runstat", 55 | ":tests", 56 | ], 57 | ) 58 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | Want to contribute? Great! First, read this page (including the small print at the end). 2 | 3 | ### Before you contribute 4 | Before we can use your code, you must sign the 5 | [Google Individual Contributor License Agreement](https://developers.google.com/open-source/cla/individual?csw=1) 6 | (CLA), which you can do online. The CLA is necessary mainly because you own the 7 | copyright to your changes, even after your contribution becomes part of our 8 | codebase, so we need your permission to use and distribute your code. We also 9 | need to be sure of various other things—for instance that you'll tell us if you 10 | know that your code infringes on other people's patents. You don't have to sign 11 | the CLA until after you've submitted your code for review and a member has 12 | approved it, but you must do it before we can put your code into our codebase. 13 | Before you start working on a larger contribution, you should get in touch with 14 | us first through the issue tracker with your idea so that we can help out and 15 | possibly guide you. Coordinating up front makes it much easier to avoid 16 | frustration later on. 17 | 18 | ### Code reviews 19 | All submissions, including submissions by project members, require review. We 20 | use Github pull requests for this purpose. 21 | 22 | ### The small print 23 | Contributions made by corporations are covered by a different agreement than 24 | the one above, the Software Grant and Corporate Contributor License Agreement. 25 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | 2 | Apache License 3 | Version 2.0, January 2004 4 | http://www.apache.org/licenses/ 5 | 6 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 7 | 8 | 1. Definitions. 9 | 10 | "License" shall mean the terms and conditions for use, reproduction, 11 | and distribution as defined by Sections 1 through 9 of this document. 12 | 13 | "Licensor" shall mean the copyright owner or entity authorized by 14 | the copyright owner that is granting the License. 15 | 16 | "Legal Entity" shall mean the union of the acting entity and all 17 | other entities that control, are controlled by, or are under common 18 | control with that entity. For the purposes of this definition, 19 | "control" means (i) the power, direct or indirect, to cause the 20 | direction or management of such entity, whether by contract or 21 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 22 | outstanding shares, or (iii) beneficial ownership of such entity. 23 | 24 | "You" (or "Your") shall mean an individual or Legal Entity 25 | exercising permissions granted by this License. 26 | 27 | "Source" form shall mean the preferred form for making modifications, 28 | including but not limited to software source code, documentation 29 | source, and configuration files. 30 | 31 | "Object" form shall mean any form resulting from mechanical 32 | transformation or translation of a Source form, including but 33 | not limited to compiled object code, generated documentation, 34 | and conversions to other media types. 35 | 36 | "Work" shall mean the work of authorship, whether in Source or 37 | Object form, made available under the License, as indicated by a 38 | copyright notice that is included in or attached to the work 39 | (an example is provided in the Appendix below). 40 | 41 | "Derivative Works" shall mean any work, whether in Source or Object 42 | form, that is based on (or derived from) the Work and for which the 43 | editorial revisions, annotations, elaborations, or other modifications 44 | represent, as a whole, an original work of authorship. For the purposes 45 | of this License, Derivative Works shall not include works that remain 46 | separable from, or merely link (or bind by name) to the interfaces of, 47 | the Work and Derivative Works thereof. 48 | 49 | "Contribution" shall mean any work of authorship, including 50 | the original version of the Work and any modifications or additions 51 | to that Work or Derivative Works thereof, that is intentionally 52 | submitted to Licensor for inclusion in the Work by the copyright owner 53 | or by an individual or Legal Entity authorized to submit on behalf of 54 | the copyright owner. For the purposes of this definition, "submitted" 55 | means any form of electronic, verbal, or written communication sent 56 | to the Licensor or its representatives, including but not limited to 57 | communication on electronic mailing lists, source code control systems, 58 | and issue tracking systems that are managed by, or on behalf of, the 59 | Licensor for the purpose of discussing and improving the Work, but 60 | excluding communication that is conspicuously marked or otherwise 61 | designated in writing by the copyright owner as "Not a Contribution." 62 | 63 | "Contributor" shall mean Licensor and any individual or Legal Entity 64 | on behalf of whom a Contribution has been received by Licensor and 65 | subsequently incorporated within the Work. 66 | 67 | 2. Grant of Copyright License. Subject to the terms and conditions of 68 | this License, each Contributor hereby grants to You a perpetual, 69 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 70 | copyright license to reproduce, prepare Derivative Works of, 71 | publicly display, publicly perform, sublicense, and distribute the 72 | Work and such Derivative Works in Source or Object form. 73 | 74 | 3. Grant of Patent License. Subject to the terms and conditions of 75 | this License, each Contributor hereby grants to You a perpetual, 76 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 77 | (except as stated in this section) patent license to make, have made, 78 | use, offer to sell, sell, import, and otherwise transfer the Work, 79 | where such license applies only to those patent claims licensable 80 | by such Contributor that are necessarily infringed by their 81 | Contribution(s) alone or by combination of their Contribution(s) 82 | with the Work to which such Contribution(s) was submitted. If You 83 | institute patent litigation against any entity (including a 84 | cross-claim or counterclaim in a lawsuit) alleging that the Work 85 | or a Contribution incorporated within the Work constitutes direct 86 | or contributory patent infringement, then any patent licenses 87 | granted to You under this License for that Work shall terminate 88 | as of the date such litigation is filed. 89 | 90 | 4. Redistribution. You may reproduce and distribute copies of the 91 | Work or Derivative Works thereof in any medium, with or without 92 | modifications, and in Source or Object form, provided that You 93 | meet the following conditions: 94 | 95 | (a) You must give any other recipients of the Work or 96 | Derivative Works a copy of this License; and 97 | 98 | (b) You must cause any modified files to carry prominent notices 99 | stating that You changed the files; and 100 | 101 | (c) You must retain, in the Source form of any Derivative Works 102 | that You distribute, all copyright, patent, trademark, and 103 | attribution notices from the Source form of the Work, 104 | excluding those notices that do not pertain to any part of 105 | the Derivative Works; and 106 | 107 | (d) If the Work includes a "NOTICE" text file as part of its 108 | distribution, then any Derivative Works that You distribute must 109 | include a readable copy of the attribution notices contained 110 | within such NOTICE file, excluding those notices that do not 111 | pertain to any part of the Derivative Works, in at least one 112 | of the following places: within a NOTICE text file distributed 113 | as part of the Derivative Works; within the Source form or 114 | documentation, if provided along with the Derivative Works; or, 115 | within a display generated by the Derivative Works, if and 116 | wherever such third-party notices normally appear. The contents 117 | of the NOTICE file are for informational purposes only and 118 | do not modify the License. You may add Your own attribution 119 | notices within Derivative Works that You distribute, alongside 120 | or as an addendum to the NOTICE text from the Work, provided 121 | that such additional attribution notices cannot be construed 122 | as modifying the License. 123 | 124 | You may add Your own copyright statement to Your modifications and 125 | may provide additional or different license terms and conditions 126 | for use, reproduction, or distribution of Your modifications, or 127 | for any such Derivative Works as a whole, provided Your use, 128 | reproduction, and distribution of the Work otherwise complies with 129 | the conditions stated in this License. 130 | 131 | 5. Submission of Contributions. Unless You explicitly state otherwise, 132 | any Contribution intentionally submitted for inclusion in the Work 133 | by You to the Licensor shall be under the terms and conditions of 134 | this License, without any additional terms or conditions. 135 | Notwithstanding the above, nothing herein shall supersede or modify 136 | the terms of any separate license agreement you may have executed 137 | with Licensor regarding such Contributions. 138 | 139 | 6. Trademarks. This License does not grant permission to use the trade 140 | names, trademarks, service marks, or product names of the Licensor, 141 | except as required for reasonable and customary use in describing the 142 | origin of the Work and reproducing the content of the NOTICE file. 143 | 144 | 7. Disclaimer of Warranty. Unless required by applicable law or 145 | agreed to in writing, Licensor provides the Work (and each 146 | Contributor provides its Contributions) on an "AS IS" BASIS, 147 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 148 | implied, including, without limitation, any warranties or conditions 149 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 150 | PARTICULAR PURPOSE. You are solely responsible for determining the 151 | appropriateness of using or redistributing the Work and assume any 152 | risks associated with Your exercise of permissions under this License. 153 | 154 | 8. Limitation of Liability. In no event and under no legal theory, 155 | whether in tort (including negligence), contract, or otherwise, 156 | unless required by applicable law (such as deliberate and grossly 157 | negligent acts) or agreed to in writing, shall any Contributor be 158 | liable to You for damages, including any direct, indirect, special, 159 | incidental, or consequential damages of any character arising as a 160 | result of this License or out of the use or inability to use the 161 | Work (including but not limited to damages for loss of goodwill, 162 | work stoppage, computer failure or malfunction, or any and all 163 | other commercial damages or losses), even if such Contributor 164 | has been advised of the possibility of such damages. 165 | 166 | 9. Accepting Warranty or Additional Liability. While redistributing 167 | the Work or Derivative Works thereof, You may choose to offer, 168 | and charge a fee for, acceptance of support, warranty, indemnity, 169 | or other liability obligations and/or rights consistent with this 170 | License. However, in accepting such obligations, You may act only 171 | on Your own behalf and on Your sole responsibility, not on behalf 172 | of any other Contributor, and only if You agree to indemnify, 173 | defend, and hold each Contributor harmless for any liability 174 | incurred by, or claims asserted against, such Contributor by reason 175 | of your accepting any such warranty or additional liability. 176 | 177 | END OF TERMS AND CONDITIONS 178 | 179 | APPENDIX: How to apply the Apache License to your work. 180 | 181 | To apply the Apache License to your work, attach the following 182 | boilerplate notice, with the fields enclosed by brackets "[]" 183 | replaced with your own identifying information. (Don't include 184 | the brackets!) The text should be enclosed in the appropriate 185 | comment syntax for the file format. We also recommend that a 186 | file or class name and description of purpose be included on the 187 | same "printed page" as the copyright notice for easier 188 | identification within third-party archives. 189 | 190 | Copyright [yyyy] [name of copyright owner] 191 | 192 | Licensed under the Apache License, Version 2.0 (the "License"); 193 | you may not use this file except in compliance with the License. 194 | You may obtain a copy of the License at 195 | 196 | http://www.apache.org/licenses/LICENSE-2.0 197 | 198 | Unless required by applicable law or agreed to in writing, software 199 | distributed under the License is distributed on an "AS IS" BASIS, 200 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 201 | See the License for the specific language governing permissions and 202 | limitations under the License. 203 | -------------------------------------------------------------------------------- /MODULE.bazel: -------------------------------------------------------------------------------- 1 | ############################################################################### 2 | # Bazel now uses Bzlmod by default to manage external dependencies. 3 | # Please consider migrating your external dependencies from WORKSPACE to MODULE.bazel. 4 | # 5 | # For more details, please check https://github.com/bazelbuild/bazel/issues/18958 6 | ############################################################################### 7 | -------------------------------------------------------------------------------- /MODULE.bazel.lock: -------------------------------------------------------------------------------- 1 | { 2 | "lockFileVersion": 6, 3 | "moduleFileHash": "0e3e315145ac7ee7a4e0ac825e1c5e03c068ec1254dd42c3caaecb27e921dc4d", 4 | "flags": { 5 | "cmdRegistries": [ 6 | "https://bcr.bazel.build/" 7 | ], 8 | "cmdModuleOverrides": {}, 9 | "allowedYankedVersions": [], 10 | "envVarAllowedYankedVersions": "", 11 | "ignoreDevDependency": false, 12 | "directDependenciesMode": "WARNING", 13 | "compatibilityMode": "ERROR" 14 | }, 15 | "localOverrideHashes": { 16 | "bazel_tools": "1ae69322ac3823527337acf02016e8ee95813d8d356f47060255b8956fa642f0" 17 | }, 18 | "moduleDepGraph": { 19 | "": { 20 | "name": "", 21 | "version": "", 22 | "key": "", 23 | "repoName": "", 24 | "executionPlatformsToRegister": [], 25 | "toolchainsToRegister": [], 26 | "extensionUsages": [], 27 | "deps": { 28 | "bazel_tools": "bazel_tools@_", 29 | "local_config_platform": "local_config_platform@_" 30 | } 31 | }, 32 | "bazel_tools@_": { 33 | "name": "bazel_tools", 34 | "version": "", 35 | "key": "bazel_tools@_", 36 | "repoName": "bazel_tools", 37 | "executionPlatformsToRegister": [], 38 | "toolchainsToRegister": [ 39 | "@local_config_cc_toolchains//:all", 40 | "@local_config_sh//:local_sh_toolchain" 41 | ], 42 | "extensionUsages": [ 43 | { 44 | "extensionBzlFile": "@bazel_tools//tools/cpp:cc_configure.bzl", 45 | "extensionName": "cc_configure_extension", 46 | "usingModule": "bazel_tools@_", 47 | "location": { 48 | "file": "@@bazel_tools//:MODULE.bazel", 49 | "line": 18, 50 | "column": 29 51 | }, 52 | "imports": { 53 | "local_config_cc": "local_config_cc", 54 | "local_config_cc_toolchains": "local_config_cc_toolchains" 55 | }, 56 | "devImports": [], 57 | "tags": [], 58 | "hasDevUseExtension": false, 59 | "hasNonDevUseExtension": true 60 | }, 61 | { 62 | "extensionBzlFile": "@bazel_tools//tools/osx:xcode_configure.bzl", 63 | "extensionName": "xcode_configure_extension", 64 | "usingModule": "bazel_tools@_", 65 | "location": { 66 | "file": "@@bazel_tools//:MODULE.bazel", 67 | "line": 22, 68 | "column": 32 69 | }, 70 | "imports": { 71 | "local_config_xcode": "local_config_xcode" 72 | }, 73 | "devImports": [], 74 | "tags": [], 75 | "hasDevUseExtension": false, 76 | "hasNonDevUseExtension": true 77 | }, 78 | { 79 | "extensionBzlFile": "@rules_java//java:extensions.bzl", 80 | "extensionName": "toolchains", 81 | "usingModule": "bazel_tools@_", 82 | "location": { 83 | "file": "@@bazel_tools//:MODULE.bazel", 84 | "line": 25, 85 | "column": 32 86 | }, 87 | "imports": { 88 | "local_jdk": "local_jdk", 89 | "remote_java_tools": "remote_java_tools", 90 | "remote_java_tools_linux": "remote_java_tools_linux", 91 | "remote_java_tools_windows": "remote_java_tools_windows", 92 | "remote_java_tools_darwin_x86_64": "remote_java_tools_darwin_x86_64", 93 | "remote_java_tools_darwin_arm64": "remote_java_tools_darwin_arm64" 94 | }, 95 | "devImports": [], 96 | "tags": [], 97 | "hasDevUseExtension": false, 98 | "hasNonDevUseExtension": true 99 | }, 100 | { 101 | "extensionBzlFile": "@bazel_tools//tools/sh:sh_configure.bzl", 102 | "extensionName": "sh_configure_extension", 103 | "usingModule": "bazel_tools@_", 104 | "location": { 105 | "file": "@@bazel_tools//:MODULE.bazel", 106 | "line": 36, 107 | "column": 39 108 | }, 109 | "imports": { 110 | "local_config_sh": "local_config_sh" 111 | }, 112 | "devImports": [], 113 | "tags": [], 114 | "hasDevUseExtension": false, 115 | "hasNonDevUseExtension": true 116 | }, 117 | { 118 | "extensionBzlFile": "@bazel_tools//tools/test:extensions.bzl", 119 | "extensionName": "remote_coverage_tools_extension", 120 | "usingModule": "bazel_tools@_", 121 | "location": { 122 | "file": "@@bazel_tools//:MODULE.bazel", 123 | "line": 40, 124 | "column": 48 125 | }, 126 | "imports": { 127 | "remote_coverage_tools": "remote_coverage_tools" 128 | }, 129 | "devImports": [], 130 | "tags": [], 131 | "hasDevUseExtension": false, 132 | "hasNonDevUseExtension": true 133 | }, 134 | { 135 | "extensionBzlFile": "@bazel_tools//tools/android:android_extensions.bzl", 136 | "extensionName": "remote_android_tools_extensions", 137 | "usingModule": "bazel_tools@_", 138 | "location": { 139 | "file": "@@bazel_tools//:MODULE.bazel", 140 | "line": 43, 141 | "column": 42 142 | }, 143 | "imports": { 144 | "android_gmaven_r8": "android_gmaven_r8", 145 | "android_tools": "android_tools" 146 | }, 147 | "devImports": [], 148 | "tags": [], 149 | "hasDevUseExtension": false, 150 | "hasNonDevUseExtension": true 151 | }, 152 | { 153 | "extensionBzlFile": "@buildozer//:buildozer_binary.bzl", 154 | "extensionName": "buildozer_binary", 155 | "usingModule": "bazel_tools@_", 156 | "location": { 157 | "file": "@@bazel_tools//:MODULE.bazel", 158 | "line": 47, 159 | "column": 33 160 | }, 161 | "imports": { 162 | "buildozer_binary": "buildozer_binary" 163 | }, 164 | "devImports": [], 165 | "tags": [], 166 | "hasDevUseExtension": false, 167 | "hasNonDevUseExtension": true 168 | } 169 | ], 170 | "deps": { 171 | "rules_cc": "rules_cc@0.0.9", 172 | "rules_java": "rules_java@7.4.0", 173 | "rules_license": "rules_license@0.0.7", 174 | "rules_proto": "rules_proto@5.3.0-21.7", 175 | "rules_python": "rules_python@0.22.1", 176 | "buildozer": "buildozer@6.4.0.2", 177 | "platforms": "platforms@0.0.7", 178 | "com_google_protobuf": "protobuf@21.7", 179 | "zlib": "zlib@1.3", 180 | "build_bazel_apple_support": "apple_support@1.5.0", 181 | "local_config_platform": "local_config_platform@_" 182 | } 183 | }, 184 | "local_config_platform@_": { 185 | "name": "local_config_platform", 186 | "version": "", 187 | "key": "local_config_platform@_", 188 | "repoName": "local_config_platform", 189 | "executionPlatformsToRegister": [], 190 | "toolchainsToRegister": [], 191 | "extensionUsages": [], 192 | "deps": { 193 | "platforms": "platforms@0.0.7", 194 | "bazel_tools": "bazel_tools@_" 195 | } 196 | }, 197 | "rules_cc@0.0.9": { 198 | "name": "rules_cc", 199 | "version": "0.0.9", 200 | "key": "rules_cc@0.0.9", 201 | "repoName": "rules_cc", 202 | "executionPlatformsToRegister": [], 203 | "toolchainsToRegister": [ 204 | "@local_config_cc_toolchains//:all" 205 | ], 206 | "extensionUsages": [ 207 | { 208 | "extensionBzlFile": "@bazel_tools//tools/cpp:cc_configure.bzl", 209 | "extensionName": "cc_configure_extension", 210 | "usingModule": "rules_cc@0.0.9", 211 | "location": { 212 | "file": "https://bcr.bazel.build/modules/rules_cc/0.0.9/MODULE.bazel", 213 | "line": 9, 214 | "column": 29 215 | }, 216 | "imports": { 217 | "local_config_cc_toolchains": "local_config_cc_toolchains" 218 | }, 219 | "devImports": [], 220 | "tags": [], 221 | "hasDevUseExtension": false, 222 | "hasNonDevUseExtension": true 223 | } 224 | ], 225 | "deps": { 226 | "platforms": "platforms@0.0.7", 227 | "bazel_tools": "bazel_tools@_", 228 | "local_config_platform": "local_config_platform@_" 229 | }, 230 | "repoSpec": { 231 | "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", 232 | "ruleClassName": "http_archive", 233 | "attributes": { 234 | "urls": [ 235 | "https://github.com/bazelbuild/rules_cc/releases/download/0.0.9/rules_cc-0.0.9.tar.gz" 236 | ], 237 | "integrity": "sha256-IDeHW5pEVtzkp50RKorohbvEqtlo5lh9ym5k86CQDN8=", 238 | "strip_prefix": "rules_cc-0.0.9", 239 | "remote_patches": { 240 | "https://bcr.bazel.build/modules/rules_cc/0.0.9/patches/module_dot_bazel_version.patch": "sha256-mM+qzOI0SgAdaJBlWOSMwMPKpaA9b7R37Hj/tp5bb4g=" 241 | }, 242 | "remote_patch_strip": 0 243 | } 244 | } 245 | }, 246 | "rules_java@7.4.0": { 247 | "name": "rules_java", 248 | "version": "7.4.0", 249 | "key": "rules_java@7.4.0", 250 | "repoName": "rules_java", 251 | "executionPlatformsToRegister": [], 252 | "toolchainsToRegister": [ 253 | "//toolchains:all", 254 | "@local_jdk//:runtime_toolchain_definition", 255 | "@local_jdk//:bootstrap_runtime_toolchain_definition", 256 | "@remotejdk11_linux_toolchain_config_repo//:all", 257 | "@remotejdk11_linux_aarch64_toolchain_config_repo//:all", 258 | "@remotejdk11_linux_ppc64le_toolchain_config_repo//:all", 259 | "@remotejdk11_linux_s390x_toolchain_config_repo//:all", 260 | "@remotejdk11_macos_toolchain_config_repo//:all", 261 | "@remotejdk11_macos_aarch64_toolchain_config_repo//:all", 262 | "@remotejdk11_win_toolchain_config_repo//:all", 263 | "@remotejdk11_win_arm64_toolchain_config_repo//:all", 264 | "@remotejdk17_linux_toolchain_config_repo//:all", 265 | "@remotejdk17_linux_aarch64_toolchain_config_repo//:all", 266 | "@remotejdk17_linux_ppc64le_toolchain_config_repo//:all", 267 | "@remotejdk17_linux_s390x_toolchain_config_repo//:all", 268 | "@remotejdk17_macos_toolchain_config_repo//:all", 269 | "@remotejdk17_macos_aarch64_toolchain_config_repo//:all", 270 | "@remotejdk17_win_toolchain_config_repo//:all", 271 | "@remotejdk17_win_arm64_toolchain_config_repo//:all", 272 | "@remotejdk21_linux_toolchain_config_repo//:all", 273 | "@remotejdk21_linux_aarch64_toolchain_config_repo//:all", 274 | "@remotejdk21_macos_toolchain_config_repo//:all", 275 | "@remotejdk21_macos_aarch64_toolchain_config_repo//:all", 276 | "@remotejdk21_win_toolchain_config_repo//:all" 277 | ], 278 | "extensionUsages": [ 279 | { 280 | "extensionBzlFile": "@rules_java//java:extensions.bzl", 281 | "extensionName": "toolchains", 282 | "usingModule": "rules_java@7.4.0", 283 | "location": { 284 | "file": "https://bcr.bazel.build/modules/rules_java/7.4.0/MODULE.bazel", 285 | "line": 19, 286 | "column": 27 287 | }, 288 | "imports": { 289 | "remote_java_tools": "remote_java_tools", 290 | "remote_java_tools_linux": "remote_java_tools_linux", 291 | "remote_java_tools_windows": "remote_java_tools_windows", 292 | "remote_java_tools_darwin_x86_64": "remote_java_tools_darwin_x86_64", 293 | "remote_java_tools_darwin_arm64": "remote_java_tools_darwin_arm64", 294 | "local_jdk": "local_jdk", 295 | "remotejdk11_linux_toolchain_config_repo": "remotejdk11_linux_toolchain_config_repo", 296 | "remotejdk11_linux_aarch64_toolchain_config_repo": "remotejdk11_linux_aarch64_toolchain_config_repo", 297 | "remotejdk11_linux_ppc64le_toolchain_config_repo": "remotejdk11_linux_ppc64le_toolchain_config_repo", 298 | "remotejdk11_linux_s390x_toolchain_config_repo": "remotejdk11_linux_s390x_toolchain_config_repo", 299 | "remotejdk11_macos_toolchain_config_repo": "remotejdk11_macos_toolchain_config_repo", 300 | "remotejdk11_macos_aarch64_toolchain_config_repo": "remotejdk11_macos_aarch64_toolchain_config_repo", 301 | "remotejdk11_win_toolchain_config_repo": "remotejdk11_win_toolchain_config_repo", 302 | "remotejdk11_win_arm64_toolchain_config_repo": "remotejdk11_win_arm64_toolchain_config_repo", 303 | "remotejdk17_linux_toolchain_config_repo": "remotejdk17_linux_toolchain_config_repo", 304 | "remotejdk17_linux_aarch64_toolchain_config_repo": "remotejdk17_linux_aarch64_toolchain_config_repo", 305 | "remotejdk17_linux_ppc64le_toolchain_config_repo": "remotejdk17_linux_ppc64le_toolchain_config_repo", 306 | "remotejdk17_linux_s390x_toolchain_config_repo": "remotejdk17_linux_s390x_toolchain_config_repo", 307 | "remotejdk17_macos_toolchain_config_repo": "remotejdk17_macos_toolchain_config_repo", 308 | "remotejdk17_macos_aarch64_toolchain_config_repo": "remotejdk17_macos_aarch64_toolchain_config_repo", 309 | "remotejdk17_win_toolchain_config_repo": "remotejdk17_win_toolchain_config_repo", 310 | "remotejdk17_win_arm64_toolchain_config_repo": "remotejdk17_win_arm64_toolchain_config_repo", 311 | "remotejdk21_linux_toolchain_config_repo": "remotejdk21_linux_toolchain_config_repo", 312 | "remotejdk21_linux_aarch64_toolchain_config_repo": "remotejdk21_linux_aarch64_toolchain_config_repo", 313 | "remotejdk21_macos_toolchain_config_repo": "remotejdk21_macos_toolchain_config_repo", 314 | "remotejdk21_macos_aarch64_toolchain_config_repo": "remotejdk21_macos_aarch64_toolchain_config_repo", 315 | "remotejdk21_win_toolchain_config_repo": "remotejdk21_win_toolchain_config_repo" 316 | }, 317 | "devImports": [], 318 | "tags": [], 319 | "hasDevUseExtension": false, 320 | "hasNonDevUseExtension": true 321 | } 322 | ], 323 | "deps": { 324 | "platforms": "platforms@0.0.7", 325 | "rules_cc": "rules_cc@0.0.9", 326 | "bazel_skylib": "bazel_skylib@1.3.0", 327 | "rules_proto": "rules_proto@5.3.0-21.7", 328 | "rules_license": "rules_license@0.0.7", 329 | "bazel_tools": "bazel_tools@_", 330 | "local_config_platform": "local_config_platform@_" 331 | }, 332 | "repoSpec": { 333 | "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", 334 | "ruleClassName": "http_archive", 335 | "attributes": { 336 | "urls": [ 337 | "https://github.com/bazelbuild/rules_java/releases/download/7.4.0/rules_java-7.4.0.tar.gz" 338 | ], 339 | "integrity": "sha256-l27wi0nJKXQfIBeQ5Z44B8cq2B9CjIvJU82+/1/tFes=", 340 | "strip_prefix": "", 341 | "remote_patches": {}, 342 | "remote_patch_strip": 0 343 | } 344 | } 345 | }, 346 | "rules_license@0.0.7": { 347 | "name": "rules_license", 348 | "version": "0.0.7", 349 | "key": "rules_license@0.0.7", 350 | "repoName": "rules_license", 351 | "executionPlatformsToRegister": [], 352 | "toolchainsToRegister": [], 353 | "extensionUsages": [], 354 | "deps": { 355 | "bazel_tools": "bazel_tools@_", 356 | "local_config_platform": "local_config_platform@_" 357 | }, 358 | "repoSpec": { 359 | "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", 360 | "ruleClassName": "http_archive", 361 | "attributes": { 362 | "urls": [ 363 | "https://github.com/bazelbuild/rules_license/releases/download/0.0.7/rules_license-0.0.7.tar.gz" 364 | ], 365 | "integrity": "sha256-RTHezLkTY5ww5cdRKgVNXYdWmNrrddjPkPKEN1/nw2A=", 366 | "strip_prefix": "", 367 | "remote_patches": {}, 368 | "remote_patch_strip": 0 369 | } 370 | } 371 | }, 372 | "rules_proto@5.3.0-21.7": { 373 | "name": "rules_proto", 374 | "version": "5.3.0-21.7", 375 | "key": "rules_proto@5.3.0-21.7", 376 | "repoName": "rules_proto", 377 | "executionPlatformsToRegister": [], 378 | "toolchainsToRegister": [], 379 | "extensionUsages": [], 380 | "deps": { 381 | "bazel_skylib": "bazel_skylib@1.3.0", 382 | "com_google_protobuf": "protobuf@21.7", 383 | "rules_cc": "rules_cc@0.0.9", 384 | "bazel_tools": "bazel_tools@_", 385 | "local_config_platform": "local_config_platform@_" 386 | }, 387 | "repoSpec": { 388 | "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", 389 | "ruleClassName": "http_archive", 390 | "attributes": { 391 | "urls": [ 392 | "https://github.com/bazelbuild/rules_proto/archive/refs/tags/5.3.0-21.7.tar.gz" 393 | ], 394 | "integrity": "sha256-3D+yBqLLNEG0heseQjFlsjEjWh6psDG0Qzz3vB+kYN0=", 395 | "strip_prefix": "rules_proto-5.3.0-21.7", 396 | "remote_patches": {}, 397 | "remote_patch_strip": 0 398 | } 399 | } 400 | }, 401 | "rules_python@0.22.1": { 402 | "name": "rules_python", 403 | "version": "0.22.1", 404 | "key": "rules_python@0.22.1", 405 | "repoName": "rules_python", 406 | "executionPlatformsToRegister": [], 407 | "toolchainsToRegister": [ 408 | "@bazel_tools//tools/python:autodetecting_toolchain" 409 | ], 410 | "extensionUsages": [ 411 | { 412 | "extensionBzlFile": "@rules_python//python/extensions/private:internal_deps.bzl", 413 | "extensionName": "internal_deps", 414 | "usingModule": "rules_python@0.22.1", 415 | "location": { 416 | "file": "https://bcr.bazel.build/modules/rules_python/0.22.1/MODULE.bazel", 417 | "line": 14, 418 | "column": 30 419 | }, 420 | "imports": { 421 | "pypi__build": "pypi__build", 422 | "pypi__click": "pypi__click", 423 | "pypi__colorama": "pypi__colorama", 424 | "pypi__importlib_metadata": "pypi__importlib_metadata", 425 | "pypi__installer": "pypi__installer", 426 | "pypi__more_itertools": "pypi__more_itertools", 427 | "pypi__packaging": "pypi__packaging", 428 | "pypi__pep517": "pypi__pep517", 429 | "pypi__pip": "pypi__pip", 430 | "pypi__pip_tools": "pypi__pip_tools", 431 | "pypi__setuptools": "pypi__setuptools", 432 | "pypi__tomli": "pypi__tomli", 433 | "pypi__wheel": "pypi__wheel", 434 | "pypi__zipp": "pypi__zipp", 435 | "pypi__coverage_cp310_aarch64-apple-darwin": "pypi__coverage_cp310_aarch64-apple-darwin", 436 | "pypi__coverage_cp310_aarch64-unknown-linux-gnu": "pypi__coverage_cp310_aarch64-unknown-linux-gnu", 437 | "pypi__coverage_cp310_x86_64-apple-darwin": "pypi__coverage_cp310_x86_64-apple-darwin", 438 | "pypi__coverage_cp310_x86_64-unknown-linux-gnu": "pypi__coverage_cp310_x86_64-unknown-linux-gnu", 439 | "pypi__coverage_cp311_aarch64-unknown-linux-gnu": "pypi__coverage_cp311_aarch64-unknown-linux-gnu", 440 | "pypi__coverage_cp311_x86_64-apple-darwin": "pypi__coverage_cp311_x86_64-apple-darwin", 441 | "pypi__coverage_cp311_x86_64-unknown-linux-gnu": "pypi__coverage_cp311_x86_64-unknown-linux-gnu", 442 | "pypi__coverage_cp38_aarch64-apple-darwin": "pypi__coverage_cp38_aarch64-apple-darwin", 443 | "pypi__coverage_cp38_aarch64-unknown-linux-gnu": "pypi__coverage_cp38_aarch64-unknown-linux-gnu", 444 | "pypi__coverage_cp38_x86_64-apple-darwin": "pypi__coverage_cp38_x86_64-apple-darwin", 445 | "pypi__coverage_cp38_x86_64-unknown-linux-gnu": "pypi__coverage_cp38_x86_64-unknown-linux-gnu", 446 | "pypi__coverage_cp39_aarch64-apple-darwin": "pypi__coverage_cp39_aarch64-apple-darwin", 447 | "pypi__coverage_cp39_aarch64-unknown-linux-gnu": "pypi__coverage_cp39_aarch64-unknown-linux-gnu", 448 | "pypi__coverage_cp39_x86_64-apple-darwin": "pypi__coverage_cp39_x86_64-apple-darwin", 449 | "pypi__coverage_cp39_x86_64-unknown-linux-gnu": "pypi__coverage_cp39_x86_64-unknown-linux-gnu" 450 | }, 451 | "devImports": [], 452 | "tags": [ 453 | { 454 | "tagName": "install", 455 | "attributeValues": {}, 456 | "devDependency": false, 457 | "location": { 458 | "file": "https://bcr.bazel.build/modules/rules_python/0.22.1/MODULE.bazel", 459 | "line": 15, 460 | "column": 22 461 | } 462 | } 463 | ], 464 | "hasDevUseExtension": false, 465 | "hasNonDevUseExtension": true 466 | }, 467 | { 468 | "extensionBzlFile": "@rules_python//python/extensions:python.bzl", 469 | "extensionName": "python", 470 | "usingModule": "rules_python@0.22.1", 471 | "location": { 472 | "file": "https://bcr.bazel.build/modules/rules_python/0.22.1/MODULE.bazel", 473 | "line": 50, 474 | "column": 23 475 | }, 476 | "imports": { 477 | "pythons_hub": "pythons_hub" 478 | }, 479 | "devImports": [], 480 | "tags": [], 481 | "hasDevUseExtension": false, 482 | "hasNonDevUseExtension": true 483 | } 484 | ], 485 | "deps": { 486 | "platforms": "platforms@0.0.7", 487 | "bazel_skylib": "bazel_skylib@1.3.0", 488 | "rules_proto": "rules_proto@5.3.0-21.7", 489 | "com_google_protobuf": "protobuf@21.7", 490 | "bazel_tools": "bazel_tools@_", 491 | "local_config_platform": "local_config_platform@_" 492 | }, 493 | "repoSpec": { 494 | "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", 495 | "ruleClassName": "http_archive", 496 | "attributes": { 497 | "urls": [ 498 | "https://github.com/bazelbuild/rules_python/releases/download/0.22.1/rules_python-0.22.1.tar.gz" 499 | ], 500 | "integrity": "sha256-pWQP3dS+sD6MH95e1xYMC6a9R359BIZhwwwGk2om/WM=", 501 | "strip_prefix": "rules_python-0.22.1", 502 | "remote_patches": { 503 | "https://bcr.bazel.build/modules/rules_python/0.22.1/patches/module_dot_bazel_version.patch": "sha256-3+VLDH9gYDzNI4eOW7mABC/LKxh1xqF6NhacLbNTucs=" 504 | }, 505 | "remote_patch_strip": 1 506 | } 507 | } 508 | }, 509 | "buildozer@6.4.0.2": { 510 | "name": "buildozer", 511 | "version": "6.4.0.2", 512 | "key": "buildozer@6.4.0.2", 513 | "repoName": "buildozer", 514 | "executionPlatformsToRegister": [], 515 | "toolchainsToRegister": [], 516 | "extensionUsages": [ 517 | { 518 | "extensionBzlFile": "@buildozer//:buildozer_binary.bzl", 519 | "extensionName": "buildozer_binary", 520 | "usingModule": "buildozer@6.4.0.2", 521 | "location": { 522 | "file": "https://bcr.bazel.build/modules/buildozer/6.4.0.2/MODULE.bazel", 523 | "line": 7, 524 | "column": 33 525 | }, 526 | "imports": { 527 | "buildozer_binary": "buildozer_binary" 528 | }, 529 | "devImports": [], 530 | "tags": [ 531 | { 532 | "tagName": "buildozer", 533 | "attributeValues": { 534 | "sha256": { 535 | "darwin-amd64": "d29e347ecd6b5673d72cb1a8de05bf1b06178dd229ff5eb67fad5100c840cc8e", 536 | "darwin-arm64": "9b9e71bdbec5e7223871e913b65d12f6d8fa026684daf991f00e52ed36a6978d", 537 | "linux-amd64": "8dfd6345da4e9042daa738d7fdf34f699c5dfce4632f7207956fceedd8494119", 538 | "linux-arm64": "6559558fded658c8fa7432a9d011f7c4dcbac6b738feae73d2d5c352e5f605fa", 539 | "windows-amd64": "e7f05bf847f7c3689dd28926460ce6e1097ae97380ac8e6ae7147b7b706ba19b" 540 | }, 541 | "version": "6.4.0" 542 | }, 543 | "devDependency": false, 544 | "location": { 545 | "file": "https://bcr.bazel.build/modules/buildozer/6.4.0.2/MODULE.bazel", 546 | "line": 8, 547 | "column": 27 548 | } 549 | } 550 | ], 551 | "hasDevUseExtension": false, 552 | "hasNonDevUseExtension": true 553 | } 554 | ], 555 | "deps": { 556 | "bazel_tools": "bazel_tools@_", 557 | "local_config_platform": "local_config_platform@_" 558 | }, 559 | "repoSpec": { 560 | "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", 561 | "ruleClassName": "http_archive", 562 | "attributes": { 563 | "urls": [ 564 | "https://github.com/fmeum/buildozer/releases/download/v6.4.0.2/buildozer-v6.4.0.2.tar.gz" 565 | ], 566 | "integrity": "sha256-k7tFKQMR2AygxpmZfH0yEPnQmF3efFgD9rBPkj+Yz/8=", 567 | "strip_prefix": "buildozer-6.4.0.2", 568 | "remote_patches": { 569 | "https://bcr.bazel.build/modules/buildozer/6.4.0.2/patches/module_dot_bazel_version.patch": "sha256-gKANF2HMilj7bWmuXs4lbBIAAansuWC4IhWGB/CerjU=" 570 | }, 571 | "remote_patch_strip": 1 572 | } 573 | } 574 | }, 575 | "platforms@0.0.7": { 576 | "name": "platforms", 577 | "version": "0.0.7", 578 | "key": "platforms@0.0.7", 579 | "repoName": "platforms", 580 | "executionPlatformsToRegister": [], 581 | "toolchainsToRegister": [], 582 | "extensionUsages": [], 583 | "deps": { 584 | "rules_license": "rules_license@0.0.7", 585 | "bazel_tools": "bazel_tools@_", 586 | "local_config_platform": "local_config_platform@_" 587 | }, 588 | "repoSpec": { 589 | "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", 590 | "ruleClassName": "http_archive", 591 | "attributes": { 592 | "urls": [ 593 | "https://github.com/bazelbuild/platforms/releases/download/0.0.7/platforms-0.0.7.tar.gz" 594 | ], 595 | "integrity": "sha256-OlYcmee9vpFzqmU/1Xn+hJ8djWc5V4CrR3Cx84FDHVE=", 596 | "strip_prefix": "", 597 | "remote_patches": {}, 598 | "remote_patch_strip": 0 599 | } 600 | } 601 | }, 602 | "protobuf@21.7": { 603 | "name": "protobuf", 604 | "version": "21.7", 605 | "key": "protobuf@21.7", 606 | "repoName": "protobuf", 607 | "executionPlatformsToRegister": [], 608 | "toolchainsToRegister": [], 609 | "extensionUsages": [ 610 | { 611 | "extensionBzlFile": "@rules_jvm_external//:extensions.bzl", 612 | "extensionName": "maven", 613 | "usingModule": "protobuf@21.7", 614 | "location": { 615 | "file": "https://bcr.bazel.build/modules/protobuf/21.7/MODULE.bazel", 616 | "line": 22, 617 | "column": 22 618 | }, 619 | "imports": { 620 | "maven": "maven" 621 | }, 622 | "devImports": [], 623 | "tags": [ 624 | { 625 | "tagName": "install", 626 | "attributeValues": { 627 | "name": "maven", 628 | "artifacts": [ 629 | "com.google.code.findbugs:jsr305:3.0.2", 630 | "com.google.code.gson:gson:2.8.9", 631 | "com.google.errorprone:error_prone_annotations:2.3.2", 632 | "com.google.j2objc:j2objc-annotations:1.3", 633 | "com.google.guava:guava:31.1-jre", 634 | "com.google.guava:guava-testlib:31.1-jre", 635 | "com.google.truth:truth:1.1.2", 636 | "junit:junit:4.13.2", 637 | "org.mockito:mockito-core:4.3.1" 638 | ] 639 | }, 640 | "devDependency": false, 641 | "location": { 642 | "file": "https://bcr.bazel.build/modules/protobuf/21.7/MODULE.bazel", 643 | "line": 24, 644 | "column": 14 645 | } 646 | } 647 | ], 648 | "hasDevUseExtension": false, 649 | "hasNonDevUseExtension": true 650 | } 651 | ], 652 | "deps": { 653 | "bazel_skylib": "bazel_skylib@1.3.0", 654 | "rules_python": "rules_python@0.22.1", 655 | "rules_cc": "rules_cc@0.0.9", 656 | "rules_proto": "rules_proto@5.3.0-21.7", 657 | "rules_java": "rules_java@7.4.0", 658 | "rules_pkg": "rules_pkg@0.7.0", 659 | "com_google_abseil": "abseil-cpp@20211102.0", 660 | "zlib": "zlib@1.3", 661 | "upb": "upb@0.0.0-20220923-a547704", 662 | "rules_jvm_external": "rules_jvm_external@4.4.2", 663 | "com_google_googletest": "googletest@1.11.0", 664 | "bazel_tools": "bazel_tools@_", 665 | "local_config_platform": "local_config_platform@_" 666 | }, 667 | "repoSpec": { 668 | "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", 669 | "ruleClassName": "http_archive", 670 | "attributes": { 671 | "urls": [ 672 | "https://github.com/protocolbuffers/protobuf/releases/download/v21.7/protobuf-all-21.7.zip" 673 | ], 674 | "integrity": "sha256-VJOiH17T/FAuZv7GuUScBqVRztYwAvpIkDxA36jeeko=", 675 | "strip_prefix": "protobuf-21.7", 676 | "remote_patches": { 677 | "https://bcr.bazel.build/modules/protobuf/21.7/patches/add_module_dot_bazel.patch": "sha256-q3V2+eq0v2XF0z8z+V+QF4cynD6JvHI1y3kI/+rzl5s=", 678 | "https://bcr.bazel.build/modules/protobuf/21.7/patches/add_module_dot_bazel_for_examples.patch": "sha256-O7YP6s3lo/1opUiO0jqXYORNHdZ/2q3hjz1QGy8QdIU=", 679 | "https://bcr.bazel.build/modules/protobuf/21.7/patches/relative_repo_names.patch": "sha256-RK9RjW8T5UJNG7flIrnFiNE9vKwWB+8uWWtJqXYT0w4=", 680 | "https://bcr.bazel.build/modules/protobuf/21.7/patches/add_missing_files.patch": "sha256-Hyne4DG2u5bXcWHNxNMirA2QFAe/2Cl8oMm1XJdkQIY=" 681 | }, 682 | "remote_patch_strip": 1 683 | } 684 | } 685 | }, 686 | "zlib@1.3": { 687 | "name": "zlib", 688 | "version": "1.3", 689 | "key": "zlib@1.3", 690 | "repoName": "zlib", 691 | "executionPlatformsToRegister": [], 692 | "toolchainsToRegister": [], 693 | "extensionUsages": [], 694 | "deps": { 695 | "platforms": "platforms@0.0.7", 696 | "rules_cc": "rules_cc@0.0.9", 697 | "bazel_tools": "bazel_tools@_", 698 | "local_config_platform": "local_config_platform@_" 699 | }, 700 | "repoSpec": { 701 | "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", 702 | "ruleClassName": "http_archive", 703 | "attributes": { 704 | "urls": [ 705 | "https://github.com/madler/zlib/releases/download/v1.3/zlib-1.3.tar.gz" 706 | ], 707 | "integrity": "sha256-/wukwpIBPbwnUws6geH5qBPNOd4Byl4Pi/NVcC76WT4=", 708 | "strip_prefix": "zlib-1.3", 709 | "remote_patches": { 710 | "https://bcr.bazel.build/modules/zlib/1.3/patches/add_build_file.patch": "sha256-Ei+FYaaOo7A3jTKunMEodTI0Uw5NXQyZEcboMC8JskY=", 711 | "https://bcr.bazel.build/modules/zlib/1.3/patches/module_dot_bazel.patch": "sha256-fPWLM+2xaF/kuy+kZc1YTfW6hNjrkG400Ho7gckuyJk=" 712 | }, 713 | "remote_patch_strip": 0 714 | } 715 | } 716 | }, 717 | "apple_support@1.5.0": { 718 | "name": "apple_support", 719 | "version": "1.5.0", 720 | "key": "apple_support@1.5.0", 721 | "repoName": "build_bazel_apple_support", 722 | "executionPlatformsToRegister": [], 723 | "toolchainsToRegister": [ 724 | "@local_config_apple_cc_toolchains//:all" 725 | ], 726 | "extensionUsages": [ 727 | { 728 | "extensionBzlFile": "@build_bazel_apple_support//crosstool:setup.bzl", 729 | "extensionName": "apple_cc_configure_extension", 730 | "usingModule": "apple_support@1.5.0", 731 | "location": { 732 | "file": "https://bcr.bazel.build/modules/apple_support/1.5.0/MODULE.bazel", 733 | "line": 17, 734 | "column": 35 735 | }, 736 | "imports": { 737 | "local_config_apple_cc": "local_config_apple_cc", 738 | "local_config_apple_cc_toolchains": "local_config_apple_cc_toolchains" 739 | }, 740 | "devImports": [], 741 | "tags": [], 742 | "hasDevUseExtension": false, 743 | "hasNonDevUseExtension": true 744 | } 745 | ], 746 | "deps": { 747 | "bazel_skylib": "bazel_skylib@1.3.0", 748 | "platforms": "platforms@0.0.7", 749 | "bazel_tools": "bazel_tools@_", 750 | "local_config_platform": "local_config_platform@_" 751 | }, 752 | "repoSpec": { 753 | "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", 754 | "ruleClassName": "http_archive", 755 | "attributes": { 756 | "urls": [ 757 | "https://github.com/bazelbuild/apple_support/releases/download/1.5.0/apple_support.1.5.0.tar.gz" 758 | ], 759 | "integrity": "sha256-miM41vja0yRPgj8txghKA+TQ+7J8qJLclw5okNW0gYQ=", 760 | "strip_prefix": "", 761 | "remote_patches": {}, 762 | "remote_patch_strip": 0 763 | } 764 | } 765 | }, 766 | "bazel_skylib@1.3.0": { 767 | "name": "bazel_skylib", 768 | "version": "1.3.0", 769 | "key": "bazel_skylib@1.3.0", 770 | "repoName": "bazel_skylib", 771 | "executionPlatformsToRegister": [], 772 | "toolchainsToRegister": [ 773 | "//toolchains/unittest:cmd_toolchain", 774 | "//toolchains/unittest:bash_toolchain" 775 | ], 776 | "extensionUsages": [], 777 | "deps": { 778 | "platforms": "platforms@0.0.7", 779 | "bazel_tools": "bazel_tools@_", 780 | "local_config_platform": "local_config_platform@_" 781 | }, 782 | "repoSpec": { 783 | "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", 784 | "ruleClassName": "http_archive", 785 | "attributes": { 786 | "urls": [ 787 | "https://github.com/bazelbuild/bazel-skylib/releases/download/1.3.0/bazel-skylib-1.3.0.tar.gz" 788 | ], 789 | "integrity": "sha256-dNVE2W9KW7Yw1GXKi7z+Ix41lOWq5X4e2/F6brPKJQY=", 790 | "strip_prefix": "", 791 | "remote_patches": {}, 792 | "remote_patch_strip": 0 793 | } 794 | } 795 | }, 796 | "rules_pkg@0.7.0": { 797 | "name": "rules_pkg", 798 | "version": "0.7.0", 799 | "key": "rules_pkg@0.7.0", 800 | "repoName": "rules_pkg", 801 | "executionPlatformsToRegister": [], 802 | "toolchainsToRegister": [], 803 | "extensionUsages": [], 804 | "deps": { 805 | "rules_python": "rules_python@0.22.1", 806 | "bazel_skylib": "bazel_skylib@1.3.0", 807 | "rules_license": "rules_license@0.0.7", 808 | "bazel_tools": "bazel_tools@_", 809 | "local_config_platform": "local_config_platform@_" 810 | }, 811 | "repoSpec": { 812 | "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", 813 | "ruleClassName": "http_archive", 814 | "attributes": { 815 | "urls": [ 816 | "https://github.com/bazelbuild/rules_pkg/releases/download/0.7.0/rules_pkg-0.7.0.tar.gz" 817 | ], 818 | "integrity": "sha256-iimOgydi7aGDBZfWT+fbWBeKqEzVkm121bdE1lWJQcI=", 819 | "strip_prefix": "", 820 | "remote_patches": { 821 | "https://bcr.bazel.build/modules/rules_pkg/0.7.0/patches/module_dot_bazel.patch": "sha256-4OaEPZwYF6iC71ZTDg6MJ7LLqX7ZA0/kK4mT+4xKqiE=" 822 | }, 823 | "remote_patch_strip": 0 824 | } 825 | } 826 | }, 827 | "abseil-cpp@20211102.0": { 828 | "name": "abseil-cpp", 829 | "version": "20211102.0", 830 | "key": "abseil-cpp@20211102.0", 831 | "repoName": "abseil-cpp", 832 | "executionPlatformsToRegister": [], 833 | "toolchainsToRegister": [], 834 | "extensionUsages": [], 835 | "deps": { 836 | "rules_cc": "rules_cc@0.0.9", 837 | "platforms": "platforms@0.0.7", 838 | "bazel_tools": "bazel_tools@_", 839 | "local_config_platform": "local_config_platform@_" 840 | }, 841 | "repoSpec": { 842 | "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", 843 | "ruleClassName": "http_archive", 844 | "attributes": { 845 | "urls": [ 846 | "https://github.com/abseil/abseil-cpp/archive/refs/tags/20211102.0.tar.gz" 847 | ], 848 | "integrity": "sha256-3PcbnLqNwMqZQMSzFqDHlr6Pq0KwcLtrfKtitI8OZsQ=", 849 | "strip_prefix": "abseil-cpp-20211102.0", 850 | "remote_patches": { 851 | "https://bcr.bazel.build/modules/abseil-cpp/20211102.0/patches/module_dot_bazel.patch": "sha256-4izqopgGCey4jVZzl/w3M2GVPNohjh2B5TmbThZNvPY=" 852 | }, 853 | "remote_patch_strip": 0 854 | } 855 | } 856 | }, 857 | "upb@0.0.0-20220923-a547704": { 858 | "name": "upb", 859 | "version": "0.0.0-20220923-a547704", 860 | "key": "upb@0.0.0-20220923-a547704", 861 | "repoName": "upb", 862 | "executionPlatformsToRegister": [], 863 | "toolchainsToRegister": [], 864 | "extensionUsages": [], 865 | "deps": { 866 | "bazel_skylib": "bazel_skylib@1.3.0", 867 | "rules_proto": "rules_proto@5.3.0-21.7", 868 | "com_google_protobuf": "protobuf@21.7", 869 | "com_google_absl": "abseil-cpp@20211102.0", 870 | "platforms": "platforms@0.0.7", 871 | "bazel_tools": "bazel_tools@_", 872 | "local_config_platform": "local_config_platform@_" 873 | }, 874 | "repoSpec": { 875 | "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", 876 | "ruleClassName": "http_archive", 877 | "attributes": { 878 | "urls": [ 879 | "https://github.com/protocolbuffers/upb/archive/a5477045acaa34586420942098f5fecd3570f577.tar.gz" 880 | ], 881 | "integrity": "sha256-z39x6v+QskwaKLSWRan/A6mmwecTQpHOcJActj5zZLU=", 882 | "strip_prefix": "upb-a5477045acaa34586420942098f5fecd3570f577", 883 | "remote_patches": { 884 | "https://bcr.bazel.build/modules/upb/0.0.0-20220923-a547704/patches/module_dot_bazel.patch": "sha256-wH4mNS6ZYy+8uC0HoAft/c7SDsq2Kxf+J8dUakXhaB0=" 885 | }, 886 | "remote_patch_strip": 0 887 | } 888 | } 889 | }, 890 | "rules_jvm_external@4.4.2": { 891 | "name": "rules_jvm_external", 892 | "version": "4.4.2", 893 | "key": "rules_jvm_external@4.4.2", 894 | "repoName": "rules_jvm_external", 895 | "executionPlatformsToRegister": [], 896 | "toolchainsToRegister": [], 897 | "extensionUsages": [ 898 | { 899 | "extensionBzlFile": "@rules_jvm_external//:non-module-deps.bzl", 900 | "extensionName": "non_module_deps", 901 | "usingModule": "rules_jvm_external@4.4.2", 902 | "location": { 903 | "file": "https://bcr.bazel.build/modules/rules_jvm_external/4.4.2/MODULE.bazel", 904 | "line": 9, 905 | "column": 32 906 | }, 907 | "imports": { 908 | "io_bazel_rules_kotlin": "io_bazel_rules_kotlin" 909 | }, 910 | "devImports": [], 911 | "tags": [], 912 | "hasDevUseExtension": false, 913 | "hasNonDevUseExtension": true 914 | }, 915 | { 916 | "extensionBzlFile": "@rules_jvm_external//:extensions.bzl", 917 | "extensionName": "maven", 918 | "usingModule": "rules_jvm_external@4.4.2", 919 | "location": { 920 | "file": "https://bcr.bazel.build/modules/rules_jvm_external/4.4.2/MODULE.bazel", 921 | "line": 16, 922 | "column": 22 923 | }, 924 | "imports": { 925 | "rules_jvm_external_deps": "rules_jvm_external_deps" 926 | }, 927 | "devImports": [], 928 | "tags": [ 929 | { 930 | "tagName": "install", 931 | "attributeValues": { 932 | "name": "rules_jvm_external_deps", 933 | "artifacts": [ 934 | "com.google.cloud:google-cloud-core:1.93.10", 935 | "com.google.cloud:google-cloud-storage:1.113.4", 936 | "com.google.code.gson:gson:2.9.0", 937 | "org.apache.maven:maven-artifact:3.8.6", 938 | "software.amazon.awssdk:s3:2.17.183" 939 | ], 940 | "lock_file": "@rules_jvm_external//:rules_jvm_external_deps_install.json" 941 | }, 942 | "devDependency": false, 943 | "location": { 944 | "file": "https://bcr.bazel.build/modules/rules_jvm_external/4.4.2/MODULE.bazel", 945 | "line": 18, 946 | "column": 14 947 | } 948 | } 949 | ], 950 | "hasDevUseExtension": false, 951 | "hasNonDevUseExtension": true 952 | } 953 | ], 954 | "deps": { 955 | "bazel_skylib": "bazel_skylib@1.3.0", 956 | "io_bazel_stardoc": "stardoc@0.5.1", 957 | "bazel_tools": "bazel_tools@_", 958 | "local_config_platform": "local_config_platform@_" 959 | }, 960 | "repoSpec": { 961 | "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", 962 | "ruleClassName": "http_archive", 963 | "attributes": { 964 | "urls": [ 965 | "https://github.com/bazelbuild/rules_jvm_external/archive/refs/tags/4.4.2.zip" 966 | ], 967 | "integrity": "sha256-c1YC9QgT6y6pPKP15DsZWb2AshO4NqB6YqKddXZwt3s=", 968 | "strip_prefix": "rules_jvm_external-4.4.2", 969 | "remote_patches": {}, 970 | "remote_patch_strip": 0 971 | } 972 | } 973 | }, 974 | "googletest@1.11.0": { 975 | "name": "googletest", 976 | "version": "1.11.0", 977 | "key": "googletest@1.11.0", 978 | "repoName": "googletest", 979 | "executionPlatformsToRegister": [], 980 | "toolchainsToRegister": [], 981 | "extensionUsages": [], 982 | "deps": { 983 | "com_google_absl": "abseil-cpp@20211102.0", 984 | "platforms": "platforms@0.0.7", 985 | "rules_cc": "rules_cc@0.0.9", 986 | "bazel_tools": "bazel_tools@_", 987 | "local_config_platform": "local_config_platform@_" 988 | }, 989 | "repoSpec": { 990 | "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", 991 | "ruleClassName": "http_archive", 992 | "attributes": { 993 | "urls": [ 994 | "https://github.com/google/googletest/archive/refs/tags/release-1.11.0.tar.gz" 995 | ], 996 | "integrity": "sha256-tIcL8SH/d5W6INILzdhie44Ijy0dqymaAxwQNO3ck9U=", 997 | "strip_prefix": "googletest-release-1.11.0", 998 | "remote_patches": { 999 | "https://bcr.bazel.build/modules/googletest/1.11.0/patches/module_dot_bazel.patch": "sha256-HuahEdI/n8KCI071sN3CEziX+7qP/Ec77IWayYunLP0=" 1000 | }, 1001 | "remote_patch_strip": 0 1002 | } 1003 | } 1004 | }, 1005 | "stardoc@0.5.1": { 1006 | "name": "stardoc", 1007 | "version": "0.5.1", 1008 | "key": "stardoc@0.5.1", 1009 | "repoName": "stardoc", 1010 | "executionPlatformsToRegister": [], 1011 | "toolchainsToRegister": [], 1012 | "extensionUsages": [], 1013 | "deps": { 1014 | "bazel_skylib": "bazel_skylib@1.3.0", 1015 | "rules_java": "rules_java@7.4.0", 1016 | "bazel_tools": "bazel_tools@_", 1017 | "local_config_platform": "local_config_platform@_" 1018 | }, 1019 | "repoSpec": { 1020 | "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", 1021 | "ruleClassName": "http_archive", 1022 | "attributes": { 1023 | "urls": [ 1024 | "https://github.com/bazelbuild/stardoc/releases/download/0.5.1/stardoc-0.5.1.tar.gz" 1025 | ], 1026 | "integrity": "sha256-qoFNrgrEALurLoiB+ZFcb0fElmS/CHxAmhX5BDjSwj4=", 1027 | "strip_prefix": "", 1028 | "remote_patches": { 1029 | "https://bcr.bazel.build/modules/stardoc/0.5.1/patches/module_dot_bazel.patch": "sha256-UAULCuTpJE7SG0YrR9XLjMfxMRmbP+za3uW9ONZ5rjI=" 1030 | }, 1031 | "remote_patch_strip": 0 1032 | } 1033 | } 1034 | } 1035 | }, 1036 | "moduleExtensions": { 1037 | "@@apple_support~//crosstool:setup.bzl%apple_cc_configure_extension": { 1038 | "general": { 1039 | "bzlTransitiveDigest": "pMLFCYaRPkgXPQ8vtuNkMfiHfPmRBy6QJfnid4sWfv0=", 1040 | "recordedFileInputs": {}, 1041 | "recordedDirentsInputs": {}, 1042 | "envVariables": {}, 1043 | "generatedRepoSpecs": { 1044 | "local_config_apple_cc": { 1045 | "bzlFile": "@@apple_support~//crosstool:setup.bzl", 1046 | "ruleClassName": "_apple_cc_autoconf", 1047 | "attributes": {} 1048 | }, 1049 | "local_config_apple_cc_toolchains": { 1050 | "bzlFile": "@@apple_support~//crosstool:setup.bzl", 1051 | "ruleClassName": "_apple_cc_autoconf_toolchains", 1052 | "attributes": {} 1053 | } 1054 | }, 1055 | "recordedRepoMappingEntries": [ 1056 | [ 1057 | "apple_support~", 1058 | "bazel_tools", 1059 | "bazel_tools" 1060 | ] 1061 | ] 1062 | } 1063 | }, 1064 | "@@bazel_tools//tools/cpp:cc_configure.bzl%cc_configure_extension": { 1065 | "general": { 1066 | "bzlTransitiveDigest": "PHpT2yqMGms2U4L3E/aZ+WcQalmZWm+ILdP3yiLsDhA=", 1067 | "recordedFileInputs": {}, 1068 | "recordedDirentsInputs": {}, 1069 | "envVariables": {}, 1070 | "generatedRepoSpecs": { 1071 | "local_config_cc": { 1072 | "bzlFile": "@@bazel_tools//tools/cpp:cc_configure.bzl", 1073 | "ruleClassName": "cc_autoconf", 1074 | "attributes": {} 1075 | }, 1076 | "local_config_cc_toolchains": { 1077 | "bzlFile": "@@bazel_tools//tools/cpp:cc_configure.bzl", 1078 | "ruleClassName": "cc_autoconf_toolchains", 1079 | "attributes": {} 1080 | } 1081 | }, 1082 | "recordedRepoMappingEntries": [ 1083 | [ 1084 | "bazel_tools", 1085 | "bazel_tools", 1086 | "bazel_tools" 1087 | ] 1088 | ] 1089 | } 1090 | }, 1091 | "@@bazel_tools//tools/osx:xcode_configure.bzl%xcode_configure_extension": { 1092 | "general": { 1093 | "bzlTransitiveDigest": "Qh2bWTU6QW6wkrd87qrU4YeY+SG37Nvw3A0PR4Y0L2Y=", 1094 | "recordedFileInputs": {}, 1095 | "recordedDirentsInputs": {}, 1096 | "envVariables": {}, 1097 | "generatedRepoSpecs": { 1098 | "local_config_xcode": { 1099 | "bzlFile": "@@bazel_tools//tools/osx:xcode_configure.bzl", 1100 | "ruleClassName": "xcode_autoconf", 1101 | "attributes": { 1102 | "xcode_locator": "@bazel_tools//tools/osx:xcode_locator.m", 1103 | "remote_xcode": "" 1104 | } 1105 | } 1106 | }, 1107 | "recordedRepoMappingEntries": [] 1108 | } 1109 | }, 1110 | "@@bazel_tools//tools/sh:sh_configure.bzl%sh_configure_extension": { 1111 | "general": { 1112 | "bzlTransitiveDigest": "hp4NgmNjEg5+xgvzfh6L83bt9/aiiWETuNpwNuF1MSU=", 1113 | "recordedFileInputs": {}, 1114 | "recordedDirentsInputs": {}, 1115 | "envVariables": {}, 1116 | "generatedRepoSpecs": { 1117 | "local_config_sh": { 1118 | "bzlFile": "@@bazel_tools//tools/sh:sh_configure.bzl", 1119 | "ruleClassName": "sh_config", 1120 | "attributes": {} 1121 | } 1122 | }, 1123 | "recordedRepoMappingEntries": [] 1124 | } 1125 | }, 1126 | "@@rules_java~//java:extensions.bzl%toolchains": { 1127 | "general": { 1128 | "bzlTransitiveDigest": "tJHbmWnq7m+9eUBnUdv7jZziQ26FmcGL9C5/hU3Q9UQ=", 1129 | "recordedFileInputs": {}, 1130 | "recordedDirentsInputs": {}, 1131 | "envVariables": {}, 1132 | "generatedRepoSpecs": { 1133 | "remotejdk21_linux_toolchain_config_repo": { 1134 | "bzlFile": "@@rules_java~//toolchains:remote_java_repository.bzl", 1135 | "ruleClassName": "_toolchain_config", 1136 | "attributes": { 1137 | "build_file": "\nconfig_setting(\n name = \"prefix_version_setting\",\n values = {\"java_runtime_version\": \"remotejdk_21\"},\n visibility = [\"//visibility:private\"],\n)\nconfig_setting(\n name = \"version_setting\",\n values = {\"java_runtime_version\": \"21\"},\n visibility = [\"//visibility:private\"],\n)\nalias(\n name = \"version_or_prefix_version_setting\",\n actual = select({\n \":version_setting\": \":version_setting\",\n \"//conditions:default\": \":prefix_version_setting\",\n }),\n visibility = [\"//visibility:private\"],\n)\ntoolchain(\n name = \"toolchain\",\n target_compatible_with = [\"@platforms//os:linux\", \"@platforms//cpu:x86_64\"],\n target_settings = [\":version_or_prefix_version_setting\"],\n toolchain_type = \"@bazel_tools//tools/jdk:runtime_toolchain_type\",\n toolchain = \"@remotejdk21_linux//:jdk\",\n)\ntoolchain(\n name = \"bootstrap_runtime_toolchain\",\n # These constraints are not required for correctness, but prevent fetches of remote JDK for\n # different architectures. As every Java compilation toolchain depends on a bootstrap runtime in\n # the same configuration, this constraint will not result in toolchain resolution failures.\n exec_compatible_with = [\"@platforms//os:linux\", \"@platforms//cpu:x86_64\"],\n target_settings = [\":version_or_prefix_version_setting\"],\n toolchain_type = \"@bazel_tools//tools/jdk:bootstrap_runtime_toolchain_type\",\n toolchain = \"@remotejdk21_linux//:jdk\",\n)\n" 1138 | } 1139 | }, 1140 | "remotejdk17_linux_s390x_toolchain_config_repo": { 1141 | "bzlFile": "@@rules_java~//toolchains:remote_java_repository.bzl", 1142 | "ruleClassName": "_toolchain_config", 1143 | "attributes": { 1144 | "build_file": "\nconfig_setting(\n name = \"prefix_version_setting\",\n values = {\"java_runtime_version\": \"remotejdk_17\"},\n visibility = [\"//visibility:private\"],\n)\nconfig_setting(\n name = \"version_setting\",\n values = {\"java_runtime_version\": \"17\"},\n visibility = [\"//visibility:private\"],\n)\nalias(\n name = \"version_or_prefix_version_setting\",\n actual = select({\n \":version_setting\": \":version_setting\",\n \"//conditions:default\": \":prefix_version_setting\",\n }),\n visibility = [\"//visibility:private\"],\n)\ntoolchain(\n name = \"toolchain\",\n target_compatible_with = [\"@platforms//os:linux\", \"@platforms//cpu:s390x\"],\n target_settings = [\":version_or_prefix_version_setting\"],\n toolchain_type = \"@bazel_tools//tools/jdk:runtime_toolchain_type\",\n toolchain = \"@remotejdk17_linux_s390x//:jdk\",\n)\ntoolchain(\n name = \"bootstrap_runtime_toolchain\",\n # These constraints are not required for correctness, but prevent fetches of remote JDK for\n # different architectures. As every Java compilation toolchain depends on a bootstrap runtime in\n # the same configuration, this constraint will not result in toolchain resolution failures.\n exec_compatible_with = [\"@platforms//os:linux\", \"@platforms//cpu:s390x\"],\n target_settings = [\":version_or_prefix_version_setting\"],\n toolchain_type = \"@bazel_tools//tools/jdk:bootstrap_runtime_toolchain_type\",\n toolchain = \"@remotejdk17_linux_s390x//:jdk\",\n)\n" 1145 | } 1146 | }, 1147 | "remotejdk17_macos_toolchain_config_repo": { 1148 | "bzlFile": "@@rules_java~//toolchains:remote_java_repository.bzl", 1149 | "ruleClassName": "_toolchain_config", 1150 | "attributes": { 1151 | "build_file": "\nconfig_setting(\n name = \"prefix_version_setting\",\n values = {\"java_runtime_version\": \"remotejdk_17\"},\n visibility = [\"//visibility:private\"],\n)\nconfig_setting(\n name = \"version_setting\",\n values = {\"java_runtime_version\": \"17\"},\n visibility = [\"//visibility:private\"],\n)\nalias(\n name = \"version_or_prefix_version_setting\",\n actual = select({\n \":version_setting\": \":version_setting\",\n \"//conditions:default\": \":prefix_version_setting\",\n }),\n visibility = [\"//visibility:private\"],\n)\ntoolchain(\n name = \"toolchain\",\n target_compatible_with = [\"@platforms//os:macos\", \"@platforms//cpu:x86_64\"],\n target_settings = [\":version_or_prefix_version_setting\"],\n toolchain_type = \"@bazel_tools//tools/jdk:runtime_toolchain_type\",\n toolchain = \"@remotejdk17_macos//:jdk\",\n)\ntoolchain(\n name = \"bootstrap_runtime_toolchain\",\n # These constraints are not required for correctness, but prevent fetches of remote JDK for\n # different architectures. As every Java compilation toolchain depends on a bootstrap runtime in\n # the same configuration, this constraint will not result in toolchain resolution failures.\n exec_compatible_with = [\"@platforms//os:macos\", \"@platforms//cpu:x86_64\"],\n target_settings = [\":version_or_prefix_version_setting\"],\n toolchain_type = \"@bazel_tools//tools/jdk:bootstrap_runtime_toolchain_type\",\n toolchain = \"@remotejdk17_macos//:jdk\",\n)\n" 1152 | } 1153 | }, 1154 | "remotejdk21_macos_aarch64_toolchain_config_repo": { 1155 | "bzlFile": "@@rules_java~//toolchains:remote_java_repository.bzl", 1156 | "ruleClassName": "_toolchain_config", 1157 | "attributes": { 1158 | "build_file": "\nconfig_setting(\n name = \"prefix_version_setting\",\n values = {\"java_runtime_version\": \"remotejdk_21\"},\n visibility = [\"//visibility:private\"],\n)\nconfig_setting(\n name = \"version_setting\",\n values = {\"java_runtime_version\": \"21\"},\n visibility = [\"//visibility:private\"],\n)\nalias(\n name = \"version_or_prefix_version_setting\",\n actual = select({\n \":version_setting\": \":version_setting\",\n \"//conditions:default\": \":prefix_version_setting\",\n }),\n visibility = [\"//visibility:private\"],\n)\ntoolchain(\n name = \"toolchain\",\n target_compatible_with = [\"@platforms//os:macos\", \"@platforms//cpu:aarch64\"],\n target_settings = [\":version_or_prefix_version_setting\"],\n toolchain_type = \"@bazel_tools//tools/jdk:runtime_toolchain_type\",\n toolchain = \"@remotejdk21_macos_aarch64//:jdk\",\n)\ntoolchain(\n name = \"bootstrap_runtime_toolchain\",\n # These constraints are not required for correctness, but prevent fetches of remote JDK for\n # different architectures. As every Java compilation toolchain depends on a bootstrap runtime in\n # the same configuration, this constraint will not result in toolchain resolution failures.\n exec_compatible_with = [\"@platforms//os:macos\", \"@platforms//cpu:aarch64\"],\n target_settings = [\":version_or_prefix_version_setting\"],\n toolchain_type = \"@bazel_tools//tools/jdk:bootstrap_runtime_toolchain_type\",\n toolchain = \"@remotejdk21_macos_aarch64//:jdk\",\n)\n" 1159 | } 1160 | }, 1161 | "remotejdk17_linux_aarch64_toolchain_config_repo": { 1162 | "bzlFile": "@@rules_java~//toolchains:remote_java_repository.bzl", 1163 | "ruleClassName": "_toolchain_config", 1164 | "attributes": { 1165 | "build_file": "\nconfig_setting(\n name = \"prefix_version_setting\",\n values = {\"java_runtime_version\": \"remotejdk_17\"},\n visibility = [\"//visibility:private\"],\n)\nconfig_setting(\n name = \"version_setting\",\n values = {\"java_runtime_version\": \"17\"},\n visibility = [\"//visibility:private\"],\n)\nalias(\n name = \"version_or_prefix_version_setting\",\n actual = select({\n \":version_setting\": \":version_setting\",\n \"//conditions:default\": \":prefix_version_setting\",\n }),\n visibility = [\"//visibility:private\"],\n)\ntoolchain(\n name = \"toolchain\",\n target_compatible_with = [\"@platforms//os:linux\", \"@platforms//cpu:aarch64\"],\n target_settings = [\":version_or_prefix_version_setting\"],\n toolchain_type = \"@bazel_tools//tools/jdk:runtime_toolchain_type\",\n toolchain = \"@remotejdk17_linux_aarch64//:jdk\",\n)\ntoolchain(\n name = \"bootstrap_runtime_toolchain\",\n # These constraints are not required for correctness, but prevent fetches of remote JDK for\n # different architectures. As every Java compilation toolchain depends on a bootstrap runtime in\n # the same configuration, this constraint will not result in toolchain resolution failures.\n exec_compatible_with = [\"@platforms//os:linux\", \"@platforms//cpu:aarch64\"],\n target_settings = [\":version_or_prefix_version_setting\"],\n toolchain_type = \"@bazel_tools//tools/jdk:bootstrap_runtime_toolchain_type\",\n toolchain = \"@remotejdk17_linux_aarch64//:jdk\",\n)\n" 1166 | } 1167 | }, 1168 | "remotejdk21_macos_aarch64": { 1169 | "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", 1170 | "ruleClassName": "http_archive", 1171 | "attributes": { 1172 | "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"WORKSPACE\", \"BUILD.bazel\"])\n\nfilegroup(\n name = \"jre\",\n srcs = glob(\n [\n \"jre/bin/**\",\n \"jre/lib/**\",\n ],\n allow_empty = True,\n # In some configurations, Java browser plugin is considered harmful and\n # common antivirus software blocks access to npjp2.dll interfering with Bazel,\n # so do not include it in JRE on Windows.\n exclude = [\"jre/bin/plugin2/**\"],\n ),\n)\n\nfilegroup(\n name = \"jdk-bin\",\n srcs = glob(\n [\"bin/**\"],\n # The JDK on Windows sometimes contains a directory called\n # \"%systemroot%\", which is not a valid label.\n exclude = [\"**/*%*/**\"],\n ),\n)\n\n# This folder holds security policies.\nfilegroup(\n name = \"jdk-conf\",\n srcs = glob(\n [\"conf/**\"],\n allow_empty = True,\n ),\n)\n\nfilegroup(\n name = \"jdk-include\",\n srcs = glob(\n [\"include/**\"],\n allow_empty = True,\n ),\n)\n\nfilegroup(\n name = \"jdk-lib\",\n srcs = glob(\n [\"lib/**\", \"release\"],\n allow_empty = True,\n exclude = [\n \"lib/missioncontrol/**\",\n \"lib/visualvm/**\",\n ],\n ),\n)\n\njava_runtime(\n name = \"jdk\",\n srcs = [\n \":jdk-bin\",\n \":jdk-conf\",\n \":jdk-include\",\n \":jdk-lib\",\n \":jre\",\n ],\n # Provide the 'java` binary explicitly so that the correct path is used by\n # Bazel even when the host platform differs from the execution platform.\n # Exactly one of the two globs will be empty depending on the host platform.\n # When --incompatible_disallow_empty_glob is enabled, each individual empty\n # glob will fail without allow_empty = True, even if the overall result is\n # non-empty.\n java = glob([\"bin/java.exe\", \"bin/java\"], allow_empty = True)[0],\n version = 21,\n)\n", 1173 | "sha256": "e8260516de8b60661422a725f1df2c36ef888f6fb35393566b00e7325db3d04e", 1174 | "strip_prefix": "zulu21.32.17-ca-jdk21.0.2-macosx_aarch64", 1175 | "urls": [ 1176 | "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu21.32.17-ca-jdk21.0.2-macosx_aarch64.tar.gz", 1177 | "https://cdn.azul.com/zulu/bin/zulu21.32.17-ca-jdk21.0.2-macosx_aarch64.tar.gz" 1178 | ] 1179 | } 1180 | }, 1181 | "remotejdk17_linux_toolchain_config_repo": { 1182 | "bzlFile": "@@rules_java~//toolchains:remote_java_repository.bzl", 1183 | "ruleClassName": "_toolchain_config", 1184 | "attributes": { 1185 | "build_file": "\nconfig_setting(\n name = \"prefix_version_setting\",\n values = {\"java_runtime_version\": \"remotejdk_17\"},\n visibility = [\"//visibility:private\"],\n)\nconfig_setting(\n name = \"version_setting\",\n values = {\"java_runtime_version\": \"17\"},\n visibility = [\"//visibility:private\"],\n)\nalias(\n name = \"version_or_prefix_version_setting\",\n actual = select({\n \":version_setting\": \":version_setting\",\n \"//conditions:default\": \":prefix_version_setting\",\n }),\n visibility = [\"//visibility:private\"],\n)\ntoolchain(\n name = \"toolchain\",\n target_compatible_with = [\"@platforms//os:linux\", \"@platforms//cpu:x86_64\"],\n target_settings = [\":version_or_prefix_version_setting\"],\n toolchain_type = \"@bazel_tools//tools/jdk:runtime_toolchain_type\",\n toolchain = \"@remotejdk17_linux//:jdk\",\n)\ntoolchain(\n name = \"bootstrap_runtime_toolchain\",\n # These constraints are not required for correctness, but prevent fetches of remote JDK for\n # different architectures. As every Java compilation toolchain depends on a bootstrap runtime in\n # the same configuration, this constraint will not result in toolchain resolution failures.\n exec_compatible_with = [\"@platforms//os:linux\", \"@platforms//cpu:x86_64\"],\n target_settings = [\":version_or_prefix_version_setting\"],\n toolchain_type = \"@bazel_tools//tools/jdk:bootstrap_runtime_toolchain_type\",\n toolchain = \"@remotejdk17_linux//:jdk\",\n)\n" 1186 | } 1187 | }, 1188 | "remotejdk17_macos_aarch64": { 1189 | "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", 1190 | "ruleClassName": "http_archive", 1191 | "attributes": { 1192 | "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"WORKSPACE\", \"BUILD.bazel\"])\n\nfilegroup(\n name = \"jre\",\n srcs = glob(\n [\n \"jre/bin/**\",\n \"jre/lib/**\",\n ],\n allow_empty = True,\n # In some configurations, Java browser plugin is considered harmful and\n # common antivirus software blocks access to npjp2.dll interfering with Bazel,\n # so do not include it in JRE on Windows.\n exclude = [\"jre/bin/plugin2/**\"],\n ),\n)\n\nfilegroup(\n name = \"jdk-bin\",\n srcs = glob(\n [\"bin/**\"],\n # The JDK on Windows sometimes contains a directory called\n # \"%systemroot%\", which is not a valid label.\n exclude = [\"**/*%*/**\"],\n ),\n)\n\n# This folder holds security policies.\nfilegroup(\n name = \"jdk-conf\",\n srcs = glob(\n [\"conf/**\"],\n allow_empty = True,\n ),\n)\n\nfilegroup(\n name = \"jdk-include\",\n srcs = glob(\n [\"include/**\"],\n allow_empty = True,\n ),\n)\n\nfilegroup(\n name = \"jdk-lib\",\n srcs = glob(\n [\"lib/**\", \"release\"],\n allow_empty = True,\n exclude = [\n \"lib/missioncontrol/**\",\n \"lib/visualvm/**\",\n ],\n ),\n)\n\njava_runtime(\n name = \"jdk\",\n srcs = [\n \":jdk-bin\",\n \":jdk-conf\",\n \":jdk-include\",\n \":jdk-lib\",\n \":jre\",\n ],\n # Provide the 'java` binary explicitly so that the correct path is used by\n # Bazel even when the host platform differs from the execution platform.\n # Exactly one of the two globs will be empty depending on the host platform.\n # When --incompatible_disallow_empty_glob is enabled, each individual empty\n # glob will fail without allow_empty = True, even if the overall result is\n # non-empty.\n java = glob([\"bin/java.exe\", \"bin/java\"], allow_empty = True)[0],\n version = 17,\n)\n", 1193 | "sha256": "314b04568ec0ae9b36ba03c9cbd42adc9e1265f74678923b19297d66eb84dcca", 1194 | "strip_prefix": "zulu17.44.53-ca-jdk17.0.8.1-macosx_aarch64", 1195 | "urls": [ 1196 | "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu17.44.53-ca-jdk17.0.8.1-macosx_aarch64.tar.gz", 1197 | "https://cdn.azul.com/zulu/bin/zulu17.44.53-ca-jdk17.0.8.1-macosx_aarch64.tar.gz" 1198 | ] 1199 | } 1200 | }, 1201 | "remote_java_tools_windows": { 1202 | "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", 1203 | "ruleClassName": "http_archive", 1204 | "attributes": { 1205 | "sha256": "fe2f88169696d6c6fc6e90ba61bb46be7d0ae3693cbafdf336041bf56679e8d1", 1206 | "urls": [ 1207 | "https://mirror.bazel.build/bazel_java_tools/releases/java/v13.4/java_tools_windows-v13.4.zip", 1208 | "https://github.com/bazelbuild/java_tools/releases/download/java_v13.4/java_tools_windows-v13.4.zip" 1209 | ] 1210 | } 1211 | }, 1212 | "remotejdk11_win": { 1213 | "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", 1214 | "ruleClassName": "http_archive", 1215 | "attributes": { 1216 | "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"WORKSPACE\", \"BUILD.bazel\"])\n\nfilegroup(\n name = \"jre\",\n srcs = glob(\n [\n \"jre/bin/**\",\n \"jre/lib/**\",\n ],\n allow_empty = True,\n # In some configurations, Java browser plugin is considered harmful and\n # common antivirus software blocks access to npjp2.dll interfering with Bazel,\n # so do not include it in JRE on Windows.\n exclude = [\"jre/bin/plugin2/**\"],\n ),\n)\n\nfilegroup(\n name = \"jdk-bin\",\n srcs = glob(\n [\"bin/**\"],\n # The JDK on Windows sometimes contains a directory called\n # \"%systemroot%\", which is not a valid label.\n exclude = [\"**/*%*/**\"],\n ),\n)\n\n# This folder holds security policies.\nfilegroup(\n name = \"jdk-conf\",\n srcs = glob(\n [\"conf/**\"],\n allow_empty = True,\n ),\n)\n\nfilegroup(\n name = \"jdk-include\",\n srcs = glob(\n [\"include/**\"],\n allow_empty = True,\n ),\n)\n\nfilegroup(\n name = \"jdk-lib\",\n srcs = glob(\n [\"lib/**\", \"release\"],\n allow_empty = True,\n exclude = [\n \"lib/missioncontrol/**\",\n \"lib/visualvm/**\",\n ],\n ),\n)\n\njava_runtime(\n name = \"jdk\",\n srcs = [\n \":jdk-bin\",\n \":jdk-conf\",\n \":jdk-include\",\n \":jdk-lib\",\n \":jre\",\n ],\n # Provide the 'java` binary explicitly so that the correct path is used by\n # Bazel even when the host platform differs from the execution platform.\n # Exactly one of the two globs will be empty depending on the host platform.\n # When --incompatible_disallow_empty_glob is enabled, each individual empty\n # glob will fail without allow_empty = True, even if the overall result is\n # non-empty.\n java = glob([\"bin/java.exe\", \"bin/java\"], allow_empty = True)[0],\n version = 11,\n)\n", 1217 | "sha256": "43408193ce2fa0862819495b5ae8541085b95660153f2adcf91a52d3a1710e83", 1218 | "strip_prefix": "zulu11.66.15-ca-jdk11.0.20-win_x64", 1219 | "urls": [ 1220 | "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu11.66.15-ca-jdk11.0.20-win_x64.zip", 1221 | "https://cdn.azul.com/zulu/bin/zulu11.66.15-ca-jdk11.0.20-win_x64.zip" 1222 | ] 1223 | } 1224 | }, 1225 | "remotejdk11_win_toolchain_config_repo": { 1226 | "bzlFile": "@@rules_java~//toolchains:remote_java_repository.bzl", 1227 | "ruleClassName": "_toolchain_config", 1228 | "attributes": { 1229 | "build_file": "\nconfig_setting(\n name = \"prefix_version_setting\",\n values = {\"java_runtime_version\": \"remotejdk_11\"},\n visibility = [\"//visibility:private\"],\n)\nconfig_setting(\n name = \"version_setting\",\n values = {\"java_runtime_version\": \"11\"},\n visibility = [\"//visibility:private\"],\n)\nalias(\n name = \"version_or_prefix_version_setting\",\n actual = select({\n \":version_setting\": \":version_setting\",\n \"//conditions:default\": \":prefix_version_setting\",\n }),\n visibility = [\"//visibility:private\"],\n)\ntoolchain(\n name = \"toolchain\",\n target_compatible_with = [\"@platforms//os:windows\", \"@platforms//cpu:x86_64\"],\n target_settings = [\":version_or_prefix_version_setting\"],\n toolchain_type = \"@bazel_tools//tools/jdk:runtime_toolchain_type\",\n toolchain = \"@remotejdk11_win//:jdk\",\n)\ntoolchain(\n name = \"bootstrap_runtime_toolchain\",\n # These constraints are not required for correctness, but prevent fetches of remote JDK for\n # different architectures. As every Java compilation toolchain depends on a bootstrap runtime in\n # the same configuration, this constraint will not result in toolchain resolution failures.\n exec_compatible_with = [\"@platforms//os:windows\", \"@platforms//cpu:x86_64\"],\n target_settings = [\":version_or_prefix_version_setting\"],\n toolchain_type = \"@bazel_tools//tools/jdk:bootstrap_runtime_toolchain_type\",\n toolchain = \"@remotejdk11_win//:jdk\",\n)\n" 1230 | } 1231 | }, 1232 | "remotejdk11_linux_aarch64": { 1233 | "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", 1234 | "ruleClassName": "http_archive", 1235 | "attributes": { 1236 | "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"WORKSPACE\", \"BUILD.bazel\"])\n\nfilegroup(\n name = \"jre\",\n srcs = glob(\n [\n \"jre/bin/**\",\n \"jre/lib/**\",\n ],\n allow_empty = True,\n # In some configurations, Java browser plugin is considered harmful and\n # common antivirus software blocks access to npjp2.dll interfering with Bazel,\n # so do not include it in JRE on Windows.\n exclude = [\"jre/bin/plugin2/**\"],\n ),\n)\n\nfilegroup(\n name = \"jdk-bin\",\n srcs = glob(\n [\"bin/**\"],\n # The JDK on Windows sometimes contains a directory called\n # \"%systemroot%\", which is not a valid label.\n exclude = [\"**/*%*/**\"],\n ),\n)\n\n# This folder holds security policies.\nfilegroup(\n name = \"jdk-conf\",\n srcs = glob(\n [\"conf/**\"],\n allow_empty = True,\n ),\n)\n\nfilegroup(\n name = \"jdk-include\",\n srcs = glob(\n [\"include/**\"],\n allow_empty = True,\n ),\n)\n\nfilegroup(\n name = \"jdk-lib\",\n srcs = glob(\n [\"lib/**\", \"release\"],\n allow_empty = True,\n exclude = [\n \"lib/missioncontrol/**\",\n \"lib/visualvm/**\",\n ],\n ),\n)\n\njava_runtime(\n name = \"jdk\",\n srcs = [\n \":jdk-bin\",\n \":jdk-conf\",\n \":jdk-include\",\n \":jdk-lib\",\n \":jre\",\n ],\n # Provide the 'java` binary explicitly so that the correct path is used by\n # Bazel even when the host platform differs from the execution platform.\n # Exactly one of the two globs will be empty depending on the host platform.\n # When --incompatible_disallow_empty_glob is enabled, each individual empty\n # glob will fail without allow_empty = True, even if the overall result is\n # non-empty.\n java = glob([\"bin/java.exe\", \"bin/java\"], allow_empty = True)[0],\n version = 11,\n)\n", 1237 | "sha256": "54174439f2b3fddd11f1048c397fe7bb45d4c9d66d452d6889b013d04d21c4de", 1238 | "strip_prefix": "zulu11.66.15-ca-jdk11.0.20-linux_aarch64", 1239 | "urls": [ 1240 | "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu11.66.15-ca-jdk11.0.20-linux_aarch64.tar.gz", 1241 | "https://cdn.azul.com/zulu/bin/zulu11.66.15-ca-jdk11.0.20-linux_aarch64.tar.gz" 1242 | ] 1243 | } 1244 | }, 1245 | "remotejdk17_linux": { 1246 | "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", 1247 | "ruleClassName": "http_archive", 1248 | "attributes": { 1249 | "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"WORKSPACE\", \"BUILD.bazel\"])\n\nfilegroup(\n name = \"jre\",\n srcs = glob(\n [\n \"jre/bin/**\",\n \"jre/lib/**\",\n ],\n allow_empty = True,\n # In some configurations, Java browser plugin is considered harmful and\n # common antivirus software blocks access to npjp2.dll interfering with Bazel,\n # so do not include it in JRE on Windows.\n exclude = [\"jre/bin/plugin2/**\"],\n ),\n)\n\nfilegroup(\n name = \"jdk-bin\",\n srcs = glob(\n [\"bin/**\"],\n # The JDK on Windows sometimes contains a directory called\n # \"%systemroot%\", which is not a valid label.\n exclude = [\"**/*%*/**\"],\n ),\n)\n\n# This folder holds security policies.\nfilegroup(\n name = \"jdk-conf\",\n srcs = glob(\n [\"conf/**\"],\n allow_empty = True,\n ),\n)\n\nfilegroup(\n name = \"jdk-include\",\n srcs = glob(\n [\"include/**\"],\n allow_empty = True,\n ),\n)\n\nfilegroup(\n name = \"jdk-lib\",\n srcs = glob(\n [\"lib/**\", \"release\"],\n allow_empty = True,\n exclude = [\n \"lib/missioncontrol/**\",\n \"lib/visualvm/**\",\n ],\n ),\n)\n\njava_runtime(\n name = \"jdk\",\n srcs = [\n \":jdk-bin\",\n \":jdk-conf\",\n \":jdk-include\",\n \":jdk-lib\",\n \":jre\",\n ],\n # Provide the 'java` binary explicitly so that the correct path is used by\n # Bazel even when the host platform differs from the execution platform.\n # Exactly one of the two globs will be empty depending on the host platform.\n # When --incompatible_disallow_empty_glob is enabled, each individual empty\n # glob will fail without allow_empty = True, even if the overall result is\n # non-empty.\n java = glob([\"bin/java.exe\", \"bin/java\"], allow_empty = True)[0],\n version = 17,\n)\n", 1250 | "sha256": "b9482f2304a1a68a614dfacddcf29569a72f0fac32e6c74f83dc1b9a157b8340", 1251 | "strip_prefix": "zulu17.44.53-ca-jdk17.0.8.1-linux_x64", 1252 | "urls": [ 1253 | "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu17.44.53-ca-jdk17.0.8.1-linux_x64.tar.gz", 1254 | "https://cdn.azul.com/zulu/bin/zulu17.44.53-ca-jdk17.0.8.1-linux_x64.tar.gz" 1255 | ] 1256 | } 1257 | }, 1258 | "remotejdk11_linux_s390x_toolchain_config_repo": { 1259 | "bzlFile": "@@rules_java~//toolchains:remote_java_repository.bzl", 1260 | "ruleClassName": "_toolchain_config", 1261 | "attributes": { 1262 | "build_file": "\nconfig_setting(\n name = \"prefix_version_setting\",\n values = {\"java_runtime_version\": \"remotejdk_11\"},\n visibility = [\"//visibility:private\"],\n)\nconfig_setting(\n name = \"version_setting\",\n values = {\"java_runtime_version\": \"11\"},\n visibility = [\"//visibility:private\"],\n)\nalias(\n name = \"version_or_prefix_version_setting\",\n actual = select({\n \":version_setting\": \":version_setting\",\n \"//conditions:default\": \":prefix_version_setting\",\n }),\n visibility = [\"//visibility:private\"],\n)\ntoolchain(\n name = \"toolchain\",\n target_compatible_with = [\"@platforms//os:linux\", \"@platforms//cpu:s390x\"],\n target_settings = [\":version_or_prefix_version_setting\"],\n toolchain_type = \"@bazel_tools//tools/jdk:runtime_toolchain_type\",\n toolchain = \"@remotejdk11_linux_s390x//:jdk\",\n)\ntoolchain(\n name = \"bootstrap_runtime_toolchain\",\n # These constraints are not required for correctness, but prevent fetches of remote JDK for\n # different architectures. As every Java compilation toolchain depends on a bootstrap runtime in\n # the same configuration, this constraint will not result in toolchain resolution failures.\n exec_compatible_with = [\"@platforms//os:linux\", \"@platforms//cpu:s390x\"],\n target_settings = [\":version_or_prefix_version_setting\"],\n toolchain_type = \"@bazel_tools//tools/jdk:bootstrap_runtime_toolchain_type\",\n toolchain = \"@remotejdk11_linux_s390x//:jdk\",\n)\n" 1263 | } 1264 | }, 1265 | "remotejdk11_linux_toolchain_config_repo": { 1266 | "bzlFile": "@@rules_java~//toolchains:remote_java_repository.bzl", 1267 | "ruleClassName": "_toolchain_config", 1268 | "attributes": { 1269 | "build_file": "\nconfig_setting(\n name = \"prefix_version_setting\",\n values = {\"java_runtime_version\": \"remotejdk_11\"},\n visibility = [\"//visibility:private\"],\n)\nconfig_setting(\n name = \"version_setting\",\n values = {\"java_runtime_version\": \"11\"},\n visibility = [\"//visibility:private\"],\n)\nalias(\n name = \"version_or_prefix_version_setting\",\n actual = select({\n \":version_setting\": \":version_setting\",\n \"//conditions:default\": \":prefix_version_setting\",\n }),\n visibility = [\"//visibility:private\"],\n)\ntoolchain(\n name = \"toolchain\",\n target_compatible_with = [\"@platforms//os:linux\", \"@platforms//cpu:x86_64\"],\n target_settings = [\":version_or_prefix_version_setting\"],\n toolchain_type = \"@bazel_tools//tools/jdk:runtime_toolchain_type\",\n toolchain = \"@remotejdk11_linux//:jdk\",\n)\ntoolchain(\n name = \"bootstrap_runtime_toolchain\",\n # These constraints are not required for correctness, but prevent fetches of remote JDK for\n # different architectures. As every Java compilation toolchain depends on a bootstrap runtime in\n # the same configuration, this constraint will not result in toolchain resolution failures.\n exec_compatible_with = [\"@platforms//os:linux\", \"@platforms//cpu:x86_64\"],\n target_settings = [\":version_or_prefix_version_setting\"],\n toolchain_type = \"@bazel_tools//tools/jdk:bootstrap_runtime_toolchain_type\",\n toolchain = \"@remotejdk11_linux//:jdk\",\n)\n" 1270 | } 1271 | }, 1272 | "remotejdk11_macos": { 1273 | "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", 1274 | "ruleClassName": "http_archive", 1275 | "attributes": { 1276 | "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"WORKSPACE\", \"BUILD.bazel\"])\n\nfilegroup(\n name = \"jre\",\n srcs = glob(\n [\n \"jre/bin/**\",\n \"jre/lib/**\",\n ],\n allow_empty = True,\n # In some configurations, Java browser plugin is considered harmful and\n # common antivirus software blocks access to npjp2.dll interfering with Bazel,\n # so do not include it in JRE on Windows.\n exclude = [\"jre/bin/plugin2/**\"],\n ),\n)\n\nfilegroup(\n name = \"jdk-bin\",\n srcs = glob(\n [\"bin/**\"],\n # The JDK on Windows sometimes contains a directory called\n # \"%systemroot%\", which is not a valid label.\n exclude = [\"**/*%*/**\"],\n ),\n)\n\n# This folder holds security policies.\nfilegroup(\n name = \"jdk-conf\",\n srcs = glob(\n [\"conf/**\"],\n allow_empty = True,\n ),\n)\n\nfilegroup(\n name = \"jdk-include\",\n srcs = glob(\n [\"include/**\"],\n allow_empty = True,\n ),\n)\n\nfilegroup(\n name = \"jdk-lib\",\n srcs = glob(\n [\"lib/**\", \"release\"],\n allow_empty = True,\n exclude = [\n \"lib/missioncontrol/**\",\n \"lib/visualvm/**\",\n ],\n ),\n)\n\njava_runtime(\n name = \"jdk\",\n srcs = [\n \":jdk-bin\",\n \":jdk-conf\",\n \":jdk-include\",\n \":jdk-lib\",\n \":jre\",\n ],\n # Provide the 'java` binary explicitly so that the correct path is used by\n # Bazel even when the host platform differs from the execution platform.\n # Exactly one of the two globs will be empty depending on the host platform.\n # When --incompatible_disallow_empty_glob is enabled, each individual empty\n # glob will fail without allow_empty = True, even if the overall result is\n # non-empty.\n java = glob([\"bin/java.exe\", \"bin/java\"], allow_empty = True)[0],\n version = 11,\n)\n", 1277 | "sha256": "bcaab11cfe586fae7583c6d9d311c64384354fb2638eb9a012eca4c3f1a1d9fd", 1278 | "strip_prefix": "zulu11.66.15-ca-jdk11.0.20-macosx_x64", 1279 | "urls": [ 1280 | "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu11.66.15-ca-jdk11.0.20-macosx_x64.tar.gz", 1281 | "https://cdn.azul.com/zulu/bin/zulu11.66.15-ca-jdk11.0.20-macosx_x64.tar.gz" 1282 | ] 1283 | } 1284 | }, 1285 | "remotejdk11_win_arm64": { 1286 | "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", 1287 | "ruleClassName": "http_archive", 1288 | "attributes": { 1289 | "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"WORKSPACE\", \"BUILD.bazel\"])\n\nfilegroup(\n name = \"jre\",\n srcs = glob(\n [\n \"jre/bin/**\",\n \"jre/lib/**\",\n ],\n allow_empty = True,\n # In some configurations, Java browser plugin is considered harmful and\n # common antivirus software blocks access to npjp2.dll interfering with Bazel,\n # so do not include it in JRE on Windows.\n exclude = [\"jre/bin/plugin2/**\"],\n ),\n)\n\nfilegroup(\n name = \"jdk-bin\",\n srcs = glob(\n [\"bin/**\"],\n # The JDK on Windows sometimes contains a directory called\n # \"%systemroot%\", which is not a valid label.\n exclude = [\"**/*%*/**\"],\n ),\n)\n\n# This folder holds security policies.\nfilegroup(\n name = \"jdk-conf\",\n srcs = glob(\n [\"conf/**\"],\n allow_empty = True,\n ),\n)\n\nfilegroup(\n name = \"jdk-include\",\n srcs = glob(\n [\"include/**\"],\n allow_empty = True,\n ),\n)\n\nfilegroup(\n name = \"jdk-lib\",\n srcs = glob(\n [\"lib/**\", \"release\"],\n allow_empty = True,\n exclude = [\n \"lib/missioncontrol/**\",\n \"lib/visualvm/**\",\n ],\n ),\n)\n\njava_runtime(\n name = \"jdk\",\n srcs = [\n \":jdk-bin\",\n \":jdk-conf\",\n \":jdk-include\",\n \":jdk-lib\",\n \":jre\",\n ],\n # Provide the 'java` binary explicitly so that the correct path is used by\n # Bazel even when the host platform differs from the execution platform.\n # Exactly one of the two globs will be empty depending on the host platform.\n # When --incompatible_disallow_empty_glob is enabled, each individual empty\n # glob will fail without allow_empty = True, even if the overall result is\n # non-empty.\n java = glob([\"bin/java.exe\", \"bin/java\"], allow_empty = True)[0],\n version = 11,\n)\n", 1290 | "sha256": "b8a28e6e767d90acf793ea6f5bed0bb595ba0ba5ebdf8b99f395266161e53ec2", 1291 | "strip_prefix": "jdk-11.0.13+8", 1292 | "urls": [ 1293 | "https://mirror.bazel.build/aka.ms/download-jdk/microsoft-jdk-11.0.13.8.1-windows-aarch64.zip" 1294 | ] 1295 | } 1296 | }, 1297 | "remotejdk17_macos": { 1298 | "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", 1299 | "ruleClassName": "http_archive", 1300 | "attributes": { 1301 | "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"WORKSPACE\", \"BUILD.bazel\"])\n\nfilegroup(\n name = \"jre\",\n srcs = glob(\n [\n \"jre/bin/**\",\n \"jre/lib/**\",\n ],\n allow_empty = True,\n # In some configurations, Java browser plugin is considered harmful and\n # common antivirus software blocks access to npjp2.dll interfering with Bazel,\n # so do not include it in JRE on Windows.\n exclude = [\"jre/bin/plugin2/**\"],\n ),\n)\n\nfilegroup(\n name = \"jdk-bin\",\n srcs = glob(\n [\"bin/**\"],\n # The JDK on Windows sometimes contains a directory called\n # \"%systemroot%\", which is not a valid label.\n exclude = [\"**/*%*/**\"],\n ),\n)\n\n# This folder holds security policies.\nfilegroup(\n name = \"jdk-conf\",\n srcs = glob(\n [\"conf/**\"],\n allow_empty = True,\n ),\n)\n\nfilegroup(\n name = \"jdk-include\",\n srcs = glob(\n [\"include/**\"],\n allow_empty = True,\n ),\n)\n\nfilegroup(\n name = \"jdk-lib\",\n srcs = glob(\n [\"lib/**\", \"release\"],\n allow_empty = True,\n exclude = [\n \"lib/missioncontrol/**\",\n \"lib/visualvm/**\",\n ],\n ),\n)\n\njava_runtime(\n name = \"jdk\",\n srcs = [\n \":jdk-bin\",\n \":jdk-conf\",\n \":jdk-include\",\n \":jdk-lib\",\n \":jre\",\n ],\n # Provide the 'java` binary explicitly so that the correct path is used by\n # Bazel even when the host platform differs from the execution platform.\n # Exactly one of the two globs will be empty depending on the host platform.\n # When --incompatible_disallow_empty_glob is enabled, each individual empty\n # glob will fail without allow_empty = True, even if the overall result is\n # non-empty.\n java = glob([\"bin/java.exe\", \"bin/java\"], allow_empty = True)[0],\n version = 17,\n)\n", 1302 | "sha256": "640453e8afe8ffe0fb4dceb4535fb50db9c283c64665eebb0ba68b19e65f4b1f", 1303 | "strip_prefix": "zulu17.44.53-ca-jdk17.0.8.1-macosx_x64", 1304 | "urls": [ 1305 | "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu17.44.53-ca-jdk17.0.8.1-macosx_x64.tar.gz", 1306 | "https://cdn.azul.com/zulu/bin/zulu17.44.53-ca-jdk17.0.8.1-macosx_x64.tar.gz" 1307 | ] 1308 | } 1309 | }, 1310 | "remotejdk21_macos": { 1311 | "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", 1312 | "ruleClassName": "http_archive", 1313 | "attributes": { 1314 | "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"WORKSPACE\", \"BUILD.bazel\"])\n\nfilegroup(\n name = \"jre\",\n srcs = glob(\n [\n \"jre/bin/**\",\n \"jre/lib/**\",\n ],\n allow_empty = True,\n # In some configurations, Java browser plugin is considered harmful and\n # common antivirus software blocks access to npjp2.dll interfering with Bazel,\n # so do not include it in JRE on Windows.\n exclude = [\"jre/bin/plugin2/**\"],\n ),\n)\n\nfilegroup(\n name = \"jdk-bin\",\n srcs = glob(\n [\"bin/**\"],\n # The JDK on Windows sometimes contains a directory called\n # \"%systemroot%\", which is not a valid label.\n exclude = [\"**/*%*/**\"],\n ),\n)\n\n# This folder holds security policies.\nfilegroup(\n name = \"jdk-conf\",\n srcs = glob(\n [\"conf/**\"],\n allow_empty = True,\n ),\n)\n\nfilegroup(\n name = \"jdk-include\",\n srcs = glob(\n [\"include/**\"],\n allow_empty = True,\n ),\n)\n\nfilegroup(\n name = \"jdk-lib\",\n srcs = glob(\n [\"lib/**\", \"release\"],\n allow_empty = True,\n exclude = [\n \"lib/missioncontrol/**\",\n \"lib/visualvm/**\",\n ],\n ),\n)\n\njava_runtime(\n name = \"jdk\",\n srcs = [\n \":jdk-bin\",\n \":jdk-conf\",\n \":jdk-include\",\n \":jdk-lib\",\n \":jre\",\n ],\n # Provide the 'java` binary explicitly so that the correct path is used by\n # Bazel even when the host platform differs from the execution platform.\n # Exactly one of the two globs will be empty depending on the host platform.\n # When --incompatible_disallow_empty_glob is enabled, each individual empty\n # glob will fail without allow_empty = True, even if the overall result is\n # non-empty.\n java = glob([\"bin/java.exe\", \"bin/java\"], allow_empty = True)[0],\n version = 21,\n)\n", 1315 | "sha256": "3ad8fe288eb57d975c2786ae453a036aa46e47ab2ac3d81538ebae2a54d3c025", 1316 | "strip_prefix": "zulu21.32.17-ca-jdk21.0.2-macosx_x64", 1317 | "urls": [ 1318 | "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu21.32.17-ca-jdk21.0.2-macosx_x64.tar.gz", 1319 | "https://cdn.azul.com/zulu/bin/zulu21.32.17-ca-jdk21.0.2-macosx_x64.tar.gz" 1320 | ] 1321 | } 1322 | }, 1323 | "remotejdk21_macos_toolchain_config_repo": { 1324 | "bzlFile": "@@rules_java~//toolchains:remote_java_repository.bzl", 1325 | "ruleClassName": "_toolchain_config", 1326 | "attributes": { 1327 | "build_file": "\nconfig_setting(\n name = \"prefix_version_setting\",\n values = {\"java_runtime_version\": \"remotejdk_21\"},\n visibility = [\"//visibility:private\"],\n)\nconfig_setting(\n name = \"version_setting\",\n values = {\"java_runtime_version\": \"21\"},\n visibility = [\"//visibility:private\"],\n)\nalias(\n name = \"version_or_prefix_version_setting\",\n actual = select({\n \":version_setting\": \":version_setting\",\n \"//conditions:default\": \":prefix_version_setting\",\n }),\n visibility = [\"//visibility:private\"],\n)\ntoolchain(\n name = \"toolchain\",\n target_compatible_with = [\"@platforms//os:macos\", \"@platforms//cpu:x86_64\"],\n target_settings = [\":version_or_prefix_version_setting\"],\n toolchain_type = \"@bazel_tools//tools/jdk:runtime_toolchain_type\",\n toolchain = \"@remotejdk21_macos//:jdk\",\n)\ntoolchain(\n name = \"bootstrap_runtime_toolchain\",\n # These constraints are not required for correctness, but prevent fetches of remote JDK for\n # different architectures. As every Java compilation toolchain depends on a bootstrap runtime in\n # the same configuration, this constraint will not result in toolchain resolution failures.\n exec_compatible_with = [\"@platforms//os:macos\", \"@platforms//cpu:x86_64\"],\n target_settings = [\":version_or_prefix_version_setting\"],\n toolchain_type = \"@bazel_tools//tools/jdk:bootstrap_runtime_toolchain_type\",\n toolchain = \"@remotejdk21_macos//:jdk\",\n)\n" 1328 | } 1329 | }, 1330 | "remotejdk17_macos_aarch64_toolchain_config_repo": { 1331 | "bzlFile": "@@rules_java~//toolchains:remote_java_repository.bzl", 1332 | "ruleClassName": "_toolchain_config", 1333 | "attributes": { 1334 | "build_file": "\nconfig_setting(\n name = \"prefix_version_setting\",\n values = {\"java_runtime_version\": \"remotejdk_17\"},\n visibility = [\"//visibility:private\"],\n)\nconfig_setting(\n name = \"version_setting\",\n values = {\"java_runtime_version\": \"17\"},\n visibility = [\"//visibility:private\"],\n)\nalias(\n name = \"version_or_prefix_version_setting\",\n actual = select({\n \":version_setting\": \":version_setting\",\n \"//conditions:default\": \":prefix_version_setting\",\n }),\n visibility = [\"//visibility:private\"],\n)\ntoolchain(\n name = \"toolchain\",\n target_compatible_with = [\"@platforms//os:macos\", \"@platforms//cpu:aarch64\"],\n target_settings = [\":version_or_prefix_version_setting\"],\n toolchain_type = \"@bazel_tools//tools/jdk:runtime_toolchain_type\",\n toolchain = \"@remotejdk17_macos_aarch64//:jdk\",\n)\ntoolchain(\n name = \"bootstrap_runtime_toolchain\",\n # These constraints are not required for correctness, but prevent fetches of remote JDK for\n # different architectures. As every Java compilation toolchain depends on a bootstrap runtime in\n # the same configuration, this constraint will not result in toolchain resolution failures.\n exec_compatible_with = [\"@platforms//os:macos\", \"@platforms//cpu:aarch64\"],\n target_settings = [\":version_or_prefix_version_setting\"],\n toolchain_type = \"@bazel_tools//tools/jdk:bootstrap_runtime_toolchain_type\",\n toolchain = \"@remotejdk17_macos_aarch64//:jdk\",\n)\n" 1335 | } 1336 | }, 1337 | "remotejdk17_win": { 1338 | "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", 1339 | "ruleClassName": "http_archive", 1340 | "attributes": { 1341 | "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"WORKSPACE\", \"BUILD.bazel\"])\n\nfilegroup(\n name = \"jre\",\n srcs = glob(\n [\n \"jre/bin/**\",\n \"jre/lib/**\",\n ],\n allow_empty = True,\n # In some configurations, Java browser plugin is considered harmful and\n # common antivirus software blocks access to npjp2.dll interfering with Bazel,\n # so do not include it in JRE on Windows.\n exclude = [\"jre/bin/plugin2/**\"],\n ),\n)\n\nfilegroup(\n name = \"jdk-bin\",\n srcs = glob(\n [\"bin/**\"],\n # The JDK on Windows sometimes contains a directory called\n # \"%systemroot%\", which is not a valid label.\n exclude = [\"**/*%*/**\"],\n ),\n)\n\n# This folder holds security policies.\nfilegroup(\n name = \"jdk-conf\",\n srcs = glob(\n [\"conf/**\"],\n allow_empty = True,\n ),\n)\n\nfilegroup(\n name = \"jdk-include\",\n srcs = glob(\n [\"include/**\"],\n allow_empty = True,\n ),\n)\n\nfilegroup(\n name = \"jdk-lib\",\n srcs = glob(\n [\"lib/**\", \"release\"],\n allow_empty = True,\n exclude = [\n \"lib/missioncontrol/**\",\n \"lib/visualvm/**\",\n ],\n ),\n)\n\njava_runtime(\n name = \"jdk\",\n srcs = [\n \":jdk-bin\",\n \":jdk-conf\",\n \":jdk-include\",\n \":jdk-lib\",\n \":jre\",\n ],\n # Provide the 'java` binary explicitly so that the correct path is used by\n # Bazel even when the host platform differs from the execution platform.\n # Exactly one of the two globs will be empty depending on the host platform.\n # When --incompatible_disallow_empty_glob is enabled, each individual empty\n # glob will fail without allow_empty = True, even if the overall result is\n # non-empty.\n java = glob([\"bin/java.exe\", \"bin/java\"], allow_empty = True)[0],\n version = 17,\n)\n", 1342 | "sha256": "192f2afca57701de6ec496234f7e45d971bf623ff66b8ee4a5c81582054e5637", 1343 | "strip_prefix": "zulu17.44.53-ca-jdk17.0.8.1-win_x64", 1344 | "urls": [ 1345 | "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu17.44.53-ca-jdk17.0.8.1-win_x64.zip", 1346 | "https://cdn.azul.com/zulu/bin/zulu17.44.53-ca-jdk17.0.8.1-win_x64.zip" 1347 | ] 1348 | } 1349 | }, 1350 | "remotejdk11_macos_aarch64_toolchain_config_repo": { 1351 | "bzlFile": "@@rules_java~//toolchains:remote_java_repository.bzl", 1352 | "ruleClassName": "_toolchain_config", 1353 | "attributes": { 1354 | "build_file": "\nconfig_setting(\n name = \"prefix_version_setting\",\n values = {\"java_runtime_version\": \"remotejdk_11\"},\n visibility = [\"//visibility:private\"],\n)\nconfig_setting(\n name = \"version_setting\",\n values = {\"java_runtime_version\": \"11\"},\n visibility = [\"//visibility:private\"],\n)\nalias(\n name = \"version_or_prefix_version_setting\",\n actual = select({\n \":version_setting\": \":version_setting\",\n \"//conditions:default\": \":prefix_version_setting\",\n }),\n visibility = [\"//visibility:private\"],\n)\ntoolchain(\n name = \"toolchain\",\n target_compatible_with = [\"@platforms//os:macos\", \"@platforms//cpu:aarch64\"],\n target_settings = [\":version_or_prefix_version_setting\"],\n toolchain_type = \"@bazel_tools//tools/jdk:runtime_toolchain_type\",\n toolchain = \"@remotejdk11_macos_aarch64//:jdk\",\n)\ntoolchain(\n name = \"bootstrap_runtime_toolchain\",\n # These constraints are not required for correctness, but prevent fetches of remote JDK for\n # different architectures. As every Java compilation toolchain depends on a bootstrap runtime in\n # the same configuration, this constraint will not result in toolchain resolution failures.\n exec_compatible_with = [\"@platforms//os:macos\", \"@platforms//cpu:aarch64\"],\n target_settings = [\":version_or_prefix_version_setting\"],\n toolchain_type = \"@bazel_tools//tools/jdk:bootstrap_runtime_toolchain_type\",\n toolchain = \"@remotejdk11_macos_aarch64//:jdk\",\n)\n" 1355 | } 1356 | }, 1357 | "remotejdk11_linux_ppc64le_toolchain_config_repo": { 1358 | "bzlFile": "@@rules_java~//toolchains:remote_java_repository.bzl", 1359 | "ruleClassName": "_toolchain_config", 1360 | "attributes": { 1361 | "build_file": "\nconfig_setting(\n name = \"prefix_version_setting\",\n values = {\"java_runtime_version\": \"remotejdk_11\"},\n visibility = [\"//visibility:private\"],\n)\nconfig_setting(\n name = \"version_setting\",\n values = {\"java_runtime_version\": \"11\"},\n visibility = [\"//visibility:private\"],\n)\nalias(\n name = \"version_or_prefix_version_setting\",\n actual = select({\n \":version_setting\": \":version_setting\",\n \"//conditions:default\": \":prefix_version_setting\",\n }),\n visibility = [\"//visibility:private\"],\n)\ntoolchain(\n name = \"toolchain\",\n target_compatible_with = [\"@platforms//os:linux\", \"@platforms//cpu:ppc\"],\n target_settings = [\":version_or_prefix_version_setting\"],\n toolchain_type = \"@bazel_tools//tools/jdk:runtime_toolchain_type\",\n toolchain = \"@remotejdk11_linux_ppc64le//:jdk\",\n)\ntoolchain(\n name = \"bootstrap_runtime_toolchain\",\n # These constraints are not required for correctness, but prevent fetches of remote JDK for\n # different architectures. As every Java compilation toolchain depends on a bootstrap runtime in\n # the same configuration, this constraint will not result in toolchain resolution failures.\n exec_compatible_with = [\"@platforms//os:linux\", \"@platforms//cpu:ppc\"],\n target_settings = [\":version_or_prefix_version_setting\"],\n toolchain_type = \"@bazel_tools//tools/jdk:bootstrap_runtime_toolchain_type\",\n toolchain = \"@remotejdk11_linux_ppc64le//:jdk\",\n)\n" 1362 | } 1363 | }, 1364 | "remotejdk21_linux": { 1365 | "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", 1366 | "ruleClassName": "http_archive", 1367 | "attributes": { 1368 | "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"WORKSPACE\", \"BUILD.bazel\"])\n\nfilegroup(\n name = \"jre\",\n srcs = glob(\n [\n \"jre/bin/**\",\n \"jre/lib/**\",\n ],\n allow_empty = True,\n # In some configurations, Java browser plugin is considered harmful and\n # common antivirus software blocks access to npjp2.dll interfering with Bazel,\n # so do not include it in JRE on Windows.\n exclude = [\"jre/bin/plugin2/**\"],\n ),\n)\n\nfilegroup(\n name = \"jdk-bin\",\n srcs = glob(\n [\"bin/**\"],\n # The JDK on Windows sometimes contains a directory called\n # \"%systemroot%\", which is not a valid label.\n exclude = [\"**/*%*/**\"],\n ),\n)\n\n# This folder holds security policies.\nfilegroup(\n name = \"jdk-conf\",\n srcs = glob(\n [\"conf/**\"],\n allow_empty = True,\n ),\n)\n\nfilegroup(\n name = \"jdk-include\",\n srcs = glob(\n [\"include/**\"],\n allow_empty = True,\n ),\n)\n\nfilegroup(\n name = \"jdk-lib\",\n srcs = glob(\n [\"lib/**\", \"release\"],\n allow_empty = True,\n exclude = [\n \"lib/missioncontrol/**\",\n \"lib/visualvm/**\",\n ],\n ),\n)\n\njava_runtime(\n name = \"jdk\",\n srcs = [\n \":jdk-bin\",\n \":jdk-conf\",\n \":jdk-include\",\n \":jdk-lib\",\n \":jre\",\n ],\n # Provide the 'java` binary explicitly so that the correct path is used by\n # Bazel even when the host platform differs from the execution platform.\n # Exactly one of the two globs will be empty depending on the host platform.\n # When --incompatible_disallow_empty_glob is enabled, each individual empty\n # glob will fail without allow_empty = True, even if the overall result is\n # non-empty.\n java = glob([\"bin/java.exe\", \"bin/java\"], allow_empty = True)[0],\n version = 21,\n)\n", 1369 | "sha256": "5ad730fbee6bb49bfff10bf39e84392e728d89103d3474a7e5def0fd134b300a", 1370 | "strip_prefix": "zulu21.32.17-ca-jdk21.0.2-linux_x64", 1371 | "urls": [ 1372 | "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu21.32.17-ca-jdk21.0.2-linux_x64.tar.gz", 1373 | "https://cdn.azul.com/zulu/bin/zulu21.32.17-ca-jdk21.0.2-linux_x64.tar.gz" 1374 | ] 1375 | } 1376 | }, 1377 | "remote_java_tools_linux": { 1378 | "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", 1379 | "ruleClassName": "http_archive", 1380 | "attributes": { 1381 | "sha256": "ba10f09a138cf185d04cbc807d67a3da42ab13d618c5d1ce20d776e199c33a39", 1382 | "urls": [ 1383 | "https://mirror.bazel.build/bazel_java_tools/releases/java/v13.4/java_tools_linux-v13.4.zip", 1384 | "https://github.com/bazelbuild/java_tools/releases/download/java_v13.4/java_tools_linux-v13.4.zip" 1385 | ] 1386 | } 1387 | }, 1388 | "remotejdk21_win": { 1389 | "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", 1390 | "ruleClassName": "http_archive", 1391 | "attributes": { 1392 | "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"WORKSPACE\", \"BUILD.bazel\"])\n\nfilegroup(\n name = \"jre\",\n srcs = glob(\n [\n \"jre/bin/**\",\n \"jre/lib/**\",\n ],\n allow_empty = True,\n # In some configurations, Java browser plugin is considered harmful and\n # common antivirus software blocks access to npjp2.dll interfering with Bazel,\n # so do not include it in JRE on Windows.\n exclude = [\"jre/bin/plugin2/**\"],\n ),\n)\n\nfilegroup(\n name = \"jdk-bin\",\n srcs = glob(\n [\"bin/**\"],\n # The JDK on Windows sometimes contains a directory called\n # \"%systemroot%\", which is not a valid label.\n exclude = [\"**/*%*/**\"],\n ),\n)\n\n# This folder holds security policies.\nfilegroup(\n name = \"jdk-conf\",\n srcs = glob(\n [\"conf/**\"],\n allow_empty = True,\n ),\n)\n\nfilegroup(\n name = \"jdk-include\",\n srcs = glob(\n [\"include/**\"],\n allow_empty = True,\n ),\n)\n\nfilegroup(\n name = \"jdk-lib\",\n srcs = glob(\n [\"lib/**\", \"release\"],\n allow_empty = True,\n exclude = [\n \"lib/missioncontrol/**\",\n \"lib/visualvm/**\",\n ],\n ),\n)\n\njava_runtime(\n name = \"jdk\",\n srcs = [\n \":jdk-bin\",\n \":jdk-conf\",\n \":jdk-include\",\n \":jdk-lib\",\n \":jre\",\n ],\n # Provide the 'java` binary explicitly so that the correct path is used by\n # Bazel even when the host platform differs from the execution platform.\n # Exactly one of the two globs will be empty depending on the host platform.\n # When --incompatible_disallow_empty_glob is enabled, each individual empty\n # glob will fail without allow_empty = True, even if the overall result is\n # non-empty.\n java = glob([\"bin/java.exe\", \"bin/java\"], allow_empty = True)[0],\n version = 21,\n)\n", 1393 | "sha256": "f7cc15ca17295e69c907402dfe8db240db446e75d3b150da7bf67243cded93de", 1394 | "strip_prefix": "zulu21.32.17-ca-jdk21.0.2-win_x64", 1395 | "urls": [ 1396 | "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu21.32.17-ca-jdk21.0.2-win_x64.zip", 1397 | "https://cdn.azul.com/zulu/bin/zulu21.32.17-ca-jdk21.0.2-win_x64.zip" 1398 | ] 1399 | } 1400 | }, 1401 | "remotejdk21_linux_aarch64": { 1402 | "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", 1403 | "ruleClassName": "http_archive", 1404 | "attributes": { 1405 | "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"WORKSPACE\", \"BUILD.bazel\"])\n\nfilegroup(\n name = \"jre\",\n srcs = glob(\n [\n \"jre/bin/**\",\n \"jre/lib/**\",\n ],\n allow_empty = True,\n # In some configurations, Java browser plugin is considered harmful and\n # common antivirus software blocks access to npjp2.dll interfering with Bazel,\n # so do not include it in JRE on Windows.\n exclude = [\"jre/bin/plugin2/**\"],\n ),\n)\n\nfilegroup(\n name = \"jdk-bin\",\n srcs = glob(\n [\"bin/**\"],\n # The JDK on Windows sometimes contains a directory called\n # \"%systemroot%\", which is not a valid label.\n exclude = [\"**/*%*/**\"],\n ),\n)\n\n# This folder holds security policies.\nfilegroup(\n name = \"jdk-conf\",\n srcs = glob(\n [\"conf/**\"],\n allow_empty = True,\n ),\n)\n\nfilegroup(\n name = \"jdk-include\",\n srcs = glob(\n [\"include/**\"],\n allow_empty = True,\n ),\n)\n\nfilegroup(\n name = \"jdk-lib\",\n srcs = glob(\n [\"lib/**\", \"release\"],\n allow_empty = True,\n exclude = [\n \"lib/missioncontrol/**\",\n \"lib/visualvm/**\",\n ],\n ),\n)\n\njava_runtime(\n name = \"jdk\",\n srcs = [\n \":jdk-bin\",\n \":jdk-conf\",\n \":jdk-include\",\n \":jdk-lib\",\n \":jre\",\n ],\n # Provide the 'java` binary explicitly so that the correct path is used by\n # Bazel even when the host platform differs from the execution platform.\n # Exactly one of the two globs will be empty depending on the host platform.\n # When --incompatible_disallow_empty_glob is enabled, each individual empty\n # glob will fail without allow_empty = True, even if the overall result is\n # non-empty.\n java = glob([\"bin/java.exe\", \"bin/java\"], allow_empty = True)[0],\n version = 21,\n)\n", 1406 | "sha256": "ce7df1af5d44a9f455617c4b8891443fbe3e4b269c777d8b82ed66f77167cfe0", 1407 | "strip_prefix": "zulu21.32.17-ca-jdk21.0.2-linux_aarch64", 1408 | "urls": [ 1409 | "https://cdn.azul.com/zulu/bin/zulu21.32.17-ca-jdk21.0.2-linux_aarch64.tar.gz", 1410 | "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu21.32.17-ca-jdk21.0.2-linux_aarch64.tar.gz" 1411 | ] 1412 | } 1413 | }, 1414 | "remotejdk11_linux_aarch64_toolchain_config_repo": { 1415 | "bzlFile": "@@rules_java~//toolchains:remote_java_repository.bzl", 1416 | "ruleClassName": "_toolchain_config", 1417 | "attributes": { 1418 | "build_file": "\nconfig_setting(\n name = \"prefix_version_setting\",\n values = {\"java_runtime_version\": \"remotejdk_11\"},\n visibility = [\"//visibility:private\"],\n)\nconfig_setting(\n name = \"version_setting\",\n values = {\"java_runtime_version\": \"11\"},\n visibility = [\"//visibility:private\"],\n)\nalias(\n name = \"version_or_prefix_version_setting\",\n actual = select({\n \":version_setting\": \":version_setting\",\n \"//conditions:default\": \":prefix_version_setting\",\n }),\n visibility = [\"//visibility:private\"],\n)\ntoolchain(\n name = \"toolchain\",\n target_compatible_with = [\"@platforms//os:linux\", \"@platforms//cpu:aarch64\"],\n target_settings = [\":version_or_prefix_version_setting\"],\n toolchain_type = \"@bazel_tools//tools/jdk:runtime_toolchain_type\",\n toolchain = \"@remotejdk11_linux_aarch64//:jdk\",\n)\ntoolchain(\n name = \"bootstrap_runtime_toolchain\",\n # These constraints are not required for correctness, but prevent fetches of remote JDK for\n # different architectures. As every Java compilation toolchain depends on a bootstrap runtime in\n # the same configuration, this constraint will not result in toolchain resolution failures.\n exec_compatible_with = [\"@platforms//os:linux\", \"@platforms//cpu:aarch64\"],\n target_settings = [\":version_or_prefix_version_setting\"],\n toolchain_type = \"@bazel_tools//tools/jdk:bootstrap_runtime_toolchain_type\",\n toolchain = \"@remotejdk11_linux_aarch64//:jdk\",\n)\n" 1419 | } 1420 | }, 1421 | "remotejdk11_linux_s390x": { 1422 | "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", 1423 | "ruleClassName": "http_archive", 1424 | "attributes": { 1425 | "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"WORKSPACE\", \"BUILD.bazel\"])\n\nfilegroup(\n name = \"jre\",\n srcs = glob(\n [\n \"jre/bin/**\",\n \"jre/lib/**\",\n ],\n allow_empty = True,\n # In some configurations, Java browser plugin is considered harmful and\n # common antivirus software blocks access to npjp2.dll interfering with Bazel,\n # so do not include it in JRE on Windows.\n exclude = [\"jre/bin/plugin2/**\"],\n ),\n)\n\nfilegroup(\n name = \"jdk-bin\",\n srcs = glob(\n [\"bin/**\"],\n # The JDK on Windows sometimes contains a directory called\n # \"%systemroot%\", which is not a valid label.\n exclude = [\"**/*%*/**\"],\n ),\n)\n\n# This folder holds security policies.\nfilegroup(\n name = \"jdk-conf\",\n srcs = glob(\n [\"conf/**\"],\n allow_empty = True,\n ),\n)\n\nfilegroup(\n name = \"jdk-include\",\n srcs = glob(\n [\"include/**\"],\n allow_empty = True,\n ),\n)\n\nfilegroup(\n name = \"jdk-lib\",\n srcs = glob(\n [\"lib/**\", \"release\"],\n allow_empty = True,\n exclude = [\n \"lib/missioncontrol/**\",\n \"lib/visualvm/**\",\n ],\n ),\n)\n\njava_runtime(\n name = \"jdk\",\n srcs = [\n \":jdk-bin\",\n \":jdk-conf\",\n \":jdk-include\",\n \":jdk-lib\",\n \":jre\",\n ],\n # Provide the 'java` binary explicitly so that the correct path is used by\n # Bazel even when the host platform differs from the execution platform.\n # Exactly one of the two globs will be empty depending on the host platform.\n # When --incompatible_disallow_empty_glob is enabled, each individual empty\n # glob will fail without allow_empty = True, even if the overall result is\n # non-empty.\n java = glob([\"bin/java.exe\", \"bin/java\"], allow_empty = True)[0],\n version = 11,\n)\n", 1426 | "sha256": "a58fc0361966af0a5d5a31a2d8a208e3c9bb0f54f345596fd80b99ea9a39788b", 1427 | "strip_prefix": "jdk-11.0.15+10", 1428 | "urls": [ 1429 | "https://mirror.bazel.build/github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.15+10/OpenJDK11U-jdk_s390x_linux_hotspot_11.0.15_10.tar.gz", 1430 | "https://github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.15+10/OpenJDK11U-jdk_s390x_linux_hotspot_11.0.15_10.tar.gz" 1431 | ] 1432 | } 1433 | }, 1434 | "remotejdk17_linux_aarch64": { 1435 | "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", 1436 | "ruleClassName": "http_archive", 1437 | "attributes": { 1438 | "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"WORKSPACE\", \"BUILD.bazel\"])\n\nfilegroup(\n name = \"jre\",\n srcs = glob(\n [\n \"jre/bin/**\",\n \"jre/lib/**\",\n ],\n allow_empty = True,\n # In some configurations, Java browser plugin is considered harmful and\n # common antivirus software blocks access to npjp2.dll interfering with Bazel,\n # so do not include it in JRE on Windows.\n exclude = [\"jre/bin/plugin2/**\"],\n ),\n)\n\nfilegroup(\n name = \"jdk-bin\",\n srcs = glob(\n [\"bin/**\"],\n # The JDK on Windows sometimes contains a directory called\n # \"%systemroot%\", which is not a valid label.\n exclude = [\"**/*%*/**\"],\n ),\n)\n\n# This folder holds security policies.\nfilegroup(\n name = \"jdk-conf\",\n srcs = glob(\n [\"conf/**\"],\n allow_empty = True,\n ),\n)\n\nfilegroup(\n name = \"jdk-include\",\n srcs = glob(\n [\"include/**\"],\n allow_empty = True,\n ),\n)\n\nfilegroup(\n name = \"jdk-lib\",\n srcs = glob(\n [\"lib/**\", \"release\"],\n allow_empty = True,\n exclude = [\n \"lib/missioncontrol/**\",\n \"lib/visualvm/**\",\n ],\n ),\n)\n\njava_runtime(\n name = \"jdk\",\n srcs = [\n \":jdk-bin\",\n \":jdk-conf\",\n \":jdk-include\",\n \":jdk-lib\",\n \":jre\",\n ],\n # Provide the 'java` binary explicitly so that the correct path is used by\n # Bazel even when the host platform differs from the execution platform.\n # Exactly one of the two globs will be empty depending on the host platform.\n # When --incompatible_disallow_empty_glob is enabled, each individual empty\n # glob will fail without allow_empty = True, even if the overall result is\n # non-empty.\n java = glob([\"bin/java.exe\", \"bin/java\"], allow_empty = True)[0],\n version = 17,\n)\n", 1439 | "sha256": "6531cef61e416d5a7b691555c8cf2bdff689201b8a001ff45ab6740062b44313", 1440 | "strip_prefix": "zulu17.44.53-ca-jdk17.0.8.1-linux_aarch64", 1441 | "urls": [ 1442 | "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu17.44.53-ca-jdk17.0.8.1-linux_aarch64.tar.gz", 1443 | "https://cdn.azul.com/zulu/bin/zulu17.44.53-ca-jdk17.0.8.1-linux_aarch64.tar.gz" 1444 | ] 1445 | } 1446 | }, 1447 | "remotejdk17_win_arm64_toolchain_config_repo": { 1448 | "bzlFile": "@@rules_java~//toolchains:remote_java_repository.bzl", 1449 | "ruleClassName": "_toolchain_config", 1450 | "attributes": { 1451 | "build_file": "\nconfig_setting(\n name = \"prefix_version_setting\",\n values = {\"java_runtime_version\": \"remotejdk_17\"},\n visibility = [\"//visibility:private\"],\n)\nconfig_setting(\n name = \"version_setting\",\n values = {\"java_runtime_version\": \"17\"},\n visibility = [\"//visibility:private\"],\n)\nalias(\n name = \"version_or_prefix_version_setting\",\n actual = select({\n \":version_setting\": \":version_setting\",\n \"//conditions:default\": \":prefix_version_setting\",\n }),\n visibility = [\"//visibility:private\"],\n)\ntoolchain(\n name = \"toolchain\",\n target_compatible_with = [\"@platforms//os:windows\", \"@platforms//cpu:arm64\"],\n target_settings = [\":version_or_prefix_version_setting\"],\n toolchain_type = \"@bazel_tools//tools/jdk:runtime_toolchain_type\",\n toolchain = \"@remotejdk17_win_arm64//:jdk\",\n)\ntoolchain(\n name = \"bootstrap_runtime_toolchain\",\n # These constraints are not required for correctness, but prevent fetches of remote JDK for\n # different architectures. As every Java compilation toolchain depends on a bootstrap runtime in\n # the same configuration, this constraint will not result in toolchain resolution failures.\n exec_compatible_with = [\"@platforms//os:windows\", \"@platforms//cpu:arm64\"],\n target_settings = [\":version_or_prefix_version_setting\"],\n toolchain_type = \"@bazel_tools//tools/jdk:bootstrap_runtime_toolchain_type\",\n toolchain = \"@remotejdk17_win_arm64//:jdk\",\n)\n" 1452 | } 1453 | }, 1454 | "remotejdk11_linux": { 1455 | "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", 1456 | "ruleClassName": "http_archive", 1457 | "attributes": { 1458 | "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"WORKSPACE\", \"BUILD.bazel\"])\n\nfilegroup(\n name = \"jre\",\n srcs = glob(\n [\n \"jre/bin/**\",\n \"jre/lib/**\",\n ],\n allow_empty = True,\n # In some configurations, Java browser plugin is considered harmful and\n # common antivirus software blocks access to npjp2.dll interfering with Bazel,\n # so do not include it in JRE on Windows.\n exclude = [\"jre/bin/plugin2/**\"],\n ),\n)\n\nfilegroup(\n name = \"jdk-bin\",\n srcs = glob(\n [\"bin/**\"],\n # The JDK on Windows sometimes contains a directory called\n # \"%systemroot%\", which is not a valid label.\n exclude = [\"**/*%*/**\"],\n ),\n)\n\n# This folder holds security policies.\nfilegroup(\n name = \"jdk-conf\",\n srcs = glob(\n [\"conf/**\"],\n allow_empty = True,\n ),\n)\n\nfilegroup(\n name = \"jdk-include\",\n srcs = glob(\n [\"include/**\"],\n allow_empty = True,\n ),\n)\n\nfilegroup(\n name = \"jdk-lib\",\n srcs = glob(\n [\"lib/**\", \"release\"],\n allow_empty = True,\n exclude = [\n \"lib/missioncontrol/**\",\n \"lib/visualvm/**\",\n ],\n ),\n)\n\njava_runtime(\n name = \"jdk\",\n srcs = [\n \":jdk-bin\",\n \":jdk-conf\",\n \":jdk-include\",\n \":jdk-lib\",\n \":jre\",\n ],\n # Provide the 'java` binary explicitly so that the correct path is used by\n # Bazel even when the host platform differs from the execution platform.\n # Exactly one of the two globs will be empty depending on the host platform.\n # When --incompatible_disallow_empty_glob is enabled, each individual empty\n # glob will fail without allow_empty = True, even if the overall result is\n # non-empty.\n java = glob([\"bin/java.exe\", \"bin/java\"], allow_empty = True)[0],\n version = 11,\n)\n", 1459 | "sha256": "a34b404f87a08a61148b38e1416d837189e1df7a040d949e743633daf4695a3c", 1460 | "strip_prefix": "zulu11.66.15-ca-jdk11.0.20-linux_x64", 1461 | "urls": [ 1462 | "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu11.66.15-ca-jdk11.0.20-linux_x64.tar.gz", 1463 | "https://cdn.azul.com/zulu/bin/zulu11.66.15-ca-jdk11.0.20-linux_x64.tar.gz" 1464 | ] 1465 | } 1466 | }, 1467 | "remotejdk11_macos_toolchain_config_repo": { 1468 | "bzlFile": "@@rules_java~//toolchains:remote_java_repository.bzl", 1469 | "ruleClassName": "_toolchain_config", 1470 | "attributes": { 1471 | "build_file": "\nconfig_setting(\n name = \"prefix_version_setting\",\n values = {\"java_runtime_version\": \"remotejdk_11\"},\n visibility = [\"//visibility:private\"],\n)\nconfig_setting(\n name = \"version_setting\",\n values = {\"java_runtime_version\": \"11\"},\n visibility = [\"//visibility:private\"],\n)\nalias(\n name = \"version_or_prefix_version_setting\",\n actual = select({\n \":version_setting\": \":version_setting\",\n \"//conditions:default\": \":prefix_version_setting\",\n }),\n visibility = [\"//visibility:private\"],\n)\ntoolchain(\n name = \"toolchain\",\n target_compatible_with = [\"@platforms//os:macos\", \"@platforms//cpu:x86_64\"],\n target_settings = [\":version_or_prefix_version_setting\"],\n toolchain_type = \"@bazel_tools//tools/jdk:runtime_toolchain_type\",\n toolchain = \"@remotejdk11_macos//:jdk\",\n)\ntoolchain(\n name = \"bootstrap_runtime_toolchain\",\n # These constraints are not required for correctness, but prevent fetches of remote JDK for\n # different architectures. As every Java compilation toolchain depends on a bootstrap runtime in\n # the same configuration, this constraint will not result in toolchain resolution failures.\n exec_compatible_with = [\"@platforms//os:macos\", \"@platforms//cpu:x86_64\"],\n target_settings = [\":version_or_prefix_version_setting\"],\n toolchain_type = \"@bazel_tools//tools/jdk:bootstrap_runtime_toolchain_type\",\n toolchain = \"@remotejdk11_macos//:jdk\",\n)\n" 1472 | } 1473 | }, 1474 | "remotejdk17_linux_ppc64le_toolchain_config_repo": { 1475 | "bzlFile": "@@rules_java~//toolchains:remote_java_repository.bzl", 1476 | "ruleClassName": "_toolchain_config", 1477 | "attributes": { 1478 | "build_file": "\nconfig_setting(\n name = \"prefix_version_setting\",\n values = {\"java_runtime_version\": \"remotejdk_17\"},\n visibility = [\"//visibility:private\"],\n)\nconfig_setting(\n name = \"version_setting\",\n values = {\"java_runtime_version\": \"17\"},\n visibility = [\"//visibility:private\"],\n)\nalias(\n name = \"version_or_prefix_version_setting\",\n actual = select({\n \":version_setting\": \":version_setting\",\n \"//conditions:default\": \":prefix_version_setting\",\n }),\n visibility = [\"//visibility:private\"],\n)\ntoolchain(\n name = \"toolchain\",\n target_compatible_with = [\"@platforms//os:linux\", \"@platforms//cpu:ppc\"],\n target_settings = [\":version_or_prefix_version_setting\"],\n toolchain_type = \"@bazel_tools//tools/jdk:runtime_toolchain_type\",\n toolchain = \"@remotejdk17_linux_ppc64le//:jdk\",\n)\ntoolchain(\n name = \"bootstrap_runtime_toolchain\",\n # These constraints are not required for correctness, but prevent fetches of remote JDK for\n # different architectures. As every Java compilation toolchain depends on a bootstrap runtime in\n # the same configuration, this constraint will not result in toolchain resolution failures.\n exec_compatible_with = [\"@platforms//os:linux\", \"@platforms//cpu:ppc\"],\n target_settings = [\":version_or_prefix_version_setting\"],\n toolchain_type = \"@bazel_tools//tools/jdk:bootstrap_runtime_toolchain_type\",\n toolchain = \"@remotejdk17_linux_ppc64le//:jdk\",\n)\n" 1479 | } 1480 | }, 1481 | "remotejdk17_win_arm64": { 1482 | "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", 1483 | "ruleClassName": "http_archive", 1484 | "attributes": { 1485 | "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"WORKSPACE\", \"BUILD.bazel\"])\n\nfilegroup(\n name = \"jre\",\n srcs = glob(\n [\n \"jre/bin/**\",\n \"jre/lib/**\",\n ],\n allow_empty = True,\n # In some configurations, Java browser plugin is considered harmful and\n # common antivirus software blocks access to npjp2.dll interfering with Bazel,\n # so do not include it in JRE on Windows.\n exclude = [\"jre/bin/plugin2/**\"],\n ),\n)\n\nfilegroup(\n name = \"jdk-bin\",\n srcs = glob(\n [\"bin/**\"],\n # The JDK on Windows sometimes contains a directory called\n # \"%systemroot%\", which is not a valid label.\n exclude = [\"**/*%*/**\"],\n ),\n)\n\n# This folder holds security policies.\nfilegroup(\n name = \"jdk-conf\",\n srcs = glob(\n [\"conf/**\"],\n allow_empty = True,\n ),\n)\n\nfilegroup(\n name = \"jdk-include\",\n srcs = glob(\n [\"include/**\"],\n allow_empty = True,\n ),\n)\n\nfilegroup(\n name = \"jdk-lib\",\n srcs = glob(\n [\"lib/**\", \"release\"],\n allow_empty = True,\n exclude = [\n \"lib/missioncontrol/**\",\n \"lib/visualvm/**\",\n ],\n ),\n)\n\njava_runtime(\n name = \"jdk\",\n srcs = [\n \":jdk-bin\",\n \":jdk-conf\",\n \":jdk-include\",\n \":jdk-lib\",\n \":jre\",\n ],\n # Provide the 'java` binary explicitly so that the correct path is used by\n # Bazel even when the host platform differs from the execution platform.\n # Exactly one of the two globs will be empty depending on the host platform.\n # When --incompatible_disallow_empty_glob is enabled, each individual empty\n # glob will fail without allow_empty = True, even if the overall result is\n # non-empty.\n java = glob([\"bin/java.exe\", \"bin/java\"], allow_empty = True)[0],\n version = 17,\n)\n", 1486 | "sha256": "6802c99eae0d788e21f52d03cab2e2b3bf42bc334ca03cbf19f71eb70ee19f85", 1487 | "strip_prefix": "zulu17.44.53-ca-jdk17.0.8.1-win_aarch64", 1488 | "urls": [ 1489 | "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu17.44.53-ca-jdk17.0.8.1-win_aarch64.zip", 1490 | "https://cdn.azul.com/zulu/bin/zulu17.44.53-ca-jdk17.0.8.1-win_aarch64.zip" 1491 | ] 1492 | } 1493 | }, 1494 | "remote_java_tools_darwin_arm64": { 1495 | "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", 1496 | "ruleClassName": "http_archive", 1497 | "attributes": { 1498 | "sha256": "076a7e198ad077f8c7d997986ef5102427fae6bbfce7a7852d2e080ed8767528", 1499 | "urls": [ 1500 | "https://mirror.bazel.build/bazel_java_tools/releases/java/v13.4/java_tools_darwin_arm64-v13.4.zip", 1501 | "https://github.com/bazelbuild/java_tools/releases/download/java_v13.4/java_tools_darwin_arm64-v13.4.zip" 1502 | ] 1503 | } 1504 | }, 1505 | "remotejdk17_linux_ppc64le": { 1506 | "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", 1507 | "ruleClassName": "http_archive", 1508 | "attributes": { 1509 | "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"WORKSPACE\", \"BUILD.bazel\"])\n\nfilegroup(\n name = \"jre\",\n srcs = glob(\n [\n \"jre/bin/**\",\n \"jre/lib/**\",\n ],\n allow_empty = True,\n # In some configurations, Java browser plugin is considered harmful and\n # common antivirus software blocks access to npjp2.dll interfering with Bazel,\n # so do not include it in JRE on Windows.\n exclude = [\"jre/bin/plugin2/**\"],\n ),\n)\n\nfilegroup(\n name = \"jdk-bin\",\n srcs = glob(\n [\"bin/**\"],\n # The JDK on Windows sometimes contains a directory called\n # \"%systemroot%\", which is not a valid label.\n exclude = [\"**/*%*/**\"],\n ),\n)\n\n# This folder holds security policies.\nfilegroup(\n name = \"jdk-conf\",\n srcs = glob(\n [\"conf/**\"],\n allow_empty = True,\n ),\n)\n\nfilegroup(\n name = \"jdk-include\",\n srcs = glob(\n [\"include/**\"],\n allow_empty = True,\n ),\n)\n\nfilegroup(\n name = \"jdk-lib\",\n srcs = glob(\n [\"lib/**\", \"release\"],\n allow_empty = True,\n exclude = [\n \"lib/missioncontrol/**\",\n \"lib/visualvm/**\",\n ],\n ),\n)\n\njava_runtime(\n name = \"jdk\",\n srcs = [\n \":jdk-bin\",\n \":jdk-conf\",\n \":jdk-include\",\n \":jdk-lib\",\n \":jre\",\n ],\n # Provide the 'java` binary explicitly so that the correct path is used by\n # Bazel even when the host platform differs from the execution platform.\n # Exactly one of the two globs will be empty depending on the host platform.\n # When --incompatible_disallow_empty_glob is enabled, each individual empty\n # glob will fail without allow_empty = True, even if the overall result is\n # non-empty.\n java = glob([\"bin/java.exe\", \"bin/java\"], allow_empty = True)[0],\n version = 17,\n)\n", 1510 | "sha256": "00a4c07603d0218cd678461b5b3b7e25b3253102da4022d31fc35907f21a2efd", 1511 | "strip_prefix": "jdk-17.0.8.1+1", 1512 | "urls": [ 1513 | "https://mirror.bazel.build/github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.8.1%2B1/OpenJDK17U-jdk_ppc64le_linux_hotspot_17.0.8.1_1.tar.gz", 1514 | "https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.8.1%2B1/OpenJDK17U-jdk_ppc64le_linux_hotspot_17.0.8.1_1.tar.gz" 1515 | ] 1516 | } 1517 | }, 1518 | "remotejdk21_linux_aarch64_toolchain_config_repo": { 1519 | "bzlFile": "@@rules_java~//toolchains:remote_java_repository.bzl", 1520 | "ruleClassName": "_toolchain_config", 1521 | "attributes": { 1522 | "build_file": "\nconfig_setting(\n name = \"prefix_version_setting\",\n values = {\"java_runtime_version\": \"remotejdk_21\"},\n visibility = [\"//visibility:private\"],\n)\nconfig_setting(\n name = \"version_setting\",\n values = {\"java_runtime_version\": \"21\"},\n visibility = [\"//visibility:private\"],\n)\nalias(\n name = \"version_or_prefix_version_setting\",\n actual = select({\n \":version_setting\": \":version_setting\",\n \"//conditions:default\": \":prefix_version_setting\",\n }),\n visibility = [\"//visibility:private\"],\n)\ntoolchain(\n name = \"toolchain\",\n target_compatible_with = [\"@platforms//os:linux\", \"@platforms//cpu:aarch64\"],\n target_settings = [\":version_or_prefix_version_setting\"],\n toolchain_type = \"@bazel_tools//tools/jdk:runtime_toolchain_type\",\n toolchain = \"@remotejdk21_linux_aarch64//:jdk\",\n)\ntoolchain(\n name = \"bootstrap_runtime_toolchain\",\n # These constraints are not required for correctness, but prevent fetches of remote JDK for\n # different architectures. As every Java compilation toolchain depends on a bootstrap runtime in\n # the same configuration, this constraint will not result in toolchain resolution failures.\n exec_compatible_with = [\"@platforms//os:linux\", \"@platforms//cpu:aarch64\"],\n target_settings = [\":version_or_prefix_version_setting\"],\n toolchain_type = \"@bazel_tools//tools/jdk:bootstrap_runtime_toolchain_type\",\n toolchain = \"@remotejdk21_linux_aarch64//:jdk\",\n)\n" 1523 | } 1524 | }, 1525 | "remotejdk11_win_arm64_toolchain_config_repo": { 1526 | "bzlFile": "@@rules_java~//toolchains:remote_java_repository.bzl", 1527 | "ruleClassName": "_toolchain_config", 1528 | "attributes": { 1529 | "build_file": "\nconfig_setting(\n name = \"prefix_version_setting\",\n values = {\"java_runtime_version\": \"remotejdk_11\"},\n visibility = [\"//visibility:private\"],\n)\nconfig_setting(\n name = \"version_setting\",\n values = {\"java_runtime_version\": \"11\"},\n visibility = [\"//visibility:private\"],\n)\nalias(\n name = \"version_or_prefix_version_setting\",\n actual = select({\n \":version_setting\": \":version_setting\",\n \"//conditions:default\": \":prefix_version_setting\",\n }),\n visibility = [\"//visibility:private\"],\n)\ntoolchain(\n name = \"toolchain\",\n target_compatible_with = [\"@platforms//os:windows\", \"@platforms//cpu:arm64\"],\n target_settings = [\":version_or_prefix_version_setting\"],\n toolchain_type = \"@bazel_tools//tools/jdk:runtime_toolchain_type\",\n toolchain = \"@remotejdk11_win_arm64//:jdk\",\n)\ntoolchain(\n name = \"bootstrap_runtime_toolchain\",\n # These constraints are not required for correctness, but prevent fetches of remote JDK for\n # different architectures. As every Java compilation toolchain depends on a bootstrap runtime in\n # the same configuration, this constraint will not result in toolchain resolution failures.\n exec_compatible_with = [\"@platforms//os:windows\", \"@platforms//cpu:arm64\"],\n target_settings = [\":version_or_prefix_version_setting\"],\n toolchain_type = \"@bazel_tools//tools/jdk:bootstrap_runtime_toolchain_type\",\n toolchain = \"@remotejdk11_win_arm64//:jdk\",\n)\n" 1530 | } 1531 | }, 1532 | "local_jdk": { 1533 | "bzlFile": "@@rules_java~//toolchains:local_java_repository.bzl", 1534 | "ruleClassName": "_local_java_repository_rule", 1535 | "attributes": { 1536 | "java_home": "", 1537 | "version": "", 1538 | "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"WORKSPACE\", \"BUILD.bazel\"])\n\nfilegroup(\n name = \"jre\",\n srcs = glob(\n [\n \"jre/bin/**\",\n \"jre/lib/**\",\n ],\n allow_empty = True,\n # In some configurations, Java browser plugin is considered harmful and\n # common antivirus software blocks access to npjp2.dll interfering with Bazel,\n # so do not include it in JRE on Windows.\n exclude = [\"jre/bin/plugin2/**\"],\n ),\n)\n\nfilegroup(\n name = \"jdk-bin\",\n srcs = glob(\n [\"bin/**\"],\n # The JDK on Windows sometimes contains a directory called\n # \"%systemroot%\", which is not a valid label.\n exclude = [\"**/*%*/**\"],\n ),\n)\n\n# This folder holds security policies.\nfilegroup(\n name = \"jdk-conf\",\n srcs = glob(\n [\"conf/**\"],\n allow_empty = True,\n ),\n)\n\nfilegroup(\n name = \"jdk-include\",\n srcs = glob(\n [\"include/**\"],\n allow_empty = True,\n ),\n)\n\nfilegroup(\n name = \"jdk-lib\",\n srcs = glob(\n [\"lib/**\", \"release\"],\n allow_empty = True,\n exclude = [\n \"lib/missioncontrol/**\",\n \"lib/visualvm/**\",\n ],\n ),\n)\n\njava_runtime(\n name = \"jdk\",\n srcs = [\n \":jdk-bin\",\n \":jdk-conf\",\n \":jdk-include\",\n \":jdk-lib\",\n \":jre\",\n ],\n # Provide the 'java` binary explicitly so that the correct path is used by\n # Bazel even when the host platform differs from the execution platform.\n # Exactly one of the two globs will be empty depending on the host platform.\n # When --incompatible_disallow_empty_glob is enabled, each individual empty\n # glob will fail without allow_empty = True, even if the overall result is\n # non-empty.\n java = glob([\"bin/java.exe\", \"bin/java\"], allow_empty = True)[0],\n version = {RUNTIME_VERSION},\n)\n" 1539 | } 1540 | }, 1541 | "remote_java_tools_darwin_x86_64": { 1542 | "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", 1543 | "ruleClassName": "http_archive", 1544 | "attributes": { 1545 | "sha256": "4523aec4d09c587091a2dae6f5c9bc6922c220f3b6030e5aba9c8f015913cc65", 1546 | "urls": [ 1547 | "https://mirror.bazel.build/bazel_java_tools/releases/java/v13.4/java_tools_darwin_x86_64-v13.4.zip", 1548 | "https://github.com/bazelbuild/java_tools/releases/download/java_v13.4/java_tools_darwin_x86_64-v13.4.zip" 1549 | ] 1550 | } 1551 | }, 1552 | "remote_java_tools": { 1553 | "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", 1554 | "ruleClassName": "http_archive", 1555 | "attributes": { 1556 | "sha256": "e025fd260ac39b47c111f5212d64ec0d00d85dec16e49368aae82fc626a940cf", 1557 | "urls": [ 1558 | "https://mirror.bazel.build/bazel_java_tools/releases/java/v13.4/java_tools-v13.4.zip", 1559 | "https://github.com/bazelbuild/java_tools/releases/download/java_v13.4/java_tools-v13.4.zip" 1560 | ] 1561 | } 1562 | }, 1563 | "remotejdk17_linux_s390x": { 1564 | "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", 1565 | "ruleClassName": "http_archive", 1566 | "attributes": { 1567 | "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"WORKSPACE\", \"BUILD.bazel\"])\n\nfilegroup(\n name = \"jre\",\n srcs = glob(\n [\n \"jre/bin/**\",\n \"jre/lib/**\",\n ],\n allow_empty = True,\n # In some configurations, Java browser plugin is considered harmful and\n # common antivirus software blocks access to npjp2.dll interfering with Bazel,\n # so do not include it in JRE on Windows.\n exclude = [\"jre/bin/plugin2/**\"],\n ),\n)\n\nfilegroup(\n name = \"jdk-bin\",\n srcs = glob(\n [\"bin/**\"],\n # The JDK on Windows sometimes contains a directory called\n # \"%systemroot%\", which is not a valid label.\n exclude = [\"**/*%*/**\"],\n ),\n)\n\n# This folder holds security policies.\nfilegroup(\n name = \"jdk-conf\",\n srcs = glob(\n [\"conf/**\"],\n allow_empty = True,\n ),\n)\n\nfilegroup(\n name = \"jdk-include\",\n srcs = glob(\n [\"include/**\"],\n allow_empty = True,\n ),\n)\n\nfilegroup(\n name = \"jdk-lib\",\n srcs = glob(\n [\"lib/**\", \"release\"],\n allow_empty = True,\n exclude = [\n \"lib/missioncontrol/**\",\n \"lib/visualvm/**\",\n ],\n ),\n)\n\njava_runtime(\n name = \"jdk\",\n srcs = [\n \":jdk-bin\",\n \":jdk-conf\",\n \":jdk-include\",\n \":jdk-lib\",\n \":jre\",\n ],\n # Provide the 'java` binary explicitly so that the correct path is used by\n # Bazel even when the host platform differs from the execution platform.\n # Exactly one of the two globs will be empty depending on the host platform.\n # When --incompatible_disallow_empty_glob is enabled, each individual empty\n # glob will fail without allow_empty = True, even if the overall result is\n # non-empty.\n java = glob([\"bin/java.exe\", \"bin/java\"], allow_empty = True)[0],\n version = 17,\n)\n", 1568 | "sha256": "ffacba69c6843d7ca70d572489d6cc7ab7ae52c60f0852cedf4cf0d248b6fc37", 1569 | "strip_prefix": "jdk-17.0.8.1+1", 1570 | "urls": [ 1571 | "https://mirror.bazel.build/github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.8.1%2B1/OpenJDK17U-jdk_s390x_linux_hotspot_17.0.8.1_1.tar.gz", 1572 | "https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.8.1%2B1/OpenJDK17U-jdk_s390x_linux_hotspot_17.0.8.1_1.tar.gz" 1573 | ] 1574 | } 1575 | }, 1576 | "remotejdk17_win_toolchain_config_repo": { 1577 | "bzlFile": "@@rules_java~//toolchains:remote_java_repository.bzl", 1578 | "ruleClassName": "_toolchain_config", 1579 | "attributes": { 1580 | "build_file": "\nconfig_setting(\n name = \"prefix_version_setting\",\n values = {\"java_runtime_version\": \"remotejdk_17\"},\n visibility = [\"//visibility:private\"],\n)\nconfig_setting(\n name = \"version_setting\",\n values = {\"java_runtime_version\": \"17\"},\n visibility = [\"//visibility:private\"],\n)\nalias(\n name = \"version_or_prefix_version_setting\",\n actual = select({\n \":version_setting\": \":version_setting\",\n \"//conditions:default\": \":prefix_version_setting\",\n }),\n visibility = [\"//visibility:private\"],\n)\ntoolchain(\n name = \"toolchain\",\n target_compatible_with = [\"@platforms//os:windows\", \"@platforms//cpu:x86_64\"],\n target_settings = [\":version_or_prefix_version_setting\"],\n toolchain_type = \"@bazel_tools//tools/jdk:runtime_toolchain_type\",\n toolchain = \"@remotejdk17_win//:jdk\",\n)\ntoolchain(\n name = \"bootstrap_runtime_toolchain\",\n # These constraints are not required for correctness, but prevent fetches of remote JDK for\n # different architectures. As every Java compilation toolchain depends on a bootstrap runtime in\n # the same configuration, this constraint will not result in toolchain resolution failures.\n exec_compatible_with = [\"@platforms//os:windows\", \"@platforms//cpu:x86_64\"],\n target_settings = [\":version_or_prefix_version_setting\"],\n toolchain_type = \"@bazel_tools//tools/jdk:bootstrap_runtime_toolchain_type\",\n toolchain = \"@remotejdk17_win//:jdk\",\n)\n" 1581 | } 1582 | }, 1583 | "remotejdk11_linux_ppc64le": { 1584 | "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", 1585 | "ruleClassName": "http_archive", 1586 | "attributes": { 1587 | "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"WORKSPACE\", \"BUILD.bazel\"])\n\nfilegroup(\n name = \"jre\",\n srcs = glob(\n [\n \"jre/bin/**\",\n \"jre/lib/**\",\n ],\n allow_empty = True,\n # In some configurations, Java browser plugin is considered harmful and\n # common antivirus software blocks access to npjp2.dll interfering with Bazel,\n # so do not include it in JRE on Windows.\n exclude = [\"jre/bin/plugin2/**\"],\n ),\n)\n\nfilegroup(\n name = \"jdk-bin\",\n srcs = glob(\n [\"bin/**\"],\n # The JDK on Windows sometimes contains a directory called\n # \"%systemroot%\", which is not a valid label.\n exclude = [\"**/*%*/**\"],\n ),\n)\n\n# This folder holds security policies.\nfilegroup(\n name = \"jdk-conf\",\n srcs = glob(\n [\"conf/**\"],\n allow_empty = True,\n ),\n)\n\nfilegroup(\n name = \"jdk-include\",\n srcs = glob(\n [\"include/**\"],\n allow_empty = True,\n ),\n)\n\nfilegroup(\n name = \"jdk-lib\",\n srcs = glob(\n [\"lib/**\", \"release\"],\n allow_empty = True,\n exclude = [\n \"lib/missioncontrol/**\",\n \"lib/visualvm/**\",\n ],\n ),\n)\n\njava_runtime(\n name = \"jdk\",\n srcs = [\n \":jdk-bin\",\n \":jdk-conf\",\n \":jdk-include\",\n \":jdk-lib\",\n \":jre\",\n ],\n # Provide the 'java` binary explicitly so that the correct path is used by\n # Bazel even when the host platform differs from the execution platform.\n # Exactly one of the two globs will be empty depending on the host platform.\n # When --incompatible_disallow_empty_glob is enabled, each individual empty\n # glob will fail without allow_empty = True, even if the overall result is\n # non-empty.\n java = glob([\"bin/java.exe\", \"bin/java\"], allow_empty = True)[0],\n version = 11,\n)\n", 1588 | "sha256": "a8fba686f6eb8ae1d1a9566821dbd5a85a1108b96ad857fdbac5c1e4649fc56f", 1589 | "strip_prefix": "jdk-11.0.15+10", 1590 | "urls": [ 1591 | "https://mirror.bazel.build/github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.15+10/OpenJDK11U-jdk_ppc64le_linux_hotspot_11.0.15_10.tar.gz", 1592 | "https://github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.15+10/OpenJDK11U-jdk_ppc64le_linux_hotspot_11.0.15_10.tar.gz" 1593 | ] 1594 | } 1595 | }, 1596 | "remotejdk11_macos_aarch64": { 1597 | "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", 1598 | "ruleClassName": "http_archive", 1599 | "attributes": { 1600 | "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"WORKSPACE\", \"BUILD.bazel\"])\n\nfilegroup(\n name = \"jre\",\n srcs = glob(\n [\n \"jre/bin/**\",\n \"jre/lib/**\",\n ],\n allow_empty = True,\n # In some configurations, Java browser plugin is considered harmful and\n # common antivirus software blocks access to npjp2.dll interfering with Bazel,\n # so do not include it in JRE on Windows.\n exclude = [\"jre/bin/plugin2/**\"],\n ),\n)\n\nfilegroup(\n name = \"jdk-bin\",\n srcs = glob(\n [\"bin/**\"],\n # The JDK on Windows sometimes contains a directory called\n # \"%systemroot%\", which is not a valid label.\n exclude = [\"**/*%*/**\"],\n ),\n)\n\n# This folder holds security policies.\nfilegroup(\n name = \"jdk-conf\",\n srcs = glob(\n [\"conf/**\"],\n allow_empty = True,\n ),\n)\n\nfilegroup(\n name = \"jdk-include\",\n srcs = glob(\n [\"include/**\"],\n allow_empty = True,\n ),\n)\n\nfilegroup(\n name = \"jdk-lib\",\n srcs = glob(\n [\"lib/**\", \"release\"],\n allow_empty = True,\n exclude = [\n \"lib/missioncontrol/**\",\n \"lib/visualvm/**\",\n ],\n ),\n)\n\njava_runtime(\n name = \"jdk\",\n srcs = [\n \":jdk-bin\",\n \":jdk-conf\",\n \":jdk-include\",\n \":jdk-lib\",\n \":jre\",\n ],\n # Provide the 'java` binary explicitly so that the correct path is used by\n # Bazel even when the host platform differs from the execution platform.\n # Exactly one of the two globs will be empty depending on the host platform.\n # When --incompatible_disallow_empty_glob is enabled, each individual empty\n # glob will fail without allow_empty = True, even if the overall result is\n # non-empty.\n java = glob([\"bin/java.exe\", \"bin/java\"], allow_empty = True)[0],\n version = 11,\n)\n", 1601 | "sha256": "7632bc29f8a4b7d492b93f3bc75a7b61630894db85d136456035ab2a24d38885", 1602 | "strip_prefix": "zulu11.66.15-ca-jdk11.0.20-macosx_aarch64", 1603 | "urls": [ 1604 | "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu11.66.15-ca-jdk11.0.20-macosx_aarch64.tar.gz", 1605 | "https://cdn.azul.com/zulu/bin/zulu11.66.15-ca-jdk11.0.20-macosx_aarch64.tar.gz" 1606 | ] 1607 | } 1608 | }, 1609 | "remotejdk21_win_toolchain_config_repo": { 1610 | "bzlFile": "@@rules_java~//toolchains:remote_java_repository.bzl", 1611 | "ruleClassName": "_toolchain_config", 1612 | "attributes": { 1613 | "build_file": "\nconfig_setting(\n name = \"prefix_version_setting\",\n values = {\"java_runtime_version\": \"remotejdk_21\"},\n visibility = [\"//visibility:private\"],\n)\nconfig_setting(\n name = \"version_setting\",\n values = {\"java_runtime_version\": \"21\"},\n visibility = [\"//visibility:private\"],\n)\nalias(\n name = \"version_or_prefix_version_setting\",\n actual = select({\n \":version_setting\": \":version_setting\",\n \"//conditions:default\": \":prefix_version_setting\",\n }),\n visibility = [\"//visibility:private\"],\n)\ntoolchain(\n name = \"toolchain\",\n target_compatible_with = [\"@platforms//os:windows\", \"@platforms//cpu:x86_64\"],\n target_settings = [\":version_or_prefix_version_setting\"],\n toolchain_type = \"@bazel_tools//tools/jdk:runtime_toolchain_type\",\n toolchain = \"@remotejdk21_win//:jdk\",\n)\ntoolchain(\n name = \"bootstrap_runtime_toolchain\",\n # These constraints are not required for correctness, but prevent fetches of remote JDK for\n # different architectures. As every Java compilation toolchain depends on a bootstrap runtime in\n # the same configuration, this constraint will not result in toolchain resolution failures.\n exec_compatible_with = [\"@platforms//os:windows\", \"@platforms//cpu:x86_64\"],\n target_settings = [\":version_or_prefix_version_setting\"],\n toolchain_type = \"@bazel_tools//tools/jdk:bootstrap_runtime_toolchain_type\",\n toolchain = \"@remotejdk21_win//:jdk\",\n)\n" 1614 | } 1615 | } 1616 | }, 1617 | "recordedRepoMappingEntries": [ 1618 | [ 1619 | "rules_java~", 1620 | "bazel_tools", 1621 | "bazel_tools" 1622 | ], 1623 | [ 1624 | "rules_java~", 1625 | "remote_java_tools", 1626 | "rules_java~~toolchains~remote_java_tools" 1627 | ] 1628 | ] 1629 | } 1630 | } 1631 | } 1632 | } 1633 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | # Copyright 2010 Google Inc. 2 | # 3 | # Licensed under the Apache License, Version 2.0 (the "License"); 4 | # you may not use this file except in compliance with the License. 5 | # You may obtain a copy of the License at 6 | # 7 | # http://www.apache.org/licenses/LICENSE-2.0 8 | # 9 | # Unless required by applicable law or agreed to in writing, software 10 | # distributed under the License is distributed on an "AS IS" BASIS, 11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | # See the License for the specific language governing permissions and 13 | # limitations under the License. 14 | 15 | all: runalarm runstat runlock 16 | 17 | runalarm: runalarm.c subprocess.c 18 | 19 | runlock: runlock.c subprocess.c tempdir.c 20 | 21 | runstat: runstat.c subprocess.c tempdir.c 22 | 23 | CFLAGS+=-Wall -Werror -Wextra -D_XOPEN_SOURCE=500 -g -ansi -pedantic-errors -Wwrite-strings -Wcast-align -Wcast-qual -Winit-self -Wformat=2 -Wuninitialized -Wmissing-declarations -Wpointer-arith -Wstrict-aliasing -fstrict-aliasing 24 | 25 | SOURCES = runalarm.c runlock.c runstat.c subprocess.c subprocess.h tempdir.c tempdir.h Makefile runalarm.1 runlock.1 runstat.1 version examples cronutils.spec runcron regtest.sh tests 26 | 27 | prefix = usr/local 28 | BINDIR = $(prefix)/bin 29 | MANDIR = $(prefix)/share/man/man1 30 | VERSION = $(shell cat version) 31 | 32 | install: 33 | mkdir -p -m 755 $(DESTDIR)/$(BINDIR) $(DESTDIR)/$(MANDIR) 34 | install -m 755 runalarm runlock runstat $(DESTDIR)/$(BINDIR) 35 | install -m 644 runalarm.1 runlock.1 runstat.1 $(DESTDIR)/$(MANDIR) 36 | 37 | clean: 38 | rm -f runalarm runlock runstat 39 | 40 | distclean: clean 41 | rm -f *~ \#* 42 | 43 | dist: 44 | rm -rf cronutils-$(VERSION) cronutils-$(VERSION).tar cronutils-$(VERSION).tar.gz 45 | mkdir cronutils-$(VERSION) 46 | cp -r $(SOURCES) cronutils-$(VERSION) 47 | tar cf cronutils-$(VERSION).tar cronutils-$(VERSION) 48 | gzip -9 cronutils-$(VERSION).tar 49 | rm -rf cronutils-$(VERSION) 50 | 51 | test: CFLAGS += -O0 -g --coverage 52 | test: LDFLAGS += --coverage 53 | test: all 54 | ./regtest.sh 55 | gcov --all-blocks --branch-probabilities --branch-counts --function-summaries --unconditional-branches *.gcda 56 | 57 | .PHONY: dist clean install distclean test 58 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | cronutils - utilities to assist running batch processing jobs 2 | ============================================================= 3 | 4 | ![ci](https://github.com/google/cronutils/workflows/CI/badge.svg) 5 | 6 | cronutils is a set of tools to assist the reliable running of periodic and batch jobs. 7 | 8 | * `runalarm`: Limit the running time of a process. 9 | * `runlock`: Prevent concurrent runs of a process. 10 | * `runstat`: Export statistics about a process's execution. 11 | * `runcron`: Simple wrapper around the above tools. 12 | 13 | Used together, they can be used to specify overrun policies for periodic jobs, for example: 14 | 15 | * Allow overrun -- let the first job run to completion 16 | * Kill older job -- specify a timeout on the older job to limit its execution 17 | 18 | Additionally, metrics can be exported to your favourite metrics collector at the termination of the job's run, so that abnormal behaviour can be monitored for and alerted on. 19 | 20 | Mailing list at http://groups.google.com/group/cronutils-users. 21 | -------------------------------------------------------------------------------- /WORKSPACE: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /cronutils.spec: -------------------------------------------------------------------------------- 1 | Name: cronutils 2 | Version: 1.1 3 | Release: 1%{?dist} 4 | Summary: Utilities to assist running batch processing jobs. 5 | 6 | Group: System Environment/Base 7 | License: ASL 2.0 8 | URL: http://code.google.com/p/cronutils/ 9 | Source0: http://cronutils.googlecode.com/files/%{name}-%{version}.tar.gz 10 | BuildRoot: %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX) 11 | 12 | %description 13 | A set of utilities to complement batch processing jobs, such as those run from 14 | cron, by limiting concurrent execution of jobs, setting hard limits on the 15 | runtime of a job, and recording execution statistics of a completed job. 16 | 17 | %prep 18 | %setup -q 19 | 20 | 21 | %build 22 | make %{?_smp_mflags} 23 | 24 | 25 | %install 26 | rm -rf $RPM_BUILD_ROOT 27 | make install DESTDIR=$RPM_BUILD_ROOT prefix=usr 28 | 29 | 30 | %clean 31 | rm -rf $RPM_BUILD_ROOT 32 | 33 | 34 | %files 35 | %defattr(-,root,root,-) 36 | %{_bindir}/* 37 | %{_mandir}/man1/* 38 | -------------------------------------------------------------------------------- /debian/changelog: -------------------------------------------------------------------------------- 1 | cronutils (1.8-1) unstable; urgency=medium 2 | 3 | * New upstream release. (Closes: #777828) 4 | 5 | -- Jamie Wilkinson Sat, 14 Mar 2015 22:03:25 +1100 6 | 7 | cronutils (1.7-1) unstable; urgency=medium 8 | 9 | * New upstream release. 10 | * Bump standards-version to 3.9.6. 11 | 12 | -- Jamie Wilkinson Sat, 14 Mar 2015 21:40:30 +1100 13 | 14 | cronutils (1.6-1) unstable; urgency=low 15 | 16 | * New upstream release. 17 | 18 | -- Jamie Wilkinson Sun, 01 Jun 2014 13:23:33 +1000 19 | 20 | cronutils (1.5-3) unstable; urgency=medium 21 | 22 | * Update the hardening build flags in debian/rules for debhelper 9. 23 | 24 | -- Jamie Wilkinson Wed, 28 May 2014 18:20:32 +1000 25 | 26 | cronutils (1.5-2) unstable; urgency=medium 27 | 28 | * Add VCS fields to the control file. 29 | * Update debian/watch to github format, after upstream move. 30 | * Update standards version to 3.9.5. 31 | * Convert debian/copyright to the DEP5 machine readable format. 32 | * Add debian/gbp.conf to configure git-buildpackage for the VCS. 33 | 34 | -- Jamie Wilkinson Wed, 28 May 2014 18:03:07 +1000 35 | 36 | cronutils (1.5-1) unstable; urgency=low 37 | 38 | * New upstream release. 39 | * Update standards version. 40 | 41 | -- Jamie Wilkinson Wed, 28 Aug 2013 07:10:36 +1000 42 | 43 | cronutils (1.4-3) unstable; urgency=low 44 | 45 | * Fix build dependency on dpkg-dev. 46 | 47 | -- Jamie Wilkinson Wed, 09 Jan 2013 10:11:00 +0000 48 | 49 | cronutils (1.4-2) unstable; urgency=low 50 | 51 | * Update Standards-Version to 3.9.2. 52 | * Bump debian/compat to 9. 53 | * Use buildflags.mk in debian/rules to enable hardening flags. 54 | 55 | -- Jamie Wilkinson Wed, 09 Jan 2013 19:02:57 +1100 56 | 57 | cronutils (1.4-1) unstable; urgency=low 58 | 59 | * New upstream release. 60 | 61 | -- Jamie Wilkinson Tue, 08 Jan 2013 11:18:55 +0000 62 | 63 | cronutils (1.3.1-1) unstable; urgency=low 64 | 65 | * New upstream release. 66 | 67 | -- Jamie Wilkinson Mon, 07 Jan 2013 22:26:39 +0000 68 | 69 | cronutils (1.3-1) unstable; urgency=low 70 | 71 | * New upstream release. 72 | * Updated watch file. 73 | 74 | -- Jamie Wilkinson Mon, 07 Jan 2013 17:31:09 +0000 75 | 76 | cronutils (1.2-1) unstable; urgency=low 77 | 78 | * New upstream release 79 | 80 | -- Jamie Wilkinson Mon, 21 May 2012 05:30:48 +0000 81 | 82 | cronutils (1.1-3) unstable; urgency=low 83 | 84 | * Fix FTBFS on kfreebsd, by defining HOST_NAME_MAX. (Closes: #635212) 85 | * Put the libraries at the end of the linker call, allowing building 86 | with --as-needed linker option (Thanks, Ilya Barygin) (Closes: #637587) 87 | 88 | -- Jamie Wilkinson Wed, 17 Aug 2011 12:04:14 +1000 89 | 90 | cronutils (1.1-2) unstable; urgency=low 91 | 92 | * Added debian/watch file. 93 | 94 | -- Jamie Wilkinson Sun, 24 Jul 2011 00:36:41 +1000 95 | 96 | cronutils (1.1-1) unstable; urgency=low 97 | 98 | * New upstream release. 99 | 100 | -- Jamie Wilkinson Sun, 24 Jul 2011 00:29:00 +1000 101 | 102 | cronutils (1.0-1) unstable; urgency=low 103 | 104 | * Initial release (Closes: #634124) 105 | 106 | -- Jamie Wilkinson Sun, 09 Jan 2011 14:06:35 -0800 107 | -------------------------------------------------------------------------------- /debian/compat: -------------------------------------------------------------------------------- 1 | 9 2 | -------------------------------------------------------------------------------- /debian/control: -------------------------------------------------------------------------------- 1 | Source: cronutils 2 | Section: admin 3 | Priority: extra 4 | Maintainer: Jamie Wilkinson 5 | Build-Depends: debhelper (>= 9), dpkg-dev (>= 1.16.1~) 6 | Standards-Version: 3.9.6 7 | Homepage: http://code.google.com/p/cronutils 8 | VCS-Browser: https://github.com/google/cronutils/tree/debian 9 | VCS-Git: https://github.com/google/cronutils.git -b debian 10 | 11 | Package: cronutils 12 | Architecture: any 13 | Depends: ${shlibs:Depends}, ${misc:Depends} 14 | Description: Utilities to assist running batch processing jobs 15 | A set of utilities to complement batch processing jobs, such as those 16 | run from cron, by limiting concurrent execution of jobs, setting hard 17 | limits on the runtime of a job, and recording execution statistics of 18 | a completed job. 19 | -------------------------------------------------------------------------------- /debian/copyright: -------------------------------------------------------------------------------- 1 | Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ 2 | Upstream-Name: cronutils 3 | Upstream-Contact: jaq@google.com 4 | Source: https://github.com/google/cronutils/ 5 | 6 | Files: * 7 | Copyright: 2010 Google, Inc. 8 | License: Apache-2.0 9 | 10 | License: Apache-2.0 11 | Licensed under the Apache License, Version 2.0 (the "License"); 12 | you may not use this file except in compliance with the License. 13 | You may obtain a copy of the License at 14 | . 15 | http://www.apache.org/licenses/LICENSE-2.0 16 | . 17 | Unless required by applicable law or agreed to in writing, software 18 | distributed under the License is distributed on an "AS IS" BASIS, 19 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 20 | See the License for the specific language governing permissions and 21 | limitations under the License. 22 | . 23 | On Debian systems, the complete text of the Apache version 2.0 license 24 | can be found in `/usr/share/common-licenses/Apache-2.0'. 25 | 26 | Files: debian/* 27 | Copyright: 2011 Jamie Wilkinson 28 | License: Apache-2.0 29 | -------------------------------------------------------------------------------- /debian/dirs: -------------------------------------------------------------------------------- 1 | usr/bin 2 | usr/share/man/man1 3 | -------------------------------------------------------------------------------- /debian/docs: -------------------------------------------------------------------------------- 1 | examples 2 | -------------------------------------------------------------------------------- /debian/gbp.conf: -------------------------------------------------------------------------------- 1 | [DEFAULT] 2 | debian-branch = debian 3 | upstream-tag = version/%(version)s 4 | -------------------------------------------------------------------------------- /debian/rules: -------------------------------------------------------------------------------- 1 | #!/usr/bin/make -f 2 | # -*- makefile -*- 3 | # Sample debian/rules that uses debhelper. 4 | # This file was originally written by Joey Hess and Craig Small. 5 | # As a special exception, when this file is copied by dh-make into a 6 | # dh-make output file, you may use that output file without restriction. 7 | # This special exception was added by Craig Small in version 0.37 of dh-make. 8 | 9 | # Uncomment this to turn on verbose mode. 10 | #export DH_VERBOSE=1 11 | export DEB_BUILD_MAINT_OPTIONS = hardening=+all 12 | export DEB_CFLAGS_MAINT_APPEND = -Wall -pedantic 13 | export DEB_LDFLAGS_MAINT_APPEND = -Wl,--as-needed 14 | 15 | %: 16 | dh $@ 17 | 18 | override_dh_auto_install: 19 | dh_auto_install -- prefix=usr 20 | -------------------------------------------------------------------------------- /debian/source/format: -------------------------------------------------------------------------------- 1 | 3.0 (quilt) 2 | -------------------------------------------------------------------------------- /debian/watch: -------------------------------------------------------------------------------- 1 | version=3 2 | https://github.com/google/cronutils/tags .*/(\d[\d\.]*)\.tar\.gz 3 | -------------------------------------------------------------------------------- /examples: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | ./runalarm -d -t 5 /bin/bash -c 'for i in $(seq 1 7); do echo $i; sleep 1; done; echo "exited"' 4 | ./runalarm -d -t 5 ./runstat -d -f foo /bin/bash -c 'for i in $(seq 1 7); do echo $i; sleep 1; done; echo "exited"' 5 | 6 | (./runlock -d -f ../locks/foo bash -c 'for i in $(seq 1 5); do echo $i; sleep 1; done'; echo $?) & sleep 2 ; ./runlock -d -f ../locks/foo bash -c 'for i in $(seq 1 5); do echo $i; sleep 1; done'; echo exited $? 7 | ./runlock -d -f ../locks/foo bash -c 'for i in $(seq 1 5); do echo $i; sleep 1; done' & sleep 1; cat ../locks/foo 8 | ./runlock -d bash -c 'for i in $(seq 1 5); do echo $i; sleep 1; done' 9 | 10 | ./runstat -d -f foo bash -c 'for i in $(seq 1 5); do echo $i; done; exit 5' 11 | ./runstat -d -f foo ./runalarm -d -t 5 /bin/bash -c 'for i in $(seq 1 7); do echo $i; sleep 1; done; echo exited'; cat foo 12 | 13 | ./runstat -f foo usleep 4900000; cat foo 14 | -------------------------------------------------------------------------------- /regtest.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | SRCDIR=$(cd -P -- $(dirname -- "$0") && pwd -P) 4 | TESTDIR=$SRCDIR/tests 5 | TEMPDIR=$(mktemp -t -d cronutils.regtest-XXXXXX) 6 | trap "cd $SRCDIR; rm -rf $TEMPDIR" 0 INT QUIT ABRT PIPE TERM 7 | 8 | cd $TEMPDIR 9 | 10 | export PATH=$SRCDIR:$PATH 11 | 12 | for s in $TESTDIR/*.sh; do 13 | test=$(basename $s .sh) 14 | mkdir $TEMPDIR/$test 15 | cd $TEMPDIR/$test 16 | $s > $TEMPDIR/$test.out 2>$TEMPDIR/$test.err 17 | r=$? 18 | if [ $r -ne 0 ]; then 19 | echo $test: FAIL - exit code $r 20 | echo stdout 21 | cat $TEMPDIR/$test.out 22 | echo stderr 23 | cat $TEMPDIR/$test.err 24 | exit 1 25 | fi 26 | diff $TESTDIR/$test.out $TEMPDIR/$test.out > $TEMPDIR/$test.diff 27 | if [ $? -ne 0 ]; then 28 | echo $test: FAIL - output match: 29 | cat $TEMPDIR/$test.diff 30 | exit 1 31 | fi 32 | echo $test: OK 33 | cd $TEMPDIR 34 | done 35 | -------------------------------------------------------------------------------- /runalarm.1: -------------------------------------------------------------------------------- 1 | .\" -*- nroff -*- 2 | .TH RUNALARM 1 "October 18, 2010" "Google, Inc." 3 | 4 | .SH NAME 5 | 6 | runalarm \- enforce a time limit on execution of a process 7 | 8 | .SH SYNOPSYS 9 | 10 | \fBrunalarm\fR [ \fB-h\fR ] 11 | 12 | \fBrunalarm\fR [ \fB-d\fR ] [ \fB-t \fItimeout\fR ] \fIcommand\fR [ \fIargs\fR ] 13 | 14 | .SH DESCRIPTION 15 | 16 | \fBrunalarm\fR tries to execute a command and, if the subprocess does 17 | not exit before a timer expires, tries to terminate that subprocess. 18 | Otherwise, the exit status of the command is returned. 19 | 20 | .SH USAGE 21 | 22 | .TP 23 | \fB-d\fR 24 | 25 | Debug mode; send log messages to standard error as well as to the 26 | system log. 27 | 28 | .TP 29 | \fB-t \fItimeout\fR 30 | 31 | Specifies the duration, in seconds, for \fBrunalarm\fR to allow the 32 | command to run. The default is 1d duration (86400 seconds). 33 | 34 | .TP 35 | \fB-h\fR 36 | 37 | Prints some basic help. 38 | 39 | .SH BUGS 40 | 41 | Sending SIGALRM to \fBrunalarm\fR before the timer has expired will 42 | cause the subprocess to be killed. 43 | 44 | .SH SEE ALSO 45 | 46 | \fBrunlock\fR(1), \fBrunstat\fR(1) 47 | 48 | .SH AUTHOR 49 | 50 | \fBrunalarm\fR was written by Jamie Wilkinson , based on some Python 51 | code by Craig Silverstein 52 | 53 | .SH COPYRIGHT 54 | 55 | This program is copyright (C) 2000-2010 Google, Inc. 56 | .PP 57 | It is licensed under the Apache License, Version 2.0 58 | -------------------------------------------------------------------------------- /runalarm.c: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2000-2010 Google, Inc. 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | qyou may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | #define _GNU_SOURCE /* basename */ 18 | 19 | #include 20 | #include 21 | #include 22 | #include 23 | #include 24 | #include 25 | #include 26 | #include 27 | #include 28 | 29 | #include "subprocess.h" 30 | 31 | int timeout = 60 * 60 * 24; /* 1 day */ 32 | volatile sig_atomic_t alarm_triggered = 0; 33 | 34 | static void usage(char* prog) { 35 | fprintf(stderr, 36 | "Usage: %s [options] command [arg [arg...]]\n\n" 37 | "This program tries to run a command and, if the timeout is\n" 38 | "reached before the command exits, kills that process.\n" 39 | "Otherwise the errorcode of the command is returned.\n" 40 | "\noptions:\n" 41 | " -t timeout time in seconds to wait before process is killed\n" 42 | " -d send log messages to stderr as well as syslog.\n" 43 | " -h print this help\n", 44 | prog); 45 | } 46 | 47 | static void alarm_handler(int signum) { 48 | int old_errno; 49 | 50 | (void)signum; /* suppress unused parameter warnings */ 51 | old_errno = errno; 52 | alarm_triggered = 1; 53 | kill_process_group(); 54 | errno = old_errno; 55 | } 56 | 57 | static void set_timeout_alarm(void) { alarm(timeout); } 58 | 59 | int main(int argc, char** argv) { 60 | int arg; 61 | char* progname; 62 | int status = -1; 63 | char* command; 64 | char** command_args; 65 | char* endptr; 66 | struct sigaction sa, old_sa; 67 | int debug = 0; 68 | 69 | progname = argv[0]; 70 | 71 | while ((arg = getopt(argc, argv, "+t:hd")) > 0) { 72 | switch (arg) { 73 | case 'h': 74 | usage(progname); 75 | exit(EXIT_SUCCESS); 76 | break; 77 | case 't': 78 | timeout = strtol(optarg, &endptr, 10); 79 | if (*endptr || !optarg) { 80 | fprintf(stderr, "invalid timeout specified: %s\n", optarg); 81 | exit(EX_DATAERR); 82 | } 83 | break; 84 | case 'd': 85 | debug = LOG_PERROR; 86 | break; 87 | default: 88 | break; 89 | } 90 | } 91 | if (optind >= argc) { 92 | usage(progname); 93 | exit(EXIT_FAILURE); 94 | } else { 95 | command = strdup(argv[optind]); 96 | command_args = &argv[optind]; 97 | } 98 | 99 | openlog(progname, debug | LOG_ODELAY | LOG_PID | LOG_NOWAIT, LOG_CRON); 100 | if (debug) 101 | setlogmask(LOG_UPTO(LOG_DEBUG)); 102 | else 103 | setlogmask(LOG_UPTO(LOG_INFO)); 104 | 105 | /* set up the alarm handler */ 106 | sigemptyset(&sa.sa_mask); 107 | sa.sa_handler = alarm_handler; 108 | sa.sa_flags = 0; 109 | sigaction(SIGALRM, &sa, &old_sa); 110 | /* exec the command */ 111 | status = run_subprocess(command, command_args, &set_timeout_alarm); 112 | alarm(0); /* shutdown the alarm */ 113 | if (alarm_triggered) { 114 | syslog(LOG_INFO, "command '%s' timed out after %d seconds", 115 | basename(command), timeout); 116 | status = 128 + SIGALRM; 117 | } 118 | closelog(); 119 | exit(status); 120 | } 121 | -------------------------------------------------------------------------------- /runcron: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | runalarm runlock -f $1 runstat "$@" 4 | -------------------------------------------------------------------------------- /runlock.1: -------------------------------------------------------------------------------- 1 | .\" -*- nroff -*- 2 | .TH RUNLOCK 1 "October 18, 2010" "Google, Inc." 3 | 4 | .SH NAME 5 | 6 | runlock \- prevent concurrent execution of a process 7 | 8 | .SH SYNOPSYS 9 | 10 | \fBrunlock\fR [ \fB-h\fR ] 11 | 12 | \fBrunlock\fR [ \fB-d\fR ] [ \fB-f \fIpathname\fR ] [ \fB-t \fItimeout\fR ] \fIcommand\fR [ \fIargs\fR ] 13 | 14 | .SH DESCRIPTION 15 | 16 | \fBrunlock\fR tries to hold an exclusive lock while it executes a 17 | command. Subsequent execution of \fBrunlock\fR with the same lock, 18 | while that lock is held, will cause the new instance of \fBrunlock\fR 19 | to terminate with a failure exit code. Otherwise, the exit code of the 20 | subprocess is returned. 21 | 22 | .SH USAGE 23 | 24 | .TP 25 | \fB-d\fR 26 | 27 | Debug mode; send log messages to standard error as well as to the 28 | system log. 29 | 30 | .TP 31 | 32 | \fB-f \fIpathname\fR 33 | 34 | Specifies the pathname of the file to use as a lock file. The default 35 | is to create a lock file in /tmp/cronutils-$USER with the name of the 36 | command, and suffix ".pid". 37 | 38 | .TP 39 | \fB-t \fItimeout\fR 40 | 41 | Specifies the duration, in seconds, for \fBrunlock\fR to wait before 42 | giving up on trying to acquire the lock. The default is 5 seconds. 43 | 44 | .TP 45 | \fB-h\fR 46 | 47 | Prints some basic help. 48 | 49 | .SH BUGS 50 | 51 | Sending SIGALRM to \fBrunlock\fR before the timer has expired will 52 | cause the subprocess to be killed. 53 | 54 | .SH SEE ALSO 55 | 56 | \fBrunalarm\fR(1), \fBrunstat\fR(1) 57 | 58 | .SH AUTHOR 59 | 60 | \fBrunlock\fR was written by Jamie Wilkinson . 61 | 62 | .SH COPYRIGHT 63 | 64 | This program is copyright (C) 2010 Google, Inc. 65 | .PP 66 | It is licensed under the Apache License, Version 2.0 67 | -------------------------------------------------------------------------------- /runlock.c: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2010 Google Inc. 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | #define _GNU_SOURCE /* asprintf, basename */ 18 | 19 | #include 20 | #include 21 | #include 22 | #include 23 | #include 24 | #include 25 | #include 26 | #include 27 | #include 28 | #include 29 | #include 30 | #include 31 | 32 | #include "subprocess.h" 33 | #include "tempdir.h" 34 | 35 | char* lock_filename = NULL; 36 | volatile sig_atomic_t timeout_expired = 0; 37 | 38 | static void usage(char* prog) { 39 | fprintf(stderr, 40 | "Usage: %s [options] command [arg [arg] ...]\n\n" 41 | "This program prevents concurrent execution of a process\n" 42 | "by holding an exclusive lock while the subprocess is running.\n" 43 | "Subsequent attempts to run a process with the same lock,\n" 44 | "while another process has the lock open, and is still\n" 45 | "executing, will exit with a failure exit code.\n", 46 | prog); 47 | fprintf(stderr, 48 | "\noptions:\n" 49 | " -d send log messages to stderr as well as syslog.\n" 50 | " -f lock_filename path to use as a lock file\n" 51 | " -t timeout time in seconds to wait to acquire the lock\n" 52 | " -h this help.\n"); 53 | } 54 | 55 | static void alarm_handler(int signum); 56 | static void alarm_handler(int signum) { 57 | (void)signum; /* suppress unused variable warning */ 58 | timeout_expired = 1; 59 | } 60 | 61 | int main(int argc, char** argv) { 62 | char* progname; 63 | int arg; 64 | char* command; 65 | char** command_args; 66 | int status = 0; 67 | struct flock fl; 68 | int fd; 69 | char buf[BUFSIZ]; 70 | struct sigaction sa, old_sa; 71 | int debug = 0; 72 | int timeout = 5; 73 | char* endptr; 74 | 75 | memset(&fl, 0, sizeof(fl)); 76 | fl.l_type = F_WRLCK; 77 | fl.l_whence = SEEK_SET; 78 | 79 | progname = argv[0]; 80 | 81 | while ((arg = getopt(argc, argv, "+df:ht:")) > 0) { 82 | switch (arg) { 83 | case 'h': 84 | usage(progname); 85 | exit(EXIT_SUCCESS); 86 | break; 87 | case 'd': 88 | debug = LOG_PERROR; 89 | break; 90 | case 'f': 91 | if (asprintf(&lock_filename, "%s", optarg) == -1) { 92 | perror("asprintf"); 93 | exit(EX_OSERR); 94 | } 95 | break; 96 | case 't': 97 | timeout = strtol(optarg, &endptr, 10); 98 | if (*endptr || !optarg) { 99 | fprintf(stderr, "invalid timeout specified: %s\n", optarg); 100 | exit(EX_DATAERR); 101 | } 102 | break; 103 | default: 104 | break; 105 | } 106 | } 107 | if (optind >= argc) { 108 | usage(progname); 109 | exit(EXIT_FAILURE); 110 | } else { 111 | command = strdup(argv[optind]); 112 | command_args = &argv[optind]; 113 | } 114 | 115 | openlog(progname, debug | LOG_ODELAY | LOG_PID | LOG_NOWAIT, LOG_CRON); 116 | if (debug) 117 | setlogmask(LOG_UPTO(LOG_DEBUG)); 118 | else 119 | setlogmask(LOG_UPTO(LOG_INFO)); 120 | 121 | if (lock_filename == NULL) { 122 | if (asprintf(&lock_filename, "%s/%s.pid", make_tempdir(), 123 | basename(command)) == -1) { 124 | perror("asprintf"); 125 | exit(EX_OSERR); 126 | } 127 | } 128 | syslog(LOG_DEBUG, "lock filename is %s", lock_filename); 129 | 130 | sa.sa_handler = alarm_handler; 131 | sigemptyset(&sa.sa_mask); 132 | sa.sa_flags = 0; 133 | sigaction(SIGALRM, &sa, &old_sa); 134 | alarm(timeout); 135 | if ((fd = open(lock_filename, O_CREAT | O_RDWR | O_TRUNC, 136 | S_IRUSR | S_IWUSR)) < 0) { 137 | perror(lock_filename); 138 | exit(EX_NOINPUT); 139 | } else { 140 | if (fcntl(fd, F_SETLKW, &fl) < 0) { 141 | switch (errno) { 142 | case EINTR: 143 | if (timeout_expired) { 144 | syslog(LOG_INFO, 145 | "waited %d seconds, already locked by another process", 146 | timeout); 147 | exit(EX_CANTCREAT); 148 | } 149 | break; 150 | case EACCES: 151 | case EAGAIN: 152 | syslog(LOG_INFO, "already locked by another process"); 153 | exit(EX_CANTCREAT); 154 | break; 155 | default: 156 | perror("fcntl"); 157 | exit(EXIT_FAILURE); 158 | } 159 | } else { 160 | alarm(0); 161 | sigaction(SIGALRM, &old_sa, NULL); 162 | snprintf(buf, BUFSIZ, "%d\n", getpid()); 163 | if (write(fd, buf, strlen(buf)) == -1) { 164 | perror("write"); 165 | } 166 | fsync(fd); 167 | syslog(LOG_DEBUG, "lock granted"); 168 | status = run_subprocess(command, command_args, NULL); 169 | close(fd); 170 | } 171 | } 172 | closelog(); 173 | return status; 174 | } 175 | -------------------------------------------------------------------------------- /runstat.1: -------------------------------------------------------------------------------- 1 | .\" -*- nroff -*- 2 | .TH RUNSTAT 1 "October 18, 2010" "Google, Inc." 3 | 4 | .SH NAME 5 | 6 | runstat \- collect statistics about execution of a process 7 | 8 | .SH SYNOPSYS 9 | 10 | \fBrunstat\fR [ \fB-h\fR ] 11 | 12 | \fBrunstat\fR [ \fB-d\fR ] [ \fB-f \fIpathname\fR ] \fIcommand\fR [ \fIargs\fR ] 13 | 14 | .SH DESCRIPTION 15 | 16 | \fBrunstat\fR tries to execute a command in a subprocess, and upon 17 | termination of the subprocess collects some statistics about that 18 | subprocess, and writes them to a file. 19 | 20 | These statistics include time of execution, exit status, and elapsed 21 | time to execute, as well as use of various OS resources. 22 | 23 | .SH USAGE 24 | 25 | .TP 26 | \fB-d\fR 27 | 28 | Debug mode; send log messages to standard error as well as to the 29 | system log. 30 | 31 | .TP 32 | 33 | \fB-f \fIpathname\fR 34 | 35 | Specifies the pathname of the file to save the statistics to. The default 36 | is to create a file in /tmp/cronutils-$USER with the name of the 37 | command, and suffix ".stat". 38 | 39 | .TP 40 | \fB-h\fR 41 | 42 | Prints some basic help. 43 | 44 | .SH SEE ALSO 45 | 46 | \fBrunalarm\fR(1), \fBrunlock\fR(1), \fBgetrusage\fR(2) 47 | 48 | .SH AUTHOR 49 | 50 | \fBrunstat\fR was written by Jamie Wilkinson . 51 | 52 | .SH COPYRIGHT 53 | 54 | This program is copyright (C) 2010 Google, Inc. 55 | .PP 56 | It is licensed under the Apache License, Version 2.0 57 | -------------------------------------------------------------------------------- /runstat.c: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2010 Google, Inc. 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | #define _GNU_SOURCE /* dprintf, asprintf, basename */ 18 | 19 | #include 20 | #include 21 | #include 22 | #include 23 | #include 24 | #include 25 | #include 26 | #include 27 | #include 28 | #include 29 | #include 30 | #include 31 | #include 32 | #include 33 | #include 34 | 35 | #include "subprocess.h" 36 | #include "tempdir.h" 37 | 38 | static void usage(char* prog) { 39 | fprintf(stderr, 40 | "Usage: %s [options] command [arg [arg] ...]\n\n" 41 | "This program tries to execute a command in a" 42 | "subprocess, and upon termination of the subprocess" 43 | "writes some runtime statistics to a file." 44 | "These statistics include time of execution, exit" 45 | "status, and timestamp of completion.\n" 46 | "\noptions:\n" 47 | " -f path Path to save the statistics file.\n" 48 | " -C path Path to collectd socket.\n" 49 | " -d send log messages to stderr as well as syslog.\n" 50 | " -h print this help\n", 51 | prog); 52 | } 53 | 54 | enum var_kind { GAUGE, ABSOLUTE }; 55 | 56 | struct variable { 57 | struct variable* next; 58 | 59 | char* name; 60 | char* value; 61 | char* units; 62 | enum var_kind kind; 63 | }; 64 | 65 | void add_variable(struct variable** var_list, const char* name, 66 | const enum var_kind kind, const char* units, const char* fmt, 67 | ...); 68 | void add_variable(struct variable** var_list, const char* name, 69 | const enum var_kind kind, const char* units, const char* fmt, 70 | ...) { 71 | char buf[1024]; 72 | va_list ap; 73 | struct variable* var; 74 | 75 | var = malloc(sizeof(struct variable)); 76 | if (!var) { 77 | perror("malloc"); 78 | exit(EX_OSERR); 79 | } 80 | va_start(ap, fmt); 81 | vsnprintf(buf, sizeof(buf), fmt, ap); 82 | va_end(ap); 83 | var->name = strdup(name); 84 | var->units = units ? strdup(units) : NULL; 85 | var->value = strdup(buf); 86 | var->kind = kind; 87 | var->next = *var_list; 88 | *var_list = var; 89 | } 90 | 91 | int main(int argc, char** argv) { 92 | char* progname; 93 | int arg; 94 | char* collectd_sockname = NULL; 95 | char* statistics_filename = NULL; 96 | char* temp_filename = NULL; 97 | char* command; 98 | char** command_args; 99 | char* command_base; 100 | struct timeval start_wall_time, end_wall_time; 101 | struct timespec start_run_time, end_run_time; 102 | long int elapsed_sec, elapsed_nsec; 103 | int status; 104 | int temp_fd; 105 | char buf[1024]; 106 | int debug = 0; 107 | struct rusage ru; 108 | struct variable *var_list = NULL, *var; 109 | 110 | progname = argv[0]; 111 | 112 | while ((arg = getopt(argc, argv, "+C:f:hd")) > 0) { 113 | switch (arg) { 114 | case 'C': 115 | if (asprintf(&collectd_sockname, "%s", optarg) == -1) { 116 | perror("asprintf collectd_sockname"); 117 | exit(EX_OSERR); 118 | } 119 | break; 120 | case 'h': 121 | usage(progname); 122 | exit(EXIT_SUCCESS); 123 | break; 124 | case 'f': 125 | if (asprintf(&statistics_filename, "%s", optarg) == -1) { 126 | perror("asprintf"); 127 | exit(EX_OSERR); 128 | } 129 | break; 130 | case 'd': 131 | debug = LOG_PERROR; 132 | break; 133 | default: 134 | break; 135 | } 136 | } 137 | if (optind >= argc) { 138 | usage(progname); 139 | exit(EXIT_FAILURE); 140 | } else { 141 | command = strdup(argv[optind]); 142 | command_args = &argv[optind]; 143 | } 144 | 145 | openlog(progname, debug | LOG_ODELAY | LOG_PID | LOG_NOWAIT, LOG_CRON); 146 | if (debug) 147 | setlogmask(LOG_UPTO(LOG_DEBUG)); 148 | else 149 | setlogmask(LOG_UPTO(LOG_INFO)); 150 | 151 | gettimeofday(&start_wall_time, NULL); 152 | clock_gettime(CLOCK_MONOTONIC, &start_run_time); 153 | 154 | status = run_subprocess(command, command_args, NULL); 155 | 156 | clock_gettime(CLOCK_MONOTONIC, &end_run_time); 157 | gettimeofday(&end_wall_time, NULL); 158 | 159 | command_base = basename(command); 160 | if (statistics_filename == NULL) { 161 | if (asprintf(&statistics_filename, "%s/%s.stat", make_tempdir(), 162 | command_base) == -1) { 163 | perror("asprintf"); 164 | exit(EX_OSERR); 165 | } 166 | } 167 | syslog(LOG_DEBUG, "statistics filename is %s", statistics_filename); 168 | 169 | if (asprintf(&temp_filename, "%s.XXXXXX", statistics_filename) == -1) { 170 | perror("asprintf"); 171 | exit(EX_OSERR); 172 | } 173 | syslog(LOG_DEBUG, "temp filename is %s", temp_filename); 174 | 175 | if ((temp_fd = mkstemp(temp_filename)) < 0) { 176 | perror("mkstemp"); 177 | exit(EX_OSERR); 178 | } 179 | 180 | /** process */ 181 | add_variable(&var_list, "exit_status", GAUGE, NULL, "%d", status); 182 | 183 | /** wall time */ 184 | /* ABSOLUTE hostname/runstat-progname/last_run-epoch_timestamp_start */ 185 | add_variable(&var_list, "start_timestamp", ABSOLUTE, "time_t", "%ld.%.6ld", 186 | start_wall_time.tv_sec, start_wall_time.tv_usec); 187 | /* ABSOLUTE hostname/runstat-progname/last_run-epoch_timestamp_end */ 188 | add_variable(&var_list, "end_timestamp", ABSOLUTE, "time_t", "%ld.%.6ld", 189 | end_wall_time.tv_sec, end_wall_time.tv_usec); 190 | 191 | /** timing */ 192 | elapsed_sec = end_run_time.tv_sec - start_run_time.tv_sec; 193 | elapsed_nsec = end_run_time.tv_nsec - start_run_time.tv_nsec; 194 | if (elapsed_nsec < 0) { 195 | elapsed_nsec += 1e9; 196 | elapsed_sec--; 197 | } 198 | /* GAUGE hostname/runstat-progname/last_run-elapsed-time */ 199 | add_variable(&var_list, "elapsed_time", GAUGE, "s", "%ld.%.9ld", elapsed_sec, 200 | elapsed_nsec); 201 | 202 | /** resource usage */ 203 | if (getrusage(RUSAGE_CHILDREN, &ru) == 0) { 204 | add_variable(&var_list, "user_time", GAUGE, "s", "%ld.%.6ld", 205 | ru.ru_utime.tv_sec, ru.ru_utime.tv_usec); 206 | add_variable(&var_list, "system_time", GAUGE, "s", "%ld.%.6ld", 207 | ru.ru_stime.tv_sec, ru.ru_stime.tv_usec); 208 | 209 | add_variable(&var_list, "rss-max", GAUGE, "B", "%ld", ru.ru_maxrss); 210 | add_variable(&var_list, "rss-shared", GAUGE, "B", "%ld", ru.ru_ixrss); 211 | add_variable(&var_list, "rss-data_unshared", GAUGE, "B", "%ld", 212 | ru.ru_idrss); 213 | add_variable(&var_list, "rss-stack_unshared", GAUGE, "B", "%ld", 214 | ru.ru_isrss); 215 | 216 | add_variable(&var_list, "page-reclaims", GAUGE, "pages", "%ld", 217 | ru.ru_minflt); 218 | add_variable(&var_list, "page-faults", GAUGE, "pages", "%ld", ru.ru_majflt); 219 | add_variable(&var_list, "swaps", GAUGE, "swaps", "%ld", ru.ru_nswap); 220 | 221 | add_variable(&var_list, "block_ios-in", GAUGE, "block_ios", "%ld", 222 | ru.ru_inblock); 223 | add_variable(&var_list, "block_ios-out", GAUGE, "block_ios", "%ld", 224 | ru.ru_oublock); 225 | 226 | add_variable(&var_list, "messages-sent", GAUGE, "messages", "%ld", 227 | ru.ru_msgsnd); 228 | add_variable(&var_list, "messages-received", GAUGE, "messages", "%ld", 229 | ru.ru_msgrcv); 230 | 231 | add_variable(&var_list, "signals-received", GAUGE, "signals", "%ld", 232 | ru.ru_nsignals); 233 | add_variable(&var_list, "ctx_switch-voluntary", GAUGE, "context switches", 234 | "%ld", ru.ru_nvcsw); 235 | add_variable(&var_list, "ctx_switch-involuntary", GAUGE, "context switches", 236 | "%ld", ru.ru_nivcsw); 237 | } 238 | 239 | /* CSV emitter */ 240 | for (var = var_list; var != NULL; var = var->next) { 241 | snprintf(buf, sizeof(buf), "%s,%s,%s,%s\n", basename(command), var->name, 242 | var->value, var->units ? var->units : ""); 243 | if (write(temp_fd, buf, strlen(buf)) == -1) { 244 | perror("write"); 245 | } 246 | } 247 | 248 | fsync(temp_fd); 249 | close(temp_fd); 250 | 251 | if (rename(temp_filename, statistics_filename) < 0) { 252 | perror("rename"); 253 | exit(EX_OSERR); 254 | } 255 | 256 | /* Write to collectd */ 257 | if (collectd_sockname != NULL) { 258 | char* hostname; 259 | long hostname_len; 260 | struct sockaddr_un sock; 261 | int s; 262 | 263 | if ((s = socket(AF_UNIX, SOCK_STREAM, 0)) == -1) { 264 | perror("socket"); 265 | goto end; 266 | } 267 | sock.sun_family = AF_UNIX; 268 | strncpy(sock.sun_path, collectd_sockname, sizeof(sock.sun_path) - 1); 269 | sock.sun_path[sizeof(sock.sun_path) - 1] = '\0'; 270 | if (connect(s, (struct sockaddr*)&sock, 271 | strlen(sock.sun_path) + sizeof(sock.sun_family)) == -1) { 272 | perror("connect"); 273 | goto end; 274 | } 275 | 276 | hostname_len = sysconf(_SC_HOST_NAME_MAX); 277 | if (hostname_len <= 0) hostname_len = _POSIX_HOST_NAME_MAX; 278 | if ((hostname = malloc(hostname_len)) == NULL) { 279 | perror("malloc hostname"); 280 | exit(EX_OSERR); 281 | } 282 | if (gethostname(hostname, hostname_len) == -1) { 283 | perror("gethostname"); 284 | exit(EX_OSERR); 285 | } 286 | 287 | for (var = var_list; var != NULL; var = var->next) { 288 | char type[10] = {'\0'}; 289 | switch (var->kind) { 290 | case GAUGE: 291 | strncpy(type, "gauge", 9); 292 | break; 293 | case ABSOLUTE: 294 | strncpy(type, "counter", 9); 295 | break; 296 | default: 297 | perror("unknown var->kind"); 298 | break; 299 | } 300 | dprintf(s, "PUTVAL \"%s/runstat-%s/%s-%s\" %.0g:%s\n", hostname, 301 | command_base, type, var->name, difftime(end_wall_time.tv_sec, 0), 302 | var->value); 303 | /* This next line is a bit of a hack to clear the pipe.*/ 304 | recv(s, buf, sizeof(buf) - 1, 0); 305 | } 306 | close(s); 307 | } 308 | end: 309 | closelog(); 310 | return status; 311 | } 312 | -------------------------------------------------------------------------------- /subprocess.c: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2010 Google, Inc. 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | #include "subprocess.h" 18 | 19 | #include 20 | #include 21 | #include 22 | #include 23 | #include 24 | #include 25 | #include 26 | #include 27 | #include 28 | 29 | int childpid = -1; /* default to a bogus pid */ 30 | volatile sig_atomic_t killed_by_us = 0; 31 | volatile sig_atomic_t fatal_error_in_progress = 0; 32 | 33 | void kill_process_group(void) { 34 | int pgid; 35 | 36 | killed_by_us = 1; 37 | pgid = getpgid(childpid); 38 | if (killpg(pgid, SIGTERM) < 0) { 39 | perror("killpg"); 40 | exit(EX_OSERR); 41 | } 42 | } 43 | 44 | static void termination_handler(int sig); 45 | static void termination_handler(int sig) { 46 | int old_errno; 47 | 48 | if (fatal_error_in_progress) { 49 | raise(sig); 50 | } 51 | fatal_error_in_progress = 1; 52 | 53 | if (childpid > 0) { 54 | old_errno = errno; 55 | /* we were killed (SIGTERM), so make sure child dies too */ 56 | kill_process_group(); 57 | errno = old_errno; 58 | } 59 | 60 | signal(sig, SIG_DFL); 61 | raise(sig); 62 | } 63 | 64 | void install_termination_handler(void); 65 | void install_termination_handler(void) { 66 | struct sigaction sa, old_sa; 67 | sa.sa_handler = termination_handler; 68 | sigemptyset(&sa.sa_mask); 69 | sigaddset(&sa.sa_mask, SIGINT); 70 | sigaddset(&sa.sa_mask, SIGHUP); 71 | sigaddset(&sa.sa_mask, SIGTERM); 72 | sigaddset(&sa.sa_mask, SIGQUIT); 73 | sa.sa_flags = 0; 74 | sigaction(SIGINT, NULL, &old_sa); 75 | if (old_sa.sa_handler != SIG_IGN) sigaction(SIGINT, &sa, NULL); 76 | sigaction(SIGHUP, NULL, &old_sa); 77 | if (old_sa.sa_handler != SIG_IGN) sigaction(SIGHUP, &sa, NULL); 78 | sigaction(SIGTERM, NULL, &old_sa); 79 | if (old_sa.sa_handler != SIG_IGN) sigaction(SIGTERM, &sa, NULL); 80 | } 81 | 82 | int run_subprocess(char* command, char** args, 83 | void (*pre_wait_function)(void)) { 84 | int pid; 85 | int status; 86 | 87 | childpid = fork(); 88 | if (childpid == 0) { 89 | /* try to detach from parent's process group */ 90 | if (setsid() == -1) { 91 | syslog(LOG_ERR, "Unable to detach child. Aborting"); 92 | return -1; 93 | } 94 | if (execvp(command, args)) { 95 | perror("execvp"); 96 | exit(EX_NOINPUT); 97 | } else { 98 | /* Control almost certainly will not get to this point, ever. If 99 | * the call to execvp returned, instead of switching to a new memory 100 | * image, there was a problem. This exit will be collected by the 101 | * parent's call to waitpid() below. 102 | */ 103 | exit(EX_UNAVAILABLE); 104 | } 105 | } else if (childpid < 0) { 106 | perror("fork"); 107 | exit(EX_OSERR); 108 | } else { 109 | /* Make sure the child dies if we get killed. */ 110 | /* Only the parent should do this, of course! */ 111 | install_termination_handler(); 112 | 113 | if (pre_wait_function != NULL) { 114 | pre_wait_function(); 115 | } 116 | 117 | /* blocking wait on the child */ 118 | while ((pid = waitpid(childpid, &status, 0)) < 0) { 119 | if (errno == EINTR) { 120 | if (killed_by_us) { 121 | break; 122 | } /* else restart the loop */ 123 | } else { 124 | perror("waitpid"); 125 | } 126 | } 127 | alarm(0); 128 | if (pid > 0) { 129 | if (pid != childpid) { 130 | syslog(LOG_ERR, "childpid %d not returned by waitpid! instead %d", 131 | childpid, pid); 132 | kill_process_group(); 133 | exit(EX_OSERR); 134 | } 135 | 136 | /* exited normally? */ 137 | if (WIFEXITED(status)) { 138 | /* decode and return exit sttus */ 139 | status = WEXITSTATUS(status); 140 | syslog(LOG_DEBUG, "child exited with status %d", status); 141 | } else { 142 | /* This formula is a Unix shell convention */ 143 | status = 128 + WTERMSIG(status); 144 | syslog(LOG_DEBUG, "child exited via signal %d", WTERMSIG(status)); 145 | } 146 | } 147 | childpid = -1; 148 | } 149 | return status; 150 | } 151 | -------------------------------------------------------------------------------- /subprocess.h: -------------------------------------------------------------------------------- 1 | #ifndef __CRONUTILS_SUBPROCESS_H 2 | #define __CRONUTILS_SUBPROCESS_H 3 | 4 | void kill_process_group(void); 5 | int run_subprocess(char* command, char** args, void (*pre_wait_function)(void)); 6 | 7 | #endif /* __CRONUTILS_SUBPROCESS_H */ 8 | -------------------------------------------------------------------------------- /tempdir.c: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2010 Google, Inc. 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | #define _GNU_SOURCE /* asprintf */ 18 | 19 | #include "tempdir.h" 20 | 21 | #include 22 | #include 23 | #include 24 | #include 25 | #include 26 | #include 27 | #include 28 | #include 29 | #include 30 | #include 31 | #include 32 | 33 | const char* template = "/tmp/cronutils-"; 34 | char* dirname = NULL; 35 | 36 | char* make_tempdir(void) { 37 | uid_t uid; 38 | struct passwd* pw; 39 | struct stat st; 40 | 41 | uid = geteuid(); 42 | if ((pw = getpwuid(uid)) == NULL) { 43 | perror("getpwuid"); 44 | exit(EX_OSERR); 45 | } 46 | if (asprintf(&dirname, "%s%s", template, pw->pw_name) == -1) { 47 | perror("asprintf"); 48 | exit(EX_OSERR); 49 | } 50 | syslog(LOG_DEBUG, "temp dir is %s\n", dirname); 51 | if (mkdir(dirname, S_IRWXU) < 0) { 52 | if (errno == EEXIST) { 53 | if (stat(dirname, &st) != 0) { 54 | perror("stat"); 55 | exit(EX_OSERR); 56 | } 57 | if (!S_ISDIR(st.st_mode)) { 58 | syslog(LOG_ERR, "%s is not a directory\n", dirname); 59 | exit(EX_IOERR); 60 | } 61 | if (st.st_uid != uid) { 62 | syslog(LOG_ERR, "%s is not owned by %s\n", dirname, pw->pw_name); 63 | exit(EXIT_FAILURE); 64 | } 65 | if (!(st.st_mode & S_IRWXU)) { 66 | syslog(LOG_ERR, "%s has insecure permissions %u\n", dirname, 67 | st.st_mode); 68 | exit(EXIT_FAILURE); 69 | } 70 | } else { 71 | perror("mkdir"); 72 | exit(EX_OSERR); 73 | } 74 | } 75 | return dirname; 76 | } 77 | -------------------------------------------------------------------------------- /tempdir.h: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2010 Google, Inc. 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | #ifndef __CRONUTILS_TEMPDIR_H__ 18 | #define __CRONUTILS_TEMPDIR_H__ 19 | 20 | char* make_tempdir(void); 21 | 22 | #endif /* __CRONUTILS_TEMPDIR_H__ */ 23 | -------------------------------------------------------------------------------- /tests/1.out: -------------------------------------------------------------------------------- 1 | 1 2 | 2 3 | 3 4 | 4 5 | 5 6 | -------------------------------------------------------------------------------- /tests/1.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | runalarm -d -t 5 /bin/bash -c 'for i in $(seq 1 7); do echo $i; sleep 1; done; echo "exited"' 4 | r=$? 5 | # Should be nonzero exit when killed, sigalarm 6 | if [ $r -eq 142 ]; then 7 | exit 0 8 | elif [ $r -eq 0 ]; then 9 | exit 1 10 | else 11 | exit $r 12 | fi 13 | -------------------------------------------------------------------------------- /tests/2.out: -------------------------------------------------------------------------------- 1 | 1 2 | 2 3 | 3 4 | 4 5 | 5 6 | -------------------------------------------------------------------------------- /tests/2.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | runalarm -d -t 5 runstat -d -f foo /bin/bash -c 'for i in $(seq 1 7); do echo $i; sleep 1; done; echo "exited"' 4 | r=$? 5 | if [ $r -ne 142 ]; then 6 | exit 1 7 | fi 8 | 9 | # runstat never got chance to write stats 10 | if [ -e foo ]; then 11 | exit 1 12 | fi 13 | -------------------------------------------------------------------------------- /tests/3.out: -------------------------------------------------------------------------------- 1 | 1 2 | 2 3 | 3 4 | 4 5 | 5 6 | 0 7 | 1 8 | 2 9 | 3 10 | 4 11 | 5 12 | -------------------------------------------------------------------------------- /tests/3.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | ( 4 | runlock -d -f lock bash -c 'for i in $(seq 1 5); do echo $i; sleep 1; done' 5 | r=$? 6 | echo $r 7 | if [ $r -ne 0 ]; then 8 | exit 1 9 | fi 10 | ) & 11 | sleep 2 12 | runlock -d -f lock bash -c 'for i in $(seq 1 5); do echo $i; sleep 1; done' 13 | -------------------------------------------------------------------------------- /tests/4.out: -------------------------------------------------------------------------------- 1 | 1 2 | 2 3 | 3 4 | 4 5 | 5 6 | -------------------------------------------------------------------------------- /tests/4.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | 4 | runstat -d -f foo bash -c 'for i in $(seq 1 5); do echo $i; done; exit 5' 5 | r=$? 6 | 7 | if [ $r -ne 5 ]; then 8 | exit 1 9 | fi 10 | 11 | grep -q 'bash,exit_status,5' foo && exit 0 12 | 13 | cat foo 14 | exit 1 15 | -------------------------------------------------------------------------------- /tests/5.out: -------------------------------------------------------------------------------- 1 | 1 2 | 2 3 | 3 4 | 4 5 | 5 6 | -------------------------------------------------------------------------------- /tests/5.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | runstat -d -f foo runalarm -d -t 5 /bin/bash -c 'for i in $(seq 1 7); do echo $i; sleep 1; done; echo exited' 4 | r=$? 5 | if [ $r -ne 142 ]; then 6 | exit 1 7 | fi 8 | 9 | grep -q 'runalarm,exit_status,142' foo && exit 0 10 | 11 | cat foo 12 | exit 1 13 | -------------------------------------------------------------------------------- /version: -------------------------------------------------------------------------------- 1 | 1.9 2 | --------------------------------------------------------------------------------