├── .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 |
314 |
--------------------------------------------------------------------------------
/rfcs/.images/0001-task-chunking-task-stickiness.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
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