From 6d476ba8e1325be18bf2367fab945bb60689e33b Mon Sep 17 00:00:00 2001 From: Peter Brightwell Date: Thu, 24 Aug 2023 15:05:48 +0100 Subject: [PATCH] Initial commit --- .github/ISSUE_TEMPLATE/bug_report.md | 38 ++++ .github/ISSUE_TEMPLATE/custom.md | 10 + .github/ISSUE_TEMPLATE/feature_request.md | 20 ++ .github/ISSUE_TEMPLATE/sample_issue_form.yml | 15 ++ .github/workflows/lint.yml | 11 + .github/workflows/open_issue.yml | 15 ++ .github/workflows/render.yml | 25 +++ .gitignore | 4 + .lint/.gitignore | 10 + .lint/.init-scripts/make-build-tools.sh | 6 + .lint/.init-scripts/make-distclean.sh | 5 + .lint/Makefile | 9 + .render/.gitignore | 24 +++ .render/.init-scripts/make-build-tools.sh | 6 + .render/.init-scripts/make-distclean.sh | 9 + .render/Gemfile | 3 + .render/Makefile | 9 + .render/_config.yml | 18 ++ .render/spec.json | 4 + CHANGELOG.md | 5 + CONTRIBUTING.md | 33 +++ LICENSE | 201 +++++++++++++++++++ NOTICE | 10 + README.md | 30 +++ docs/Further Info.md | 3 + docs/Overview.md | 57 ++++++ docs/README.md | 28 +++ docs/Style Guide.md | 7 + docs/images/NMOS-logo.png | Bin 0 -> 20762 bytes docs/images/README.md | 1 + examples/README.md | 1 + examples/example.json | 3 + spec.yml | 10 + 33 files changed, 630 insertions(+) create mode 100644 .github/ISSUE_TEMPLATE/bug_report.md create mode 100644 .github/ISSUE_TEMPLATE/custom.md create mode 100644 .github/ISSUE_TEMPLATE/feature_request.md create mode 100644 .github/ISSUE_TEMPLATE/sample_issue_form.yml create mode 100644 .github/workflows/lint.yml create mode 100644 .github/workflows/open_issue.yml create mode 100644 .github/workflows/render.yml create mode 100644 .gitignore create mode 100644 .lint/.gitignore create mode 100755 .lint/.init-scripts/make-build-tools.sh create mode 100755 .lint/.init-scripts/make-distclean.sh create mode 100644 .lint/Makefile create mode 100644 .render/.gitignore create mode 100755 .render/.init-scripts/make-build-tools.sh create mode 100755 .render/.init-scripts/make-distclean.sh create mode 100644 .render/Gemfile create mode 100644 .render/Makefile create mode 100644 .render/_config.yml create mode 100644 .render/spec.json create mode 100644 CHANGELOG.md create mode 100644 CONTRIBUTING.md create mode 100644 LICENSE create mode 100644 NOTICE create mode 100644 README.md create mode 100644 docs/Further Info.md create mode 100644 docs/Overview.md create mode 100644 docs/README.md create mode 100644 docs/Style Guide.md create mode 100644 docs/images/NMOS-logo.png create mode 100644 docs/images/README.md create mode 100644 examples/README.md create mode 100644 examples/example.json create mode 100644 spec.yml diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md new file mode 100644 index 0000000..5e3fdcd --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -0,0 +1,38 @@ +--- +name: Bug report +about: Create a report to help us improve +title: '' +labels: bug +assignees: '' + +--- + +**Describe the bug** +A clear and concise description of what the bug is. + +**To Reproduce** +Steps to reproduce the behavior: +1. Go to '...' +2. Click on '....' +3. Scroll down to '....' +4. See error + +**Expected behavior** +A clear and concise description of what you expected to happen. + +**Screenshots** +If applicable, add screenshots to help explain your problem. + +**Desktop (please complete the following information):** +- OS: (e.g. iOS) +- Browser (e.g. chrome, safari) +- Version (e.g. 22) + +**Smartphone (please complete the following information):** +- Device: (e.g. iPhone6) +- OS: (e.g. iOS8.1) +- Browser (e.g. stock browser, safari) +- Version (e.g. 22) + +**Additional context** +Add any other context about the problem here. diff --git a/.github/ISSUE_TEMPLATE/custom.md b/.github/ISSUE_TEMPLATE/custom.md new file mode 100644 index 0000000..04458c2 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/custom.md @@ -0,0 +1,10 @@ +--- +name: Custom issue template +about: Describe this issue template's purpose here. +title: '' +labels: +assignees: '' + +--- + + diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md new file mode 100644 index 0000000..35cedfc --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -0,0 +1,20 @@ +--- +name: Feature request +about: Suggest an idea for this project +title: '' +labels: enhancement +assignees: '' + +--- + +**Is your feature request related to a problem? Please describe.** +A clear and concise description of what the problem is. Ex. I'm always frustrated when... + +**Describe the solution you'd like** +A clear and concise description of what you want to happen. + +**Describe alternatives you've considered** +A clear and concise description of any alternative solutions or features you've considered. + +**Additional context** +Add any other context or screenshots about the feature request here. diff --git a/.github/ISSUE_TEMPLATE/sample_issue_form.yml b/.github/ISSUE_TEMPLATE/sample_issue_form.yml new file mode 100644 index 0000000..df68035 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/sample_issue_form.yml @@ -0,0 +1,15 @@ +name: Sample form +description: Create an issue. +title: "[Bug]: " +labels: [bug] +assignees: + - octocat +body: + - type: input + id: sample-input + attributes: + label: Sample Input + description: Write text here. + placeholder: Here will be text + validations: + required: true diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml new file mode 100644 index 0000000..8ce1b10 --- /dev/null +++ b/.github/workflows/lint.yml @@ -0,0 +1,11 @@ +name: Lint +on: [push, pull_request, workflow_dispatch] +jobs: + lint: + runs-on: ubuntu-latest + name: Lint + steps: + - name: Use NMOS Lint + uses: docker://amwa/nmos-lint:latest + env: + GITHUB_BRANCH: ${{ github.ref_name }} diff --git a/.github/workflows/open_issue.yml b/.github/workflows/open_issue.yml new file mode 100644 index 0000000..b2f59e8 --- /dev/null +++ b/.github/workflows/open_issue.yml @@ -0,0 +1,15 @@ +name: Open Issue +on: + issues: + types: + - opened + +jobs: + label_issue: + runs-on: ubuntu-latest + steps: + - env: + GITHUB_TOKEN: ${{ github.token }} + ISSUE_URL: ${{ github.event.issue.html_url }} + run: | + gh issue edit $ISSUE_URL --add-label "triage" diff --git a/.github/workflows/render.yml b/.github/workflows/render.yml new file mode 100644 index 0000000..5b38f7a --- /dev/null +++ b/.github/workflows/render.yml @@ -0,0 +1,25 @@ +name: Render +on: + workflow_dispatch: + + push: + branches: + - 'v[0-9]+.[0-9]+-dev' + - 'v[0-9]+.[0-9]+.x' + - 'publish-*' + tags: + - 'v[0-9]+.[0-9]+' + - 'v[0-9]+.[0-9]+.[0-9]+' + release: +jobs: + build: + runs-on: ubuntu-latest + name: Build + steps: + - name: Use NMOS Render + uses: docker://amwa/nmos-render:latest + env: + SSH_HOST: ${{ secrets.SSH_HOST }} + SSH_USER: ${{ secrets.SSH_USER }} + SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }} + SSH_KNOWN_HOSTS: ${{ secrets.SSH_KNOWN_HOSTS }} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..aa14556 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +*# +*.swp +*~ +.DS_Store diff --git a/.lint/.gitignore b/.lint/.gitignore new file mode 100644 index 0000000..c2ff133 --- /dev/null +++ b/.lint/.gitignore @@ -0,0 +1,10 @@ +*# +*.swp +*~ +.DS_Store +.scripts/ +node_modules/ +npm-debug.log +package-lock.json +package.json +yarn.lock diff --git a/.lint/.init-scripts/make-build-tools.sh b/.lint/.init-scripts/make-build-tools.sh new file mode 100755 index 0000000..744f70a --- /dev/null +++ b/.lint/.init-scripts/make-build-tools.sh @@ -0,0 +1,6 @@ +#!/bin/bash + +set -o errexit + +git clone --single-branch --branch main https://${GITHUB_TOKEN:+${GITHUB_TOKEN}@}github.com/AMWA-TV/nmos-lint-scripts .scripts +.scripts/install-dependencies.sh diff --git a/.lint/.init-scripts/make-distclean.sh b/.lint/.init-scripts/make-distclean.sh new file mode 100755 index 0000000..3a2e36c --- /dev/null +++ b/.lint/.init-scripts/make-distclean.sh @@ -0,0 +1,5 @@ +#!/bin/bash + +set -o errexit + +rm -rf package.json node_modules/ yarn.lock package-lock.json .scripts/ diff --git a/.lint/Makefile b/.lint/Makefile new file mode 100644 index 0000000..7f521b3 --- /dev/null +++ b/.lint/Makefile @@ -0,0 +1,9 @@ +-include .scripts/scripts.mk + +.PHONY: build-tools distclean + +build-tools: + .init-scripts/make-build-tools.sh + +distclean: + .init-scripts/make-distclean.sh diff --git a/.render/.gitignore b/.render/.gitignore new file mode 100644 index 0000000..dabace6 --- /dev/null +++ b/.render/.gitignore @@ -0,0 +1,24 @@ +*# +*.swp +*~ +.DS_Store +.layouts/ +.sass-cache/ +.scripts/ +Gemfile.lock +/_layouts/ +/_includes/ +/assets/ +/_data/ +_site/ +*.json +branches/ +index.md +node_modules/ +npm-debug.log +package-lock.json +package.json +releases/ +raml2html-nmos-theme/ +source-repo/ +yarn.lock diff --git a/.render/.init-scripts/make-build-tools.sh b/.render/.init-scripts/make-build-tools.sh new file mode 100755 index 0000000..2f9ac6e --- /dev/null +++ b/.render/.init-scripts/make-build-tools.sh @@ -0,0 +1,6 @@ +#!/bin/bash + +set -o errexit + +git clone --single-branch --branch "${NMOS_DOC_BUILD_SCRIPTS_BRANCH:-main}" https://${GITHUB_TOKEN:+${GITHUB_TOKEN}@}github.com/AMWA-TV/nmos-render-scripts .scripts +.scripts/install-dependencies.sh diff --git a/.render/.init-scripts/make-distclean.sh b/.render/.init-scripts/make-distclean.sh new file mode 100755 index 0000000..315fe7d --- /dev/null +++ b/.render/.init-scripts/make-distclean.sh @@ -0,0 +1,9 @@ +#!/bin/bash + +set -o errexit + +rm -f index.md index-contents.md +rm -rf source-repo/ branches/ releases/ +rm -rf .scripts/ .layouts/ _layouts/ assets/ raml2html-nmos-theme/ _site/ .ssh/ +rm -rf node_modules/ +rm -f yarn.lock package.json package-lock.json Gemfile.lock diff --git a/.render/Gemfile b/.render/Gemfile new file mode 100644 index 0000000..5e5d999 --- /dev/null +++ b/.render/Gemfile @@ -0,0 +1,3 @@ +source 'https://rubygems.org' +gem 'github-pages', group: :jekyll_plugins +gem 'faraday', '~>0' diff --git a/.render/Makefile b/.render/Makefile new file mode 100644 index 0000000..7f521b3 --- /dev/null +++ b/.render/Makefile @@ -0,0 +1,9 @@ +-include .scripts/scripts.mk + +.PHONY: build-tools distclean + +build-tools: + .init-scripts/make-build-tools.sh + +distclean: + .init-scripts/make-distclean.sh diff --git a/.render/_config.yml b/.render/_config.yml new file mode 100644 index 0000000..bbc4abd --- /dev/null +++ b/.render/_config.yml @@ -0,0 +1,18 @@ +# Don't change these +remote_theme: pages-themes/primer +plugins: +- jekyll-remote-theme +spec_server: specs.amwa.tv + +# AMWA ID +amwa_id: BCP-TEMPLATE + +# Base name for site (typically lower case version of AMWA ID, or the repo name) +baseurl: /bcp-template + +# Which release or branch appears in header links and on the home page +default_tree: branches/v1.0-dev # alternatively e.g. releases/v1.0 + +# Regex patterns of releases and branches to show +show_releases: ^v[0-9]+\.[0-9]+$|^v[0-9]+\.[0-9]+\.[0-9]+$ +show_branches: ^v[0-9]+\.[0-9]+-dev$|^v[0-9]+\.[0-9]+\.x$|^publish- diff --git a/.render/spec.json b/.render/spec.json new file mode 100644 index 0000000..494d29f --- /dev/null +++ b/.render/spec.json @@ -0,0 +1,4 @@ +--- +--- + +{{ site.data.spec | jsonify }} diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..1850b96 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,5 @@ +# Changelog +This document provides an overview of changes between released versions of this specification. + +## Release v1.0 +* Initial release diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..595a24d --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,33 @@ +# Contributing + +Thanks for your interest in this AMWA NMOS Specification. + +AMWA Specifications (including Best Current Practices) are developed and ratified in accordance with +AMWA's Specification Process. See BCP-001 on the [AMWA Specifications page](https://www.amwa.tv/specifications) + +They are created and updated in AMWA working groups, requiring AMWA membership for participation. + +AMWA member contributions to this Specification are made subject to AMWA's [IPR Policy](https://www.amwa.tv/about/policies/AMWA_IPR_Policy_V3.0.pdf). +Contributions should be accompanied by the form in an appendix of that policy. + +For more information for those wishing to develop or contribute to AMWA NMOS Specifications, +please see the NMOS [Wiki Page](https://github.com/amwa-tv/nmos/wiki/Maintainers) for maintainers. + +## Reporting Issues + +AMWA members and non-members are welcome to raise issues via the GitHub Issues tab. + +## Pull Requests + +We accept Pull Requests from AMWA members participating in relevant workgroups. These are subject to the IPR Policy. + +Please read about our [GitHub Workflow](https://github.com/amwa-tv/nmos/wiki/GitHub-Workflow) before creating a pull request, +in particular the 'Maintaining a Specification' section, as we try to maintain a consistent approach to branches and releases. +This should indicate which branch it is most appropriate to create your pull request against. + +Each NMOS workgroup has a number of members that will review a PR. + +## Suggesting Improvements or Enhancements + +We are interested in hearing of suggestions, both for the spec itself and the accompanying documentation. +Please use the issue tracker or [contact AMWA](https://www.amwa.tv/contact). diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..414c073 --- /dev/null +++ b/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2021 AMWA + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/NOTICE b/NOTICE new file mode 100644 index 0000000..88da569 --- /dev/null +++ b/NOTICE @@ -0,0 +1,10 @@ +THIS AMWA SPECIFICATION IS BEING OFFERED WITHOUT ANY WARRANTY WHATSOEVER, +AND IN PARTICULAR, ANY WARRANTY OF NON-INFRINGEMENT IS EXPRESSLY DISCLAIMED. +ANY USE OF THIS SPECIFICATION SHALL BE MADE ENTIRELY AT THE IMPLEMENTER'S +OWN RISK, AND NEITHER AMWA, NOR ANY OF ITS MEMBERS OR CONTRIBUTORS, SHALL +HAVE ANY LIABILITY WHATSOEVER TO ANY IMPLEMENTER OR THIRD PARTY FOR ANY +DAMAGES OF ANY NATURE WHATSOEVER, DIRECTLY OR INDIRECTLY, ARISING FROM THE +USE OF THIS SPECIFICATION. + +Readers are advised that any IPR contribution forms associated with this +project are available from the [AMWA](http://amwa.tv/) diff --git a/README.md b/README.md new file mode 100644 index 0000000..9972179 --- /dev/null +++ b/README.md @@ -0,0 +1,30 @@ +# \[Work In Progress\] AMWA NMOS Template Specification + +[![Lint Status](https://github.com/AMWA-TV/bcp-template/workflows/Lint/badge.svg)](https://github.com/AMWA-TV/bcp-template/actions?query=workflow%3ALint) +[![Render Status](https://github.com/AMWA-TV/bcp-template/workflows/Render/badge.svg)](https://github.com/AMWA-TV/bcp-template/actions?query=workflow%3ARender) + +This repository holds the source for this Specification, part of the family of [Networked Media Open Specifications](https://specs.amwa.tv/nmos) from the [Advanced Media Workflow Association](https://amwa.tv) + + + +### What does it do? + +- It provides a template for AMWA NMOS Interface Specifcations. + +### Why does it matter? + +- It helps ensure consistency between NMOS Specifications. +- It helps us test our continuous integration. + +### How does it work? + +- It contains examples of [documentation](docs/), and [examples](examples/) +- It provides a style guide and other advice for specification authors + - This includes how to configure the repo for automatic linting and rendering to `specs.amwa.tv` +- Select `AMWA-TV/bcp-template` as the template when creating the new repo. + + + +## Getting started + +There is more information about the NMOS Specifications and their GitHub repos at . diff --git a/docs/Further Info.md b/docs/Further Info.md new file mode 100644 index 0000000..429fa5e --- /dev/null +++ b/docs/Further Info.md @@ -0,0 +1,3 @@ +# Further Information + +This file is here for testing automation. Look at the main NMOS page for more information on NMOS! diff --git a/docs/Overview.md b/docs/Overview.md new file mode 100644 index 0000000..70bb142 --- /dev/null +++ b/docs/Overview.md @@ -0,0 +1,57 @@ +# AMWA NMOS Best Common Practice Template: Overview +{:.no_toc} + +* A markdown unordered list which will be replaced with the ToC, excluding the "Contents header" from above +{:toc} + +_(c) AMWA 2021, CC Attribution-NoDerivatives 4.0 International (CC BY-ND 4.0)_ + +![NMOS logo](images/NMOS-logo.png) + +> ## Instructions +> +> **Delete this section after creating a new repo from this template.** +> +>Use this template repo to create a new AMWA NMOS Best Common Practice repo. +> +> Add your content as (GitHub Flavoured) Markdown documents. +> +> - For consistency with other specifications, keep this `Overview.md` but remove these Instructions. +> +> Put diagrams (ideally PNG with encapsulated draw.io source) in the `images/` sub-directory. +> +> Follow the [Style Guide](Style%20Guide.md). +> +> Make a bulleted list of documents in `README.md` in this directory. +> +> Set the repo name used to get the Lint and Render status in the top-level `README.md` (four changes needed). +> +> Set the value of `amwa_id` in `.render/_config.yml` to the AMWA-assigned ID. + +## Introduction + +> Provide an overview of the Specification. + +Familiarity with the [JT-NM Reference Architecture](https://jt-nm.org/reference-architecture/) is assumed. + +See also the [NMOS Technical Overview](https://specs.amwa.tv/nmos/main/docs/Technical_Overview.html). + + +## Use of Normative Language + +The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", +and "OPTIONAL" in this document are to be interpreted as described in [RFC 2119][RFC-2119]. + +## Definitions + +The NMOS terms 'Node', ... are used as defined in the [NMOS Glossary](https://specs.amwa.tv/nmos/main/docs/Glossary.html). + +> List as appropriate + +This specification also defines the following terms. + +### Example Term + +Example definition + +[RFC-2119]: https://tools.ietf.org/html/rfc2119 "Key words for use in RFCs" diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 0000000..3c673bd --- /dev/null +++ b/docs/README.md @@ -0,0 +1,28 @@ + + +### Introduction + +- [Overview](Overview.md) +- [Style Guide](Style%20Guide.md) + +### Miscellaneous + +- [Further Info](Further%20Info.md) diff --git a/docs/Style Guide.md b/docs/Style Guide.md new file mode 100644 index 0000000..631bb5d --- /dev/null +++ b/docs/Style Guide.md @@ -0,0 +1,7 @@ +# Style Guide + +Be careful with normative and non-normative language. + +It may be better to put lengthy guidance in a separate implementation guide. + +Markdown will be linted, so try to keep consistent with what is in this template and what is in other specs. See for details. diff --git a/docs/images/NMOS-logo.png b/docs/images/NMOS-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..f831307fda84651085713b9709867531833db074 GIT binary patch literal 20762 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