├── .github ├── CODEOWNERS ├── ISSUE_TEMPLATE │ ├── config.yml │ ├── other.md │ ├── rfc.md │ └── wiki.md ├── PULL_REQUEST_TEMPLATE.md └── workflows │ ├── CODEOWNERS │ ├── check_samples.yml │ ├── publish_wiki.yml │ ├── responded.yml │ └── stale_prs_and_issues.yml ├── .gitignore ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── LICENSE ├── README.md ├── rfcs ├── .images │ ├── 0001-task-chunking-chunk-example-runtime.svg │ ├── 0001-task-chunking-chunks-with-stickiness-random-task-times.svg │ ├── 0001-task-chunking-chunks-with-stickiness.svg │ ├── 0001-task-chunking-multiple-adjacent-chunks.svg │ └── 0001-task-chunking-task-stickiness.svg ├── 0000-template.md ├── 0001-task-chunking.md ├── 0002-model-extensions.md ├── 0003-redacted-env-vars.md └── README.md ├── samples ├── LICENSE ├── README.md ├── sample-template.yaml └── v2023-09 │ ├── environment_templates │ ├── environment-variables.yaml │ ├── powershell-script.yaml │ └── python-venv.yaml │ └── job_templates │ ├── algorithmic-art.yaml │ ├── bash-in-docker.yaml │ ├── blender-ffmpeg.yaml │ ├── ffmpeg.json │ ├── ffmpeg.yaml │ ├── host-requirements.yaml │ ├── path-mapping.yaml │ ├── scripts │ └── algorithmic-art.py │ ├── stdout-messages.yaml │ ├── task-parameter-definition-showcase.yaml │ └── ui-controls-showcase.yaml └── wiki ├── 2023-09-Template-Schemas.md ├── Design-Tenets.md ├── Home.md ├── How-Jobs-Are-Constructed.md ├── How-Jobs-Are-Run.md ├── Introduction-to-Creating-a-Job.md ├── Job-Intro-01-Toolchain-Setup.md ├── Job-Intro-02-Starting-With-Shell-Scripts.md ├── Job-Intro-03-Creating-a-Job-Template.md ├── Job-Intro-04-Ready-for-Production.md ├── README.md ├── _Footer.md ├── _Sidebar.md └── images ├── 2023-09_how_jobs_are_run.drawio ├── 2023-09_how_jobs_are_run.png ├── job_structure.drawio ├── job_structure.png ├── template_autocomplete_entity.png ├── template_autocomplete_field.png └── template_autocomplete_menu.png /.github/CODEOWNERS: -------------------------------------------------------------------------------- 1 | * @OpenJobDescription/Wiki 2 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/config.yml: -------------------------------------------------------------------------------- 1 | blank_issues_enabled: false 2 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/other.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: "Other Issues" 3 | about: "Anything else regarding this repository" 4 | title: issue title 5 | --- 6 | 7 | ## Description 8 | 9 | A description of the issue, and a proposed resolution. -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/rfc.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: "Request for Comment (RFC)" 3 | about: "Create a tracking issue for an RFC." 4 | title: "RFC: (short description)" 5 | labels: 6 | - rfc/proposed 7 | assignees: 8 | - ddneilson 9 | - mwiebe 10 | --- 11 | 12 | * **Pull Request**: (Add the URL to the pull request here.) 13 | * **Discussion Thread(s)**: 14 | * (If there are discussion forum threads where this RFC has been discussed, then 15 | please add URLs to those here. You can remove this bullet point otherwise.) 16 | 17 | ## Description 18 | 19 | A short description of the proposal. 20 | 21 | ## Roles 22 | 23 | | Role | User 24 | | ---- | ---- 25 | | Proposed By | @alias 26 | | Author(s) | @alias 27 | 28 | ## Workflow 29 | 30 | - [x] Tracking issue created (label: `rfc/proposed`) 31 | - [ ] RFC pull request submitted and ready for discussion (label: `rfc/exploring`) 32 | - [ ] Last call for comments (labels: `rfc/exploring` and `rfc/final-comments`) 33 | - [ ] Accepted and merged RFC pull request (label: `rfc/accepted-future`) 34 | - [ ] Green-light for inclusion in a draft specification, and the author is creating and iterating on pull requests (label: `rfc/accepted-draft`) 35 | - [ ] Pull requests are merged in to a draft specification (label: `rfc/accepted-staged`) 36 | - [ ] Officially published in a non-draft revision of the specification (label: `rfc/released`) 37 | 38 | Please close this tracking issue when the proposal enters the `Released` stage of the process. 39 | 40 | ## Open Points 41 | 42 | For easier discovery, especially if there is a lot of discussion on this issue, then please keep this section updated 43 | with brief summaries and pointers to the main points of discussion. 44 | 45 | --- 46 | 47 | > The author is responsible to progress the RFC according to this checklist, and 48 | apply the relevant labels to this issue. -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/wiki.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: "Wiki Documentation" 3 | about: "Suggest a change or improvement to the wiki contents." 4 | title: "Wiki: (short description)" 5 | labels: 6 | - wiki 7 | --- 8 | 9 | ## Description 10 | 11 | *Describe the issue/recommendation.* 12 | 13 | ## Links 14 | 15 | *Link to affected documentation pages.* -------------------------------------------------------------------------------- /.github/PULL_REQUEST_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | 2 | *Please choose the format that best matches the purpose of this pull request. Delete the top-level header of the chosen 3 | section as well as all other sections.* 4 | 5 | ## PR for RFC 6 | 7 | ( Please use the form "feat(rfc): description" for the PR title. ) 8 | 9 | **Tracking Issue**: {url} 10 | 11 | This is a request for comments about {RFC description}. 12 | 13 | ## PR for other purpose 14 | 15 | ( Please use the form "feat: description", "fix: description", or "chore: description" for the 16 | pull request title, as appropriate. ) 17 | 18 | *Description of the change. What is being added or fixed?* 19 | 20 | --- 21 | 22 | By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice. 23 | -------------------------------------------------------------------------------- /.github/workflows/CODEOWNERS: -------------------------------------------------------------------------------- 1 | * @OpenJobDescription/Wiki -------------------------------------------------------------------------------- /.github/workflows/check_samples.yml: -------------------------------------------------------------------------------- 1 | name: Validate Samples 2 | 3 | on: 4 | pull_request: 5 | branches: [ mainline ] 6 | paths: 7 | - samples/** 8 | 9 | jobs: 10 | CopyrightHeader: 11 | name: Copyright Header 12 | runs-on: ubuntu-latest 13 | steps: 14 | - uses: actions/checkout@v4 15 | 16 | - name: Check Header 17 | run: | 18 | set -euo pipefail 19 | EXPECTED_HEADER="# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved." 20 | for f in $(find samples/ -name '*.yaml') 21 | do 22 | echo "Checking: $f" 23 | if test "$(head -n 1 $f)" != "${EXPECTED_HEADER}" 24 | then 25 | echo "ERROR: Copyright header missing on file: $f" 26 | exit 1 27 | fi 28 | done 29 | 30 | TemplateValidation: 31 | name: Check template syntax 32 | runs-on: ubuntu-latest 33 | steps: 34 | - uses: actions/checkout@v4 35 | 36 | - name: Setup Python 37 | uses: actions/setup-python@v5 38 | with: 39 | python-version: '3.12' 40 | 41 | - name: Install openjd-cli 42 | run: | 43 | pip install --upgrade pip 44 | pip install openjd-cli 45 | 46 | - name: Run check 47 | run: | 48 | set -euo pipefail 49 | for f in $(find samples/v2023-09/ -name '*.yaml') 50 | do 51 | echo "Checking: $f" 52 | openjd check $f 53 | if test $? -ne 0 54 | then 55 | echo "Failed check" 56 | exit 1 57 | fi 58 | done 59 | -------------------------------------------------------------------------------- /.github/workflows/publish_wiki.yml: -------------------------------------------------------------------------------- 1 | name: Publish to Wiki 2 | 3 | on: 4 | push: 5 | paths: 6 | - wiki/** 7 | branches: 8 | - mainline 9 | 10 | jobs: 11 | PublishToWiki: 12 | name: Publish to Wiki 13 | runs-on: ubuntu-latest 14 | environment: release 15 | env: 16 | WIKI_REPO: "https://${{ secrets.CI_TOKEN }}@github.com/OpenJobDescription/openjd-specifications.wiki.git" 17 | COMMIT_MESSAGE: ${{ github.event.head_commit.message }} 18 | steps: 19 | - uses: actions/checkout@v4 20 | - name: "Clone wiki contents" 21 | run: | 22 | git config --global user.email ${{ secrets.EMAIL }} 23 | git config --global user.name ${{ secrets.USER }} 24 | git clone ${{ env.WIKI_REPO }} tmp_wiki 25 | - name: "Push new content to wiki" 26 | run: | 27 | rsync -av --delete wiki/ tmp_wiki/ --exclude .git --exclude '*.drawio' --exclude README.md 28 | cd tmp_wiki 29 | git add . 30 | cat > .commit_message << EOF 31 | "${COMMIT_MESSAGE}" 32 | EOF 33 | git commit -F .commit_message 34 | git push origin master 35 | rm -rf tmp_wiki 36 | 37 | 38 | 39 | 40 | -------------------------------------------------------------------------------- /.github/workflows/responded.yml: -------------------------------------------------------------------------------- 1 | name: Contributor Responded 2 | on: 3 | issue_comment: 4 | types: [created, edited] 5 | 6 | jobs: 7 | check-for-response: 8 | uses: OpenJobDescription/.github/.github/workflows/reusable_responded.yml@mainline 9 | -------------------------------------------------------------------------------- /.github/workflows/stale_prs_and_issues.yml: -------------------------------------------------------------------------------- 1 | name: 'Check stale issues/PRs.' 2 | on: 3 | schedule: 4 | # Run every hour on the hour 5 | - cron: '0 * * * *' 6 | 7 | jobs: 8 | check-for-stales: 9 | uses: OpenJobDescription/.github/.github/workflows/reusable_stale_prs_and_issues.yml@mainline 10 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | **/.DS_Store 2 | .vscode 3 | .kiro 4 | -------------------------------------------------------------------------------- /CODE_OF_CONDUCT.md: -------------------------------------------------------------------------------- 1 | ## Code of Conduct 2 | This project has adopted the [Amazon Open Source Code of Conduct](https://aws.github.io/code-of-conduct). 3 | For more information see the [Code of Conduct FAQ](https://aws.github.io/code-of-conduct-faq) or contact 4 | opensource-codeofconduct@amazon.com with any additional questions or comments. 5 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contributing Guidelines 2 | 3 | Thank you for your interest in contributing to our project. Whether it's a bug report, new feature, correction, or additional 4 | documentation, we greatly value feedback and contributions from our community. 5 | 6 | Open Job Description is under active development. We're releasing this because we'd like your feedback and participation 7 | as we move forward, together, in defining and implementing a specification that solves the problems in the space. We 8 | know that, as currently specified, Open Job Description is not a cure-all for any and all workflows. 9 | 10 | * [Discussions](https://github.com/OpenJobDescription/openjd-specifications/discussions): 11 | We encourage you to post about what you would like to see in future revisions of the specification, share, and brag 12 | about how you are using Open Job Description, and engage with us and the community. 13 | * [Request for Comment](https://github.com/OpenJobDescription/openjd-specifications/tree/mainline/rfcs/README.md): 14 | This repository exists because we want your comments on the specification. Please consider submitting an RFC if you 15 | have thoughts on how the specification could be improved. 16 | * [Issues](https://github.com/OpenJobDescription/openjd-specifications/issues): 17 | We encourage you to use the GitHub issue tracker to report bugs. 18 | * [Pull Requests](https://github.com/OpenJobDescription/openjd-specifications/pulls): 19 | We welcome pull requests to improve the wiki documentation and add sample templates. Simply make your changes in 20 | our [GitHub Repository](https://github.com/OpenJobDescription/openjd-specifications/tree/mainline/wiki) and post a pull request. 21 | 22 | Please read through this document before submitting any issues or pull requests to ensure we have all the necessary 23 | information to effectively respond to your bug report or contribution. 24 | 25 | ## Reporting Issues 26 | 27 | We welcome you to use the GitHub issue tracker to report any issues that you encounter with 28 | the documentation provided in this repository. When filing an issue, please check existing open, 29 | or recently closed, issues to make sure somebody else hasn't already reported the issue. 30 | 31 | ## Request for Comments 32 | 33 | We have provided an RFC ("Request for Comment") process for proposing changes to the specification. 34 | RFCs can be created by anyone in the community, and is the process that the Open Job Description team 35 | uses to propose changes. If you have an idea, a kernel of an idea, a problem to solve, or want to 36 | provide your point of view on proposals then we encourage you to engage in this process. 37 | 38 | See the [RFC Process] README for information on this process. 39 | 40 | [RFC process]: https://github.com/OpenJobDescription/openjd-specifications/tree/mainline/rfcs 41 | 42 | ## Contributing via Pull Requests 43 | 44 | Contributions via pull requests are much appreciated. Before sending us a pull request, please ensure that: 45 | 46 | 1. You are working against the latest source on the *mainline* branch. 47 | 2. You check existing open, and recently merged, pull requests to make sure someone else hasn't addressed the problem already. 48 | 3. You open an issue to discuss any significant work - we would hate for your time to be wasted. 49 | 50 | To send us a pull request, please: 51 | 52 | 1. Fork the repository. 53 | 2. Modify the source; please focus on the specific change you are contributing. If you also reformat all the code, then 54 | it will be hard for us to focus on your change. 55 | 3. Commit to your fork using clear commit messages. 56 | 4. Send us a pull request, answering any default questions in the pull request interface. 57 | 5. Pay attention to any automated CI failures reported in the pull request, and stay involved in the conversation. 58 | 59 | GitHub provides additional documentation on [forking a repository](https://help.github.com/articles/fork-a-repo/) and 60 | [creating a pull request](https://help.github.com/articles/creating-a-pull-request/). 61 | 62 | ## Finding Areas of Contribution 63 | 64 | Looking at the existing issues is a great way to find something to contribute on. 65 | 66 | ## Code of Conduct 67 | 68 | This project has adopted the [Amazon Open Source Code of Conduct](https://aws.github.io/code-of-conduct). 69 | For more information see the [Code of Conduct FAQ](https://aws.github.io/code-of-conduct-faq) or contact 70 | opensource-codeofconduct@amazon.com with any additional questions or comments. 71 | 72 | ## Security Issue Notifications 73 | 74 | We take all security reports seriously. When we receive such reports, we will 75 | investigate and subsequently address any potential vulnerabilities as quickly 76 | as possible. If you discover a potential security issue in this project, please 77 | notify AWS/Amazon Security via our [vulnerability reporting page](http://aws.amazon.com/security/vulnerability-reporting/) 78 | or directly via email to [AWS Security](aws-security@amazon.com). Please do not 79 | create a public GitHub issue in this project. 80 | 81 | ## Licensing 82 | 83 | See the [LICENSE](LICENSE) file for our project's licensing. We will also ask you to confirm the licensing of your contribution. 84 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | # Open Job Description Specification License 2 | 3 | Copyright ©2023 Amazon.com Inc. or Affiliates (“Amazon”). 4 | 5 | This Agreement sets forth the terms under which Amazon is making the Open Job Description 6 | Specification (“the Specification”) available to you. 7 | 8 | ## Copyrights 9 | 10 | The Specification is licensed under [CC BY-ND 4.0](https://creativecommons.org/licenses/by-nd/4.0/deed.en). 11 | 12 | ## Patents 13 | 14 | Subject to the terms and conditions of this Agreement, Amazon hereby grants to 15 | you a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable 16 | (except as stated in this section) patent license to make, have made, use, offer 17 | to sell, sell, import, and otherwise transfer implementations of the 18 | Specification that implement and are compliant with all relevant portions of the 19 | Specification (“Compliant Implementations”). Notwithstanding the foregoing, no 20 | patent license is granted to any technologies that may be necessary to make or 21 | use any product or portion thereof that complies with the Specification but are 22 | not themselves expressly set forth in the Specification. 23 | 24 | If you institute patent litigation against any entity (including a cross-claim 25 | or counterclaim in a lawsuit) alleging that Compliant Implementations of the 26 | Specification constitute direct or contributory patent infringement, then any 27 | patent licenses granted to You under this Agreement shall terminate as of the 28 | date such litigation is filed. 29 | 30 | ## Sample Code 31 | 32 | Any sample code included in the Specification, unless otherwise specified, is 33 | licensed under the [MIT No Attribution License](https://github.com/aws/mit-0). 34 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Open Job Description Specifications 2 | 3 | This repository provides the specification for Open Job Description, a flexible 4 | open specification for portable batch processing jobs. This repository serves 5 | as a point of reference and to drive updates from the community via 6 | a Request For Comment (RFC) process. 7 | 8 | Jump to: 9 | 10 | * [Wiki Home](https://github.com/OpenJobDescription/openjd-specifications/wiki) 11 | * [Sample Templates](samples/README.md) 12 | * [RFC Readme](rfcs/README.md) 13 | 14 | ## Getting Started 15 | 16 | The fastest way to understand the bones of Open Job Description is to understand both 17 | [How Jobs Are Constructed](https://github.com/OpenJobDescription/openjd-specifications/wiki/How-Jobs-Are-Constructed) 18 | and [How Jobs Are Run](https://github.com/OpenJobDescription/openjd-specifications/wiki/How-Jobs-Are-Run). 19 | You may also find it beneficial to look through the provided 20 | [sample templates](https://github.com/OpenJobDescription/openjd-specifications/tree/mainline/samples) in this GitHub 21 | repository. 22 | 23 | ## What is Open Job Description? 24 | 25 | Open Job Description is a flexible open specification for defining batch processing 26 | jobs that are portable between different scheduling system deployments. The specification 27 | was developed in the context of render farms and visual compute use cases, but applies 28 | more broadly. A set of libraries and CLI tooling complement the specification, and 29 | can be used to integrate Open Job Description support into your scheduling system 30 | of choice. 31 | 32 | By creating and using tools that produce and/or consume portable jobs in 33 | Open Job Description form, you can develop a flexible production pipeline that 34 | directs these jobs to different scheduling system, or stores the jobs 35 | outside of any scheduling system for later processing. 36 | 37 | For deeper insight into our thought process and goals, we recommend 38 | [this Academy Software Foundation talk](https://www.youtube.com/watch?v=2umfqGX844Y) 39 | by Pauline Koh, Senior Product Manager - Technical at Amazon Web Services, titled 40 | *Portable and Open Render Job Specifications*. 41 | 42 | ## Open Job Description Projects 43 | 44 | *If you have an Open Job Description project that you would like to advertise here then please 45 | submit a pull request.* 46 | 47 | ### Tools 48 | 49 | * [openjd-cli](https://github.com/OpenJobDescription/openjd-cli) - A command-line 50 | interface for running and working with Open Job Description templates. 51 | 52 | ### Libraries 53 | 54 | * [openjd-model](https://github.com/OpenJobDescription/openjd-model-for-python) - A Python 55 | implementation of the data model for Open Job Description's template schemas. 56 | * [openjd-sessions](https://github.com/OpenJobDescription/openjd-sessions-for-python) - A Python 57 | library that can be used to build a runtime that is able to run Jobs in a Session as defined 58 | by Open Job Description. 59 | * [openjd-adaptor-runtime](https://github.com/OpenJobDescription/openjd-adaptor-runtime-for-python) - A Python library 60 | for creating a command-line Adaptor to assist with integrating an existing application, such as a rendering 61 | application, into batch computing systems that run Jobs in a way that is compatible with Open Job Description Sessions. 62 | 63 | ## Contributing 64 | 65 | Open Job Description is under active development. We want your feedback and participation 66 | as we move forward, together, in defining and implementing a specification that solves 67 | the problems in the space. Open Job Description needs to grow to be able to express all the 68 | jobs and workflows we'd love to support. 69 | 70 | Please see [CONTRIBUTING.md](CONTRIBUTING.md) for a more detailed description of how to 71 | contribute, and the [RFC Readme](rfcs/README.md) for how to contribute an RFC. 72 | 73 | We look forward to your input. 74 | 75 | * [Discussions](https://github.com/OpenJobDescription/openjd-specifications/discussions): 76 | We encourage you to post about what you would like to see in future revisions 77 | of the specification, share, and brag about how you are using Open Job 78 | Description, and engage with us and the community. 79 | * [Request for Comment](rfcs/README.md): 80 | This repository exists because we want your comments on the specification. 81 | Please consider submitting an RFC if you have thoughts on how the 82 | specification could be improved. 83 | * [Issues](https://github.com/OpenJobDescription/openjd-specifications/issues): 84 | We encourage you to use the GitHub issue tracker to report bugs. 85 | * [Pull Requests](https://github.com/OpenJobDescription/openjd-specifications/pulls): 86 | We welcome pull requests to improve this wiki documentation. Simply make your 87 | changes in our [GitHub Repository](https://github.com/OpenJobDescription/openjd-specifications/tree/mainline/wiki) 88 | and post a pull request. 89 | 90 | ## Getting Help 91 | 92 | * [Discussions](https://github.com/OpenJobDescription/openjd-specifications/discussions): 93 | Seek help via our GitHub Discussions forum. 94 | 95 | ## Security 96 | 97 | See [CONTRIBUTING](CONTRIBUTING.md#security-issue-notifications) for more 98 | information. 99 | 100 | ## License 101 | 102 | See the [LICENSE](LICENSE) file for our project's licensing. We will also ask 103 | you to confirm the licensing of your contribution. 104 | 105 | -------------------------------------------------------------------------------- /rfcs/.images/0001-task-chunking-chunk-example-runtime.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 16 | 35 | 37 | 50 | 55 | 56 | 69 | 75 | 76 | 89 | 95 | 96 | 97 | 102 | 112 | 119 | 126 | 133 | 140 | 147 | 154 | 161 | 166 | App/Scene Load 177 | Task 1 188 | Task 2 199 | Task 3 211 | Task 4 222 | Task 5 233 | Task 6 245 | 249 | 253 | 257 | 261 | 265 | Task 277 | Parallelism 283 | 287 | Chunk Runtime 298 | time 312 | 313 | 314 | -------------------------------------------------------------------------------- /rfcs/.images/0001-task-chunking-task-stickiness.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 16 | 35 | 37 | 50 | 55 | 56 | 69 | 75 | 76 | 77 | 82 | 92 | 97 | 104 | 111 | 118 | 125 | 132 | 139 | App/Scene Load 150 | Task 1 161 | Task 3 172 | Task 2 183 | Task 11 194 | Task 10 206 | 210 | 215 | EnvironmentonEnter 231 | time 245 | 252 | 259 | Task 4 270 | Task 5 281 | 285 | 290 | Step onRun 301 | 308 | 315 | 322 | Task 8 333 | Task 7 344 | Task 6 356 | 363 | Task 9 375 | 376 | 377 | -------------------------------------------------------------------------------- /rfcs/0000-template.md: -------------------------------------------------------------------------------- 1 | 2 | * Feature Name: (fill in with a unique one or two word identifier. e.g. my_feature) 3 | * RFC Tracking Issue: (fill in with the URL for the tracking issue in this repository) 4 | * Start Date: (fill in with today's date: YYYY-MM-DD) 5 | * Specification Version: 2023-09 extension (fill in with a chosen extension name as per RFC 0002) 6 | * Accepted On: (fill in with the date that the proposal was accepted: YYYY-MM-DD) 7 | 8 | ## Summary 9 | 10 | A one paragraph summary of the proposed feature. 11 | 12 | ## Basic Examples 13 | 14 | If the proposal involves a new or changed schema or syntax, then include some basic examples 15 | that demonstrate how an end-user would use it. 16 | 17 | ## Motivation 18 | 19 | Why are we doing this? What use cases does it support? Focus on what sorts of workflows your 20 | feature would enable for users. How common are those use cases: Are they specific to one 21 | company's way of working, or more generally adopted? 22 | 23 | If this is inspired by the capabilities of existing systems, then think about *why* the feature 24 | is available in terms of what users accomplish with it. Our vision for Open Job Description is a 25 | general and expressive specification rather than one that is a simply superset of features/syntax 26 | available in existing distributed batch computing systems and pipeline tools. 27 | 28 | ## Specification 29 | 30 | What are the specific changes that are being proposed? 31 | 32 | Please write this in a form similar to the official formal specification documents as though 33 | it could just be dropped in to the existing documentation as-is. 34 | 35 | We suggest keeping our [design tenets] in mind while writing this part. 36 | 37 | [design tenets]: https://github.com/OpenJobDescription/openjd-specifications/wiki/Design-Tenets 38 | 39 | ## Design Choice Rationale 40 | 41 | ### Title of Design Choice 42 | 43 | For each choice you made between specific options, such as including or postponing some functionality, 44 | briefly provide the rationale you used for the choice. 45 | 46 | ## Prior Art 47 | 48 | Discuss prior art, both the good and the bad, in relation to the proposal. Does a feature 49 | like this exist in other systems? How is it expressed in those system(s)? 50 | 51 | ## Rejected Ideas 52 | 53 | Why certain ideas that were brought while discussing this RFC were not ultimately pursued. 54 | 55 | ## Copyright 56 | 57 | This document is placed in the public domain or under the CC0-1.0-Universal license, whichever is more permissive. -------------------------------------------------------------------------------- /rfcs/0002-model-extensions.md: -------------------------------------------------------------------------------- 1 | 2 | * Feature Name: Model Extensions 3 | * RFC Tracking Issue: https://github.com/OpenJobDescription/openjd-specifications/issues/66 4 | * Start Date: 2024-12-09 5 | * Accepted On: 2025-01-17 6 | 7 | ## Summary 8 | 9 | This RFC proposes a method of enabling additional approved functionality that is not included in 10 | a specific version of the model release through a new top level job template key `Extensions`. 11 | Each extension is similar to the `from __future__` import system in Python [python.org](https://docs.python.org/3/library/__future__.html) . 12 | 13 | Because these extensions are optional, each scheduler can support any or all of these features. 14 | This allows for schedulers to add support and prepare for future openjd-specification releases gradually. 15 | 16 | ## Basic Examples 17 | 18 | ### Example Job Template 19 | 20 | The following job template is built on the 2023-09 version of the specification but requests support for 21 | Task Chunking (from [RFC-0001](https://github.com/OpenJobDescription/openjd-specifications/pull/54)). 22 | 23 | The `extensions` key is a list of extensions that the job template author has determined are required. 24 | 25 | ```yaml 26 | specificationVersion: 'jobtemplate-2023-09' 27 | # This key here is an instruction to the scheduler that we require `TASK_CHUNKING` 28 | extensions: 29 | - TASK_CHUNKING 30 | name: Task Chunking Job 31 | parameterDefinitions: 32 | - name: SceneFile 33 | type: PATH 34 | objectType: FILE 35 | dataFlow: IN 36 | - name: Frames 37 | type: STRING 38 | default: 1,100 39 | - name: ChunkSize 40 | type: INT 41 | default: 10 42 | steps: 43 | - name: Render 44 | parameterSpace: 45 | taskParameterDefinitions: 46 | - name: FrameRange 47 | type: CHUNK[INT] 48 | range: "{{Param.Frames}}" 49 | chunks: 50 | defaultTaskCount: "{{Param.ChunkSize}}" 51 | targetRuntimeSeconds: 900 52 | rangeConstraint: CONTIGUOUS 53 | script: 54 | actions: 55 | onRun: 56 | command: bash 57 | args: ["{{Task.File.RenderChunk}}"] 58 | embeddedFiles: 59 | - name: RenderChunk 60 | filename: render.sh 61 | type: TEXT 62 | data: | 63 | START_FRAME="$(echo '{{Task.Param.FrameRange}}' | cut -d- -f1)" 64 | END_FRAME="$(echo '{{Task.Param.FrameRange}}' | cut -d- -f2)" 65 | render -scenefile '{{Param.SceneFile}}' \ 66 | -start "$START_FRAME" \ 67 | -end "$END_FRAME" 68 | ``` 69 | 70 | 71 | ## Motivation 72 | During a discussion on [RFC-0001](https://github.com/OpenJobDescription/openjd-specifications/pull/54), it was determined that a 73 | way was required to publish any new functionality that an RFC may provide. 74 | 75 | 76 | Initial discussions centered around the idea of incrementing the job template specification version each time an RFC was approved, 77 | however that rapid release schedule posed a few issues. 78 | When an OpenJD Specification release is approved, there is a level of continued support that is expected. If a OpenJD Specification is 79 | released every time an RFC is approved, there may be dozens of individual versions that all need to be fully supported by schedulers. 80 | If releases of OpenJD specifications are planned and scheduled, extensions can be treated as requesting an optional feature. 81 | That should allow less churn and code management for the OpenJD implementations. 82 | Another issue came up when the code implementation was considered. Currently there exists a single version of the OpenJD for Python 83 | implementation. As new OpenJD Specifications are released this implementation, both the model and the sessions libraries, will have 84 | to either branch supported releases or manage multiple versions of the codebase in a single repository. 85 | Anything that the OpenJD Specification team can do to lessen their management burden will be appreciated. 86 | 87 | The idea of treating these RFC functionality as [Python \_\_future__](https://docs.python.org/3/library/__future__.html) 88 | imports was determined to be the best way forward so that this newly approved functionality can be utilized on schedulers as 89 | they add support for it without requiring a full specification release to be approved and implemented. 90 | 91 | ### Supported Extensions 92 | Valid values for the `extensions` key must still be approved and implemented through the standard RFC process in the 93 | openjd-specifications repository. 94 | These approved RFCs can define breaking functionality as an extension and have schedulers add support for them before a 95 | new formal specification release. 96 | 97 | These extensions should be treated as requests to the scheduler and job template authors should be aware that a 98 | specific scheduler may reject a job template submission if it does not support all of the required extensions. 99 | 100 | Each individual scheduler may want to enable extensions either as early access preview features or behind feature flags. 101 | The scheduler may also want to roll out support for individual extensions after they have been fully testing and support has been verified. 102 | 103 | ### Merging Extensions 104 | This proposal also defines the process for merging Extensions into the next version of the model release. 105 | 106 | A new subsection of the RFC template is defined under `Specification` called `Extension Name`. 107 | If a specific RFC adds or breaks functionality in the base model, it should define an Extension Name that can be used 108 | to reference the functionality in openjd implementations. 109 | This name should match the regex: `[A-Z0-9_]{3,128}`. 110 | 111 | #### Updating Extensions 112 | There may be scenarios where an extension that is destined for release in a future specification release needs 113 | additional modifications before merging in to the release. 114 | Reasons for this may include: 115 | - After widespread adoption the feature doesn't fulfill its design goals 116 | - A separate RFC implements the functionality in a more succinct way 117 | 118 | 119 | You may name the extension with a numerical suffix, for example `TASK_CHUNKING_2` to indicate it supercedes an already approved extension. 120 | Schedulers can choose to continue support for the original extension, or only support the new implementation. 121 | 122 | These "superceding extensions" are expected to get merged into a future specification release instead of the initial one. 123 | 124 | If an extension is updating functionality that already exists in a version of the specification, the numerical suffixing is not required.. 125 | > Extension names are only required to be unique within a specification version, however it is best practice to keep them globally unique to reduce confusion. 126 | 127 | 128 | 129 | ### Anatomy Of An Extension 130 | An extension consists of the following information: 131 | - A valid `` 132 | - An array of Literal `specificationVersion` strings that the extension states that it works with, ie [`jobtemplate-2023-09`, `jobtemplate-2025-03`] 133 | 134 | 135 | ### Releasing A Specification Version 136 | When a new version of the specification is released, all accepted extension names from the previous release are labeled as 137 | deprecated and may still be used but are treated as a NoOp. 138 | Schedulers are encouraged to notify their users that they are using a deprecated extension which is enabled by default. 139 | 140 | Any extensions that were not accepted in the release are considered obsolete and schedulers should return an error if a 141 | job template is using an obsoleted extension 142 | 143 | Any deprecated extensions from the previous specification release are now also considered obsolete and should be 144 | treated the same as non-accepted extensions. 145 | 146 | A released specification will have the following: 147 | - A list of extensions that were merged into the release (deprecated extensions). 148 | - A list of extensions that were marked as deprecated in the previous release (which are now obsolete and return an error if used). 149 | - A list of currently known extensions inherited from the previous release. This list will grow as new RFCs are approved. 150 | 151 | 152 | 153 | ## Specification 154 | 155 | > Changes to [the template schema](https://github.com/OpenJobDescription/openjd-specifications/wiki/2023-09-Template-Schemas). 156 | 157 | > A modification to [`Job Template - Root Elements`](../wiki/2023-09-Template-Schemas#11-Job-Template) 158 | ```diff 159 | specificationVersion: "jobtemplate-2023-09" 160 | $schema: # @optional 161 | + extensions: [ , ... ] # @optional 162 | name: # @fmtstring 163 | description: # @optional 164 | parameterDefinitions: [ , ... ] # @optional 165 | jobEnvironments: [ , ... ] # @optional 166 | steps: [, ...] 167 | ``` 168 | 169 | > A new section `` after 170 | > [section 1.1.1. ``](https://github.com/OpenJobDescription/openjd-specifications/wiki/2023-09-Template-Schemas#111-jobname). 171 | 172 | ```diff 173 | + #### 1.1.2. `` 174 | + 175 | + A literal string matching the following character regex: [A-Z_0-9]{3,128}. 176 | ``` 177 | 178 | ## Design Choice Rationale 179 | 180 | ### Gradual Feature Support 181 | 182 | By enabling functionality as feature flag style options, schedulers can adopt functionality that is aim for future 183 | specification releases and increase adoption and testing of these features before they get ratified in specification 184 | versions that need to have continued support. 185 | 186 | 187 | ### Reduced Specification Release Overhead 188 | 189 | By introducing a way to get functionality deployed and tested before ratifying it in a specification release, the hope is that there 190 | will be less need for immediate specification version releases. 191 | When a new version is released, the newly merged in functionality is fully baked and has been tested by a wider audience. 192 | 193 | ## Prior Art 194 | 195 | This RFC takes inspiration from the `__future__` import system in Python [python.org](https://docs.python.org/3/library/__future__.html) and the [`AWS::LanguageExtensions`](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/transform-aws-languageextensions.html) feature in Cloudformation. 196 | 197 | The [OpenGL_Extension](https://www.khronos.org/opengl/wiki/OpenGL_Extension) system is also a good piece of prior art to look at for inspiration. 198 | They implement define vendor extensions and a review board to help merge extensions into OpenGL core 199 | 200 | ## Rejected Ideas 201 | 202 | ### Release a new specification release for each RFC 203 | 204 | Initial thoughts around releasing a new specification version for each RFC approved quickly became overwhelming. 205 | This became obvious when determining the strategies we would use to manage codebases, supported versions etc. 206 | 207 | Some questions that came up during industry discussions were: 208 | - When submitting to a scheduler, would a user expect every specification release to be supported? Only the latest number of versions? 209 | Or is that up to the scheduler? 210 | - For code based implementations of OpenJD, do they need to support multiple major version releases corresponding to each specification 211 | release and would that conflict with the semVer versioning requirements by these implementations? 212 | - What would happen if a user submitted a job template with an older specification version, is it expected that the scheduler will try 213 | running it in a newer model or would a user expect it to fail on submission? 214 | 215 | Many of these questions become easier if OpenJD Specification release schedules are slowed down. 216 | In those cases the OpenJD specification team could recommend support for "the last X releases" which may end up supporting several years 217 | of specification version as opposed to a potentially shorter window if release schedules become ad-hoc. 218 | 219 | 220 | ## Further Discussion 221 | 222 | Further discussion is needed on OpenJD Specification release schedules, processes for merging RFC extensions into newer releases of the specification, and actual implementation of RFC extensions. 223 | These discussions can be started in the pull-request comment section and the RFC will be updated accordingly. 224 | 225 | ## Copyright 226 | 227 | This document is placed in the public domain or under the CC0-1.0-Universal license, whichever is more permissive. 228 | -------------------------------------------------------------------------------- /rfcs/0003-redacted-env-vars.md: -------------------------------------------------------------------------------- 1 | - Feature Name: Redacted Environment Variables 2 | - RFC Tracking Issue: https://github.com/OpenJobDescription/openjd-specifications/issues/85 3 | - Start Date: 2025-04-09 4 | - Specification Version: 2023-09 extension REDACTED_ENV_VARS 5 | - Accepted On: 2025-05-15 6 | 7 | ## Summary 8 | 9 | Setting environment variables in an openjd Environment such that they are persisted in subsequent actions run while the Environment is still 10 | active currently requires [echoing them to stdout with the openjd_env: key=value format](https://github.com/OpenJobDescription/openjd-specifications/blob/711dab30382579d060863581b56f5266c16430da/wiki/2023-09-Template-Schemas.md#4-environment) 11 | which exposes potentially sensitive information such as credentials to logs. This RFC proposes a new token, openjd_redacted_env, which sets 12 | environment variables exactly like openjd_env but defaults to redacting the potentially sensitive information from logs for the initial and 13 | any future occurrences. 14 | 15 | The feature is only used to redact the environment variable in log output. Environment variables for a process can be observed by other 16 | processes on the same machine. Secure handling of secrets is still the responsibility of those authoring job templates. 17 | 18 | ## Basic Examples 19 | 20 | This example shows a very basic (somewhat contrived) example where a job environment is responsible for initially retrieving and setting 21 | credentials in an environment variable and then a step is run which consumes the credentials. 22 | 23 | ```yaml 24 | specificationVersion: "jobtemplate-2023-09" 25 | extensions: 26 | - REDACTED_ENV_VARS 27 | name: Env Enter Setting Vars 28 | description: | 29 | Setting environment variables in a way which won't expose secret values to logs 30 | 31 | jobEnvironments: 32 | - name: JobEnvVars 33 | variables: 34 | PYTHONUNBUFFERED: "True" 35 | script: 36 | actions: 37 | onEnter: 38 | command: python 39 | args: ["{{Env.File.Enter}}"] 40 | onExit: 41 | command: python 42 | args: ["{{Env.File.Exit}}"] 43 | embeddedFiles: 44 | - name: Enter 45 | type: TEXT 46 | data: | 47 | print("Entering environment and setting var..") 48 | print(f"openjd_redacted_env: SECRETVAR=SECRETVAL") 49 | - name: Exit 50 | type: TEXT 51 | data: | 52 | import os 53 | # SECRETVAR is SECRETVAL here 54 | print(f"SECRETVAR is {os.environ.get('SECRETVAR')}") 55 | steps: 56 | - name: ProcessWithPython 57 | script: 58 | actions: 59 | onRun: 60 | command: python 61 | args: ["{{Task.File.Run}}"] 62 | embeddedFiles: 63 | - name: Run 64 | type: TEXT 65 | data: | 66 | import os 67 | 68 | # SECRETVAR is SECRETVAL here 69 | print(f"SECRETVAR is {os.environ.get('SECRETVAR')}") 70 | # Run Application Consuming SECRETVAR.. 71 | ``` 72 | 73 | Running this template with the currently proposed changes produces the following output. 74 | 75 | ``` 76 | 0:00:00.000047 Open Job Description CLI: Session start 2025-04-11T21:50:33.781398+00:00 77 | 0:00:00.000109 Open Job Description CLI: Running job 'Env Enter Setting Vars' 78 | 0:00:00.000180 79 | 0:00:00.000218 ============================================== 80 | 0:00:00.000253 --------- Entering Environment: JobEnvVars 81 | 0:00:00.000285 ============================================== 82 | 0:00:00.000336 Setting: PYTHONUNBUFFERED=True 83 | 0:00:00.000647 ---------------------------------------------- 84 | 0:00:00.000722 Phase: Setup 85 | 0:00:00.000761 ---------------------------------------------- 86 | 0:00:00.000803 Writing embedded files for Environment to disk. 87 | 0:00:00.001017 Mapping: Env.File.Enter -> /tmp/OpenJD/CLI-sessionj6z1b_nc/embedded_files1d4q40xw/tmpfdql519m 88 | 0:00:00.001072 Mapping: Env.File.Exit -> /tmp/OpenJD/CLI-sessionj6z1b_nc/embedded_files1d4q40xw/tmpuhsmb_sg 89 | 0:00:00.001198 Wrote: Enter -> /tmp/OpenJD/CLI-sessionj6z1b_nc/embedded_files1d4q40xw/tmpfdql519m 90 | 0:00:00.001327 Wrote: Exit -> /tmp/OpenJD/CLI-sessionj6z1b_nc/embedded_files1d4q40xw/tmpuhsmb_sg 91 | 0:00:00.001613 ---------------------------------------------- 92 | 0:00:00.001663 Phase: Running action 93 | 0:00:00.001697 ---------------------------------------------- 94 | 0:00:00.001974 Running command /tmp/OpenJD/CLI-sessionj6z1b_nc/tmp8v1johcc.sh 95 | 0:00:00.002736 Command started as pid: 10327 96 | 0:00:00.002871 Output: 97 | 0:00:00.015208 Entering environment and setting var.. 98 | 0:00:00.015296 openjd_redacted_env: SECRETVAR=******** 99 | 0:00:00.017612 Process pid 10327 exited with code: 0 (unsigned) / 0x0 (hex) 100 | 0:00:00.017780 Open Job Description CLI: Running step 'ProcessWithPython' 101 | 0:00:00.017872 102 | 0:00:00.017914 ============================================== 103 | 0:00:00.017951 --------- Running Task 104 | 0:00:00.017983 ============================================== 105 | 0:00:00.018336 ---------------------------------------------- 106 | 0:00:00.018390 Phase: Setup 107 | 0:00:00.018424 ---------------------------------------------- 108 | 0:00:00.018467 Writing embedded files for Task to disk. 109 | 0:00:00.018607 Mapping: Task.File.Run -> /tmp/OpenJD/CLI-sessionj6z1b_nc/embedded_files1d4q40xw/tmpzne3spj4 110 | 0:00:00.018740 Wrote: Run -> /tmp/OpenJD/CLI-sessionj6z1b_nc/embedded_files1d4q40xw/tmpzne3spj4 111 | 0:00:00.019003 ---------------------------------------------- 112 | 0:00:00.019052 Phase: Running action 113 | 0:00:00.019085 ---------------------------------------------- 114 | 0:00:00.019278 Running command /tmp/OpenJD/CLI-sessionj6z1b_nc/tmpb5oq6jb_.sh 115 | 0:00:00.019996 Command started as pid: 10330 116 | 0:00:00.020098 Output: 117 | 0:00:00.031973 SECRETVAR is ******** 118 | 0:00:00.035305 Process pid 10330 exited with code: 0 (unsigned) / 0x0 (hex) 119 | 0:00:00.035516 120 | 0:00:00.035570 ============================================== 121 | 0:00:00.035605 --------- Exiting Environment: JobEnvVars 122 | 0:00:00.035636 ============================================== 123 | 0:00:00.035933 ---------------------------------------------- 124 | 0:00:00.036004 Phase: Setup 125 | 0:00:00.036045 ---------------------------------------------- 126 | 0:00:00.036084 Writing embedded files for Environment to disk. 127 | 0:00:00.036274 Mapping: Env.File.Enter -> /tmp/OpenJD/CLI-sessionj6z1b_nc/embedded_files1d4q40xw/tmpxu9i4mh0 128 | 0:00:00.036328 Mapping: Env.File.Exit -> /tmp/OpenJD/CLI-sessionj6z1b_nc/embedded_files1d4q40xw/tmplpkitulg 129 | 0:00:00.036449 Wrote: Enter -> /tmp/OpenJD/CLI-sessionj6z1b_nc/embedded_files1d4q40xw/tmpxu9i4mh0 130 | 0:00:00.036570 Wrote: Exit -> /tmp/OpenJD/CLI-sessionj6z1b_nc/embedded_files1d4q40xw/tmplpkitulg 131 | 0:00:00.036944 ---------------------------------------------- 132 | 0:00:00.036996 Phase: Running action 133 | 0:00:00.037030 ---------------------------------------------- 134 | 0:00:00.037211 Running command /tmp/OpenJD/CLI-sessionj6z1b_nc/tmpeabs_4ig.sh 135 | 0:00:00.037885 Command started as pid: 10334 136 | 0:00:00.037987 Output: 137 | 0:00:00.049866 SECRETVAR is ******** 138 | 0:00:00.053168 Process pid 10334 exited with code: 0 (unsigned) / 0x0 (hex) 139 | 0:00:00.053353 140 | 0:00:00.053418 Open Job Description CLI: All actions completed successfully! 141 | 0:00:00.053455 Open Job Description CLI: Local Session ended! Now cleaning up Session resources. 142 | 143 | --- Results of local session --- 144 | 145 | Session ended successfully 146 | 147 | Job: Env Enter Setting Vars 148 | Step: ProcessWithPython 149 | Duration: 0.05513031499867793 seconds 150 | Chunks run: 1 151 | ``` 152 | 153 | ## Motivation 154 | 155 | Customers currently have a method of setting environments in a way that persists in actions run while the environment is still active, however 156 | it requires exposing those environment variable names and values to session logs. These variables will occasionally contain sensitive 157 | information which customers may not wish to be exposed to their logs and visible with anyone who has access to those logs by default. 158 | Workarounds such as applying data protection policies exist, but customers have [requested simpler methods](https://github.com/OpenJobDescription/openjd-specifications/issues/62) 159 | of optionally hiding these values. 160 | 161 | ## Specification 162 | 163 | ```diff 164 | diff --git a/wiki/2023-09-Template-Schemas.md b/wiki/2023-09-Template-Schemas.md 165 | --- a/wiki/2023-09-Template-Schemas.md 166 | +++ b/wiki/2023-09-Template-Schemas.md 167 | @@ -989,7 +989,11 @@ Implementations of this specfication must watch STDOUT when running the `onEnter 168 | 1. The regular expression `^openjd_env: (.*)$`. The captured value must be of the form `=` where 169 | `varname` is the name of an environment variable, and `value` is the value to assign to it. The defined value of the 170 | given variable will be set for all actions that are run with the environment active. 171 | -2. The regular expression `^openjd_unset_env: (.*)$`. The captured value must be of the form `` where 172 | +2. The regular expression `^openjd_redacted_env: (.*)$`. The captured value must be interpreted identically to 173 | + openjd_env, and `` shall be redacted with a fixed length string for this and any future occurrences from the 174 | + emitted STDOUT message. Requires the REDACTED_ENV_VARS extension, however supporting applications must honor the 175 | + redaction even when the extension is not specified. 176 | +3. The regular expression `^openjd_unset_env: (.*)$`. The captured value must be of the form `` where 177 | `varname` is the name of an environment variable. The given environment variable will be unset as long as this 178 | environment is active. If an environment both sets and unsets a particular environment variable, then the unset takes 179 | precedence. 180 | 181 | diff --git a/wiki/How-Jobs-Are-Run.md b/wiki/How-Jobs-Are-Run.md 182 | --- a/wiki/How-Jobs-Are-Run.md 183 | +++ b/wiki/How-Jobs-Are-Run.md 184 | @@ -84,6 +84,10 @@ messages to convey information about the **Action** to the render management sys 185 | * `openjd_env: =` where `` is the string name of an environment variable, and `` is a string. This 186 | can only be emitted by the **Action** for entering an **Environment**. It defines the value of an environment variable for 187 | all subsequent **Action**s in the **Session** until the defining **Environment** is exited. 188 | +* `openjd_redacted_env: =` has identical behavior to openjd_env except `` shall be redacted by the 189 | + application running the action in the emitted stdout line and in any future lines. Requires the REDACTED_ENV_VARS 190 | + extension, however supporting applications must honor the redaction even when the extension is not specified. 191 | * `openjd_unset_env: ` where `` is the string name of an environment variable. This can only be emitted by the 192 | **Action** for entering an **Environment**. This unsets the given environment variable for all subsequent **Action**s 193 | in the **Session** until the **Environment** that emitted it is exited. 194 | ``` 195 | 196 | ## Design Choice Rationale 197 | 198 | ### openjd_env substitution 199 | 200 | There are a number of different ways we could provide customers to go about redacting sensitive strings. openjd_redacted_env allows customers 201 | to write templates nearly identically to how they do today. Solutions such as lists of keys for value redaction which needed to be maintained 202 | elsewhere would likely be more error prone due to typos or simply forgetting to add the key to the list. Asking customers to actually include 203 | the values themselves elsewhere would be asking them to further expose the very values they're trying to protect. We could also give 204 | customers toggle commands to enable/disable redaction, though that would require more effort on the customer's part and might force them to 205 | redact more than they intend. 206 | 207 | ### Behavior when REDACTED_ENV_VARS supported but not specified 208 | 209 | In order to maintain as high a security bar as possible, this document proposes that the redaction behavior of openjd_redacted_env be honored 210 | in supporting applications even when the extension is not specified, though the environment variable would not be set. This is a deviation 211 | from standard extension behavior where without the extension none of the custom behavior would be followed. 212 | 213 | ## Prior Art 214 | 215 | This feature is intended to provide nearly identical behavior to `openjd_env` except with protection of redacting `` to give 216 | customers a drop in replacement for cases handling sensitive environment variables. 217 | 218 | The goal of this proposal is to protect secrets in a manner similar to [GitHub Secrets](https://docs.github.com/en/actions/security-for-github-actions/security-guides/about-secrets#using-your-secrets-in-workflows) 219 | where the system will continue to redact them in the session logs once declared as redacted through openjd_redacted_env. 220 | 221 | ## Rejected Ideas 222 | 223 | ## Copyright 224 | 225 | This document is placed in the public domain or under the CC0-1.0-Universal license, whichever is more permissive. 226 | -------------------------------------------------------------------------------- /rfcs/README.md: -------------------------------------------------------------------------------- 1 | # Open Job Description RFCs 2 | 3 | This directory is the place to propose upcoming changes to the Open Job Description standard. 4 | The RFC ("Request For Comment") process is how Open Job Description achieves consensus on proposed 5 | changes to the formal specification. The process is intended to provide a consistent and controlled 6 | path for changes to the specification. 7 | 8 | RFCs can be created by anyone in the community, and is the process that the Open Job Description team 9 | uses to propose changes. If you have an idea, a kernel of an idea, a problem to solve, or want to 10 | provide your point of view on proposals then we encourage you to engage in this process. 11 | 12 | **Jump to**: [RFC Process](#rfc-process) | [RFC Process Stages](#rfc-process-stages) 13 | 14 | ## RFC Process 15 | 16 | This section describes each state of the RFC process. 17 | 18 | ### 1. Look for similar existing proposals or discussions 19 | 20 | Before you start along the path of proposing your idea as an RFC, please take some time 21 | to search through our [issues tracker] and [discussion forum] for similar or compatible 22 | proposals. It is possible that your idea has previously been proposed, or it might fit 23 | in nicely as an enhancement to an RFC that is in the works. 24 | 25 | [issues tracker]: https://github.com/OpenJobDescription/openjd-specifications/issues 26 | [discussion forum]: https://github.com/OpenJobDescription/openjd-specifications/discussions/categories/ideas 27 | 28 | ### 2. Post in GitHub Discussions 29 | 30 | As an informal starting point, we suggest that you try our discussion forums to have 31 | some preliminary discussions on your proposal. These discussions can help find like-minded members of 32 | the community to collaborate with, and test the idea with the community before commiting 33 | to filling out an RFC template with the details of your proposal. 34 | 35 | Simply create a new discussion thread in the [Ideas category] of the discussion forum to 36 | get started. 37 | 38 | [Ideas category]: https://github.com/OpenJobDescription/openjd-specifications/discussions/categories/ideas 39 | 40 | ### 3. Tracking Issue 41 | 42 | Each RFC has a GitHub issue which tracks it from start to finish. The issue is 43 | the hub for conversations, community signal (+1s) and the issue number is used 44 | as the unique identifier of this RFC. 45 | 46 | Before creating a tracking issue, please search for similar or related ideas 47 | in the issue list and discussion forum of this repo. If there is a relevant 48 | RFC, collaborate on that existing RFC, based on its current stage. 49 | 50 | Our [tracking issue template] includes a checklist of all the steps an RFC goes 51 | through and it's the driver's responsibility to update the checklist and assign 52 | the correct label to on the RFC throughout the process. 53 | 54 | [tracking issue template]: https://github.com/OpenJobDescription/openjd-specifications/blob/master/.github/ISSUE_TEMPLATE/rfc.md 55 | 56 | ### 4. RFC Document 57 | 58 | The next step is to write the first revision of the RFC document itself. 59 | 60 | 1. We suggest reading our [design tenets] before you start. 61 | 2. [Fork this repository] 62 | 3. Then, in your fork: 63 | 1. Create a file under `rfcs/NNNN-name.md` based off of the [0000-template.md] file. 64 | `NNNN` in the filename is your tracking issue number, and `name` should be a one 65 | or two word summary of the proposal. 66 | 2. Please follow the template; it includes useful guidance and tips on how to write a good RFC. 67 | 68 | [design tenets]: https://github.com/OpenJobDescription/openjd-specifications/wiki/Design-Tenets 69 | [Fork this repository]: https://help.github.com/articles/fork-a-repo/ 70 | [0000-template.md]: https://github.com/OpenJobDescription/openjd-specifications/blob/mainline/rfcs/0000-template.md 71 | 72 | ### 5. Feedback 73 | 74 | Once you have an initial version of your RFC document (it is completely fine to 75 | submit an unfinished RFC to get initial feedback), [submit it as a pull request] 76 | against this repository to start collecting feedback. 77 | 78 | This is the likely going to be the longest part of your RFC process, and where 79 | most of the feedback is collected. 80 | 81 | A few tips: 82 | 83 | - If you decide to resolve a comment without addressing it, take the time to 84 | explain. 85 | - Try to understand where people are coming from. If a comment seems off, ask 86 | folks to elaborate and describe their use case or provide concrete examples. 87 | - Work with the team member assigned to your tracking issue: if there are disagreements, 88 | @mention them in a comment and ask them to provide their opinion. 89 | - Be patient: it sometimes takes time for an RFC to converge. Some ideas need to "bake" 90 | and solutions oftentimes emerge via a healthy debate. 91 | - Not everything must be resolved in the first revision. It is okay to leave 92 | some things to resolve later. Make sure to capture them clearly and have an 93 | agreement about that. An RFC document may be updated/modified as new information 94 | comes to light at any time before it it published in a revision of Open Job Description. 95 | 96 | [submit it as a pull request]: https://help.github.com/articles/creating-a-pull-request/ 97 | 98 | ### 6. Final Comments Period 99 | 100 | At some point, you've reached consensus about most issues that were brought up 101 | during the review period, and you are ready to merge. To allow "last call" on 102 | feedback, the author can announce that the RFC enters "final comments period", 103 | which means that within about a week or two, if no major concerns are raised, the 104 | RFC will be approved and merged. 105 | 106 | Add a comment on the RFC pull request, tracking issue, and discussion forum thread 107 | if relevant that the RFC has entered this stage so that all relevant stakeholders 108 | will be notified. 109 | 110 | Once the final comments period is over, seek an approval of one of the core team 111 | members, and you can merge your PR to the main branch. This will move your RFC 112 | to the "Accepted-Future" state. 113 | 114 | ### 7. Accepted and Beyond 115 | 116 | The pull request for your RFC will be merged in to this repository when your proposal 117 | has been accepted. This requires an approval of the pull request by one of the core 118 | members of the Open Job Description team. 119 | 120 | After merging the pull request, it may take some time for the core team to identify 121 | which draft of the specification to include the proposal in; it may not be the current/next 122 | one. 123 | 124 | The team will contact you through your RFCs tracking issue when it is time to include 125 | the proposal in the current draft specification. When that happens, we ask that you 126 | prepare pull requests that modify the draft specification, user documentation, and 127 | so on to include your proposed changes. 128 | 129 | ## RFC Process Stages 130 | 131 | An RFC's tracking ticket is tagged to indicate what stage of the process it is in: 132 | 133 | | Stage | Tracking Label | Description | 134 | | ----- | -------------- | ----------- | 135 | | [0 - Proposed](#Proposed) | [rfc/proposed] | A proposal for a change that is offered for community and team evaluation. | 136 | | [1 - Exploring](#Exploring) | [rfc/exploring] | The author(s), team, and community are working together to refine and iterate on the proposal. | 137 | | [2 - Final Comments](#LastCall) | [rfc/exploring] and [rfc/final-comments] | Consensus has been reached on the RFC. A "last call" has been announced for feedback. | 138 | | [3 - Accepted-Future](#Future) | [rfc/accepted-future] | The proposal has been accepted for inclusion in a future revision of the Open Job Description specification. | 139 | | [4 - Accepted-Draft](#Draft) | [rfc/accepted-draft] | The author has been given the green light to include the proposal in a draft of the Open Job Description specification. | 140 | | [5 - Accepted-Staged](#Staged) | [rfc/accepted-staged] | The proposal has been accepted and included in a draft revision of the Open Job Description specification. | 141 | | [6 - Released](#Released) | [rfc/released] | The proposal has been included in a published revision of the Open Job Description specification. | 142 | 143 | There are two additional statuses for RFCs that will not move forward: 144 | - **[Abandoned](#Abandoned)** (label: [rfc/abandoned]) - The RFC's author(s) have ceased to engage in the process, and the RFC's process is 145 | stalled. RFCs leave this state when the author(s) reengage, or a new champion from the community or team takes on 146 | advocating for the proposal. 147 | - **[Closed](#Closed)** - The RFC was closed by the author, or the review process determined that the proposal will 148 | not be accepted. The tracking issue and pull request are closed in this stage. 149 | 150 | [rfc/proposed]: https://github.com/OpenJobDescription/openjd-specifications/labels/rfc%2Fproposed 151 | [rfc/exploring]: https://github.com/OpenJobDescription/openjd-specifications/labels/rfc%2Fexploring 152 | [rfc/final-comments]: https://github.com/OpenJobDescription/openjd-specifications/labels/rfc%2Ffinal-comments 153 | [rfc/accepted-future]: https://github.com/OpenJobDescription/openjd-specifications/labels/rfc%2Faccepted-future 154 | [rfc/accepted-draft]: https://github.com/OpenJobDescription/openjd-specifications/labels/rfc%2Faccepted-draft 155 | [rfc/accepted-staged]: https://github.com/OpenJobDescription/openjd-specifications/labels/rfc%2Faccepted-staged 156 | [rfc/released]: https://github.com/OpenJobDescription/openjd-specifications/labels/rfc%2Freleased 157 | [rfc/abandoned]: https://github.com/OpenJobDescription/openjd-specifications/labels/rfc%2Fabandoned 158 | 159 | --- 160 | 161 | This RFC process is inspired by RFC processes in popular open source projects: [Yarn RFC process], 162 | [Rust RFC process], [React RFC process], [Ember RFC process], [AWS CDK RFC process], and [Python PEP]. 163 | 164 | [yarn rfc process]: https://github.com/yarnpkg/rfcs 165 | [rust rfc process]: https://github.com/rust-lang/rfcs 166 | [react rfc process]: https://github.com/reactjs/rfcs 167 | [ember rfc process]: https://github.com/emberjs/rfcs 168 | [AWS CDK RFC process]: https://github.com/aws/aws-cdk-rfcs 169 | [Python PEP]: https://peps.python.org/pep-0012/ 170 | 171 | -------------------------------------------------------------------------------- /samples/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 | -------------------------------------------------------------------------------- /samples/README.md: -------------------------------------------------------------------------------- 1 | # Open Job Description Sample Templates 2 | 3 | This directory contains a set of sample templates for the Open Job Description standard. 4 | The aim with these is to provide a small sampling of just some of the things that you 5 | can do with Open Job Description, and a reference set of demonstrations of template 6 | concepts that you can incorporate in to your own templates. 7 | 8 | All samples are provided AS-IS. We strongly recommend that you test all samples thoroughly 9 | before use, and customize the samples as required by your individual needs. 10 | 11 | ### YAML vs. JSON 12 | 13 | The majority of the samples included are written in YAML to allow us to write inline comments and have readable multi-line embedded files. Writing templates in JSON is also supported and a sample is included for comparison/illustrative purposes. 14 | 15 | ## Contributing 16 | 17 | We encourage and welcome your contributions to this repository. Simply open a pull 18 | request on this repository that includes your sample and a modification to this README 19 | to add your sample to the index. We ask that all contributions be in YAML document format, 20 | and follow the [sample template](./sample-template.yaml). 21 | 22 | Please see the [CONTRIBUTING guide](../CONTRIBUTING.md) for additional information. 23 | 24 | ## Samples Index 25 | 26 | ### Revision v2023-09 27 | 28 | | Job Template | Concepts Demonstrated | 29 | | ------ | --------------------- | 30 | | [algorithmic-art](./v2023-09/job_templates/algorithmic-art.yaml) | step environment, step dependencies, task parameter combination, job parameters, path mapping, embedded files, openjd_env, animated video | 31 | | [bash-in-docker](./v2023-09/job_templates/bash-in-docker.yaml) | step environment, embedded files, docker | 32 | | [blender-ffmpeg](./v2023-09/job_templates/blender-ffmpeg.yaml) | step dependencies, embedded files, job parameters, ui metadata | 33 | | [ffmpeg](./v2023-09/job_templates/ffmpeg.yaml) | command arguments, debugging environment, step dependencies, job parameters, ui metadata | 34 | | [host-requirements](./v2023-09/job_templates/host-requirements.yaml) | host requirements | 35 | | [path-mapping](./v2023-09/job_templates/path-mapping.yaml) | path mapping | 36 | | [stdout-messages](./v2023-09/job_templates/stdout-messages.yaml) | stdout messages, embedded files | 37 | | [task-parameter-definition-showcase](./v2023-09/job_templates/task-parameter-definition-showcase.yaml) | task parameters, task parameter combination operators | 38 | | [ui-controls-showcase](./v2023-09/job_templates/ui-controls-showcase.yaml) | job parameters, ui metadata, embedded file | 39 | 40 | | Environment Template | Concepts Demonstrated | 41 | | ------ | --------------------- | 42 | | [powershell-script](./v2023-09/environment_templates/powershell-script.yaml) | environment, calling embedded file with PowerShell | 43 | | [python-venv](./v2023-09/environment_templates/python-venv.yaml) | environment, openjd_env, embedded file | 44 | | [environment-variables](./v2023-09/environment_templates/environment-variables.yaml) | environment, variables section | 45 | 46 | ## License 47 | 48 | All templates in this directory and all of its subdirectories are made available 49 | under the terms of the [Apache License 2.0](./LICENSE). 50 | -------------------------------------------------------------------------------- /samples/sample-template.yaml: -------------------------------------------------------------------------------- 1 | # Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. 2 | # 3 | # ---- 4 | # Demonstrates 5 | # ---- 6 | # A brief description of what this sample is demonstrating that you want to draw 7 | # attention to. 8 | # 9 | # ---- 10 | # Requirements 11 | # ---- 12 | # What, if any, requirements must be met by the host environment to be able 13 | # to run this template. Provide this as a bulleted list. For example 14 | # - Software package X, version x.y.z or higher 15 | # - linux 16 | # - ... etc 17 | # 18 | # ----- 19 | # Contributors to this template: 20 | # 21 | 22 | name: Brief-Descriptive-Title 23 | # ... and so on 24 | -------------------------------------------------------------------------------- /samples/v2023-09/environment_templates/environment-variables.yaml: -------------------------------------------------------------------------------- 1 | # Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. 2 | # 3 | # ---- 4 | # Demonstrates 5 | # ---- 6 | # Setting static environment variables using the `variables` section 7 | # of your environment template. 8 | # 9 | # ---- 10 | # Requirements 11 | # ---- 12 | # 13 | # ----- 14 | # Contributors to this template: 15 | # Alex Hughes (https://github.com/Ahuge) 16 | 17 | specificationVersion: environment-2023-09 18 | environment: 19 | name: StaticEnvironmentVariables 20 | description: > 21 | Sets two static environment variables easily in the environment template. 22 | variables: 23 | ADSKFLEX_LICENSE_FILE: "@192.168.1.1" 24 | foundry_LICENSE: "4101@192.168.1.1" 25 | 26 | -------------------------------------------------------------------------------- /samples/v2023-09/environment_templates/powershell-script.yaml: -------------------------------------------------------------------------------- 1 | # Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. 2 | # 3 | # ---- 4 | # Demonstrates 5 | # ---- 6 | # Using an Environment Template to call powershell scripts on Windows 7 | # Notably this adds the `filename: script.ps1` setting and shows how 8 | # to call Powershell correctly. 9 | # 10 | # ---- 11 | # Requirements 12 | # ---- 13 | # - powershell 14 | # 15 | # ----- 16 | # Contributors to this template: 17 | # Alex Hughes (https://github.com/Ahuge) 18 | 19 | specificationVersion: environment-2023-09 20 | environment: 21 | name: PowershellScript 22 | description: > 23 | Executes a simple powershell script showing correctly how to call it without errors. 24 | script: 25 | actions: 26 | onEnter: 27 | # Need to specify the `-File