doc: document branching and releasing (#554)
This diff starts to better specify branching and the release process, thus addressing https://github.com/ooni/probe/issues/1506#issuecomment-949623019.
This commit is contained in:
parent
638acb0830
commit
197dc37461
6
.github/workflows/codeql-analysis.yml
vendored
6
.github/workflows/codeql-analysis.yml
vendored
|
@ -9,12 +9,14 @@ name: "CodeQL"
|
||||||
|
|
||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
branches: [ "master", "release/**" ]
|
branches:
|
||||||
|
- "master"
|
||||||
|
- "release/**"
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
analyze:
|
analyze:
|
||||||
name: Analyze
|
name: Analyze
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-20.04
|
||||||
|
|
||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
|
|
1
.github/workflows/coverage.yml
vendored
1
.github/workflows/coverage.yml
vendored
|
@ -5,6 +5,7 @@ on:
|
||||||
push:
|
push:
|
||||||
branches:
|
branches:
|
||||||
- "master"
|
- "master"
|
||||||
|
- "release/**"
|
||||||
jobs:
|
jobs:
|
||||||
test:
|
test:
|
||||||
runs-on: ubuntu-20.04
|
runs-on: ubuntu-20.04
|
||||||
|
|
4
.github/workflows/debianrepo.yml
vendored
4
.github/workflows/debianrepo.yml
vendored
|
@ -3,10 +3,8 @@ name: debianrepo
|
||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
branches:
|
branches:
|
||||||
- "stable"
|
|
||||||
- "release/**"
|
|
||||||
- "master"
|
- "master"
|
||||||
- "debianrepo"
|
- "release/**"
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
test_386:
|
test_386:
|
||||||
|
|
|
@ -81,16 +81,54 @@ https://github.com/ooni/spec) repository. If the spec is missing,
|
||||||
please help the pull request reviewer to create it. If the spec is
|
please help the pull request reviewer to create it. If the spec is
|
||||||
not clear, please let us know during the review.
|
not clear, please let us know during the review.
|
||||||
|
|
||||||
When you write a new experiment, keep the measurement phase and the
|
To get a sense of what we expect from an experiment, see the [internal/tutorial](
|
||||||
results analysis phases as separate functions. This helps us a lot
|
https://github.com/ooni/probe-cli/tree/master/internal/tutorial) tutorial
|
||||||
to write better unit tests for our code.
|
|
||||||
|
|
||||||
To get a sense of what we expect from an experiment, see:
|
## Branching and releasing
|
||||||
|
|
||||||
- the internal/engine/experiment/example experiment
|
The following diagram illustrates the overall branching and releasing
|
||||||
|
strategy loosely followed by the core team. If you are an external
|
||||||
|
contributor, you generally only care about the development part, which
|
||||||
|
is on the left-hand side of the diagram.
|
||||||
|
|
||||||
- the internal/engine/experiment/webconnectivity experiment
|
![branching and releasing](docs/branching.png)
|
||||||
|
|
||||||
- the [internal/tutorial](https://github.com/ooni/probe-cli/tree/master/internal/tutorial) tutorial
|
Development uses the `master` branch. When we need to implement a
|
||||||
|
feature or fix a bug, we branch off of the `master` branch. We squash
|
||||||
|
and merge to include a feature or fix branch back into `master`.
|
||||||
|
|
||||||
|
We periodically tag `-alpha` releases directly on `master`. The
|
||||||
|
semantics of such releases is that we reached a point where we have
|
||||||
|
features we would like to test using the `miniooni` research CLI
|
||||||
|
client. As part of these releases, we also update dependencies and
|
||||||
|
embedded assets. This process ensures that we perform better testing
|
||||||
|
of dependencies and assets as part of development.
|
||||||
|
|
||||||
|
The `master` branch and pull requests only run CI lightweight tests
|
||||||
|
that ensure the code still compiles, has good coverage, and we are
|
||||||
|
not introducing regressions in terms of the measurement engine.
|
||||||
|
|
||||||
|
To draft a release we branch off of `master` and create a `release/x.y`
|
||||||
|
branch where `x` is the major number and `y` is the minor number. For
|
||||||
|
release branches, we enable a very comprehensive set of tests that run
|
||||||
|
automatically with every commit. The purpose of a release branch is to
|
||||||
|
make sure all checks are green and hotfix bugs that we may discover
|
||||||
|
as part of more extensively testing a release candidate. Beta and stable
|
||||||
|
releases should occur on this branch. Subsequent patch releases should
|
||||||
|
also occur on this branch. We have one such branch for each `x.y`
|
||||||
|
release. If there are fixes on `master` that we want to backport, we
|
||||||
|
cherry-pick them into the release branch. Likewise, if we need to
|
||||||
|
forward port fixes, we cherry-pick them into `master`.
|
||||||
|
|
||||||
|
When we branch off release `x.y` from `master`, we also need to bump
|
||||||
|
the `alpha` version used by `master`.
|
||||||
|
|
||||||
|
None of the branches described so far automatically publishes any
|
||||||
|
binary package. To publish binary packages we use the `PRODUCT-staging`
|
||||||
|
branches (e.g., `mobile-staging`). To trigger these builds, we merge
|
||||||
|
from a release branch into the desired `PRODUCT-staging` branch. This
|
||||||
|
design ensures that we only publish binary packages when we want to
|
||||||
|
do so. Because we merge from a release branch, we are not pushing alpha
|
||||||
|
code to binary releases. (The only exception to this rule is `miniooni`,
|
||||||
|
treated differently because it's an `alpha` client.)
|
||||||
|
|
||||||
Thank you!
|
|
||||||
|
|
1940
docs/branching.excalidraw
Normal file
1940
docs/branching.excalidraw
Normal file
File diff suppressed because it is too large
Load Diff
BIN
docs/branching.png
Normal file
BIN
docs/branching.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 891 KiB |
Loading…
Reference in New Issue
Block a user