Skip to content

Commit 3774f9b

Browse files
committed
Add release process documents
1 parent 82af3e5 commit 3774f9b

3 files changed

Lines changed: 183 additions & 0 deletions

File tree

Adopters.md

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
# Adopters
2+
3+
Known consumers of libyaml.
4+
If your project uses libyaml, please open a PR to add it.
5+
6+
## Tier 1 -- Direct consumers with major downstream impact
7+
8+
These projects account for the vast majority of libyaml's real-world
9+
exposure.
10+
They are notified in advance of security releases.
11+
12+
- **[PyYAML](https://github.com/yaml/pyyaml)** -- Python YAML
13+
library.
14+
The `_yaml` C extension wraps libyaml; PyPI wheels bundle it
15+
statically.
16+
Downstream: Ansible, AWS CLI, Kubernetes client tooling, Home
17+
Assistant, SaltStack, Jupyter.
18+
19+
- **[Ruby Psych](https://github.com/ruby/psych)** -- Ruby's default
20+
YAML parser, ships with Ruby.
21+
Downstream: Rails, Jekyll, Bundler, RubyGems, Chef, Puppet.
22+
23+
## Tier 2 -- Linux distributions
24+
25+
Distribution packages are coordinated via established infrastructure:
26+
27+
- **Debian / Ubuntu** -- `libyaml-0-2`, `libyaml-dev`
28+
- **Fedora / RHEL** -- `libyaml`, `libyaml-devel`
29+
- **Alpine** -- `yaml`, `yaml-dev`
30+
- **Arch** -- `libyaml`
31+
- **SUSE / openSUSE** -- `libyaml-0-2`, `libyaml-devel`
32+
33+
For embargoed security issues, we use
34+
[distros@openwall.org](https://oss-security.openwall.org/wiki/mailing-lists/distros).
35+
36+
## Tier 3 -- Other language bindings
37+
38+
- **[YAML::XS](https://metacpan.org/pod/YAML::XS)** -- Perl
39+
- **[lyaml](https://github.com/gvvaughan/lyaml)** -- Lua
40+
- **[yaml](https://cran.r-project.org/package=yaml)** -- R
41+
- **[yaml](https://www.php.net/manual/en/book.yaml.php)** -- PHP
42+
extension
43+
- **[yamerl](https://github.com/yakaz/yamerl)** -- Erlang
44+
- **[libyaml-safer](https://github.com/simonask/libyaml-safer)** --
45+
Rust
46+
- **[HsYAML](https://hackage.haskell.org/package/HsYAML)** -- Haskell
47+
48+
## Tier 4 -- Transitive consumers
49+
50+
These projects use libyaml through one of the above bindings.
51+
They are not coordinated with directly but benefit from upstream
52+
releases:
53+
54+
Ansible, AWS CLI, Kubernetes ecosystem, Rails, Jekyll, Chef, Puppet,
55+
SaltStack, Home Assistant, MkDocs, Jupyter, and many more.

Releasing.md

Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
# Releasing libyaml
2+
3+
## Version numbering
4+
5+
libyaml follows `MAJOR.MINOR.PATCH` versioning.
6+
Patch releases contain bug fixes and security fixes only.
7+
8+
## Pre-release checklist
9+
10+
- [ ] All CI checks pass on the release branch
11+
- [ ] Security advisories drafted for any fixes (see below)
12+
- [ ] Downstream maintainers notified (see Downstream coordination)
13+
14+
## Update version numbers
15+
16+
Update the version in these files:
17+
18+
- `announcement.msg`
19+
- `Changes` (add release entry with date)
20+
- `CMakeLists.txt` (`YAML_VERSION_MAJOR`, `YAML_VERSION_MINOR`,
21+
`YAML_VERSION_PATCH`)
22+
- `configure.ac` (`YAML_MAJOR`, `YAML_MINOR`, `YAML_PATCH`,
23+
`YAML_RELEASE`, `YAML_CURRENT`, `YAML_REVISION`)
24+
25+
Commit and push to `release/0.x.y`.
26+
27+
## Build release archives
28+
29+
The GitHub workflow `.github/workflows/dist.yaml` builds archives
30+
automatically when you push to a `release/*` branch.
31+
It produces `yaml-0.x.y.tar.gz` and `yaml-0.x.y.zip`.
32+
33+
To build manually:
34+
35+
make docker-dist
36+
37+
Archives are written to `pkg/docker/output/`.
38+
This requires the `yamlio/libyaml-dev` Docker image (build it with
39+
`make docker-build`).
40+
41+
## Merge and tag
42+
43+
git checkout master
44+
git merge release/0.x.y
45+
git tag -a 0.x.y
46+
# Paste the Changes entry as the tag message
47+
git push origin master 0.x.y
48+
49+
## Create a GitHub release
50+
51+
1. Go to Releases and click "Draft a new release"
52+
2. Select the tag you just created
53+
3. Title: `v0.x.y`
54+
4. Paste the changelog entry into the description
55+
5. Upload the `.tar.gz` and `.zip` archives
56+
6. Generate SHA-256 checksums and include them in the release notes
57+
7. Publish
58+
59+
## Security release process
60+
61+
For releases that fix security vulnerabilities:
62+
63+
### Before the release
64+
65+
1. Draft a GitHub Security Advisory (GHSA) for each vulnerability
66+
via the Security tab
67+
2. Request a CVE ID through GitHub (they are a CNA)
68+
3. Set the patched version in the advisory
69+
4. Notify Tier 1 downstream maintainers listed in `Adopters.md`
70+
so they can prepare updated packages
71+
72+
### On release day
73+
74+
1. Publish all drafted GHSAs
75+
2. Push the signed tag and publish the GitHub release
76+
3. Post to `oss-security@lists.openwall.org`
77+
78+
### After the release
79+
80+
1. Monitor downstream releases (PyYAML wheels, Ruby, distro packages)
81+
2. Update GHSAs with downstream advisory references as they appear
82+
83+
## Downstream coordination
84+
85+
For security releases, notify downstream maintainers before
86+
publishing:
87+
88+
- **Tier 1** (direct consumers, pre-notify): PyYAML, Ruby Psych
89+
- **Tier 2** (distros): `distros@openwall.org` for embargoed issues
90+
- **Tier 3** (other bindings): public announcement on release day
91+
92+
See `Adopters.md` for the full list.
93+
94+
## Update pyyaml.org
95+
96+
See <https://github.com/yaml/pyyaml.org/blob/master/ReadMe.md>.

Security.md

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
# Security Policy
2+
3+
## Supported Versions
4+
5+
| Version | Supported |
6+
|---------|-----------|
7+
| 0.2.x | Yes |
8+
| < 0.2 | No |
9+
10+
## Reporting a Vulnerability
11+
12+
To report a security vulnerability, please use
13+
[GitHub's private vulnerability reporting](https://github.com/yaml/libyaml/security/advisories/new).
14+
15+
Do **not** open a public issue for security vulnerabilities.
16+
17+
We will acknowledge your report within 7 days and aim to release a
18+
fix within 30 days for confirmed vulnerabilities.
19+
20+
## Coordinated Disclosure
21+
22+
For vulnerabilities affecting downstream consumers (PyYAML, Ruby
23+
Psych, etc.), we coordinate disclosure with affected maintainers
24+
before public release.
25+
Downstream maintainers who want to be included in pre-release
26+
notifications can contact the maintainers privately.
27+
28+
## Security Advisories
29+
30+
Published advisories are listed on the
31+
[Security Advisories](https://github.com/yaml/libyaml/security/advisories)
32+
page.

0 commit comments

Comments
 (0)