CDEvents – CDEvents Documentation https://cdevents.dev/docs/ Recent content in CDEvents Documentation on CDEvents Hugo -- gohugo.io Docs: https://cdevents.dev/docs/wpaper/ Mon, 01 Jan 0001 00:00:00 +0000 https://cdevents.dev/docs/wpaper/ <!-- markdownlint-disable-file MD041 --> <script type="text/javascript"> function resizeIframe(iframe) { iframe.height = iframe.contentWindow.document.body.scrollHeight + "px"; } </script> <iframe id="iframe-id" src="../CDEvents_Whitepaper.pdf" width="100%" name="iframe-name" style="min-height:98vh; border:none;" onload="resizeIframe(this)" referrerpolicy="no-referrer"> <p>Your browser can not display embedded frames. You can access the embedded page via the following link: <a href="../CDEvents_Whitepaper.pdf">../CDEvents_Whitepaper.pdf</a></p> </iframe> Community: https://cdevents.dev/community/contribution-guidelines/ Mon, 01 Jan 0001 00:00:00 +0000 https://cdevents.dev/community/contribution-guidelines/ <!-- cSpell:locale en-US --> <h1 id="contribution-guidelines">Contribution Guidelines</h1> <p>Thank you for contributing your time and expertise to CDEvents. This document describes the contribution guidelines for the project specification and website:</p> <p>The CDEvents SDKs have dedicated contributing guides in the respective repositories:</p> <ul> <li><a href="https://github.com/cdevents/sdk-go?tab=readme-ov-file#contributing">sdk-go</a></li> <li><a href="https://github.com/cdevents/sdk-java?tab=readme-ov-file#contributing">sdk-java</a></li> </ul> <p><strong>Note:</strong> Before you start contributing, you must read and abide by our <strong><a href="https://github.com/cdevents/.github/blob/main/docs/CODE_OF_CONDUCT.md">Code of Conduct</a></strong>.</p> <h2 id="contributing-prerequisites-cladco">Contributing prerequisites (CLA/DCO)</h2> <p>The project does not yet define a Contributor License Agreement or <a href="https://wiki.linuxfoundation.org/dco">Developer Certificate of Origin (DCO)</a>. By submitting pull requests submitters acknowledge they grant the <a href="./LICENSE">Apache License v2</a> to the code and that they are eligible to grant this license for all commits submitted in their pull requests.</p> <h2 id="how-to-contribute">How to contribute</h2> <p>CDEvents welcomes all of contributions! We encourage you to engage with the <a href="https://github.com/cdevents/spec/blob/main/README.md#community">CDEvents community</a>.</p> <p>Resources for contributors:</p> <ul> <li><a href="https://cdevents.dev/community/roadmap">Project Roadmap</a></li> <li><a href="https://github.com/orgs/cdevents/projects/1/views/13">Specification v0.4 Roadmap</a></li> <li><a href="https://github.com/cdevents/spec/issues">GitHub Issues</a></li> <li><a href="https://github.com/cdevents/spec/blob/main/README.md#community">Communication Channels</a></li> </ul> <h2 id="overview">Overview</h2> <p>Documentation is published at the <a href="https://cdevents.dev">CDEvents website</a> and the source for this site may be found in this <a href="https://github.com/cdevents/cdevents.dev">GitHub repo</a>.</p> <p>The specification itself is maintained in this <a href="https://github.com/cdevents/spec">GitHub repo</a>.</p> <h2 id="getting-set-up">Getting set up</h2> <p>To contribute to the documentation, start by forking this <a href="https://github.com/cdevents/cdevents.dev">GitHub repo</a></p> <p>Clone a local copy of your fork with:</p> <div class="highlight"><pre tabindex="0" style="color:#586e75;background-color:#eee8d5;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-bash" data-lang="bash">git clone https://github.com/your-fork/cdevents.dev </code></pre></div><p>This gets you a local copy of your fork of the website as a dev environment.</p> <p>If you want to be able to contribute to the spec itself, fork the specification <a href="https://github.com/cdevents/spec">GitHub repo</a></p> <p>Get a local copy, in another location, with:</p> <div class="highlight"><pre tabindex="0" style="color:#586e75;background-color:#eee8d5;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-bash" data-lang="bash">git clone https://github.com/your-fork/spec<span style="color:#2aa198">`</span> </code></pre></div><p>Make edits to the website or specification in your fork and contribute them as PRs to the upstream repo. Please squash commits using <code>git rebase -i</code> before creating a PR.</p> <p>Maintainers, please remember to merge PRs for the spec repo, tag them, and then update the cdevents.dev repo to point to the new release of the spec, using the process <a href="#versioning-and-releases">here</a></p> <p>Note that the version of the spec linked from the website is automatically synchronized using the <code>params.version</code> variable set in <code>config.toml</code>, so this will be updated when you revise the website version.</p> <h2 id="viewing-your-edits">Viewing your edits</h2> <p>Install a copy of <a href="https://gohugo.io">Hugo</a> in your dev environment. You will need a version &gt;= that specified in HUGO_VERSION in <a href="https://github.com/cdevents/cdevents.dev/blob/main/netlify.toml">the config</a></p> <p>From within your local copy of your cdevents.dev fork, start the Hugo server with the following:</p> <div class="highlight"><pre tabindex="0" style="color:#586e75;background-color:#eee8d5;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-bash" data-lang="bash">netlify dev </code></pre></div><!-- markdownlint-disable-next-line MD001 MD034 --> <p>This will allow you to browse your copy of the website at http://localhost:8888</p> <p>Edits to the local copy of the site should be rendered automatically, but if something seems wrong, you may need to restart the server under some circumstances. Watch out for issues caused by browser caches, as these are common.</p> <h2 id="signing-your-commits">Signing your commits</h2> <p>Please ensure that you cryptographically sign your commits before creating a PR. If you forget, you can use the following command to add this:</p> <div class="highlight"><pre tabindex="0" style="color:#586e75;background-color:#eee8d5;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-bash" data-lang="bash">git commit -S --amend </code></pre></div><h2 id="style-guide">Style Guide</h2> <p>Style should broadly follow the <a href="https://developers.google.com/style">Google Style Guide</a>, as implemented within <a href="https://docsy.dev">Docsy</a>.</p> <p>Consideration should always be given to the long-term costs of maintenance to documentation. Preference should be given to minimizing customization away from Docsy defaults, in order to simplify future upgrades. Use markdown over HTML notation, where possible, in order to simplify editing and maintenance.</p> <p>Spellings should be in US English form.</p> <p>Narrative pages should render in a comfortably readable form on mobile devices as a priority. It is however expected that technical specifications and schema files are most likely to be accessed from devices with larger screens, so these should be optimized for ease of comprehension on these devices.</p> <h2 id="audience-personas">Audience Personas</h2> <p>When writing content for cdevents.dev, it is important to understand who this site is intended to serve and to ensure that the needs of each group are being addressed with appropriate information.</p> <p>The primary purposes of cdevents.dev site are:</p> <ul> <li> <p>As a &ldquo;Storefront&rdquo;, to present what CDEvents is, in as simple, intuitive and convincing terms as possible, attracting potential users/adopters of CDEvents</p> </li> <li> <p>Serving as a portal for all CDEvents information needs, such as a link to the spec (with links to all supported versions), information about existing SDKs, PoCs and other CDEvents supported tools/components (i.e. CDEvents landscape)</p> </li> </ul> <p>We anticipate that the primary audiences for this site are:</p> <ul> <li>CI/CD Tool Maintainers (Vendors / FOSS project members)</li> <li>Decision-makers, evaluating CI/CD tooling</li> <li>End-User Engineers, implementing CI/CD instances</li> <li>Browsing audience, looking to understand more about best practice</li> </ul> <p>Let&rsquo;s understand the needs of each group in more detail.</p> <h3 id="cicd-tool-maintainers">CI/CD Tool Maintainers</h3> <p>As a CI/CD Tool Maintainer, I work for a commercial CI/CD Tool Vendor, or am a contributor to a FOSS project that maintains a CI/CD tool.</p> <p>I am highly technical and understand the benefits of standardization and interoperability.</p> <p>My primary interest is in understanding the specification so that I can implement functionality in my product correctly.</p> <p>I may be a producer of events who is maintaining a CI/CD platform tool, or I may be a consumer of events who maintains an associated CI/CD product such as a metrics collection system or visualizer.</p> <h3 id="decision-makers">Decision-makers</h3> <p>I work at an End-User organization and am currently evaluating CI/CD tooling options in order to support our transition to Continuous Delivery.</p> <p>I may come from a technical or a commercial background and am at an early stage of familiarity with the challenges associated with Continuous Delivery.</p> <p>I need help to understand how best to differentiate between all the tooling options available to me.</p> <h3 id="end-user-engineers">End-User Engineers</h3> <p>I work at an End-User organization and am responsible for implementing our internal CI/CD instances.</p> <p>I am technical and understand some of the challenges in the Continuous Delivery space but want to learn more about how CDEvents make my life easier.</p> <h3 id="browsing-audience">Browsing audience</h3> <p>I am interested in CI/CD and Continuous Delivery and am looking to understand more about best practice in this space.</p> <p>I have been reading the CDF Best Practices Guide and was referred here from there. I may be more or less technical in background and would like to understand where the value in CDEvents lies for me.</p> <h2 id="audience-strategy">Audience Strategy</h2> <p>By looking at our personas, we can see that we have two basic narrative tracks that we must cater for:</p> <ul> <li>There is a highly technical subset of the audience that needs very detailed and accurate specifications</li> <li>The remainder of the audience remains to be convinced and will need a story that they can follow to their satisfaction</li> </ul> <p>The priority should always be to communicate plainly to the latter, assuming minimal pre-existing knowledge, whilst providing quick access to more technical resources for the former.</p> <p>CI/CD Tool Maintainers and a large proportion of the End-Customer Engineers will want to approach the site as reference documentation. For this audience, we need clear links that take them immediately to the detail, structured in such a way that they can find what they need, but also have visibility of the full scope of the information available, to help them to size the effort facing them.</p> <p>The intent is for this audience to have a pleasant experience, implementing CDEvents.</p> <p>Decision-makers and the browsing audience are likely not bought into the content upon first arrival, so we have perhaps ten to twenty seconds to persuade them to invest more time in order to learn what is of value to them in the content. This requires a succinct and friendly landing page that pitches a clear message above the fold. This should then expand into a non-technical narrative providing the basic concepts before leading into the detail, with the expectation that few from this audience will consume all of the information themselves.</p> <p>The intent is for this audience to take away key learnings that they will use to support future decisions, and to direct others to visit to access the details.</p> <p>It is additionally expected that some CI/CD Tool Maintainers and End-User Engineers will benefit from the conceptual narrative that will enable them to easily become evangelists for the CDEvents approach. CI/CD Tool Maintainers may need help in communicating to their own customers the value-add of CDEvents support in their systems. End-User Engineers are often in a situation where they have to pitch a technology to their Decision-makers to get buy-in for a given approach, so simple explanations of commercial value can be very helpful to this audience.</p> <p>This strategy must extend beyond the learning journey into the community space. Once we have explained the specification to the CI/CD Tool Maintainers, this must be reinforced with a call to action to implement the spec within their product and connection to appropriate additional support and community resources to help make this as easy as possible.</p> <p>For all of our audience, we would additionally like to create a call to action to become contributors themselves and to add to the shared value.</p> <h2 id="user-journey">User Journey</h2> <p>The primary user journey requires that we engage the reader&rsquo;s attention with a succinct statement of value to them on the landing page, then provide an easily navigated narrative that evidences this statement, leading into the detailed content of the specification itself. It is expected that readers will self-pace, exiting the site when they have consumed sufficient detail for their needs.</p> <p>We should, therefore, provide access to community resources from each page, to allow people to connect with additional support at whatever level of detail suits their needs.</p> <p>For our technical narrative track, it must be obvious how to reach the reference section of the site directly from the landing page, allowing this audience to get quickly to the detail that they require.</p> <p>The specification must be unambiguous, minimizing opportunities for multiple interpretations to hold true.</p> <p>It must be obvious which version of the specification is referenced in the documentation and difficult to accidentally navigate between different versions whilst browsing. The specification should therefore be sandboxed within a consistent namespace so that relative links remain within the same version by default.</p> <p>The default behavior should be to direct the reader to the latest version of the specification. Links should be provided to the specification GitHub repo to access historical releases of the spec.</p> <p>The landing page shall present the key statement of value and a shortcut to the reference documentation above the fold. The remainder of the narrative introduction should sit below this on the same page, with jumping off points to details. Where detail sits within the specification or other versioned reference documentation, the landing page should always reference the latest version of these resources.</p> <p>The user experience should strive for simplicity, consistency and coherency. As a reference work, it should be possible to navigate forwards and backwards through the site in a predictable manner without being redirected to an unexpected point in the content.</p> <p>Active page elements such as pop-ups should be avoided. There is no requirement to collect data from the reader, nor to embed advertising or promotions within the site.</p> <h2 id="internationalization">Internationalization</h2> <p>Versions of the cdevents.dev narrative content in other languages can be added at any time by adding a new, language-specific content root under the <code>content</code> folder in this repo and providing translated duplicates of the files found in <code>content/en</code>.</p> <p>The <code>[languages]</code> section of <code>config.toml</code> should be updated as documented in <a href="https://www.docsy.dev/docs/language/">https://www.docsy.dev/docs/language/</a></p> <p>UI strings are maintained in the <code>i18n</code> folder. You may need to update these if the desired language is not already supported.</p> <p>In development, run <code>hugo server --printI18nWarnings</code> when doing translation work, as it will give you warnings on what strings are missing.</p> <p>Translations of the specification documentation will require language-specific forks of the spec repo. The <code>docs</code> subfolder of the <code>content/&lt;new language&gt;/</code> folder should be linked as a git submodule to the appropriate fork. Note the need to manually maintain and synchronize the releases of translated versions of the spec.</p> <h2 id="versioning-and-releases">Versioning and Releases</h2> <p>Points to note:</p> <ul> <li><code>main</code> of the spec repo is <em>always</em> a draft</li> <li><code>main</code> of the website repo <em>always</em> the live website</li> </ul> <p>There is a Releases drop-down on the main menu, which allows you to select prior versions of the specification to browse. A version indicator has been added to the root of the breadcrumb trail, so you can see which version the displayed docs relate to.</p> <p><em>If you are a repository maintainer, you must understand the release processes.</em></p> <p>For versions up to and including v1.x.x, the process to make a new release is as follows:</p> <ol> <li>In Specification GitHub repo, merge changes to spec and tag a numbered release.</li> <li>In cdevents.dev repo, edit <code>config.toml</code> file. In the <code>[params]</code> section, update <code>version</code> variable to match tagged version. Edit <code>[[params.versions]]</code> section to add link to historical docs.</li> <li>Merge and publish changes to cdevents.dev</li> </ol> <p>Note that prior to a formal, semantic v1.0.0 release, historical links point to the associated tagged version of the spec repo.</p> <p>From release v2.0.0 onward, the following revised process should be used:</p> <ol> <li>In Specification GitHub repo, merge changes to spec and tag a numbered release.</li> <li>Branch cdevents.dev repo to create a clone of the current release docs. In the netlify config, set this branch to deploy to &lsquo;v1.cdevents.dev&rsquo; (or other appropriate historical version number). In <code>config.toml</code> file, in the <code>[params]</code> section, edit <code>archived_version</code> to be <code>true</code>.</li> <li>In cdevents.dev repo, edit <code>config.toml</code> file. In the <code>[params]</code> section, update <code>version</code> variable to match tagged version. Edit <code>[[params.versions]]</code> section to add link to historical docs.</li> <li>Merge and publish changes to cdevents.dev</li> </ol> <p>The first time this is done, you will need to edit the <code>[[params.versions]]</code> section to redirect the historical link to &lsquo;v1.cdevents.dev&rsquo; version of the site instead of the spec repo tag, as currently.</p> Community: https://cdevents.dev/community/roadmap/ Mon, 01 Jan 0001 00:00:00 +0000 https://cdevents.dev/community/roadmap/ <!-- cSpell:locale en-US --> <h1 id="cdevents-mission-and-roadmap">CDEvents Mission and Roadmap</h1> <p>This document describes the mission of the CDEvents and its overall roadmap for 2023/2024.</p> <h2 id="mission--vision">Mission &amp; Vision</h2> <p>The mission of CDEvents project is:</p> <blockquote> <p>Provide interoperability in the continuous delivery ecosystem through a common events protocol</p> </blockquote> <p>The vision for the CDEvents project is to have CDEvents natively produced and consumed by as many projects and services as possible in the continuous delivery ecosystem, to provide decoupled and scalable integration with minimal or no glue code.</p> <p>We envision an ecosystem of tools to generate, store, process and visualize CDEvents.</p> <h2 id="roadmap">Roadmap</h2> <p>The continuous delivery ecosystem is quite large as it includes tools and services that span from the design of software, through its implementation, build, test, release, deployment and operation.</p> <p>In 2023/2024 we want to focus on a few <a href="https://cdevents.dev/docs/primer#use-cases">key use cases</a> and make sure that we can fully support them with the protocol specification. More specifically:</p> <ul> <li>Evolve the project bootstrap governance into a full governance</li> <li>On the CDEvents specification <ul> <li>Define a mechanism for linking events with each other</li> <li>Expand the scope with Ticket and Approval events</li> <li>Introduce supply chain aspects: <ul> <li>Add SBOM link into artifact events</li> <li>Add mechanism to track releases</li> </ul> </li> <li>Expand the set of events available to artifact registries</li> <li>Introduce support for groups of subjects. Examples: <ul> <li>A group of changes that represent a release</li> <li>A group of artifacts that represent an application</li> </ul> </li> </ul> </li> <li>On the CDEvents SDK <ul> <li>Complete the work of auto-generating the Java SDK</li> <li>Make the Python SDK auto-generated from the spec</li> <li>Develop an SDK in Rust, JavaScript and .NET</li> </ul> </li> <li>Release Management <ul> <li>Create <a href="https://github.com/orgs/cdevents/projects/1/views/13">release v0.4</a></li> <li>Define the project release cadence</li> <li>Define our requirements for a v1.0</li> </ul> </li> <li>Publish an updated whitepaper</li> <li>Validate and demonstrate the spec through proofs-of-concept</li> <li>Continue to collaborate with various communities to promote CDEvents adoption</li> </ul> <p>The implementation of proofs of concept will require having CDEvents emitted by various platforms which do not support CDEvents yet. Where possible we will work with the community; it is likely we will have to develop producers and consumers of CDEvents that can adapt existing event formats into CDEvents. We will host such reference implementations in the <code>cdevents</code> organization at least until they can find a new home in the target project. These implementations will be useful to identify the mapping between the data model of a specific platform and CDEvents; we can add these mappings to supporting documentation in <code>cdevents</code> organization.</p>