Skip to content

Commit 519a179

Browse files
authored
admin: Document how to make signed release tags (#4529)
Fixes #4403 Also updated some other language in the RELEASING.md document. Signed-off-by: Larry Gritz <[email protected]>
1 parent 1c3d694 commit 519a179

File tree

2 files changed

+45
-16
lines changed

2 files changed

+45
-16
lines changed

SECURITY.md

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,18 @@ Our policy is to address critical security vulnerabilities rapidly and post
2525
patches as quickly as possible.
2626

2727

28+
## Other security features
29+
30+
### Signed tags
31+
Starting with OpenImageIO 3.0, we cryptographically sign release tags.
32+
To verify a tag, you can use the `git tag -v` command, which will check
33+
the signature against the public key that is included in the repository.
34+
For example,
35+
36+
```bash
37+
git tag -v v3.0.0.3
38+
```
39+
2840
## Outstanding Security Issues
2941

3042
None known

docs/dev/RELEASING.md

Lines changed: 33 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -10,17 +10,18 @@
1010
Our release numbers are of the form `MAJOR.MINOR.PATCH.TWEAK`, and we follow
1111
an almost-semantic-versioning scheme.
1212

13-
MAJOR changes are those that break backward-compatibility of the public APIs,
13+
MAJOR releases are those that break backward-compatibility of the public APIs,
1414
requiring existing application code to change their source code where it calls
1515
OIIO API functions in order to compile and work correctly.
1616

17-
MINOR changes guarantee API backward-compatibility with prior releases that
17+
MINOR releases guarantee API backward-compatibility with prior releases that
1818
have the same major number, but can introduce ABI or link incompatibilities.
1919
Applications using OIIO need to be recompiled to move to a new minor release,
20-
but should not need to change their source code. Minor releases are allowed
21-
to drop support for sufficiently old compilers and dependencies.
20+
but should not need to change their source code (except, of course, to take
21+
advantage of new features). Minor releases are allowed to drop support for
22+
sufficiently old compilers and dependencies.
2223

23-
PATCH changes guarantee both API and ABI/link backward-compatibility with
24+
PATCH releases guarantee both API and ABI/link backward-compatibility with
2425
prior releases that have the same minor number. Features and new public API
2526
calls may be added (thus deviating from strict semantic versioning), but only
2627
if they preserve ABI/link compatibility. This means that standalone functions
@@ -32,7 +33,7 @@ guarantee that any compilers or dependencies supported for the first release
3233
of a minor series will continue to be supported for all patches to that minor
3334
series.
3435

35-
TWEAK changes are restricted to critical bug fixes or build breaks that do
36+
TWEAK releases are restricted to critical bug fixes or build breaks that do
3637
not alter public APIs in any way.
3738

3839
### Cadence of releases
@@ -66,10 +67,10 @@ for releases.
6667

6768
In the "main" branch:
6869

69-
- TWEAK changes within "main" only guarantee ABI back-compatibility, but may
70+
- TWEAK tags within "main" only guarantee ABI back-compatibility, but may
7071
have additions or non-bug-fix behavior changes (akin to patch releases
7172
within a release branch).
72-
- PATCH changes within "main" are allowed to break ABI or API (changes that
73+
- PATCH tags within "main" are allowed to break ABI or API (changes that
7374
would require minor or major releases, if they were not in "main").
7475
- Beware of unmarked breaks in compatibility of commits in main that are
7576
in between developer preview tags.
@@ -85,8 +86,8 @@ following conventions:
8586

8687
- `main` is the area for arbitrary changes intended for the next year's
8788
major or minor release.
88-
- `dev-1.2` are the areas for staging additions to the next month's patch
89-
release for the designated minor version series.
89+
- `dev-1.2` are the areas for staging additions that will become the next
90+
tweak or patch release for the minor version series.
9091
- `release` is a special branch marker that is always set to the latest tag of
9192
the currently supported, stable release family. People can count on
9293
"release" always being the latest stable release, whatever that may be at
@@ -263,17 +264,33 @@ truly critical bugs or build breaks that users will encounter.
263264

264265
The following are the steps for making the release:
265266

266-
1. Edit the top-level CMakeLists.txt to remove any RC designation
267-
(i.e., `PROJECT_VERSION_RELEASE_TYPE` should be set to `""`).
267+
1. Double check the top-level CMakeLists.txt to ensure the right version
268+
number and type of version designation (i.e.,
269+
`PROJECT_VERSION_RELEASE_TYPE` should be set appropriately).
268270

269271
2. Edit CHANGES.md to reflect the correct date of the release and ensure it
270272
includes any last-minute changes that were made during beta or release
271273
candidate stages. Please see the section "Generating release notes" below.
272274

273-
3. Push it to **your** GitHub, make sure it passes CI.
275+
3. Push it to **your** GitHub fork, make sure it passes CI.
274276

275-
4. Tag the release: `git tag v1.2.3.4` (no more beta, RC, or dev suffix).
277+
4. Tag the release with a signed tag:
278+
279+
$ git tag -s v1.2.3.4 # add a signed tag
280+
$ git tag -v v1.2.3.4 # verify the tag
276281

282+
Be sure that the tag also reflects if it's an alpha (v1.2.3.4-alpha),
283+
beta (v1.2.3.4-beta), release candidate (v1.2.3.4-RC1), or developer
284+
preview (v1.2.3.4-dev). If it's a final release, just use the plain
285+
version number (v1.2.3.4).
286+
287+
Note that the tag signing requires you to have a GPG key set up and
288+
associated with your GitHub account. Please see [GitHub's signed tagging instructions](https://docs.github.com/en/authentication/managing-commit-signature-verification/signing-tags) for more information.
289+
290+
If you get errors messages "gpg: signing failed: Inappropriate ioctl for device", then the solution is to first:
291+
292+
$ export GPG_TTY=$(tty)
293+
277294
5. If this will now be the recommended stable release, move the `release`
278295
branch marker to the same position.
279296

@@ -295,9 +312,9 @@ The following are the steps for making the release:
295312

296313
For a monthly patch release:
297314

298-
> We have tagged v2.5.1.0 as the latest production release and moved the
315+
> We have tagged v3.0.1.2 as the latest production release and moved the
299316
> "release" branch marker to that point. This is guaranteed to be API,
300-
> ABI, and link back-compatible with prior 2.5 releases. Release notes
317+
> ABI, and link back-compatible with prior 3.0 releases. Release notes
301318
> can be found at *LINK TO THE GITHUB RELEASE PAGE.*
302319
303320
For an annual major/minor release:

0 commit comments

Comments
 (0)