Skip to content

Commit cfe9fd8

Browse files
committed
update release guides
1 parent b9b8c90 commit cfe9fd8

File tree

1 file changed

+69
-10
lines changed

1 file changed

+69
-10
lines changed

docs/community/maintainers/release-process.md

Lines changed: 69 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -37,27 +37,72 @@ YYYY-MM-releaseNumber
3737
`releaseNumber` represents the current release for that month, starting at `1`. Anything above `1` represents a [hotfix (patch) release](#hotfixes).
3838
:::
3939

40+
## Release Tags
41+
42+
- `YYYY-MM-releaseNumber`: This format represents the tag for each specific release.
43+
4044
:::caution
41-
For the release tag, there should be NO prepended `v`
45+
Do **not** prepend a `v` to the release tag.
4246
:::
4347

44-
For example, the first Nebari CalVer release was `2022.10.1`. If a hotfix release was needed in the same month, we increment the `releaseNumber` by 1, which would be `2022.10.2` (_this is to illustrate how the increment works, this release does not exist._)
48+
For example, the first Nebari CalVer release was `2022.10.1`. If a hotfix were needed in the same month, you would increment the `releaseNumber` by 1 to get `2022.10.2`. (_Note: This is just an illustration; this release does not actually exist._)
4549

46-
## Branching strategy
50+
## Branching Strategy
4751

48-
We use the following guidelines to manage `git` branches by assigning certain roles to particular branches.
52+
At Nebari, we embrace a straightforward branching strategy to keep our development process simple and efficient. We follow the [GitHub flow](https://docs.github.com/en/get-started/using-github/github-flow) model, which revolves around a single `main` branch for active development.
4953

50-
- [`main`](https://github.com/nebari-dev/nebari/tree/main) - Represents the active development branch and is the _default_ branch on the GitHub repository.
54+
### Branch Roles
5155

52-
## Release Tags
56+
We designate specific roles to our Git branches for clarity and organization:
57+
58+
- [`main`](https://github.com/nebari-dev/nebari/tree/main): This is the default branch where all new features and fixes are merged. It represents the active development state of the project.
59+
60+
For hotfix releases, we create a new branch from the `main` branch using the naming convention `hotfix-YYYY-MM-releaseNumber`. This branch is specifically for implementing necessary changes for the hotfix and is deleted after the release is completed.
61+
62+
### Release Process
63+
64+
The Nebari release process is a structured workflow that ensures the quality and reliability of each release. The process consists of the following key steps:
65+
66+
1. **Preparation**: Identify the changes to include in the release and associate them
67+
with the appropriate milestone. Assign a Nebari core maintainer as the "Release
68+
Captain" and open a release checklist issue to track the process.
69+
70+
2. **Release Candidate**: After merging all necessary pull requests, the Release Captain
71+
creates an initial Release Candidate using the pre-release option in the GitHub
72+
releases panel. A review checklist issue is also opened to ensure that all changes
73+
are correctly included in the release. This could be a iterative process, with
74+
multiple release candidates being created in case of new changes or fixes being needed.
75+
76+
3. **Testing and Verification**: Complete the review checklist to confirm that all
77+
changes function as expected and that major services perform optimally. The Release
78+
Captain assigns owners to each checklist item to ensure accountability.
5379

54-
- `YYYY-MM-releaseNumber` - Represents the tag for a particular release.
80+
4. **Finalizing the Release**: Upon successful testing, the Release Captain updates the
81+
release notes and increments the version number in the `constants.py` file. The final
82+
release is then published, and the release checklist issue is updated with the final
83+
details.
5584

56-
### Process
85+
For a detailed guide on the release process, refer to the [release checklist template](https://github.com/nebari-dev/nebari/blob/main/.github/ISSUE_TEMPLATE/release-checklist.md).
5786

58-
The release process is captured in the [release checklist template](https://github.com/nebari-dev/nebari/blob/main/.github/ISSUE_TEMPLATE/release-checklist.md). In the event that a patch or hotfix release is needed, release process is the same as outlined above.
87+
### Hotfixes and Patch Releases
5988

60-
## Related packages
89+
If a patch or hotfix release is necessary, the process mirrors the standard release steps with a key difference:
90+
91+
- The Release Captain creates a new **hotfix branch** (see the convention above) from the previous release **tag**.
92+
- Necessary changes are cherry-picked into this hotfix branch.
93+
- The final release is published following the standard procedure.
94+
95+
This approach ensures that critical fixes are efficiently addressed without disrupting
96+
the main development workflow.
97+
98+
:::note
99+
Hotfix releases are rare and are only used to address critical issues that cannot wait
100+
for the next scheduled release, they are usually associated with
101+
[broken](https://conda-forge.org/docs/maintainer/updating_pkgs/#removing-broken-packages)
102+
or [yanked](https://pypi.org/help/#yanked) releases. And should be delivered as soon as possible.
103+
:::
104+
105+
## Related packages and repositories
61106

62107
### nebari-dask
63108

@@ -70,3 +115,17 @@ The release process is captured in the [release checklist template](https://gith
70115
The [`nebari-docker-images`](https://github.com/nebari-dev/nebari-docker-images) repo contains the Dockerfiles for the JupyterHub, JupyterLab, and Dask-Gateway Kubernetes deployments. This repo also contains the workflow needed to build and push them the images to [github.com/orgs/nebari-dev/packages](https://github.com/orgs/nebari-dev/packages) and [quay.io/organization/nebari](https://quay.io/organization/nebari).
71116

72117
> These images are built and tagged with the same version number of the corresponding `nebari` release. Included in the release checklist linked above.
118+
119+
If there were changes to the following packages, handle their releases before cutting a new release for Nebari
120+
121+
### nebari-workflow-controller
122+
123+
The [`nebari-workflow-controller`](https://github.com/nebari-dev/nebari-workflow-controller)
124+
is a [kubernetes admission
125+
controller](https://kubernetes.io/blog/2019/03/21/a-guide-to-kubernetes-admission-controllers/)
126+
to enable volumeMount permissions on Argo Workflows on Nebari and provide a convenience
127+
method for deploying jupyterlab-like workflows for users.
128+
129+
### argo-jupyter-scheduler
130+
131+
The [`argo-jupyter-scheduler`](https://github.com/nebari-dev/argo-jupyter-scheduler) is a plugin for the [Jupyter-Scheduler](https://jupyter-scheduler.readthedocs.io/en/latest/index.html) extension in JupyterLab. It allows you to submit long-running notebooks to run asynchronously without needing to keep your JupyterLab server active. You can also schedule notebooks to run at specified times.

0 commit comments

Comments
 (0)