Code behind robot to publish from staging to real repositories.
Switch branches/tags
Nothing to show
Clone or download
Latest commit 444f57d Oct 9, 2018
Permalink
Failed to load latest commit information.
.git-crypt
artifacts
cmd
configs
hack
pkg
vendor
.gitattributes
.gitignore
.travis.yml
CONTRIBUTING.md
Dockerfile
Gopkg.lock
Gopkg.toml
LICENSE
Makefile
OWNERS
README.md
SECURITY_CONTACTS
code-of-conduct.md

README.md

Kubernetes Publishing Bot

Build Status

Overview

The publishing bot publishes the code in k8s.io/kubernetes/staging to their own repositories. It guarantees that the master branches of the published repositories are compatible, i.e., if a user go get a published repository in a clean GOPATH, the repo is guaranteed to work.

It pulls the latest k8s.io/kubernetes changes and runs git filter-branch to distill the commits that affect a staging repo. Then it cherry-picks merged PRs with their feature branch commits to the target repo. It records the SHA1 of the last cherrypicked commits in Kubernetes-sha: <sha> lines in the commit messages.

The robot is also responsible to update the Godeps/Godeps.json and the vendor/ directory for the target repos.

Playbook

Publishing a new repo or a new branch

Testing and deploying the robot

Currently we don't have tests for the bot. It relies on manual tests:

  • Fork the repos you are going the publish.

  • Run hack/fetch-all-latest-and-push.sh from the bot root directory to update the branches of your repos. This will sync your forks with upstream. CAUTION: this might delete data in your forks.

  • Create a config and a corresponding ConfigMap in configs,

  • Create a rule config and a corresponding ConfigMap in configs,

    • by copying configs/example-rules-configmap.yaml,
    • and by changing the Makefile constants in configs/<yourconfig>
    • and the ConfigMap values in configs/<yourconfig>-rules-configmap.yaml.
  • Deploy the publishing bot by running make from the bot root directory, e.g.

$ make build-image push-image CONFIG=configs/<yourconfig>
$ make run CONFIG=configs/<yourconfig> TOKEN=<github-token>

for a fire-and-forget pod. Or use

$ make deploy CONFIG=configs/<yourconfig> TOKEN=<github-token>

to run a ReplicationController that publishes every 24h (you can change the INTERVAL config value for different intervals).

This will not push to your org, but runs in dry-run mode. To run with a push, add DRYRUN=false to your make command line.

Running in Production

  • Use one of the existing configs and
  • launch make deploy CONFIG=configs/kubernetes-nightly

Caution: Make sure that the bot github user CANNOT close arbitrary issues in the upstream repo. Otherwise, github will close, them triggered by Fixes kubernetes/kubernetes#123 patterns in published commits.

Contributing

Please see CONTRIBUTING.md for instructions on how to contribute.

Known issues

  1. Testing: currently we rely on manual testing. We should set up CI for it.
  2. Automate release process (tracked at https://github.com/kubernetes/kubernetes/issues/49011): when kubernetes release, automatic update the configuration of the publishing robot. This probably means that the config must move into the Kubernetes repo, e.g. as a .publishing.yaml file.