This repo contains a tool called releaseman
that generates GitHub issues based on a template. It is also used as a
database to house issues for the release management tracker.
You will need to install uv to use this project. You will also need to replace the .env.example
with a
.env
file containing a valid GitHub PAT for all repos you want to create issues in.
To run the CLI, run ./releaseman.sh <args>
. To see command help run ./releaseman.sh <command> --help
.
Creates issues for a numbered release. Parent issues represent the release, and child issues represent each step in the release process. Used by the release management board.
Options:
-r, --repo TEXT The repository to create the issues in [required]
-p, --project [optimism-protocol-roadmap] The project to create the issues in
-u, --upgrade-number INTEGER The upgrade number to use [required]
--help Show this message and exit.
Creates a tracking ticket for a Superchain upgrade proposal (SUP). Parent issues represent the SUP, and child issues represent stages in our SDLC process.
Options:
-r, --repo TEXT The repository to create the issues in [required]
-p, --project [optimism-protocol-roadmap] The project to create the issues in
-s, --shortname TEXT The shortname of the SUP [required]
-t, --title TEXT The title of the SUP [required]
--help Show this message and exit.
releaseman
creates issues with one or more child-issues based on a recipe. The recipe is a YAML file that defines
how each issue should be formatted. The schema for the recipe is below:
global_prefix: "prefix" # optional: string to prefix all issues with
global_labels: # optional: list of labels to apply to all issues
- "issue-name"
parent_issue: # required: format of the parent issue
title: "some title" # required: parent issue title
body: "some body" # optional: parent issue body
labels: # optional: list of labels to apply to the parent issue
- "some-label"
issues: # optional: list of child issues
- title: "some title" # required: child issue title
body: "some body" # optional: child issue body
labels: # optional: list of labels to apply to the child issue
- "some-label""
You can see an example recipe in sup.yaml.
All the string fields in the above schema support templating. Templating is powered by Python's format()
method, so
anything that works in there can be used in the template. Variables are passed in via a template_context
dict. See
main.py for an example invocation.