summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStephen Augustus <saugustus@vmware.com>2020-10-26 06:38:36 -0400
committerStephen Augustus <saugustus@vmware.com>2020-10-26 06:38:36 -0400
commit070ff2cce003db0ab0fc1e4540ff3332d581b93f (patch)
treea694019ecf3bc5209d1a4989a5dd2842f525f08c
parentd83cd53979d08ac0e0e33704c6aec6b1c3cb7c8d (diff)
sig-release: Add doc on version markers (migrated from k/test-infra)
Signed-off-by: Stephen Augustus <saugustus@vmware.com>
-rw-r--r--contributors/devel/sig-release/getting-builds.md153
-rw-r--r--contributors/devel/sig-release/kubernetes-versions.md452
2 files changed, 463 insertions, 142 deletions
diff --git a/contributors/devel/sig-release/getting-builds.md b/contributors/devel/sig-release/getting-builds.md
index cd1373bf..41084572 100644
--- a/contributors/devel/sig-release/getting-builds.md
+++ b/contributors/devel/sig-release/getting-builds.md
@@ -1,12 +1,17 @@
# Getting Kubernetes Builds
+- [Version markers](#version-markers)
- [Using `hack/get-build.sh`](#using-hackget-buildsh)
-- [Using `gsutil`](#using-gsutil)
- - [Install `gsutil`](#install-gsutil)
- - [Examples](#examples)
- - [Output the latest CI version number](#output-the-latest-ci-version-number)
- - [List the contents of a CI release](#list-the-contents-of-a-ci-release)
- - [List all official releases and RCs](#list-all-official-releases-and-rcs)
+
+## Version markers
+
+Version markers are text files which act as sort of a public API for accessing
+Kubernetes builds.
+
+They are artifacts of a successful Kubernetes build which are stored in a
+Google Cloud Storage bucket alongside the builds they make reference to.
+
+You can read more about version markers [here](./kubernetes-versions.md).
## Using `hack/get-build.sh`
@@ -41,139 +46,3 @@ build:
```shell
./hack/get-build.sh -v ci/latest
```
-
-## Using `gsutil`
-
-You can also use the gsutil tool to explore the Google Cloud Storage release
-buckets.
-
-### Install `gsutil`
-
-`gsutil` is part of the Google Cloud SDK.
-Install instructions for the Google Cloud SDK can be found [here](https://cloud.google.com/sdk/install).
-
-### Examples
-
-#### Output the latest CI version number
-
-```console
-$ gsutil cat gs://kubernetes-release-dev/ci/latest.txt
-v1.19.0-beta.2.32+35fc65dc2c614e
-```
-
-#### List the contents of a CI release
-
-```console
-$ gsutil ls gs://kubernetes-release-dev/ci/v1.19.0-beta.2.32+35fc65dc2c614e
-gs://kubernetes-release-dev/ci/v1.19.0-beta.2.32+35fc65dc2c614e/SHA256SUMS
-gs://kubernetes-release-dev/ci/v1.19.0-beta.2.32+35fc65dc2c614e/SHA256SUMS.sha256
-gs://kubernetes-release-dev/ci/v1.19.0-beta.2.32+35fc65dc2c614e/SHA256SUMS.sha512
-gs://kubernetes-release-dev/ci/v1.19.0-beta.2.32+35fc65dc2c614e/SHA512SUMS
-gs://kubernetes-release-dev/ci/v1.19.0-beta.2.32+35fc65dc2c614e/SHA512SUMS.sha256
-gs://kubernetes-release-dev/ci/v1.19.0-beta.2.32+35fc65dc2c614e/SHA512SUMS.sha512
-gs://kubernetes-release-dev/ci/v1.19.0-beta.2.32+35fc65dc2c614e/kubernetes-client-linux-amd64.tar.gz
-gs://kubernetes-release-dev/ci/v1.19.0-beta.2.32+35fc65dc2c614e/kubernetes-client-linux-amd64.tar.gz.sha256
-gs://kubernetes-release-dev/ci/v1.19.0-beta.2.32+35fc65dc2c614e/kubernetes-client-linux-amd64.tar.gz.sha512
-gs://kubernetes-release-dev/ci/v1.19.0-beta.2.32+35fc65dc2c614e/kubernetes-manifests.tar.gz
-gs://kubernetes-release-dev/ci/v1.19.0-beta.2.32+35fc65dc2c614e/kubernetes-manifests.tar.gz.sha256
-gs://kubernetes-release-dev/ci/v1.19.0-beta.2.32+35fc65dc2c614e/kubernetes-manifests.tar.gz.sha512
-gs://kubernetes-release-dev/ci/v1.19.0-beta.2.32+35fc65dc2c614e/kubernetes-node-linux-amd64.tar.gz
-gs://kubernetes-release-dev/ci/v1.19.0-beta.2.32+35fc65dc2c614e/kubernetes-node-linux-amd64.tar.gz.sha256
-gs://kubernetes-release-dev/ci/v1.19.0-beta.2.32+35fc65dc2c614e/kubernetes-node-linux-amd64.tar.gz.sha512
-gs://kubernetes-release-dev/ci/v1.19.0-beta.2.32+35fc65dc2c614e/kubernetes-server-linux-amd64.tar.gz
-gs://kubernetes-release-dev/ci/v1.19.0-beta.2.32+35fc65dc2c614e/kubernetes-server-linux-amd64.tar.gz.sha256
-gs://kubernetes-release-dev/ci/v1.19.0-beta.2.32+35fc65dc2c614e/kubernetes-server-linux-amd64.tar.gz.sha512
-gs://kubernetes-release-dev/ci/v1.19.0-beta.2.32+35fc65dc2c614e/kubernetes-src.tar.gz
-gs://kubernetes-release-dev/ci/v1.19.0-beta.2.32+35fc65dc2c614e/kubernetes-src.tar.gz.sha256
-gs://kubernetes-release-dev/ci/v1.19.0-beta.2.32+35fc65dc2c614e/kubernetes-src.tar.gz.sha512
-gs://kubernetes-release-dev/ci/v1.19.0-beta.2.32+35fc65dc2c614e/kubernetes-test-linux-amd64.tar.gz
-gs://kubernetes-release-dev/ci/v1.19.0-beta.2.32+35fc65dc2c614e/kubernetes-test-linux-amd64.tar.gz.sha256
-gs://kubernetes-release-dev/ci/v1.19.0-beta.2.32+35fc65dc2c614e/kubernetes-test-linux-amd64.tar.gz.sha512
-gs://kubernetes-release-dev/ci/v1.19.0-beta.2.32+35fc65dc2c614e/kubernetes-test-portable.tar.gz
-gs://kubernetes-release-dev/ci/v1.19.0-beta.2.32+35fc65dc2c614e/kubernetes-test-portable.tar.gz.sha256
-gs://kubernetes-release-dev/ci/v1.19.0-beta.2.32+35fc65dc2c614e/kubernetes-test-portable.tar.gz.sha512
-gs://kubernetes-release-dev/ci/v1.19.0-beta.2.32+35fc65dc2c614e/kubernetes.tar.gz
-gs://kubernetes-release-dev/ci/v1.19.0-beta.2.32+35fc65dc2c614e/kubernetes.tar.gz.sha256
-gs://kubernetes-release-dev/ci/v1.19.0-beta.2.32+35fc65dc2c614e/kubernetes.tar.gz.sha512
-gs://kubernetes-release-dev/ci/v1.19.0-beta.2.32+35fc65dc2c614e/bin/
-gs://kubernetes-release-dev/ci/v1.19.0-beta.2.32+35fc65dc2c614e/extra/
-```
-
-#### List all official releases and RCs
-
-```console
-$ gsutil ls gs://kubernetes-release/release
-gs://kubernetes-release/release/kube-register
-gs://kubernetes-release/release/latest-1.0.txt
-gs://kubernetes-release/release/latest-1.1.txt
-gs://kubernetes-release/release/latest-1.10.txt
-gs://kubernetes-release/release/latest-1.11.txt
-gs://kubernetes-release/release/latest-1.12.txt
-gs://kubernetes-release/release/latest-1.13.txt
-gs://kubernetes-release/release/latest-1.14.txt
-gs://kubernetes-release/release/latest-1.15.txt
-gs://kubernetes-release/release/latest-1.16.txt
-gs://kubernetes-release/release/latest-1.17.txt
-gs://kubernetes-release/release/latest-1.18.txt
-gs://kubernetes-release/release/latest-1.19.txt
-gs://kubernetes-release/release/latest-1.2.txt
-gs://kubernetes-release/release/latest-1.3.txt
-gs://kubernetes-release/release/latest-1.4.txt
-gs://kubernetes-release/release/latest-1.5.txt
-gs://kubernetes-release/release/latest-1.6.txt
-gs://kubernetes-release/release/latest-1.7.txt
-gs://kubernetes-release/release/latest-1.8.txt
-gs://kubernetes-release/release/latest-1.9.txt
-gs://kubernetes-release/release/latest-1.txt
-gs://kubernetes-release/release/latest.txt
-gs://kubernetes-release/release/stable-1.0.txt
-gs://kubernetes-release/release/stable-1.1.txt
-gs://kubernetes-release/release/stable-1.10.txt
-gs://kubernetes-release/release/stable-1.11.txt
-gs://kubernetes-release/release/stable-1.12.txt
-gs://kubernetes-release/release/stable-1.13.txt
-gs://kubernetes-release/release/stable-1.14.txt
-gs://kubernetes-release/release/stable-1.15.txt
-gs://kubernetes-release/release/stable-1.16.txt
-gs://kubernetes-release/release/stable-1.17.txt
-gs://kubernetes-release/release/stable-1.18.txt
-gs://kubernetes-release/release/stable-1.2.txt
-gs://kubernetes-release/release/stable-1.3.txt
-gs://kubernetes-release/release/stable-1.4.txt
-gs://kubernetes-release/release/stable-1.5.txt
-gs://kubernetes-release/release/stable-1.6.txt
-gs://kubernetes-release/release/stable-1.7.txt
-gs://kubernetes-release/release/stable-1.8.txt
-gs://kubernetes-release/release/stable-1.9.txt
-gs://kubernetes-release/release/stable-1.txt
-gs://kubernetes-release/release/stable.txt
-
-<snip>
-
-gs://kubernetes-release/release/v1.18.0-alpha.0/
-gs://kubernetes-release/release/v1.18.0-alpha.1/
-gs://kubernetes-release/release/v1.18.0-alpha.2/
-gs://kubernetes-release/release/v1.18.0-alpha.3/
-gs://kubernetes-release/release/v1.18.0-alpha.5/
-gs://kubernetes-release/release/v1.18.0-beta.0/
-gs://kubernetes-release/release/v1.18.0-beta.1/
-gs://kubernetes-release/release/v1.18.0-beta.2/
-gs://kubernetes-release/release/v1.18.0-rc.1/
-gs://kubernetes-release/release/v1.18.0/
-gs://kubernetes-release/release/v1.18.1-beta.0/
-gs://kubernetes-release/release/v1.18.1/
-gs://kubernetes-release/release/v1.18.2-beta.0/
-gs://kubernetes-release/release/v1.18.2/
-gs://kubernetes-release/release/v1.18.3-beta.0/
-gs://kubernetes-release/release/v1.18.3/
-gs://kubernetes-release/release/v1.18.4-rc.0/
-gs://kubernetes-release/release/v1.19.0-alpha.0/
-gs://kubernetes-release/release/v1.19.0-alpha.1/
-gs://kubernetes-release/release/v1.19.0-alpha.2/
-gs://kubernetes-release/release/v1.19.0-alpha.3/
-gs://kubernetes-release/release/v1.19.0-beta.0/
-gs://kubernetes-release/release/v1.19.0-beta.1/
-gs://kubernetes-release/release/v1.19.0-beta.2/
-
-<snip>
-```
diff --git a/contributors/devel/sig-release/kubernetes-versions.md b/contributors/devel/sig-release/kubernetes-versions.md
new file mode 100644
index 00000000..466ded9c
--- /dev/null
+++ b/contributors/devel/sig-release/kubernetes-versions.md
@@ -0,0 +1,452 @@
+# Kubernetes Version Markers
+
+Version markers are text files which act as sort of a public API for accessing
+Kubernetes builds.
+
+They are artifacts of a successful Kubernetes build which are stored in a
+Google Cloud Storage bucket alongside the builds they make reference to.
+
+You may see version markers leveraged in a variety of places, including:
+
+- extraction strategies for e2e tests
+- Release Engineering tooling
+- external user-maintained scripts
+
+## Table of Contents <!-- omit in toc -->
+
+- [tl;dr](#tldr)
+ - [CI - cross build](#ci---cross-build)
+ - [CI - linux/amd64 (fast) build](#ci---linuxamd64-fast-build)
+ - [Release - Official release build](#release---official-release-build)
+ - [Release - Pre-release build](#release---pre-release-build)
+- [Usage](#usage)
+ - [Format](#format)
+ - [Access](#access)
+ - [gsutil](#gsutil)
+ - [curl/wget](#curlwget)
+ - [gcsweb](#gcsweb)
+ - [Querying a build](#querying-a-build)
+- [Marker types](#marker-types)
+ - [CI](#ci)
+ - [latest](#latest)
+ - [latest-fast](#latest-fast)
+ - [**DEPRECATED** - generic](#deprecated---generic)
+ - [Release](#release)
+ - [Official](#official)
+ - [Pre-release](#pre-release)
+- [Future Plans](#future-plans)
+- [Known Issues](#known-issues)
+ - [Generic version markers are not explicit](#generic-version-markers-are-not-explicit)
+ - [Manually created jobs using generic version markers can be inaccurate](#manually-created-jobs-using-generic-version-markers-can-be-inaccurate)
+- [Previous Issues](#previous-issues)
+ - [linux/amd64 version markers are colliding with cross builds](#linuxamd64-version-markers-are-colliding-with-cross-builds)
+ - [Cross builds are stored in a separate GCS bucket](#cross-builds-are-stored-in-a-separate-gcs-bucket)
+ - [Generated jobs may not represent intention](#generated-jobs-may-not-represent-intention)
+ - [bazel version markers appear to be unused](#bazel-version-markers-appear-to-be-unused)
+
+## tl;dr
+
+You need a...
+
+### CI - cross build
+
+Use `gsutil cat gs://kubernetes-release-dev/ci/latest.txt` (`master` branch)
+
+OR
+
+`gsutil cat gs://kubernetes-release-dev/ci/latest-x.y.txt`, where `x` is the
+Kubernetes major version and `y` is the Kubernetes minor version (release branches).
+
+### CI - linux/amd64 (fast) build
+
+Use `gsutil cat gs://kubernetes-release-dev/ci/latest-fast.txt` (**_only available
+on `master` branch_**).
+
+### Release - Official release build
+
+Use `gsutil cat gs://kubernetes-release/release/stable-x.y.txt`, where `x` is the
+Kubernetes major version and `y` is the Kubernetes minor version.
+
+### Release - Pre-release build
+
+Use `gsutil cat gs://kubernetes-release/release/latest-x.y.txt`, where `x` is the
+Kubernetes major version and `y` is the Kubernetes minor version.
+
+## Usage
+
+### Format
+
+All version markers have similar endpoints:
+
+```console
+<gcs-bucket>/<directory>/<marker>
+```
+
+Expected output is [semver](https://semver.org/spec/v2.0.0.html)-compliant
+version, prepended with a `v`.
+
+Example:
+
+```console
+v1.20.0-alpha.0.391+575c4925be8c39
+```
+
+### Access
+
+Version markers are accessible via HTTP, so there are several ways to get them,
+depending on your use case.
+
+#### [gsutil](https://cloud.google.com/storage/docs/gsutil)
+
+```shell
+for version in latest latest-1.19 latest-1.18 latest-1.17 latest-1.16; do
+ echo ci/$version: $(gsutil cat gs://kubernetes-release-dev/ci/$version.txt);
+done
+ci/latest: v1.20.0-alpha.0.391+575c4925be8c39
+ci/latest-1.19: v1.19.0-rc.2.118+d01fde696783fa
+ci/latest-1.18: v1.18.7-rc.0.8+ec73e191f47b79
+ci/latest-1.17: v1.17.10-rc.0.10+79569e22b50897
+ci/latest-1.16: v1.16.14-rc.0.10+5e764419987f2e
+```
+
+#### curl/wget
+
+```console
+https://storage.googleapis.com/<gcs-bucket>/<directory>/<marker>
+```
+
+```shell
+$ curl https://storage.googleapis.com/kubernetes-release-dev/ci/latest.txt
+v1.20.0-alpha.0.391+575c4925be8c39
+```
+
+#### gcsweb
+
+Navigate via web browser to
+`https://gcsweb.k8s.io/gcs/<gcs-bucket>/<directory>/<marker>`.
+
+Example:
+
+```console
+https://gcsweb.k8s.io/gcs/kubernetes-release-dev/ci
+```
+
+### Querying a build
+
+Once you've successfully retrieved a version marker, you can use it to list the
+contents of a Kubernetes build.
+
+Here's an example:
+
+```shell
+$ gsutil ls gs://kubernetes-release-dev/ci/v1.20.0-alpha.0.391+575c4925be8c39
+```
+
+Output:
+
+<details>
+
+```console
+gs://kubernetes-release-dev/ci/v1.20.0-alpha.0.391+575c4925be8c39/SHA256SUMS
+gs://kubernetes-release-dev/ci/v1.20.0-alpha.0.391+575c4925be8c39/SHA256SUMS.sha256
+gs://kubernetes-release-dev/ci/v1.20.0-alpha.0.391+575c4925be8c39/SHA256SUMS.sha512
+gs://kubernetes-release-dev/ci/v1.20.0-alpha.0.391+575c4925be8c39/SHA512SUMS
+gs://kubernetes-release-dev/ci/v1.20.0-alpha.0.391+575c4925be8c39/SHA512SUMS.sha256
+gs://kubernetes-release-dev/ci/v1.20.0-alpha.0.391+575c4925be8c39/SHA512SUMS.sha512
+gs://kubernetes-release-dev/ci/v1.20.0-alpha.0.391+575c4925be8c39/kubernetes-client-darwin-amd64.tar.gz
+gs://kubernetes-release-dev/ci/v1.20.0-alpha.0.391+575c4925be8c39/kubernetes-client-darwin-amd64.tar.gz.sha256
+gs://kubernetes-release-dev/ci/v1.20.0-alpha.0.391+575c4925be8c39/kubernetes-client-darwin-amd64.tar.gz.sha512
+gs://kubernetes-release-dev/ci/v1.20.0-alpha.0.391+575c4925be8c39/kubernetes-client-linux-386.tar.gz
+gs://kubernetes-release-dev/ci/v1.20.0-alpha.0.391+575c4925be8c39/kubernetes-client-linux-386.tar.gz.sha256
+gs://kubernetes-release-dev/ci/v1.20.0-alpha.0.391+575c4925be8c39/kubernetes-client-linux-386.tar.gz.sha512
+gs://kubernetes-release-dev/ci/v1.20.0-alpha.0.391+575c4925be8c39/kubernetes-client-linux-amd64.tar.gz
+gs://kubernetes-release-dev/ci/v1.20.0-alpha.0.391+575c4925be8c39/kubernetes-client-linux-amd64.tar.gz.sha256
+gs://kubernetes-release-dev/ci/v1.20.0-alpha.0.391+575c4925be8c39/kubernetes-client-linux-amd64.tar.gz.sha512
+gs://kubernetes-release-dev/ci/v1.20.0-alpha.0.391+575c4925be8c39/kubernetes-client-linux-arm.tar.gz
+gs://kubernetes-release-dev/ci/v1.20.0-alpha.0.391+575c4925be8c39/kubernetes-client-linux-arm.tar.gz.sha256
+gs://kubernetes-release-dev/ci/v1.20.0-alpha.0.391+575c4925be8c39/kubernetes-client-linux-arm.tar.gz.sha512
+gs://kubernetes-release-dev/ci/v1.20.0-alpha.0.391+575c4925be8c39/kubernetes-client-linux-arm64.tar.gz
+gs://kubernetes-release-dev/ci/v1.20.0-alpha.0.391+575c4925be8c39/kubernetes-client-linux-arm64.tar.gz.sha256
+gs://kubernetes-release-dev/ci/v1.20.0-alpha.0.391+575c4925be8c39/kubernetes-client-linux-arm64.tar.gz.sha512
+gs://kubernetes-release-dev/ci/v1.20.0-alpha.0.391+575c4925be8c39/kubernetes-client-linux-ppc64le.tar.gz
+gs://kubernetes-release-dev/ci/v1.20.0-alpha.0.391+575c4925be8c39/kubernetes-client-linux-ppc64le.tar.gz.sha256
+gs://kubernetes-release-dev/ci/v1.20.0-alpha.0.391+575c4925be8c39/kubernetes-client-linux-ppc64le.tar.gz.sha512
+gs://kubernetes-release-dev/ci/v1.20.0-alpha.0.391+575c4925be8c39/kubernetes-client-linux-s390x.tar.gz
+gs://kubernetes-release-dev/ci/v1.20.0-alpha.0.391+575c4925be8c39/kubernetes-client-linux-s390x.tar.gz.sha256
+gs://kubernetes-release-dev/ci/v1.20.0-alpha.0.391+575c4925be8c39/kubernetes-client-linux-s390x.tar.gz.sha512
+gs://kubernetes-release-dev/ci/v1.20.0-alpha.0.391+575c4925be8c39/kubernetes-client-windows-386.tar.gz
+gs://kubernetes-release-dev/ci/v1.20.0-alpha.0.391+575c4925be8c39/kubernetes-client-windows-386.tar.gz.sha256
+gs://kubernetes-release-dev/ci/v1.20.0-alpha.0.391+575c4925be8c39/kubernetes-client-windows-386.tar.gz.sha512
+gs://kubernetes-release-dev/ci/v1.20.0-alpha.0.391+575c4925be8c39/kubernetes-client-windows-amd64.tar.gz
+gs://kubernetes-release-dev/ci/v1.20.0-alpha.0.391+575c4925be8c39/kubernetes-client-windows-amd64.tar.gz.sha256
+gs://kubernetes-release-dev/ci/v1.20.0-alpha.0.391+575c4925be8c39/kubernetes-client-windows-amd64.tar.gz.sha512
+gs://kubernetes-release-dev/ci/v1.20.0-alpha.0.391+575c4925be8c39/kubernetes-manifests.tar.gz
+gs://kubernetes-release-dev/ci/v1.20.0-alpha.0.391+575c4925be8c39/kubernetes-manifests.tar.gz.sha256
+gs://kubernetes-release-dev/ci/v1.20.0-alpha.0.391+575c4925be8c39/kubernetes-manifests.tar.gz.sha512
+gs://kubernetes-release-dev/ci/v1.20.0-alpha.0.391+575c4925be8c39/kubernetes-node-linux-amd64.tar.gz
+gs://kubernetes-release-dev/ci/v1.20.0-alpha.0.391+575c4925be8c39/kubernetes-node-linux-amd64.tar.gz.sha256
+gs://kubernetes-release-dev/ci/v1.20.0-alpha.0.391+575c4925be8c39/kubernetes-node-linux-amd64.tar.gz.sha512
+gs://kubernetes-release-dev/ci/v1.20.0-alpha.0.391+575c4925be8c39/kubernetes-node-linux-arm.tar.gz
+gs://kubernetes-release-dev/ci/v1.20.0-alpha.0.391+575c4925be8c39/kubernetes-node-linux-arm.tar.gz.sha256
+gs://kubernetes-release-dev/ci/v1.20.0-alpha.0.391+575c4925be8c39/kubernetes-node-linux-arm.tar.gz.sha512
+gs://kubernetes-release-dev/ci/v1.20.0-alpha.0.391+575c4925be8c39/kubernetes-node-linux-arm64.tar.gz
+gs://kubernetes-release-dev/ci/v1.20.0-alpha.0.391+575c4925be8c39/kubernetes-node-linux-arm64.tar.gz.sha256
+gs://kubernetes-release-dev/ci/v1.20.0-alpha.0.391+575c4925be8c39/kubernetes-node-linux-arm64.tar.gz.sha512
+gs://kubernetes-release-dev/ci/v1.20.0-alpha.0.391+575c4925be8c39/kubernetes-node-linux-ppc64le.tar.gz
+gs://kubernetes-release-dev/ci/v1.20.0-alpha.0.391+575c4925be8c39/kubernetes-node-linux-ppc64le.tar.gz.sha256
+gs://kubernetes-release-dev/ci/v1.20.0-alpha.0.391+575c4925be8c39/kubernetes-node-linux-ppc64le.tar.gz.sha512
+gs://kubernetes-release-dev/ci/v1.20.0-alpha.0.391+575c4925be8c39/kubernetes-node-linux-s390x.tar.gz
+gs://kubernetes-release-dev/ci/v1.20.0-alpha.0.391+575c4925be8c39/kubernetes-node-linux-s390x.tar.gz.sha256
+gs://kubernetes-release-dev/ci/v1.20.0-alpha.0.391+575c4925be8c39/kubernetes-node-linux-s390x.tar.gz.sha512
+gs://kubernetes-release-dev/ci/v1.20.0-alpha.0.391+575c4925be8c39/kubernetes-node-windows-amd64.tar.gz
+gs://kubernetes-release-dev/ci/v1.20.0-alpha.0.391+575c4925be8c39/kubernetes-node-windows-amd64.tar.gz.sha256
+gs://kubernetes-release-dev/ci/v1.20.0-alpha.0.391+575c4925be8c39/kubernetes-node-windows-amd64.tar.gz.sha512
+gs://kubernetes-release-dev/ci/v1.20.0-alpha.0.391+575c4925be8c39/kubernetes-server-linux-amd64.tar.gz
+gs://kubernetes-release-dev/ci/v1.20.0-alpha.0.391+575c4925be8c39/kubernetes-server-linux-amd64.tar.gz.sha256
+gs://kubernetes-release-dev/ci/v1.20.0-alpha.0.391+575c4925be8c39/kubernetes-server-linux-amd64.tar.gz.sha512
+gs://kubernetes-release-dev/ci/v1.20.0-alpha.0.391+575c4925be8c39/kubernetes-server-linux-arm.tar.gz
+gs://kubernetes-release-dev/ci/v1.20.0-alpha.0.391+575c4925be8c39/kubernetes-server-linux-arm.tar.gz.sha256
+gs://kubernetes-release-dev/ci/v1.20.0-alpha.0.391+575c4925be8c39/kubernetes-server-linux-arm.tar.gz.sha512
+gs://kubernetes-release-dev/ci/v1.20.0-alpha.0.391+575c4925be8c39/kubernetes-server-linux-arm64.tar.gz
+gs://kubernetes-release-dev/ci/v1.20.0-alpha.0.391+575c4925be8c39/kubernetes-server-linux-arm64.tar.gz.sha256
+gs://kubernetes-release-dev/ci/v1.20.0-alpha.0.391+575c4925be8c39/kubernetes-server-linux-arm64.tar.gz.sha512
+gs://kubernetes-release-dev/ci/v1.20.0-alpha.0.391+575c4925be8c39/kubernetes-server-linux-ppc64le.tar.gz
+gs://kubernetes-release-dev/ci/v1.20.0-alpha.0.391+575c4925be8c39/kubernetes-server-linux-ppc64le.tar.gz.sha256
+gs://kubernetes-release-dev/ci/v1.20.0-alpha.0.391+575c4925be8c39/kubernetes-server-linux-ppc64le.tar.gz.sha512
+gs://kubernetes-release-dev/ci/v1.20.0-alpha.0.391+575c4925be8c39/kubernetes-server-linux-s390x.tar.gz
+gs://kubernetes-release-dev/ci/v1.20.0-alpha.0.391+575c4925be8c39/kubernetes-server-linux-s390x.tar.gz.sha256
+gs://kubernetes-release-dev/ci/v1.20.0-alpha.0.391+575c4925be8c39/kubernetes-server-linux-s390x.tar.gz.sha512
+gs://kubernetes-release-dev/ci/v1.20.0-alpha.0.391+575c4925be8c39/kubernetes-src.tar.gz
+gs://kubernetes-release-dev/ci/v1.20.0-alpha.0.391+575c4925be8c39/kubernetes-src.tar.gz.sha256
+gs://kubernetes-release-dev/ci/v1.20.0-alpha.0.391+575c4925be8c39/kubernetes-src.tar.gz.sha512
+gs://kubernetes-release-dev/ci/v1.20.0-alpha.0.391+575c4925be8c39/kubernetes-test-darwin-amd64.tar.gz
+gs://kubernetes-release-dev/ci/v1.20.0-alpha.0.391+575c4925be8c39/kubernetes-test-darwin-amd64.tar.gz.sha256
+gs://kubernetes-release-dev/ci/v1.20.0-alpha.0.391+575c4925be8c39/kubernetes-test-darwin-amd64.tar.gz.sha512
+gs://kubernetes-release-dev/ci/v1.20.0-alpha.0.391+575c4925be8c39/kubernetes-test-linux-amd64.tar.gz
+gs://kubernetes-release-dev/ci/v1.20.0-alpha.0.391+575c4925be8c39/kubernetes-test-linux-amd64.tar.gz.sha256
+gs://kubernetes-release-dev/ci/v1.20.0-alpha.0.391+575c4925be8c39/kubernetes-test-linux-amd64.tar.gz.sha512
+gs://kubernetes-release-dev/ci/v1.20.0-alpha.0.391+575c4925be8c39/kubernetes-test-linux-arm.tar.gz
+gs://kubernetes-release-dev/ci/v1.20.0-alpha.0.391+575c4925be8c39/kubernetes-test-linux-arm.tar.gz.sha256
+gs://kubernetes-release-dev/ci/v1.20.0-alpha.0.391+575c4925be8c39/kubernetes-test-linux-arm.tar.gz.sha512
+gs://kubernetes-release-dev/ci/v1.20.0-alpha.0.391+575c4925be8c39/kubernetes-test-linux-arm64.tar.gz
+gs://kubernetes-release-dev/ci/v1.20.0-alpha.0.391+575c4925be8c39/kubernetes-test-linux-arm64.tar.gz.sha256
+gs://kubernetes-release-dev/ci/v1.20.0-alpha.0.391+575c4925be8c39/kubernetes-test-linux-arm64.tar.gz.sha512
+gs://kubernetes-release-dev/ci/v1.20.0-alpha.0.391+575c4925be8c39/kubernetes-test-linux-ppc64le.tar.gz
+gs://kubernetes-release-dev/ci/v1.20.0-alpha.0.391+575c4925be8c39/kubernetes-test-linux-ppc64le.tar.gz.sha256
+gs://kubernetes-release-dev/ci/v1.20.0-alpha.0.391+575c4925be8c39/kubernetes-test-linux-ppc64le.tar.gz.sha512
+gs://kubernetes-release-dev/ci/v1.20.0-alpha.0.391+575c4925be8c39/kubernetes-test-linux-s390x.tar.gz
+gs://kubernetes-release-dev/ci/v1.20.0-alpha.0.391+575c4925be8c39/kubernetes-test-linux-s390x.tar.gz.sha256
+gs://kubernetes-release-dev/ci/v1.20.0-alpha.0.391+575c4925be8c39/kubernetes-test-linux-s390x.tar.gz.sha512
+gs://kubernetes-release-dev/ci/v1.20.0-alpha.0.391+575c4925be8c39/kubernetes-test-portable.tar.gz
+gs://kubernetes-release-dev/ci/v1.20.0-alpha.0.391+575c4925be8c39/kubernetes-test-portable.tar.gz.sha256
+gs://kubernetes-release-dev/ci/v1.20.0-alpha.0.391+575c4925be8c39/kubernetes-test-portable.tar.gz.sha512
+gs://kubernetes-release-dev/ci/v1.20.0-alpha.0.391+575c4925be8c39/kubernetes-test-windows-amd64.tar.gz
+gs://kubernetes-release-dev/ci/v1.20.0-alpha.0.391+575c4925be8c39/kubernetes-test-windows-amd64.tar.gz.sha256
+gs://kubernetes-release-dev/ci/v1.20.0-alpha.0.391+575c4925be8c39/kubernetes-test-windows-amd64.tar.gz.sha512
+gs://kubernetes-release-dev/ci/v1.20.0-alpha.0.391+575c4925be8c39/kubernetes.tar.gz
+gs://kubernetes-release-dev/ci/v1.20.0-alpha.0.391+575c4925be8c39/kubernetes.tar.gz.sha256
+gs://kubernetes-release-dev/ci/v1.20.0-alpha.0.391+575c4925be8c39/kubernetes.tar.gz.sha512
+gs://kubernetes-release-dev/ci/v1.20.0-alpha.0.391+575c4925be8c39/bin/
+gs://kubernetes-release-dev/ci/v1.20.0-alpha.0.391+575c4925be8c39/extra/
+```
+
+</details>
+
+A general, non-exhaustive list of the expected artifacts of a Kubernetes build
+can be found [here](https://git.k8s.io/sig-release/release-engineering/artifacts.md).
+
+## Marker types
+
+Version markers are broken into two primary types: `CI` and `release` markers
+
+### CI
+
+**GCS Bucket:** `kubernetes-release-dev`
+
+**Directory:** `ci`
+
+#### latest
+
+**Path:** `https://storage.googleapis.com/kubernetes-release-dev/ci/latest[-x.y].txt`
+
+**kubekins-e2e `extract`:** `ci/latest[-x.y].txt`
+
+`latest` markers reference cross builds generated via the `ci-kubernetes-build`
+jobs, which run approximately every hour.
+
+This version marker exists for all active Kubernetes release branches.
+
+#### latest-fast
+
+**Path:** `https://storage.googleapis.com/kubernetes-release-dev/ci/latest-fast.txt`
+
+**kubekins-e2e `extract`:** `ci/latest-fast.txt`
+
+`latest-fast` markers reference linux/amd64-only builds generated via the
+`ci-kubernetes-build-fast` job, which run approximately every 5 minutes.
+
+This version marker only exists for the `master` branch.
+
+#### **DEPRECATED** - generic
+
+**Path:** `https://storage.googleapis.com/kubernetes-release-dev/ci/k8s-<generic-version>.txt`
+
+**kubekins-e2e `extract`:** `ci/k8s-<generic-version>.txt`
+
+The following generic markers are available:
+
+- `k8s-master`
+- `k8s-beta`
+- `k8s-stable1`
+- `k8s-stable2`
+- `k8s-stable3`
+
+Generic markers reference cross builds generated via the `ci-kubernetes-build`
+jobs, which run approximately every hour.
+
+This version marker exists for all active Kubernetes release branches.
+
+**Whenever possible, prefer using the latest version markers instead of
+generic ones. The meaning of these markers changes throughout the release
+cycles, which frequently leads to job misconfiguration and increased
+difficulty in debugging failures. These generic markers only continue to exist
+to prevent breakage in jobs that currently use them. They will be disabled at a
+future date.**
+
+### Release
+
+**GCS Bucket:** `kubernetes-release`
+
+**Directory:** `release`
+
+#### Official
+
+**Path:** `https://storage.googleapis.com/kubernetes-release/release/stable-x.y.txt`
+
+**kubekins-e2e `extract`:** `release/stable-x.y.txt`
+
+`stable` markers reference cross builds generated via the official Kubernetes
+releases and can only be produced by [Release Managers][release-managers].
+
+This version marker exists for all active Kubernetes release branches that have
+had a minor (`x.y.0`) release.
+
+#### Pre-release
+
+**Path:** `https://storage.googleapis.com/kubernetes-release/release/latest-x.y.txt`
+
+**kubekins-e2e `extract`:** `release/latest-x.y.txt`
+
+`latest` markers reference cross builds generated via the Kubernetes
+pre-releases and can only be produced by [Release Managers][release-managers].
+
+This version marker exists for all active Kubernetes release branches.
+
+## Future Plans
+
+(An up-to-date tracking issue for this work can be found [here](https://github.com/kubernetes/sig-release/issues/850).)
+
+- [x] (https://github.com/kubernetes/test-infra/pull/15564) Use explicit (`latest-x.y`) version markers in generated jobs
+- [ ] (https://github.com/kubernetes/test-infra/pull/18290, https://github.com/kubernetes/release/pull/1389) Publish fast builds to separate subdirectory to prevent collisions
+- [ ] (https://github.com/kubernetes/test-infra/pull/18169) Add a new `stable4` field to the kubernetes version lists in [`releng/test_config.yaml`][test_config.yaml] to remove confusion around jobs with `beta` in their name
+- [ ] Refactor any non-generated jobs using generic version markers
+- [ ] Refactor any config-forked release jobs using generic version markers
+- [ ] Refactor any jobs using `fork-per-release-generic-suffix: "true"` annotations
+- [ ] Disable usage of `fork-per-release-generic-suffix: "true"` annotations
+- [ ] Rewrite the [Kubernetes versions doc](https://github.com/kubernetes/test-infra/blob/master/docs/kubernetes-versions.md) and put it in a more visible location
+- [ ] Refactor [`releng/test_config.yaml`][test_config.yaml] to remove references to generic versions (e.g., prefer `ci-kubernetes-e2enode-ubuntu1-latest-1-19-gkespec` over `ci-kubernetes-e2enode-ubuntu1-k8sbeta-gkespec`)
+
+## Known Issues
+
+Unfortunately, the way certain version markers are generated and utilized can
+at best be confusing, and at worst, disruptive.
+
+There are a variety of problems, some of which are symptoms of the other ones...
+
+### Generic version markers are not explicit
+
+We publish a set of additional generic version markers:
+
+- `k8s-master`
+- `k8s-beta`
+- `k8s-stable1`
+- `k8s-stable2`
+- `k8s-stable3`
+
+Depending on the point in the release cycle, the meaning of these markers can
+change.
+
+- `k8s-master` always points to the version on `master`.
+- `k8s-beta` may represent:
+ - `master`s build version (pre-branch cut)
+ - a to-be-released build version (post-branch cut)
+ - a recently released build version (post-release)
+
+Knowing what these markers mean at any one time presumes knowledge of the
+build/release process or a correct interpretation of this document, which has
+frequently out of date and lives in a low-visibility location.
+
+### Manually created jobs using generic version markers can be inaccurate
+
+Non-generated jobs using generic version markers do not get the same level of
+scrutiny as ones that are generated via
+[`releng/test_config.yaml`][test_config.yaml].
+
+This leads to inaccuracies between the versions presumed to be used in test
+and the versions that may be displayed in testgrid.
+
+`ci-kubernetes-e2e-gce-beta-stable1-gci-kubectl-skew` is a great example:
+
+https://github.com/kubernetes/test-infra/blob/96e08f4be2a86189f59c72055785f817ac346d30/config/jobs/kubernetes/sig-cli/sig-cli-config.yaml#L85-L112
+
+All variants of that prowjob have landed on the `sig-release-job-config-errors`
+dashboard for various misconfiguration issues that are the result of generic
+version markers.
+
+## Previous Issues
+
+### linux/amd64 version markers are colliding with cross builds
+
+(Fixed in https://github.com/kubernetes/test-infra/pull/18290.)
+
+"Fast" (linux/amd64-only) builds run every 5 minutes, while cross builds run
+every hour.
+They also write to the same version markers (`latest.txt`,
+`latest-<major>.txt`, `latest-<major>.<minor>.txt`).
+
+The Kubernetes build jobs have a mechanism for checking if a build already
+exists and will exit early to save on test cycles.
+
+What this means is if a "fast" build has already happened for a commit, then
+the corresponding cross build will exit without building.
+
+This has been happening pretty consistently lately, so cross build consumers
+are using much older versions of Kubernetes than intended.
+
+(Note that this condition only happens on `master`.)
+
+### Cross builds are stored in a separate GCS bucket
+
+(Fixed in https://github.com/kubernetes/test-infra/pull/14030.)
+
+This makes long-term usage of cross builds a little more difficult, since
+scripts utilizing version markers tend to consider only the version marker
+filename, while the GCS bucket name remains unparameterized.
+
+### Generated jobs may not represent intention
+
+(Fixed in https://github.com/kubernetes/test-infra/pull/15564.)
+
+As the generic version markers can shift throughout the release cycle, every
+time we regenerate jobs, they may not represent what we intend to test.
+
+The best examples of this are pretty much every job using the `k8s-beta`
+version marker, and more specifically, skew and upgrade jobs.
+
+### bazel version markers appear to be unused
+
+(Fixed in https://github.com/kubernetes/test-infra/pull/15612.)
+
+
+[release-managers]: https://git.k8s.io/sig-release/release-managers.md
+[test_config.yaml]: https://github.com/kubernetes/test-infra/blob/master/releng/test_config.yaml