istio/istio
Development workflow
The full lifecycle of a change: local checkout, branch, code, test, push, review, merge, backport.
Active branches
master— the integration branch. All new development lands here first.release-1.X— long-lived stable branches, one per minor version. Patch releases are cut from these. Backports happen via/cherry-pick release-1.Xcomments on merged PRs.experimental-*— short-lived branches used for feature experiments.
The release branch policy is documented in RELEASE_BRANCHES.md: the project supports the latest three minor releases, plus a brief LTS-ish window for the previous one.
Local setup
# Fork on GitHub, then:
git clone git@github.com:<you>/istio.git
cd istio
git remote add upstream git@github.com:istio/istio.git
# Keep your fork in sync
git fetch upstream
git checkout master
git rebase upstream/masterMost contributors keep master clean and develop on topic branches:
git checkout -b fix/eds-cache-invalidationBuild and test
The fastest inner loop is package-scoped:
# Build everything
make build
# Run only the package(s) you touched
go test -race -tags=assert ./pilot/pkg/networking/core/...
# Or via make
make test PKG=./pilot/pkg/networking/core/...The full pre-PR sweep:
make precommit # format and lint
make gen-check # ensure all generated code is up to date
make test # full unit-test run with -race -tags=assertmake build writes binaries to out/<os>_<arch>/. If you want to test istiod against a real cluster, build, push to a registry, and reuse Helm charts:
HUB=docker.io/<you> TAG=dev make docker.push
istioctl install --set hub=docker.io/<you> --set tag=devFor end-to-end validation against KIND clusters, the integration framework (in pkg/test/framework/ and tests/integration/) handles cluster setup. See Testing.
Commit conventions
- One logical change per commit. Reviewers expect to be able to walk through a PR commit-by-commit.
- Subject line ≤ 72 chars, imperative mood:
pilot: don't push EDS for headless services without selectors. - Sign off all commits with
-s. The DCO bot will block merges otherwise. - Mention the GitHub issue if there is one (
Fixes #59001). Keep the body to a few paragraphs; longer rationale belongs in the release-note YAML or a doc.
The repo does not require Conventional Commits format. Subject prefixes (pilot:, cni:, istioctl:) are common but not enforced.
Opening the PR
Push to your fork and open a PR against istio/istio:master. Fill out the PR template:
- Description — why, not just what. Link related issues.
- Affected areas — check every box that applies. This determines who Prow auto-assigns.
- User-facing change checkbox — drives whether a release note is required.
The first time you open a PR, the CLA bot will ask you to sign the Istio CLA. Do that before requesting review.
Review and merge
Each affected area has a working-group team in CODEOWNERS. Prow auto-assigns reviewers from the relevant teams. Typical sequence:
- CI runs (lint, unit tests, integration smoke).
- A WG reviewer leaves comments. Push fixups; do not squash before approval.
- WG reviewer leaves
/lgtm. - WG approver leaves
/approve. Tidemerges automatically once labels are right.
Common labels:
| Label | Meaning |
|---|---|
lgtm |
A reviewer signed off. |
approve |
An approver signed off. |
do-not-merge/work-in-progress |
Block merge. |
release-notes-required |
The release-note YAML is missing. |
kind/bug, kind/cleanup, kind/feature |
Categorization for the changelog. |
cherrypick-approved |
Auto-cherry-pick has been approved by a maintainer. |
PRs that touch many areas can need approvals from multiple WGs. The bot will leave a comment listing the outstanding teams.
Backports
After merge, comment /cherry-pick release-1.X to request an automatic cherry-pick to a release branch. The bot will open a follow-up PR, run CI, and assign maintainers. If the cherry-pick has merge conflicts, you'll be asked to do it manually:
git fetch upstream
git checkout -b backport-fix-1234-1.27 upstream/release-1.27
git cherry-pick -x <sha-on-master>
# resolve conflicts, then pushCherry-picks of bug fixes are usually accepted; new features generally are not. The release branch maintainers (istio/wg-test-and-release-maintainers) make the call.
Release cadence
Minor releases are cut roughly quarterly (see the cadence in Lore). The release process is automated by prow/release-commit.sh and the scripts under release/. Release notes for a given version are aggregated from the YAML files under releasenotes/notes/ and rendered via the tooling in releasenotes/.
If you're working on a feature that needs to land in a specific release, check the release-tracking issue for that minor (filed by the wg-test-and-release-maintainers) and align with the WG.
Built by Factory AutoWiki from public repository content. It is a generated preview for codebase exploration, not source-maintained documentation.