Compare commits
191 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c63554c534 | ||
|
|
be8ed8a696 | ||
|
|
98530d9968 | ||
|
|
38adc513a6 | ||
|
|
eb12e3bde1 | ||
|
|
8b2839d36e | ||
|
|
f0fa2aa6bb | ||
|
|
33528b073f | ||
|
|
cf8783ea37 | ||
|
|
00355635f8 | ||
|
|
aa485f4bf1 | ||
|
|
273b05fb24 | ||
|
|
e470474d6f | ||
|
|
ddfd2fe2ec | ||
|
|
7533d0ae99 | ||
|
|
04ec7f0388 | ||
|
|
419000cc13 | ||
|
|
0dc8edb437 | ||
|
|
0759b6531b | ||
|
|
d8f984de7d | ||
|
|
82e490a875 | ||
|
|
c6dffd9d3e | ||
|
|
8ee3d5835a | ||
|
|
1209d7e42b | ||
|
|
cdc05ba506 | ||
|
|
a6fae0195f | ||
|
|
11375b6890 | ||
|
|
3811470ebf | ||
|
|
e2b08eb4dc | ||
|
|
38d3ca1022 | ||
|
|
df459c5fe6 | ||
|
|
d1d9c0e2a9 | ||
|
|
c1b1d7d448 | ||
|
|
e6b5ee2042 | ||
|
|
0170fc6166 | ||
|
|
4cc2ada2a2 | ||
|
|
a5d3e4f6a6 | ||
|
|
7c92b33886 | ||
|
|
0f0b9414ae | ||
|
|
6fbb67ee8c | ||
|
|
6634f1a9ae | ||
|
|
8da8138f77 | ||
|
|
588f4c477b | ||
|
|
fda1775d3a | ||
|
|
fc71d53c71 | ||
|
|
ab2a320659 | ||
|
|
7f50f81ac7 | ||
|
|
c36a13ccff | ||
|
|
47de726345 | ||
|
|
7a4fdbddc0 | ||
|
|
0dc6f33550 | ||
|
|
b2436eb0df | ||
|
|
cc673159d7 | ||
|
|
17c310d66d | ||
|
|
e7357c4e07 | ||
|
|
c44de2d7c3 | ||
|
|
d82b2c219a | ||
|
|
35c8957a55 | ||
|
|
8555f8250a | ||
|
|
8137a25b13 | ||
|
|
2db5573c0e | ||
|
|
1e382203b8 | ||
|
|
873903a4cb | ||
|
|
e5b8afc085 | ||
|
|
ded658fed9 | ||
|
|
88d8858900 | ||
|
|
737c185aa6 | ||
|
|
0006a68740 | ||
|
|
4db91f7062 | ||
|
|
b8c23967b7 | ||
|
|
2019d048a4 | ||
|
|
fe0a4eb20c | ||
|
|
a35b0e8639 | ||
|
|
4c0843f92a | ||
|
|
867c1af897 | ||
|
|
100308289f | ||
|
|
3d4739760d | ||
|
|
9f321dd685 | ||
|
|
ba6078f235 | ||
|
|
cd2f1a24bd | ||
|
|
b87a81b798 | ||
|
|
0f9dd61786 | ||
|
|
4869a9f3ae | ||
|
|
cd6f36302d | ||
|
|
e5fdc7a57d | ||
|
|
834a601311 | ||
|
|
a2784c533e | ||
|
|
8e3ee3439c | ||
|
|
f9d40cfe1b | ||
|
|
b26b49fac2 | ||
|
|
f68d647fd0 | ||
|
|
deb3fb01a2 | ||
|
|
3accd23a19 | ||
|
|
6a66113560 | ||
|
|
6a7f7415fa | ||
|
|
4654f2cba9 | ||
|
|
17557dc206 | ||
|
|
39a3898234 | ||
|
|
9372cf9f18 | ||
|
|
41e427d645 | ||
|
|
84ff6f7e89 | ||
|
|
a286625ad9 | ||
|
|
d7999e6627 | ||
|
|
41481c1ca8 | ||
|
|
e926486b0f | ||
|
|
3ad55c9750 | ||
|
|
06c4151ec4 | ||
|
|
51605d9e04 | ||
|
|
438b558809 | ||
|
|
293c44b2a5 | ||
|
|
55de241f48 | ||
|
|
fda1d32dec | ||
|
|
b8d5295690 | ||
|
|
fdc8dd8795 | ||
|
|
99b3775926 | ||
|
|
f0f44c9d35 | ||
|
|
d7b878f980 | ||
|
|
d8c8b90a95 | ||
|
|
8be3d82ae9 | ||
|
|
fd778be943 | ||
|
|
51936bdc89 | ||
|
|
2935fad54d | ||
|
|
c9257bdb99 | ||
|
|
90a6ace666 | ||
|
|
5eb2b5211c | ||
|
|
2ed9ddcdf8 | ||
|
|
92f4be79ac | ||
|
|
593f450093 | ||
|
|
d20efe4509 | ||
|
|
fcac992e71 | ||
|
|
d59663810c | ||
|
|
37abdbb774 | ||
|
|
a5909682cd | ||
|
|
927b4324ae | ||
|
|
1ae72dafca | ||
|
|
392865ec59 | ||
|
|
3f1af1ec85 | ||
|
|
487432d873 | ||
|
|
a1ff44454a | ||
|
|
05b0557430 | ||
|
|
975b84a2eb | ||
|
|
3e845f1a29 | ||
|
|
49a266c207 | ||
|
|
7284e55eb0 | ||
|
|
b82fd5e5a5 | ||
|
|
4b084cf685 | ||
|
|
e6c740d917 | ||
|
|
cb93a9a158 | ||
|
|
3ea65ea1ad | ||
|
|
70d91bb399 | ||
|
|
f5fa18d7ca | ||
|
|
cb24c74769 | ||
|
|
775dc91ede | ||
|
|
ffef8ba4d9 | ||
|
|
ef2df0d7bc | ||
|
|
f0bf5219d4 | ||
|
|
c8a1165db2 | ||
|
|
e9c3518ce7 | ||
|
|
a5ea6587c0 | ||
|
|
2792835d66 | ||
|
|
16867db1b4 | ||
|
|
164bbb884d | ||
|
|
873141b9ca | ||
|
|
4a66a28c01 | ||
|
|
c886c1db62 | ||
|
|
f2d121a13b | ||
|
|
f255938780 | ||
|
|
aa17367de7 | ||
|
|
d5df6df661 | ||
|
|
ec6004963c | ||
|
|
61d272dbbc | ||
|
|
6be97b3fc7 | ||
|
|
6f95275051 | ||
|
|
49829fc80f | ||
|
|
9112c5a064 | ||
|
|
73c4833697 | ||
|
|
f3ca6266ab | ||
|
|
03acb869b7 | ||
|
|
8470d728f9 | ||
|
|
71965b199b | ||
|
|
fd47d385c2 | ||
|
|
dfdd8cffd7 | ||
|
|
138c42ec3a | ||
|
|
e53723c9c2 | ||
|
|
03be6a58ac | ||
|
|
864f362f7d | ||
|
|
bfb329b2f3 | ||
|
|
4ce65be0c6 | ||
|
|
6ab598d71b | ||
|
|
06b8ab4096 | ||
|
|
596bb6487c |
50
.cosign/README.md
Normal file
@@ -0,0 +1,50 @@
|
||||
# Flagger signed releases
|
||||
|
||||
Flagger releases published to GitHub Container Registry as multi-arch container images
|
||||
are signed using [cosign](https://github.com/sigstore/cosign).
|
||||
|
||||
## Verify Flagger images
|
||||
|
||||
Install the [cosign](https://github.com/sigstore/cosign) CLI:
|
||||
|
||||
```sh
|
||||
brew install sigstore/tap/cosign
|
||||
```
|
||||
|
||||
Verify a Flagger release with cosign CLI:
|
||||
|
||||
```sh
|
||||
cosign verify -key https://raw.githubusercontent.com/fluxcd/flagger/main/cosign/cosign.pub \
|
||||
ghcr.io/fluxcd/flagger:1.13.0
|
||||
```
|
||||
|
||||
Verify Flagger images before they get pulled on your Kubernetes clusters with [Kyverno](https://github.com/kyverno/kyverno/):
|
||||
|
||||
```yaml
|
||||
apiVersion: kyverno.io/v1
|
||||
kind: ClusterPolicy
|
||||
metadata:
|
||||
name: verify-flagger-image
|
||||
annotations:
|
||||
policies.kyverno.io/title: Verify Flagger Image
|
||||
policies.kyverno.io/category: Cosign
|
||||
policies.kyverno.io/severity: medium
|
||||
policies.kyverno.io/subject: Pod
|
||||
policies.kyverno.io/minversion: 1.4.2
|
||||
spec:
|
||||
validationFailureAction: enforce
|
||||
background: false
|
||||
rules:
|
||||
- name: verify-image
|
||||
match:
|
||||
resources:
|
||||
kinds:
|
||||
- Pod
|
||||
verifyImages:
|
||||
- image: "ghcr.io/fluxcd/flagger:*"
|
||||
key: |-
|
||||
-----BEGIN PUBLIC KEY-----
|
||||
MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEST+BqQ1XZhhVYx0YWQjdUJYIG5Lt
|
||||
iz2+UxRIqmKBqNmce2T+l45qyqOs99qfD7gLNGmkVZ4vtJ9bM7FxChFczg==
|
||||
-----END PUBLIC KEY-----
|
||||
```
|
||||
11
.cosign/cosign.key
Normal file
@@ -0,0 +1,11 @@
|
||||
-----BEGIN ENCRYPTED COSIGN PRIVATE KEY-----
|
||||
eyJrZGYiOnsibmFtZSI6InNjcnlwdCIsInBhcmFtcyI6eyJOIjozMjc2OCwiciI6
|
||||
OCwicCI6MX0sInNhbHQiOiIvK1MwbTNrU3pGMFFXdVVYQkFoY2gvTDc3NVJBSy9O
|
||||
cnkzUC9iMkxBZGF3PSJ9LCJjaXBoZXIiOnsibmFtZSI6Im5hY2wvc2VjcmV0Ym94
|
||||
Iiwibm9uY2UiOiJBNEFYL2IyU1BsMDBuY3JUNk45QkNOb0VLZTZLZEluRCJ9LCJj
|
||||
aXBoZXJ0ZXh0IjoiZ054UlJweXpraWtRMUVaRldsSnEvQXVUWTl0Vis2enBlWkIy
|
||||
dUFHREMzOVhUQlAwaWY5YStaZTE1V0NTT2FQZ01XQmtSZWhrQVVjQ3dZOGF2WTZa
|
||||
eFhZWWE3T1B4eFdidHJuSUVZM2hwZUk1M1dVQVZ6SXEzQjl0N0ZmV1JlVGsxdFlo
|
||||
b3hwQmxUSHY4U0c2azdPYk1aQnJleitzSGRWclF6YUdMdG12V1FOMTNZazRNb25i
|
||||
ZUpRSUJpUXFQTFg5NzFhSUlxU0dxYVhCanc9PSJ9
|
||||
-----END ENCRYPTED COSIGN PRIVATE KEY-----
|
||||
4
.cosign/cosign.pub
Normal file
@@ -0,0 +1,4 @@
|
||||
-----BEGIN PUBLIC KEY-----
|
||||
MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEST+BqQ1XZhhVYx0YWQjdUJYIG5Lt
|
||||
iz2+UxRIqmKBqNmce2T+l45qyqOs99qfD7gLNGmkVZ4vtJ9bM7FxChFczg==
|
||||
-----END PUBLIC KEY-----
|
||||
@@ -13,3 +13,4 @@ redirects:
|
||||
usage/skipper-progressive-delivery: tutorials/skipper-progressive-delivery.md
|
||||
usage/crossover-progressive-delivery: tutorials/crossover-progressive-delivery.md
|
||||
usage/traefik-progressive-delivery: tutorials/traefik-progressive-delivery.md
|
||||
usage/osm-progressive-delivery: tutorials/osm-progressive-delivery.md
|
||||
|
||||
29
.github/ISSUE_TEMPLATE/bug_report.md
vendored
Normal file
@@ -0,0 +1,29 @@
|
||||
---
|
||||
name: Bug report
|
||||
about: Create a report to help us improve this project
|
||||
title: ''
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
### Describe the bug
|
||||
|
||||
A clear and concise description of what the bug is.
|
||||
Please provide the Canary definition and Flagger logs.
|
||||
|
||||
### To Reproduce
|
||||
|
||||
<!--
|
||||
Steps to reproduce the behaviour
|
||||
-->
|
||||
|
||||
### Expected behavior
|
||||
|
||||
A clear and concise description of what you expected to happen.
|
||||
|
||||
### Additional context
|
||||
|
||||
- Flagger version:
|
||||
- Kubernetes version:
|
||||
- Service Mesh provider:
|
||||
- Ingress provider:
|
||||
2
.github/ISSUE_TEMPLATE/config.yml
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
blank_issues_enabled: true
|
||||
|
||||
19
.github/ISSUE_TEMPLATE/feature_request.md
vendored
Normal file
@@ -0,0 +1,19 @@
|
||||
---
|
||||
name: Feature Request
|
||||
about: I have a suggestion (and may want to implement it 🙂)!
|
||||
title: ''
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
## Describe the feature
|
||||
|
||||
What problem are you trying to solve?
|
||||
|
||||
### Proposed solution
|
||||
|
||||
What do you want to happen? Add any considered drawbacks.
|
||||
|
||||
### Any alternatives you've considered?
|
||||
|
||||
Is there another way to solve this problem that isn't as good a solution?
|
||||
2
.github/workflows/build.yaml
vendored
@@ -25,7 +25,7 @@ jobs:
|
||||
- name: Setup Go
|
||||
uses: actions/setup-go@v2
|
||||
with:
|
||||
go-version: 1.15.x
|
||||
go-version: 1.16.x
|
||||
- name: Download modules
|
||||
run: |
|
||||
go mod download
|
||||
|
||||
67
.github/workflows/codeql-analysis.yml
vendored
@@ -1,67 +0,0 @@
|
||||
# For most projects, this workflow file will not need changing; you simply need
|
||||
# to commit it to your repository.
|
||||
#
|
||||
# You may wish to alter this file to override the set of languages analyzed,
|
||||
# or to provide custom queries or build logic.
|
||||
#
|
||||
# ******** NOTE ********
|
||||
# We have attempted to detect the languages in your repository. Please check
|
||||
# the `language` matrix defined below to confirm you have the correct set of
|
||||
# supported CodeQL languages.
|
||||
#
|
||||
name: "CodeQL"
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ main ]
|
||||
pull_request:
|
||||
# The branches below must be a subset of the branches above
|
||||
branches: [ main ]
|
||||
schedule:
|
||||
- cron: '24 0 * * 4'
|
||||
|
||||
jobs:
|
||||
analyze:
|
||||
name: Analyze
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
language: [ 'go' ]
|
||||
# CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python' ]
|
||||
# Learn more:
|
||||
# https://docs.github.com/en/free-pro-team@latest/github/finding-security-vulnerabilities-and-errors-in-your-code/configuring-code-scanning#changing-the-languages-that-are-analyzed
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v2
|
||||
|
||||
# Initializes the CodeQL tools for scanning.
|
||||
- name: Initialize CodeQL
|
||||
uses: github/codeql-action/init@v1
|
||||
with:
|
||||
languages: ${{ matrix.language }}
|
||||
# If you wish to specify custom queries, you can do so here or in a config file.
|
||||
# By default, queries listed here will override any specified in a config file.
|
||||
# Prefix the list here with "+" to use these queries and those in the config file.
|
||||
# queries: ./path/to/local/query, your-org/your-repo/queries@main
|
||||
|
||||
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
|
||||
# If this step fails, then you should remove it and run the build manually (see below)
|
||||
- name: Autobuild
|
||||
uses: github/codeql-action/autobuild@v1
|
||||
|
||||
# ℹ️ Command-line programs to run using the OS shell.
|
||||
# 📚 https://git.io/JvXDl
|
||||
|
||||
# ✏️ If the Autobuild fails above, remove it and uncomment the following three lines
|
||||
# and modify them (or add more) to build your code if your project
|
||||
# uses a compiled language
|
||||
|
||||
#- run: |
|
||||
# make bootstrap
|
||||
# make release
|
||||
|
||||
- name: Perform CodeQL Analysis
|
||||
uses: github/codeql-action/analyze@v1
|
||||
4
.github/workflows/e2e.yaml
vendored
@@ -22,12 +22,16 @@ jobs:
|
||||
- traefik
|
||||
- gloo
|
||||
- skipper
|
||||
- osm
|
||||
- kubernetes
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v2
|
||||
- name: Setup Kubernetes
|
||||
uses: engineerd/setup-kind@v0.5.0
|
||||
with:
|
||||
version: "v0.11.0"
|
||||
image: kindest/node:v1.21.1@sha256:fae9a58f17f18f06aeac9772ca8b5ac680ebbed985e266f711d936e91d113bad
|
||||
- name: Build container image
|
||||
run: |
|
||||
docker build -t test/flagger:latest .
|
||||
|
||||
25
.github/workflows/fossa.yml
vendored
@@ -1,25 +0,0 @@
|
||||
name: FOSSA
|
||||
on:
|
||||
push:
|
||||
branches: [main]
|
||||
pull_request:
|
||||
branches: [main]
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/setup-go@v2
|
||||
with:
|
||||
go-version: "^1.15.x"
|
||||
- name: Add GOPATH to GITHUB_ENV
|
||||
run: echo "GOPATH=$(go env GOPATH)" >>"$GITHUB_ENV"
|
||||
- name: Add GOPATH to GITHUB_PATH
|
||||
run: echo "$GOPATH/bin" >>"$GITHUB_PATH"
|
||||
- name: Run FOSSA scan and upload build data
|
||||
uses: fossa-contrib/fossa-action@v1
|
||||
with:
|
||||
# FOSSA Push-Only API Token
|
||||
fossa-api-key: 5ee8bf422db1471e0bcf2bcb289185de
|
||||
github-token: ${{ github.token }}
|
||||
10
.github/workflows/release.yml
vendored
@@ -9,6 +9,7 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: sigstore/cosign-installer@main
|
||||
- name: Prepare
|
||||
id: prep
|
||||
run: |
|
||||
@@ -52,9 +53,18 @@ jobs:
|
||||
org.opencontainers.image.revision=${{ github.sha }}
|
||||
org.opencontainers.image.version=${{ steps.prep.outputs.VERSION }}
|
||||
org.opencontainers.image.created=${{ steps.prep.outputs.BUILD_DATE }}
|
||||
- name: Sign image
|
||||
run: |
|
||||
echo -n "${{secrets.COSIGN_PASSWORD}}" | \
|
||||
cosign sign -key ./.cosign/cosign.key -a git_sha=$GITHUB_SHA \
|
||||
ghcr.io/fluxcd/flagger:${{ steps.prep.outputs.VERSION }}
|
||||
- name: Check images
|
||||
run: |
|
||||
docker buildx imagetools inspect ghcr.io/fluxcd/flagger:${{ steps.prep.outputs.VERSION }}
|
||||
- name: Verifiy image signature
|
||||
run: |
|
||||
cosign verify -key ./.cosign/cosign.pub \
|
||||
ghcr.io/fluxcd/flagger:${{ steps.prep.outputs.VERSION }}
|
||||
- name: Publish Helm charts
|
||||
uses: stefanprodan/helm-gh-pages@v1.3.0
|
||||
with:
|
||||
|
||||
37
.github/workflows/scan.yml
vendored
Normal file
@@ -0,0 +1,37 @@
|
||||
name: scan
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ main ]
|
||||
pull_request:
|
||||
branches: [ main ]
|
||||
schedule:
|
||||
- cron: '18 10 * * 3'
|
||||
|
||||
jobs:
|
||||
fossa:
|
||||
name: FOSSA
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: Run FOSSA scan and upload build data
|
||||
uses: fossa-contrib/fossa-action@v1
|
||||
with:
|
||||
# FOSSA Push-Only API Token
|
||||
fossa-api-key: 5ee8bf422db1471e0bcf2bcb289185de
|
||||
github-token: ${{ github.token }}
|
||||
|
||||
codeql:
|
||||
name: CodeQL
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v2
|
||||
- name: Initialize CodeQL
|
||||
uses: github/codeql-action/init@v1
|
||||
with:
|
||||
languages: go
|
||||
- name: Autobuild
|
||||
uses: github/codeql-action/autobuild@v1
|
||||
- name: Perform CodeQL Analysis
|
||||
uses: github/codeql-action/analyze@v1
|
||||
223
CHANGELOG.md
@@ -2,6 +2,229 @@
|
||||
|
||||
All notable changes to this project are documented in this file.
|
||||
|
||||
## 1.13.0
|
||||
|
||||
**Release date:** 2021-08-25
|
||||
|
||||
This release comes with support for [Open Service Mesh](https://openservicemesh.io).
|
||||
For more details see the [OSM Progressive Delivery tutorial](https://docs.flagger.app/tutorials/osm-progressive-delivery).
|
||||
|
||||
Starting with this version, Flagger container images are signed with
|
||||
[sigstore/cosign](https://github.com/sigstore/cosign), for more details see the
|
||||
[Flagger cosign docs](https://github.com/fluxcd/flagger/blob/main/.cosign/README.md).
|
||||
|
||||
#### Features
|
||||
|
||||
- Support OSM progressive traffic shifting in Flagger
|
||||
[#955](https://github.com/fluxcd/flagger/pull/955)
|
||||
[#977](https://github.com/fluxcd/flagger/pull/977)
|
||||
- Add support for Google Chat alerts
|
||||
[#953](https://github.com/fluxcd/flagger/pull/953)
|
||||
|
||||
#### Improvements
|
||||
|
||||
- Sign Flagger container images with cosign
|
||||
[#983](https://github.com/fluxcd/flagger/pull/983)
|
||||
- Update Gloo APIs and e2e tests to Gloo v1.8.9
|
||||
[#982](https://github.com/fluxcd/flagger/pull/982)
|
||||
- Update e2e tests to Istio v1.11, Contour v1.18, Linkerd v2.10.2 and NGINX v0.49.0
|
||||
[#979](https://github.com/fluxcd/flagger/pull/979)
|
||||
- Update e2e tests to Traefik to 2.4.9
|
||||
[#960](https://github.com/fluxcd/flagger/pull/960)
|
||||
- Add support for volumes/volumeMounts in loadtester Helm chart
|
||||
[#975](https://github.com/fluxcd/flagger/pull/975)
|
||||
- Add extra podLabels options to Flagger Helm Chart
|
||||
[#966](https://github.com/fluxcd/flagger/pull/966)
|
||||
|
||||
#### Fixes
|
||||
|
||||
- Fix for the http client proxy overriding the default client
|
||||
[#943](https://github.com/fluxcd/flagger/pull/943)
|
||||
- Drop deprecated io/ioutil
|
||||
[#964](https://github.com/fluxcd/flagger/pull/964)
|
||||
- Remove problematic nulls from Grafana dashboard
|
||||
[#952](https://github.com/fluxcd/flagger/pull/952)
|
||||
|
||||
## 1.12.1
|
||||
|
||||
**Release date:** 2021-06-17
|
||||
|
||||
This release comes with a fix to Flagger when used with Flux v2.
|
||||
|
||||
#### Improvements
|
||||
|
||||
- Update Go to v1.16 and Kubernetes packages to v1.21.1
|
||||
[#940](https://github.com/fluxcd/flagger/pull/940)
|
||||
|
||||
#### Fixes
|
||||
|
||||
- Remove the GitOps Toolkit metadata from generated objects
|
||||
[#939](https://github.com/fluxcd/flagger/pull/939)
|
||||
|
||||
## 1.12.0
|
||||
|
||||
**Release date:** 2021-06-16
|
||||
|
||||
This release comes with support for disabling the SSL certificate verification
|
||||
for the Prometheus and Graphite metric providers.
|
||||
|
||||
#### Improvements
|
||||
|
||||
- Add `insecureSkipVerify` option for Prometheus and Graphite
|
||||
[#935](https://github.com/fluxcd/flagger/pull/935)
|
||||
- Copy labels from Gloo upstreams
|
||||
[#932](https://github.com/fluxcd/flagger/pull/932)
|
||||
- Improve language and correct typos in FAQs docs
|
||||
[#925](https://github.com/fluxcd/flagger/pull/925)
|
||||
- Remove Flux GC markers from generated objects
|
||||
[#936](https://github.com/fluxcd/flagger/pull/936)
|
||||
|
||||
#### Fixes
|
||||
|
||||
- Require SMI TrafficSplit Service and Weight
|
||||
[#878](https://github.com/fluxcd/flagger/pull/878)
|
||||
|
||||
## 1.11.0
|
||||
|
||||
**Release date:** 2021-06-01
|
||||
|
||||
**Breaking change:** the minimum supported version of Kubernetes is v1.19.0.
|
||||
|
||||
This release comes with support for Kubernetes Ingress `networking.k8s.io/v1`.
|
||||
The Ingress from `networking.k8s.io/v1beta1` is no longer supported,
|
||||
affected integrations: **NGINX** and **Skipper** ingress controllers.
|
||||
|
||||
#### Improvements
|
||||
|
||||
- Upgrade Ingress to networking.k8s.io/v1
|
||||
[#917](https://github.com/fluxcd/flagger/pull/917)
|
||||
- Update Kubernetes manifests to rbac.authorization.k8s.io/v1
|
||||
[#920](https://github.com/fluxcd/flagger/pull/920)
|
||||
|
||||
## 1.10.0
|
||||
|
||||
**Release date:** 2021-05-28
|
||||
|
||||
This release comes with support for [Graphite](https://docs.flagger.app/usage/metrics#graphite) metric templates.
|
||||
|
||||
#### Features
|
||||
|
||||
- Add Graphite metrics provider
|
||||
[#915](https://github.com/fluxcd/flagger/pull/915)
|
||||
|
||||
#### Improvements
|
||||
|
||||
- ConfigTracker: Scan envFrom in init-containers
|
||||
[#914](https://github.com/fluxcd/flagger/pull/914)
|
||||
- e2e: Update Istio to v1.10 and Contour to v1.15
|
||||
[#914](https://github.com/fluxcd/flagger/pull/914)
|
||||
|
||||
## 1.9.0
|
||||
|
||||
**Release date:** 2021-05-14
|
||||
|
||||
This release comes with improvements to the [Gloo Edge](https://docs.flagger.app/tutorials/gloo-progressive-delivery) integration.
|
||||
|
||||
Starting with this version, Flagger no longer requires Gloo discovery to be enabled.
|
||||
Flagger generated the Gloo upstream objects on its own and optionally it can use an
|
||||
existing upstream (specified with `.spec.upstreamRef`) as a template.
|
||||
|
||||
#### Features
|
||||
|
||||
- Gloo: Create gloo upstreams from non-discovered services
|
||||
[#894](https://github.com/fluxcd/flagger/pull/894)
|
||||
- Gloo Upstream Ref for Upstream Config
|
||||
[#908](https://github.com/fluxcd/flagger/pull/908)
|
||||
|
||||
#### Improvements
|
||||
|
||||
- Adjusted Nginx ingress canary headers on init and promotion
|
||||
[#907](https://github.com/fluxcd/flagger/pull/907)
|
||||
|
||||
## 1.8.0
|
||||
|
||||
**Release date:** 2021-04-29
|
||||
|
||||
This release comes with support for the SMI `v1alpha2` and `v1alpha3` TrafficSplit APIs.
|
||||
|
||||
For SMI compatible service mesh solutions like Open Service Mesh, Consul Connect or Nginx Service Mesh,
|
||||
[Prometheus MetricTemplates](https://docs.flagger.app/usage/metrics#prometheus) can be used to implement
|
||||
the request success rate and request duration checks.
|
||||
|
||||
The desired SMI version can be set in the Canary object:
|
||||
|
||||
```yaml
|
||||
apiVersion: flagger.app/v1beta1
|
||||
kind: Canary
|
||||
metadata:
|
||||
name: my-canary
|
||||
spec:
|
||||
provider: "smi:v1alpha3" # or "smi:v1alpha2"
|
||||
```
|
||||
|
||||
#### Features
|
||||
|
||||
- Implement SMI v1alpha2 and v1alpha3 routers
|
||||
[#896](https://github.com/fluxcd/flagger/pull/896)
|
||||
[#879](https://github.com/fluxcd/flagger/pull/879)
|
||||
- Add alerting HTTP/S proxy option
|
||||
[#872](https://github.com/fluxcd/flagger/pull/872)
|
||||
- Add option to mute alerts generated from webhooks
|
||||
[#887](https://github.com/fluxcd/flagger/pull/887)
|
||||
|
||||
#### Fixes
|
||||
|
||||
- Scale up canary on confirm rollout
|
||||
[#878](https://github.com/fluxcd/flagger/pull/878)
|
||||
|
||||
## 1.7.0
|
||||
|
||||
**Release date:** 2021-03-23
|
||||
|
||||
This release comes with support for manually approving
|
||||
the traffic weight increase.
|
||||
|
||||
#### Features
|
||||
|
||||
- Add webhook for manually approving traffic weight increase
|
||||
[#849](https://github.com/fluxcd/flagger/pull/849)
|
||||
- Add WaitingPromotion phase to canary status
|
||||
[#859](https://github.com/fluxcd/flagger/pull/859)
|
||||
|
||||
#### Improvements
|
||||
|
||||
- linkerd: update prometheus URL based on the latest 2.10 changes
|
||||
[#845](https://github.com/fluxcd/flagger/pull/845)
|
||||
- docs: update resources to disable mTLS in Istio
|
||||
[#843](https://github.com/fluxcd/flagger/pull/843)
|
||||
- docs: updating slack alerting docs to point to legacy slack webhooks
|
||||
[#833](https://github.com/fluxcd/flagger/pull/833)
|
||||
- chart: Add pull secret for Prometheus deployment
|
||||
[#842](https://github.com/fluxcd/flagger/pull/842)
|
||||
- Update Kubernetes packages to v1.20.4
|
||||
[#857](https://github.com/fluxcd/flagger/pull/857)
|
||||
|
||||
## 1.6.4
|
||||
|
||||
**Release date:** 2021-02-26
|
||||
|
||||
This release comes with a bug fix to the AppMesh integration
|
||||
when using multiple backends.
|
||||
|
||||
#### Improvements
|
||||
|
||||
- Consolidate logos and add project name logos
|
||||
[#829](https://github.com/fluxcd/flagger/pull/829)
|
||||
- chart: add env option to loadtester
|
||||
[#821](https://github.com/fluxcd/flagger/pull/821)
|
||||
- chart: Added PodDisruptionBudget for the loadtester
|
||||
[#819](https://github.com/fluxcd/flagger/pull/819)
|
||||
|
||||
#### Fixes
|
||||
|
||||
- Fix AWS AppMesh issue when providing multiple backends
|
||||
[#831](https://github.com/fluxcd/flagger/pull/831)
|
||||
|
||||
## 1.6.3
|
||||
|
||||
**Release date:** 2021-02-15
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
FROM golang:1.15-alpine as builder
|
||||
FROM golang:1.16-alpine as builder
|
||||
|
||||
ARG TARGETPLATFORM
|
||||
ARG REVISON
|
||||
@@ -21,7 +21,7 @@ RUN CGO_ENABLED=0 go build \
|
||||
-ldflags "-s -w -X github.com/fluxcd/flagger/pkg/version.REVISION=${REVISON}" \
|
||||
-a -o flagger ./cmd/flagger
|
||||
|
||||
FROM alpine:3.12
|
||||
FROM alpine:3.13
|
||||
|
||||
RUN apk --no-cache add ca-certificates
|
||||
|
||||
|
||||
52
README.md
@@ -1,5 +1,6 @@
|
||||
# flagger
|
||||
|
||||
[](https://bestpractices.coreinfrastructure.org/projects/4783)
|
||||
[](https://github.com/fluxcd/flagger/actions)
|
||||
[](https://goreportcard.com/report/github.com/fluxcd/flagger)
|
||||
[](https://github.com/fluxcd/flagger/blob/main/LICENSE)
|
||||
@@ -12,10 +13,10 @@ by gradually shifting traffic to the new version while measuring metrics and run
|
||||

|
||||
|
||||
Flagger implements several deployment strategies (Canary releases, A/B testing, Blue/Green mirroring)
|
||||
using a service mesh (App Mesh, Istio, Linkerd)
|
||||
using a service mesh (App Mesh, Istio, Linkerd, Open Service Mesh)
|
||||
or an ingress controller (Contour, Gloo, NGINX, Skipper, Traefik) for traffic routing.
|
||||
For release analysis, Flagger can query Prometheus, Datadog, New Relic or CloudWatch
|
||||
and for alerting it uses Slack, MS Teams, Discord and Rocket.
|
||||
and for alerting it uses Slack, MS Teams, Discord, Rocket and Google Chat.
|
||||
|
||||
Flagger is a [Cloud Native Computing Foundation](https://cncf.io/) project
|
||||
and part of [Flux](https://fluxcd.io) family of GitOps tools.
|
||||
@@ -42,21 +43,14 @@ Flagger documentation can be found at [docs.flagger.app](https://docs.flagger.ap
|
||||
* [NGINX Ingress](https://docs.flagger.app/tutorials/nginx-progressive-delivery)
|
||||
* [Skipper](https://docs.flagger.app/tutorials/skipper-progressive-delivery)
|
||||
* [Traefik](https://docs.flagger.app/tutorials/traefik-progressive-delivery)
|
||||
* [Open Service Mesh (OSM)](https://docs.flagger.app/tutorials/osm-progressive-delivery)
|
||||
* [Kubernetes Blue/Green](https://docs.flagger.app/tutorials/kubernetes-blue-green)
|
||||
|
||||
### Who is using Flagger
|
||||
|
||||
List of organizations using Flagger:
|
||||
**Our list of production users has moved to <https://fluxcd.io/adopters/#flagger>**.
|
||||
|
||||
* [Chick-fil-A](https://www.chick-fil-a.com)
|
||||
* [Capra Consulting](https://www.capraconsulting.no)
|
||||
* [DMM.com](https://dmm-corp.com)
|
||||
* [MediaMarktSaturn](https://www.mediamarktsaturn.com)
|
||||
* [Weaveworks](https://weave.works)
|
||||
* [Jumia Group](https://group.jumia.com)
|
||||
* [eLife](https://elifesciences.org/)
|
||||
|
||||
If you are using Flagger, please submit a PR to add your organization to the list!
|
||||
If you are using Flagger, please [submit a PR to add your organization](https://github.com/fluxcd/website/tree/main/adopters#readme) to the list!
|
||||
|
||||
### Canary CRD
|
||||
|
||||
@@ -77,7 +71,8 @@ metadata:
|
||||
namespace: test
|
||||
spec:
|
||||
# service mesh provider (optional)
|
||||
# can be: kubernetes, istio, linkerd, appmesh, nginx, skipper, contour, gloo, supergloo, traefik
|
||||
# can be: kubernetes, istio, linkerd, appmesh, nginx, skipper, contour, gloo, supergloo, traefik, osm
|
||||
# for SMI TrafficSplit can be: smi:v1alpha1, smi:v1alpha2, smi:v1alpha3
|
||||
provider: istio
|
||||
# deployment reference
|
||||
targetRef:
|
||||
@@ -188,17 +183,21 @@ For more details on how the canary analysis and promotion works please [read the
|
||||
|
||||
**Service Mesh**
|
||||
|
||||
| Feature | App Mesh | Istio | Linkerd | Kubernetes CNI |
|
||||
| ------------------------------------------ | ------------------ | ------------------ | ------------------ | ----------------- |
|
||||
| Canary deployments (weighted traffic) | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_minus_sign: |
|
||||
| A/B testing (headers and cookies routing) | :heavy_check_mark: | :heavy_check_mark: | :heavy_minus_sign: | :heavy_minus_sign: |
|
||||
| Blue/Green deployments (traffic switch) | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
|
||||
| Blue/Green deployments (traffic mirroring) | :heavy_minus_sign: | :heavy_check_mark: | :heavy_minus_sign: | :heavy_minus_sign: |
|
||||
| Webhooks (acceptance/load testing) | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
|
||||
| Manual gating (approve/pause/resume) | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
|
||||
| Request success rate check (L7 metric) | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_minus_sign: |
|
||||
| Request duration check (L7 metric) | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_minus_sign: |
|
||||
| Custom metric checks | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
|
||||
| Feature | App Mesh | Istio | Linkerd | Open Service Mesh | SMI | Kubernetes CNI |
|
||||
| ------------------------------------------ | ------------------ | ------------------ | ------------------ | ------------------ | ------------------ | ------------------ |
|
||||
| Canary deployments (weighted traffic) | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_minus_sign: |
|
||||
| A/B testing (headers and cookies routing) | :heavy_check_mark: | :heavy_check_mark: | :heavy_minus_sign: | :heavy_minus_sign: | :heavy_minus_sign: | :heavy_minus_sign: |
|
||||
| Blue/Green deployments (traffic switch) | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
|
||||
| Blue/Green deployments (traffic mirroring) | :heavy_minus_sign: | :heavy_check_mark: | :heavy_minus_sign: | :heavy_minus_sign: | :heavy_minus_sign: | :heavy_minus_sign: |
|
||||
| Webhooks (acceptance/load testing) | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
|
||||
| Manual gating (approve/pause/resume) | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
|
||||
| Request success rate check (L7 metric) | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_minus_sign: | :heavy_minus_sign: |
|
||||
| Request duration check (L7 metric) | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_minus_sign: | :heavy_minus_sign: |
|
||||
| Custom metric checks | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
|
||||
|
||||
For other SMI compatible service mesh solutions like Consul Connect or Nginx Service Mesh,
|
||||
[Prometheus MetricTemplates](https://docs.flagger.app/usage/metrics#prometheus) can be used to implement
|
||||
the request success rate and request duration checks.
|
||||
|
||||
**Ingress**
|
||||
|
||||
@@ -225,7 +224,6 @@ For more details on how the canary analysis and promotion works please [read the
|
||||
#### Integrations
|
||||
|
||||
* Add support for Kubernetes [Ingress v2](https://github.com/kubernetes-sigs/service-apis)
|
||||
* Add support for SMI compatible service mesh solutions like Open Service Mesh and Consul Connect
|
||||
* Add support for ingress controllers like HAProxy and ALB
|
||||
* Add support for metrics providers like InfluxDB, Stackdriver, SignalFX
|
||||
|
||||
@@ -249,8 +247,8 @@ If you have any questions about Flagger and progressive delivery:
|
||||
* Read the Flagger [docs](https://docs.flagger.app).
|
||||
* Invite yourself to the [CNCF community slack](https://slack.cncf.io/)
|
||||
and join the [#flagger](https://cloud-native.slack.com/messages/flagger/) channel.
|
||||
* Check out the [Flux talks section](https://fluxcd.io/community/#talks) and to see a list of online talks,
|
||||
hands-on training and meetups.
|
||||
* Check out the **[Flux events calendar](https://fluxcd.io/#calendar)**, both with upcoming talks, events and meetings you can attend.
|
||||
* Or view the **[Flux resources section](https://fluxcd.io/resources)** with past events videos you can watch.
|
||||
* File an [issue](https://github.com/fluxcd/flagger/issues/new).
|
||||
|
||||
Your feedback is always welcome!
|
||||
|
||||
42
artifacts/examples/osm-canary-steps.yaml
Normal file
@@ -0,0 +1,42 @@
|
||||
apiVersion: flagger.app/v1beta1
|
||||
kind: Canary
|
||||
metadata:
|
||||
name: podinfo
|
||||
namespace: test
|
||||
spec:
|
||||
provider: osm
|
||||
targetRef:
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
name: podinfo
|
||||
progressDeadlineSeconds: 600
|
||||
service:
|
||||
port: 9898
|
||||
targetPort: 9898
|
||||
analysis:
|
||||
interval: 15s
|
||||
threshold: 10
|
||||
stepWeights: [5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55]
|
||||
metrics:
|
||||
- name: request-success-rate
|
||||
thresholdRange:
|
||||
min: 99
|
||||
interval: 1m
|
||||
- name: request-duration
|
||||
thresholdRange:
|
||||
max: 500
|
||||
interval: 30s
|
||||
webhooks:
|
||||
- name: acceptance-test
|
||||
type: pre-rollout
|
||||
url: http://flagger-loadtester.test/
|
||||
timeout: 15s
|
||||
metadata:
|
||||
type: bash
|
||||
cmd: "curl -sd 'test' http://podinfo-canary.test:9898/token | grep token"
|
||||
- name: load-test
|
||||
type: rollout
|
||||
url: http://flagger-loadtester.test/
|
||||
timeout: 5s
|
||||
metadata:
|
||||
cmd: "hey -z 1m -q 10 -c 2 http://podinfo-canary.test:9898/"
|
||||
43
artifacts/examples/osm-canary.yaml
Normal file
@@ -0,0 +1,43 @@
|
||||
apiVersion: flagger.app/v1beta1
|
||||
kind: Canary
|
||||
metadata:
|
||||
name: podinfo
|
||||
namespace: test
|
||||
spec:
|
||||
provider: osm
|
||||
targetRef:
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
name: podinfo
|
||||
progressDeadlineSeconds: 600
|
||||
service:
|
||||
port: 9898
|
||||
targetPort: 9898
|
||||
analysis:
|
||||
interval: 15s
|
||||
threshold: 10
|
||||
maxWeight: 50
|
||||
stepWeight: 5
|
||||
metrics:
|
||||
- name: request-success-rate
|
||||
thresholdRange:
|
||||
min: 99
|
||||
interval: 1m
|
||||
- name: request-duration
|
||||
thresholdRange:
|
||||
max: 500
|
||||
interval: 30s
|
||||
webhooks:
|
||||
- name: acceptance-test
|
||||
type: pre-rollout
|
||||
url: http://flagger-loadtester.test/
|
||||
timeout: 15s
|
||||
metadata:
|
||||
type: bash
|
||||
cmd: "curl -sd 'test' http://podinfo-canary.test:9898/token | grep token"
|
||||
- name: load-test
|
||||
type: rollout
|
||||
url: http://flagger-loadtester.test/
|
||||
timeout: 5s
|
||||
metadata:
|
||||
cmd: "hey -z 1m -q 10 -c 2 http://podinfo-canary.test:9898/"
|
||||
@@ -6,7 +6,7 @@ metadata:
|
||||
labels:
|
||||
app: flagger
|
||||
---
|
||||
apiVersion: rbac.authorization.k8s.io/v1beta1
|
||||
apiVersion: rbac.authorization.k8s.io/v1
|
||||
kind: ClusterRole
|
||||
metadata:
|
||||
name: flagger
|
||||
@@ -192,7 +192,7 @@ rules:
|
||||
verbs:
|
||||
- get
|
||||
---
|
||||
apiVersion: rbac.authorization.k8s.io/v1beta1
|
||||
apiVersion: rbac.authorization.k8s.io/v1
|
||||
kind: ClusterRoleBinding
|
||||
metadata:
|
||||
name: flagger
|
||||
|
||||
@@ -129,6 +129,21 @@ spec:
|
||||
- Ingress
|
||||
name:
|
||||
type: string
|
||||
upstreamRef:
|
||||
description: Gloo Upstream selector
|
||||
type: object
|
||||
required: [ "apiVersion", "kind", "name" ]
|
||||
properties:
|
||||
apiVersion:
|
||||
type: string
|
||||
kind:
|
||||
type: string
|
||||
enum:
|
||||
- Upstream
|
||||
name:
|
||||
type: string
|
||||
namespace:
|
||||
type: string
|
||||
service:
|
||||
description: Kubernetes Service spec
|
||||
type: object
|
||||
@@ -940,6 +955,10 @@ spec:
|
||||
- post-rollout
|
||||
- event
|
||||
- rollback
|
||||
- confirm-traffic-increase
|
||||
muteAlert:
|
||||
description: Mute all alerts for the webhook
|
||||
type: boolean
|
||||
url:
|
||||
description: URL address of this webhook
|
||||
type: string
|
||||
@@ -966,6 +985,7 @@ spec:
|
||||
- Initialized
|
||||
- Waiting
|
||||
- Progressing
|
||||
- WaitingPromotion
|
||||
- Promoting
|
||||
- Finalising
|
||||
- Succeeded
|
||||
@@ -1086,6 +1106,7 @@ spec:
|
||||
- datadog
|
||||
- cloudwatch
|
||||
- newrelic
|
||||
- graphite
|
||||
address:
|
||||
description: API address of this provider
|
||||
type: string
|
||||
@@ -1101,6 +1122,9 @@ spec:
|
||||
region:
|
||||
description: Region of the provider
|
||||
type: string
|
||||
insecureSkipVerify:
|
||||
description: Disable SSL certificate validation for the provider address
|
||||
type: boolean
|
||||
query:
|
||||
description: Query of this metric template
|
||||
type: string
|
||||
@@ -1167,6 +1191,7 @@ spec:
|
||||
- msteams
|
||||
- discord
|
||||
- rocket
|
||||
- gchat
|
||||
channel:
|
||||
description: Alert channel for this provider
|
||||
type: string
|
||||
@@ -1176,6 +1201,9 @@ spec:
|
||||
address:
|
||||
description: Hook URL address of this provider
|
||||
type: string
|
||||
proxy:
|
||||
description: Http/s proxy of this provider
|
||||
type: string
|
||||
secretRef:
|
||||
description: Kubernetes secret reference containing the provider address
|
||||
type: object
|
||||
|
||||
@@ -22,7 +22,7 @@ spec:
|
||||
serviceAccountName: flagger
|
||||
containers:
|
||||
- name: flagger
|
||||
image: ghcr.io/fluxcd/flagger:1.6.3
|
||||
image: ghcr.io/fluxcd/flagger:1.13.0
|
||||
imagePullPolicy: IfNotPresent
|
||||
ports:
|
||||
- name: http
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
apiVersion: v1
|
||||
name: flagger
|
||||
version: 1.6.3
|
||||
appVersion: 1.6.3
|
||||
version: 1.13.0
|
||||
appVersion: 1.13.0
|
||||
kubeVersion: ">=1.16.0-0"
|
||||
engine: gotpl
|
||||
description: Flagger is a progressive delivery operator for Kubernetes
|
||||
@@ -21,5 +21,8 @@ keywords:
|
||||
- gloo
|
||||
- contour
|
||||
- nginx
|
||||
- traefik
|
||||
- osm
|
||||
- smi
|
||||
- gitops
|
||||
- canary
|
||||
|
||||
@@ -7,10 +7,13 @@ Flagger can run automated application analysis, testing, promotion and rollback
|
||||
* A/B Testing (HTTP headers and cookies traffic routing)
|
||||
* Blue/Green (traffic switching and mirroring)
|
||||
|
||||
Flagger works with service mesh solutions (Istio, Linkerd, AWS App Mesh) and with Kubernetes ingress controllers
|
||||
Flagger works with service mesh solutions (Istio, Linkerd, AWS App Mesh, Open Service Mesh) and with Kubernetes ingress controllers
|
||||
(NGINX, Skipper, Gloo, Contour, Traefik).
|
||||
Flagger can be configured to send alerts to various chat platforms such as Slack, Microsoft Teams, Discord and Rocket.
|
||||
|
||||
Flagger is a [Cloud Native Computing Foundation](https://cncf.io/) project
|
||||
and part of [Flux](https://fluxcd.io) family of GitOps tools.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
* Kubernetes >= 1.16
|
||||
@@ -38,13 +41,13 @@ $ helm upgrade -i flagger flagger/flagger \
|
||||
--set metricsServer=http://prometheus:9090
|
||||
```
|
||||
|
||||
To install Flagger for **Linkerd**:
|
||||
To install Flagger for **Linkerd** (requires Linkerd Viz extension):
|
||||
|
||||
```console
|
||||
$ helm upgrade -i flagger flagger/flagger \
|
||||
--namespace=linkerd \
|
||||
--set meshProvider=linkerd \
|
||||
--set metricsServer=http://linkerd-prometheus:9090
|
||||
--set metricsServer=http://prometheus.linkerd-viz:9090
|
||||
```
|
||||
|
||||
To install Flagger for **AWS App Mesh**:
|
||||
@@ -65,7 +68,7 @@ $ helm upgrade -i flagger flagger/flagger \
|
||||
--set prometheus.install=true
|
||||
```
|
||||
|
||||
To install Flagger and Prometheus for **Gloo** (requires Gloo discovery enabled):
|
||||
To install Flagger and Prometheus for **Gloo** (no longer requires Gloo discovery):
|
||||
|
||||
```console
|
||||
$ helm upgrade -i flagger flagger/flagger \
|
||||
@@ -93,6 +96,15 @@ $ helm upgrade -i flagger flagger/flagger \
|
||||
--set meshProvider=traefik
|
||||
```
|
||||
|
||||
To install Flagger for **Open Service Mesh (OSM)** (requires OSM to have been installed with Prometheus):
|
||||
|
||||
```console
|
||||
$ helm upgrade -i flagger flagger/flagger \
|
||||
--namespace=osm-system \
|
||||
--set meshProvider=osm \
|
||||
--set metricsServer=http://osm-prometheus.osm-system.svc:7070
|
||||
```
|
||||
|
||||
The [configuration](#configuration) section lists the parameters that can be configured during installation.
|
||||
|
||||
## Uninstalling the Chart
|
||||
@@ -122,9 +134,11 @@ Parameter | Description | Default
|
||||
`configTracking.enabled` | If `true`, flagger will track changes in Secrets and ConfigMaps referenced in the target deployment | `true`
|
||||
`eventWebhook` | If set, Flagger will publish events to the given webhook | None
|
||||
`slack.url` | Slack incoming webhook | None
|
||||
`slack.proxyUrl` | Slack proxy url | None
|
||||
`slack.channel` | Slack channel | None
|
||||
`slack.user` | Slack username | `flagger`
|
||||
`msteams.url` | Microsoft Teams incoming webhook | None
|
||||
`msteams.proxyUrl` | Microsoft Teams proxy url | None
|
||||
`podMonitor.enabled` | If `true`, create a PodMonitor for [monitoring the metrics](https://docs.flagger.app/usage/monitoring#metrics) | `false`
|
||||
`podMonitor.namespace` | Namespace where the PodMonitor is created | the same namespace
|
||||
`podMonitor.interval` | Interval at which metrics should be scraped | `15s`
|
||||
|
||||
@@ -129,6 +129,21 @@ spec:
|
||||
- Ingress
|
||||
name:
|
||||
type: string
|
||||
upstreamRef:
|
||||
description: Gloo Upstream selector
|
||||
type: object
|
||||
required: [ "apiVersion", "kind", "name" ]
|
||||
properties:
|
||||
apiVersion:
|
||||
type: string
|
||||
kind:
|
||||
type: string
|
||||
enum:
|
||||
- Upstream
|
||||
name:
|
||||
type: string
|
||||
namespace:
|
||||
type: string
|
||||
service:
|
||||
description: Kubernetes Service spec
|
||||
type: object
|
||||
@@ -940,6 +955,10 @@ spec:
|
||||
- post-rollout
|
||||
- event
|
||||
- rollback
|
||||
- confirm-traffic-increase
|
||||
muteAlert:
|
||||
description: Mute all alerts for the webhook
|
||||
type: boolean
|
||||
url:
|
||||
description: URL address of this webhook
|
||||
type: string
|
||||
@@ -966,6 +985,7 @@ spec:
|
||||
- Initialized
|
||||
- Waiting
|
||||
- Progressing
|
||||
- WaitingPromotion
|
||||
- Promoting
|
||||
- Finalising
|
||||
- Succeeded
|
||||
@@ -1086,6 +1106,7 @@ spec:
|
||||
- datadog
|
||||
- cloudwatch
|
||||
- newrelic
|
||||
- graphite
|
||||
address:
|
||||
description: API address of this provider
|
||||
type: string
|
||||
@@ -1101,6 +1122,9 @@ spec:
|
||||
region:
|
||||
description: Region of the provider
|
||||
type: string
|
||||
insecureSkipVerify:
|
||||
description: Disable SSL certificate validation for the provider address
|
||||
type: boolean
|
||||
query:
|
||||
description: Query of this metric template
|
||||
type: string
|
||||
@@ -1167,6 +1191,7 @@ spec:
|
||||
- msteams
|
||||
- discord
|
||||
- rocket
|
||||
- gchat
|
||||
channel:
|
||||
description: Alert channel for this provider
|
||||
type: string
|
||||
@@ -1176,6 +1201,9 @@ spec:
|
||||
address:
|
||||
description: Hook URL address of this provider
|
||||
type: string
|
||||
proxy:
|
||||
description: Http/s proxy of this provider
|
||||
type: string
|
||||
secretRef:
|
||||
description: Kubernetes secret reference containing the provider address
|
||||
type: object
|
||||
|
||||
@@ -22,6 +22,11 @@ spec:
|
||||
labels:
|
||||
app.kubernetes.io/name: {{ template "flagger.name" . }}
|
||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||
{{- if .Values.podLabels }}
|
||||
{{- range $key, $value := .Values.podLabels }}
|
||||
{{ $key }}: {{ $value | quote }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
annotations:
|
||||
{{- if .Values.podAnnotations }}
|
||||
{{ toYaml .Values.podAnnotations | indent 8 }}
|
||||
@@ -90,6 +95,9 @@ spec:
|
||||
{{- if .Values.slack.url }}
|
||||
- -slack-url={{ .Values.slack.url }}
|
||||
{{- end }}
|
||||
{{- if .Values.slack.proxyUrl }}
|
||||
- -slack-proxy-url={{ .Values.slack.proxyUrl }}
|
||||
{{- end }}
|
||||
{{- if .Values.slack.user }}
|
||||
- -slack-user={{ .Values.slack.user }}
|
||||
{{- end }}
|
||||
@@ -99,6 +107,9 @@ spec:
|
||||
{{- if .Values.msteams.url }}
|
||||
- -msteams-url={{ .Values.msteams.url }}
|
||||
{{- end }}
|
||||
{{- if .Values.msteams.proxyUrl }}
|
||||
- -msteams-proxy-url={{ .Values.msteams.proxyUrl }}
|
||||
{{- end }}
|
||||
{{- if .Values.leaderElection.enabled }}
|
||||
- -enable-leader-election=true
|
||||
- -leader-election-namespace={{ .Release.Namespace }}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{{- if .Values.prometheus.install }}
|
||||
apiVersion: rbac.authorization.k8s.io/v1beta1
|
||||
apiVersion: rbac.authorization.k8s.io/v1
|
||||
kind: ClusterRole
|
||||
metadata:
|
||||
name: {{ template "flagger.fullname" . }}-prometheus
|
||||
@@ -24,7 +24,7 @@ rules:
|
||||
- nonResourceURLs: ["/metrics"]
|
||||
verbs: ["get"]
|
||||
---
|
||||
apiVersion: rbac.authorization.k8s.io/v1beta1
|
||||
apiVersion: rbac.authorization.k8s.io/v1
|
||||
kind: ClusterRoleBinding
|
||||
metadata:
|
||||
name: {{ template "flagger.fullname" . }}-prometheus
|
||||
@@ -255,7 +255,14 @@ spec:
|
||||
mountPath: /etc/prometheus
|
||||
- name: data-volume
|
||||
mountPath: /prometheus/data
|
||||
|
||||
{{- if .Values.prometheus.securityContext.enabled }}
|
||||
securityContext:
|
||||
{{ toYaml .Values.prometheus.securityContext.context | indent 12 }}
|
||||
{{- end }}
|
||||
{{- if .Values.prometheus.pullSecret }}
|
||||
imagePullSecrets:
|
||||
- name: {{ .Values.prometheus.pullSecret }}
|
||||
{{- end }}
|
||||
volumes:
|
||||
- name: config-volume
|
||||
configMap:
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{{- if .Values.rbac.create }}
|
||||
apiVersion: rbac.authorization.k8s.io/v1beta1
|
||||
apiVersion: rbac.authorization.k8s.io/v1
|
||||
kind: ClusterRole
|
||||
metadata:
|
||||
name: {{ template "flagger.fullname" . }}
|
||||
@@ -200,7 +200,7 @@ rules:
|
||||
verbs:
|
||||
- get
|
||||
---
|
||||
apiVersion: rbac.authorization.k8s.io/v1beta1
|
||||
apiVersion: rbac.authorization.k8s.io/v1
|
||||
kind: ClusterRoleBinding
|
||||
metadata:
|
||||
name: {{ template "flagger.fullname" . }}
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
image:
|
||||
repository: ghcr.io/fluxcd/flagger
|
||||
tag: 1.6.3
|
||||
tag: 1.13.0
|
||||
pullPolicy: IfNotPresent
|
||||
pullSecret:
|
||||
|
||||
@@ -19,7 +19,7 @@ podPriorityClassName: ""
|
||||
|
||||
metricsServer: "http://prometheus:9090"
|
||||
|
||||
# accepted values are kubernetes, istio, linkerd, appmesh, contour, nginx, gloo, skipper, traefik
|
||||
# accepted values are kubernetes, istio, linkerd, appmesh, contour, nginx, gloo, skipper, traefik, osm
|
||||
meshProvider: ""
|
||||
|
||||
# single namespace restriction
|
||||
@@ -55,6 +55,7 @@ slack:
|
||||
channel:
|
||||
# incoming webhook https://api.slack.com/incoming-webhooks
|
||||
url:
|
||||
proxy:
|
||||
|
||||
msteams:
|
||||
# MS Teams incoming webhook URL
|
||||
@@ -72,11 +73,21 @@ podMonitor:
|
||||
# secretKeyRef:
|
||||
# name: slack
|
||||
# key: url
|
||||
#- name: SLACK_PROXY_URL
|
||||
# valueFrom:
|
||||
# secretKeyRef:
|
||||
# name: slack
|
||||
# key: proxy-url
|
||||
#- name: MSTEAMS_URL
|
||||
# valueFrom:
|
||||
# secretKeyRef:
|
||||
# name: msteams
|
||||
# key: url
|
||||
#- name: MSTEAMS_PROXY_URL
|
||||
# valueFrom:
|
||||
# secretKeyRef:
|
||||
# name: msteams
|
||||
# key: proxy-url
|
||||
#- name: EVENT_WEBHOOK_URL
|
||||
# valueFrom:
|
||||
# secretKeyRef:
|
||||
@@ -125,7 +136,14 @@ prometheus:
|
||||
# to be used with ingress controllers
|
||||
install: false
|
||||
image: docker.io/prom/prometheus:v2.23.0
|
||||
pullSecret:
|
||||
retention: 2h
|
||||
# when enabled, it will add a security context for the prometheus pod
|
||||
securityContext:
|
||||
enabled: false
|
||||
context:
|
||||
readOnlyRootFilesystem: true
|
||||
runAsUser: 10001
|
||||
|
||||
kubeconfigQPS: ""
|
||||
kubeconfigBurst: ""
|
||||
@@ -142,3 +160,5 @@ istio:
|
||||
podDisruptionBudget:
|
||||
enabled: false
|
||||
minAvailable: 1
|
||||
|
||||
podLabels: {}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
apiVersion: v1
|
||||
name: grafana
|
||||
version: 1.5.0
|
||||
version: 1.6.0
|
||||
appVersion: 7.2.0
|
||||
description: Grafana dashboards for monitoring Flagger canary deployments
|
||||
icon: https://raw.githubusercontent.com/fluxcd/flagger/main/docs/logo/flagger-icon.png
|
||||
|
||||
@@ -1146,7 +1146,6 @@
|
||||
"list": [
|
||||
{
|
||||
"allValue": null,
|
||||
"current": null,
|
||||
"datasource": "prometheus",
|
||||
"definition": "query_result(sum(envoy_cluster_upstream_rq) by (kubernetes_namespace))",
|
||||
"hide": 0,
|
||||
@@ -1168,7 +1167,6 @@
|
||||
},
|
||||
{
|
||||
"allValue": null,
|
||||
"current": null,
|
||||
"datasource": "prometheus",
|
||||
"definition": "query_result(sum(envoy_cluster_upstream_rq{kubernetes_namespace=\"$namespace\",app=~\".*-primary\"}) by (app))",
|
||||
"hide": 0,
|
||||
@@ -1190,7 +1188,6 @@
|
||||
},
|
||||
{
|
||||
"allValue": null,
|
||||
"current": null,
|
||||
"datasource": "prometheus",
|
||||
"definition": "query_result(sum(envoy_cluster_upstream_rq{kubernetes_namespace=\"$namespace\",app!~\".*-primary\"}) by (app))",
|
||||
"hide": 0,
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
apiVersion: v1
|
||||
name: loadtester
|
||||
version: 0.18.0
|
||||
version: 0.19.1
|
||||
appVersion: 0.18.0
|
||||
kubeVersion: ">=1.11.0-0"
|
||||
engine: gotpl
|
||||
@@ -19,5 +19,7 @@ keywords:
|
||||
- appmesh
|
||||
- linkerd
|
||||
- gloo
|
||||
- osm
|
||||
- smi
|
||||
- gitops
|
||||
- load testing
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
# Flagger load testing service
|
||||
|
||||
[Flagger's](https://github.com/fluxcd/flagger) load testing service is based on
|
||||
[rakyll/hey](https://github.com/rakyll/hey) and
|
||||
[Flagger's](https://github.com/fluxcd/flagger) load testing service is based on
|
||||
[rakyll/hey](https://github.com/rakyll/hey) and
|
||||
[bojand/ghz](https://github.com/bojand/ghz).
|
||||
It can be used to generate HTTP and gRPC traffic during canary analysis when configured as a webhook.
|
||||
|
||||
@@ -26,7 +26,7 @@ helm upgrade -i flagger-loadtester flagger/loadtester
|
||||
The command deploys loadtester on the Kubernetes cluster in the default namespace.
|
||||
|
||||
> **Tip**: Note that the namespace where you deploy the load tester should
|
||||
> have the Istio, App Mesh or Linkerd sidecar injection enabled
|
||||
> have the Istio, App Mesh, Linkerd or Open Service Mesh sidecar injection enabled
|
||||
|
||||
The [configuration](#configuration) section lists the parameters that can be configured during installation.
|
||||
|
||||
@@ -50,7 +50,7 @@ Parameter | Description | Default
|
||||
`image.pullPolicy` | Image pull policy | `IfNotPresent`
|
||||
`image.tag` | Image tag | `<VERSION>`
|
||||
`replicaCount` | Desired number of pods | `1`
|
||||
`serviceAccountName` | Kubernetes service account name | `none`
|
||||
`serviceAccountName` | Kubernetes service account name | `none`
|
||||
`resources.requests.cpu` | CPU requests | `10m`
|
||||
`resources.requests.memory` | Memory requests | `64Mi`
|
||||
`tolerations` | List of node taints to tolerate | `[]`
|
||||
@@ -70,6 +70,8 @@ Parameter | Description | Default
|
||||
`podPriorityClassName` | PriorityClass name for pod priority configuration | ""
|
||||
`securityContext.enabled` | Add securityContext to container | ""
|
||||
`securityContext.context` | securityContext to add | ""
|
||||
`podDisruptionBudget.enabled` | A PodDisruptionBudget will be created if `true` | `false`
|
||||
`podDisruptionBudget.minAvailable` | The minimal number of available replicas that will be set in the PodDisruptionBudget | `1`
|
||||
|
||||
Specify each parameter using the `--set key=value[,key=value]` argument to `helm upgrade`. For example,
|
||||
|
||||
@@ -87,5 +89,3 @@ helm install flagger/loadtester --name flagger-loadtester -f values.yaml
|
||||
```
|
||||
|
||||
> **Tip**: You can use the default [values.yaml](values.yaml)
|
||||
|
||||
|
||||
|
||||
@@ -16,8 +16,10 @@ spec:
|
||||
metadata:
|
||||
labels:
|
||||
app: {{ include "loadtester.name" . }}
|
||||
app.kubernetes.io/name: {{ include "loadtester.name" . }}
|
||||
annotations:
|
||||
appmesh.k8s.aws/ports: "444"
|
||||
openservicemesh.io/inbound-port-exclusion-list: "80, 8080"
|
||||
{{- if .Values.podAnnotations }}
|
||||
{{ toYaml .Values.podAnnotations | indent 8 }}
|
||||
{{- end }}
|
||||
@@ -29,7 +31,7 @@ spec:
|
||||
{{- end }}
|
||||
{{- if .Values.podPriorityClassName }}
|
||||
priorityClassName: {{ .Values.podPriorityClassName }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
containers:
|
||||
- name: {{ .Chart.Name }}
|
||||
{{- if .Values.securityContext.enabled }}
|
||||
@@ -66,8 +68,21 @@ spec:
|
||||
- --spider
|
||||
- http://localhost:8080/healthz
|
||||
timeoutSeconds: 5
|
||||
{{- if .Values.env }}
|
||||
env:
|
||||
{{- toYaml .Values.env | nindent 12 }}
|
||||
{{- end }}
|
||||
resources:
|
||||
{{- toYaml .Values.resources | nindent 12 }}
|
||||
{{- with .Values.volumeMounts }}
|
||||
volumeMounts:
|
||||
{{- toYaml . | nindent 12 }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
{{ with .Values.volumes }}
|
||||
volumes:
|
||||
{{- toYaml . | nindent 8 }}
|
||||
{{- end }}
|
||||
{{- with .Values.nodeSelector }}
|
||||
nodeSelector:
|
||||
{{- toYaml . | nindent 8 }}
|
||||
|
||||
11
charts/loadtester/templates/pdb.yaml
Normal file
@@ -0,0 +1,11 @@
|
||||
{{- if .Values.podDisruptionBudget.enabled }}
|
||||
apiVersion: policy/v1beta1
|
||||
kind: PodDisruptionBudget
|
||||
metadata:
|
||||
name: {{ include "loadtester.fullname" . }}
|
||||
spec:
|
||||
minAvailable: {{ .Values.podDisruptionBudget.minAvailable }}
|
||||
selector:
|
||||
matchLabels:
|
||||
app.kubernetes.io/name: {{ include "loadtester.name" . }}
|
||||
{{- end }}
|
||||
@@ -9,7 +9,7 @@ podAnnotations:
|
||||
prometheus.io/scrape: "true"
|
||||
prometheus.io/port: "8080"
|
||||
|
||||
podPriorityClassName: ""
|
||||
podPriorityClassName: ""
|
||||
|
||||
logLevel: info
|
||||
cmd:
|
||||
@@ -18,6 +18,8 @@ cmd:
|
||||
nameOverride: ""
|
||||
fullnameOverride: ""
|
||||
|
||||
env: []
|
||||
|
||||
service:
|
||||
type: ClusterIP
|
||||
port: 80
|
||||
@@ -27,6 +29,9 @@ resources:
|
||||
cpu: 10m
|
||||
memory: 64Mi
|
||||
|
||||
volumes: []
|
||||
volumeMounts: []
|
||||
|
||||
nodeSelector: {}
|
||||
|
||||
tolerations: []
|
||||
@@ -62,15 +67,15 @@ appmesh:
|
||||
- podinfo
|
||||
- podinfo-canary
|
||||
|
||||
#Istio virtual service and gatway settings. TLS secrets should be in namespace before enbaled it. ( secret format loadtester.fullname )
|
||||
#Istio virtual service and gatway settings. TLS secrets should be in namespace before enbaled it. ( secret format loadtester.fullname )
|
||||
istio:
|
||||
enabled: false
|
||||
host: flagger-loadtester.flagger
|
||||
gateway:
|
||||
enabled: false
|
||||
enabled: false
|
||||
tls:
|
||||
enabled: false
|
||||
httpsRedirect: false
|
||||
httpsRedirect: false
|
||||
|
||||
# when enabled, it will add a security context for the loadtester pod
|
||||
securityContext:
|
||||
@@ -79,3 +84,7 @@ securityContext:
|
||||
readOnlyRootFilesystem: true
|
||||
runAsUser: 100
|
||||
runAsGroup: 101
|
||||
|
||||
podDisruptionBudget:
|
||||
enabled: false
|
||||
minAvailable: 1
|
||||
|
||||
@@ -12,6 +12,7 @@ metadata:
|
||||
sidecar.istio.io/inject: "false"
|
||||
linkerd.io/inject: disabled
|
||||
appmesh.k8s.aws/sidecarInjectorWebhook: disabled
|
||||
openservicemesh.io/sidecar-injection: disabled
|
||||
spec:
|
||||
containers:
|
||||
- name: tools
|
||||
|
||||
@@ -63,8 +63,10 @@ var (
|
||||
logLevel string
|
||||
port string
|
||||
msteamsURL string
|
||||
msteamsProxyURL string
|
||||
includeLabelPrefix string
|
||||
slackURL string
|
||||
slackProxyURL string
|
||||
slackUser string
|
||||
slackChannel string
|
||||
eventWebhook string
|
||||
@@ -93,16 +95,18 @@ func init() {
|
||||
flag.StringVar(&logLevel, "log-level", "debug", "Log level can be: debug, info, warning, error.")
|
||||
flag.StringVar(&port, "port", "8080", "Port to listen on.")
|
||||
flag.StringVar(&slackURL, "slack-url", "", "Slack hook URL.")
|
||||
flag.StringVar(&slackProxyURL, "slack-proxy-url", "", "Slack proxy URL.")
|
||||
flag.StringVar(&slackUser, "slack-user", "flagger", "Slack user name.")
|
||||
flag.StringVar(&slackChannel, "slack-channel", "", "Slack channel.")
|
||||
flag.StringVar(&eventWebhook, "event-webhook", "", "Webhook for publishing flagger events")
|
||||
flag.StringVar(&msteamsURL, "msteams-url", "", "MS Teams incoming webhook URL.")
|
||||
flag.StringVar(&msteamsProxyURL, "msteams-proxy-url", "", "MS Teams proxy URL.")
|
||||
flag.StringVar(&includeLabelPrefix, "include-label-prefix", "", "List of prefixes of labels that are copied when creating primary deployments or daemonsets. Use * to include all.")
|
||||
flag.IntVar(&threadiness, "threadiness", 2, "Worker concurrency.")
|
||||
flag.BoolVar(&zapReplaceGlobals, "zap-replace-globals", false, "Whether to change the logging level of the global zap logger.")
|
||||
flag.StringVar(&zapEncoding, "zap-encoding", "json", "Zap logger encoding.")
|
||||
flag.StringVar(&namespace, "namespace", "", "Namespace that flagger would watch canary object.")
|
||||
flag.StringVar(&meshProvider, "mesh-provider", "istio", "Service mesh provider, can be istio, linkerd, appmesh, contour, gloo, nginx, skipper or traefik.")
|
||||
flag.StringVar(&meshProvider, "mesh-provider", "istio", "Service mesh provider, can be istio, linkerd, appmesh, contour, gloo, nginx, skipper, traefik or osm.")
|
||||
flag.StringVar(&selectorLabels, "selector-labels", "app,name,app.kubernetes.io/name", "List of pod labels that Flagger uses to create pod selectors.")
|
||||
flag.StringVar(&ingressAnnotationsPrefix, "ingress-annotations-prefix", "nginx.ingress.kubernetes.io", "Annotations prefix for NGINX ingresses.")
|
||||
flag.StringVar(&ingressClass, "ingress-class", "", "Ingress class used for annotating HTTPProxy objects.")
|
||||
@@ -349,11 +353,13 @@ func startLeaderElection(ctx context.Context, run func(), ns string, kubeClient
|
||||
func initNotifier(logger *zap.SugaredLogger) (client notifier.Interface) {
|
||||
provider := "slack"
|
||||
notifierURL := fromEnv("SLACK_URL", slackURL)
|
||||
notifierProxyURL := fromEnv("SLACK_PROXY_URL", slackProxyURL)
|
||||
if msteamsURL != "" || os.Getenv("MSTEAMS_URL") != "" {
|
||||
provider = "msteams"
|
||||
notifierURL = fromEnv("MSTEAMS_URL", msteamsURL)
|
||||
notifierProxyURL = fromEnv("MSTEAMS_PROXY_URL", msteamsProxyURL)
|
||||
}
|
||||
notifierFactory := notifier.NewFactory(notifierURL, slackUser, slackChannel)
|
||||
notifierFactory := notifier.NewFactory(notifierURL, notifierProxyURL, slackUser, slackChannel)
|
||||
|
||||
var err error
|
||||
client, err = notifierFactory.Notifier(provider)
|
||||
|
||||
BIN
docs/diagrams/flagger-osm-traffic-split.png
Normal file
|
After Width: | Height: | Size: 124 KiB |
@@ -10,9 +10,9 @@ version in production by gradually shifting traffic to the new version while mea
|
||||
and running conformance tests.
|
||||
|
||||
Flagger implements several deployment strategies (Canary releases, A/B testing, Blue/Green mirroring)
|
||||
using a service mesh (App Mesh, Istio, Linkerd)
|
||||
using a service mesh (App Mesh, Istio, Linkerd, Open Service Mesh)
|
||||
or an ingress controller (Contour, Gloo, NGINX, Skipper, Traefik) for traffic routing.
|
||||
For release analysis, Flagger can query Prometheus, Datadog, New Relic or CloudWatch
|
||||
For release analysis, Flagger can query Prometheus, Datadog, New Relic, CloudWatch or Graphite
|
||||
and for alerting it uses Slack, MS Teams, Discord and Rocket.
|
||||
|
||||

|
||||
@@ -26,16 +26,17 @@ and part of [Flux](https://fluxcd.io) family of GitOps tools.
|
||||
|
||||
## Getting started
|
||||
|
||||
To get started with Flagger, chose one of the supported routing providers and
|
||||
To get started with Flagger, choose one of the supported routing providers and
|
||||
[install](install/flagger-install-on-kubernetes.md) Flagger with Helm or Kustomize.
|
||||
|
||||
After install Flagger, you can follow one of these tutorials to get started:
|
||||
After installing Flagger, you can follow one of these tutorials to get started:
|
||||
|
||||
**Service mesh tutorials**
|
||||
|
||||
* [Istio](tutorials/istio-progressive-delivery.md)
|
||||
* [Linkerd](tutorials/linkerd-progressive-delivery.md)
|
||||
* [AWS App Mesh](tutorials/appmesh-progressive-delivery.md)
|
||||
* [Open Service Mesh](tutorials/osm-progressive-delivery.md)
|
||||
|
||||
**Ingress controller tutorials**
|
||||
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
* [NGINX Canary Deployments](tutorials/nginx-progressive-delivery.md)
|
||||
* [Skipper Canary Deployments](tutorials/skipper-progressive-delivery.md)
|
||||
* [Traefik Canary Deployments](tutorials/traefik-progressive-delivery.md)
|
||||
* [Open Service Mesh Deployments](tutorials/osm-progressive-delivery.md)
|
||||
* [Blue/Green Deployments](tutorials/kubernetes-blue-green.md)
|
||||
* [Canary analysis with Prometheus Operator](tutorials/prometheus-operator.md)
|
||||
* [Zero downtime deployments](tutorials/zero-downtime-deployments.md)
|
||||
|
||||
@@ -200,7 +200,7 @@ Run the Istio e2e tests:
|
||||
./test/istio/run.sh
|
||||
```
|
||||
|
||||
For each service mesh and ingress controller there is a dedicated e2e test suite,
|
||||
chose one that matches your changes from this [list](https://github.com/fluxcd/flagger/tree/main/test).
|
||||
For each service mesh and ingress controller, there is a dedicated e2e test suite,
|
||||
choose one that matches your changes from this [list](https://github.com/fluxcd/flagger/tree/main/test).
|
||||
|
||||
When you open a pull request on Flagger repo, the unit and integration tests will be run in CI.
|
||||
|
||||
@@ -13,8 +13,8 @@ Flagger implements the following deployment strategies:
|
||||
|
||||
#### When should I use A/B testing instead of progressive traffic shifting?
|
||||
|
||||
For frontend applications that require session affinity you should use HTTP headers or
|
||||
cookies match conditions to ensure a set of users will stay on the same version for
|
||||
For frontend applications that require session affinity, you should use HTTP headers or
|
||||
cookie match conditions to ensure a set of users will stay on the same version for
|
||||
the whole duration of the canary analysis.
|
||||
|
||||
#### Can I use Flagger to manage applications that live outside of a service mesh?
|
||||
@@ -49,16 +49,17 @@ spec:
|
||||
timestamp: "2020-03-10T14:24:48+0000"
|
||||
```
|
||||
|
||||
#### Why is there a downtime during the canary initializing process when analysis is disabled?
|
||||
#### Why is there a window of downtime during the canary initializing process when analysis is disabled?
|
||||
|
||||
It is the intended behavior when the analysis is disabled, this allows instant rollback and also mimics the way a Kubernetes deployment initialization works.
|
||||
To avoid this: enable the analysis (`skipAnalysis: true`), wait for the initialization to finish, and disable it afterward (`skipAnalysis: false`).
|
||||
A window of downtime is the intended behavior when the analysis is disabled. This allows instant rollback and also mimics the way
|
||||
a Kubernetes deployment initialization works. To avoid this, enable the analysis (`skipAnalysis: true`), wait for the initialization
|
||||
to finish, and disable it afterward (`skipAnalysis: false`).
|
||||
|
||||
## Kubernetes services
|
||||
|
||||
#### How is an application exposed inside the cluster?
|
||||
|
||||
Assuming the app name is podinfo you can define a canary like:
|
||||
Assuming the app name is `podinfo`, you can define a canary like:
|
||||
|
||||
```yaml
|
||||
apiVersion: flagger.app/v1beta1
|
||||
@@ -84,19 +85,19 @@ spec:
|
||||
|
||||
If the `service.name` is not specified, then `targetRef.name` is used for
|
||||
the apex domain and canary/primary services name prefix.
|
||||
You should treat the service name as an immutable field, changing it could result in routing conflicts.
|
||||
You should treat the service name as an immutable field; changing its could result in routing conflicts.
|
||||
|
||||
Based on the canary spec service, Flagger generates the following Kubernetes ClusterIP service:
|
||||
|
||||
* `<service.name>.<namespace>.svc.cluster.local`
|
||||
* `<service.name>.<namespace>.svc.cluster.local`
|
||||
|
||||
selector `app=<name>-primary`
|
||||
|
||||
* `<service.name>-primary.<namespace>.svc.cluster.local`
|
||||
* `<service.name>-primary.<namespace>.svc.cluster.local`
|
||||
|
||||
selector `app=<name>-primary`
|
||||
|
||||
* `<service.name>-canary.<namespace>.svc.cluster.local`
|
||||
* `<service.name>-canary.<namespace>.svc.cluster.local`
|
||||
|
||||
selector `app=<name>`
|
||||
|
||||
@@ -152,7 +153,7 @@ and can be used for conformance testing or load testing.
|
||||
|
||||
## Multiple ports
|
||||
|
||||
#### My application listens on multiple ports, how can I expose them inside the cluster?
|
||||
#### My application listens on multiple ports. How can I expose them inside the cluster?
|
||||
|
||||
If port discovery is enabled, Flagger scans the deployment spec and extracts the containers ports excluding
|
||||
the port specified in the canary service and Envoy sidecar ports.
|
||||
@@ -219,8 +220,15 @@ spec:
|
||||
app: podinfo
|
||||
```
|
||||
|
||||
Besides `app` Flagger supports `name` and `app.kubernetes.io/name` selectors.
|
||||
If you use a different convention you can specify your label with the `-selector-labels` flag.
|
||||
Besides `app`, Flagger supports `name` and `app.kubernetes.io/name` selectors.
|
||||
If you use a different convention, you can specify your label with the `-selector-labels` flag.
|
||||
For example:
|
||||
|
||||
```
|
||||
flagger \
|
||||
-selector-labels=service,name,app.kubernetes.io/name \
|
||||
...
|
||||
```
|
||||
|
||||
#### Is pod affinity and anti affinity supported?
|
||||
|
||||
@@ -331,7 +339,7 @@ spec:
|
||||
|
||||
#### How does Flagger measure the request success rate and duration?
|
||||
|
||||
Flagger measures the request success rate and duration using Prometheus queries.
|
||||
By default, Flagger measures the request success rate and duration using Prometheus queries.
|
||||
|
||||
#### HTTP requests success rate percentage
|
||||
|
||||
@@ -360,8 +368,8 @@ sum(
|
||||
response_code!~"5.*"
|
||||
}[$interval]
|
||||
)
|
||||
)
|
||||
/
|
||||
)
|
||||
/
|
||||
sum(
|
||||
rate(
|
||||
istio_requests_total{
|
||||
@@ -384,8 +392,8 @@ sum(
|
||||
envoy_response_code!~"5.*"
|
||||
}[$interval]
|
||||
)
|
||||
)
|
||||
/
|
||||
)
|
||||
/
|
||||
sum(
|
||||
rate(
|
||||
envoy_cluster_upstream_rq{
|
||||
@@ -435,7 +443,7 @@ Spec:
|
||||
Istio query:
|
||||
|
||||
```javascript
|
||||
histogram_quantile(0.99,
|
||||
histogram_quantile(0.99,
|
||||
sum(
|
||||
irate(
|
||||
istio_request_duration_seconds_bucket{
|
||||
@@ -451,7 +459,7 @@ histogram_quantile(0.99,
|
||||
Envoy query (App Mesh, Contour and Gloo):
|
||||
|
||||
```javascript
|
||||
histogram_quantile(0.99,
|
||||
histogram_quantile(0.99,
|
||||
sum(
|
||||
irate(
|
||||
envoy_cluster_upstream_rq_time_bucket{
|
||||
@@ -467,8 +475,8 @@ histogram_quantile(0.99,
|
||||
|
||||
#### Can I use custom metrics?
|
||||
|
||||
The analysis can be extended with metrics provided by Prometheus, Datadog and AWS CloudWatch.
|
||||
For more details on how custom metrics can be used please read the [metrics docs](usage/metrics.md).
|
||||
The analysis can be extended with metrics provided by Prometheus, Datadog, AWS CloudWatch, New Relic and Graphite.
|
||||
For more details on how custom metrics can be used, please read the [metrics docs](usage/metrics.md).
|
||||
|
||||
## Istio routing
|
||||
|
||||
@@ -711,7 +719,7 @@ spec:
|
||||
weight: 0
|
||||
```
|
||||
|
||||
Therefore, The following virtual service forward the traffic to `/podinfo` by the above delegate VirtualService.
|
||||
Therefore, the following virtual service forwards the traffic to `/podinfo` by the above delegate VirtualService.
|
||||
|
||||
```yaml
|
||||
apiVersion: networking.istio.io/v1alpha3
|
||||
@@ -737,7 +745,7 @@ spec:
|
||||
namespace: test
|
||||
```
|
||||
|
||||
Note that pilot env `PILOT_ENABLE_VIRTUAL_SERVICE_DELEGATE` must also be set.
|
||||
Note that pilot env `PILOT_ENABLE_VIRTUAL_SERVICE_DELEGATE` must also be set.
|
||||
For the use of Istio Delegation, you can refer to the documentation of
|
||||
[Virtual Service](https://istio.io/latest/docs/reference/config/networking/virtual-service/#Delegate)
|
||||
and [pilot environment variables](https://istio.io/latest/docs/reference/commands/pilot-discovery/#envvars).
|
||||
@@ -746,8 +754,8 @@ and [pilot environment variables](https://istio.io/latest/docs/reference/command
|
||||
|
||||
#### How can I expose multiple canaries on the same external domain?
|
||||
|
||||
Assuming you have two apps, one that servers the main website and one that serves the REST API.
|
||||
For each app you can define a canary object as:
|
||||
Assuming you have two apps -- one that serves the main website and one that serves its REST API --
|
||||
you can define a canary object for each app as:
|
||||
|
||||
```yaml
|
||||
apiVersion: flagger.app/v1beta1
|
||||
@@ -791,7 +799,7 @@ Istio Pilot will
|
||||
[merge](https://istio.io/help/ops/traffic-management/deploy-guidelines/#multiple-virtual-services-and-destination-rules-for-the-same-host)
|
||||
the two services and the website rule will be moved to the end of the list in the merged configuration.
|
||||
|
||||
Note that host merging only works if the canaries are bounded to a ingress gateway other than the `mesh` gateway.
|
||||
Note that host merging only works if the canaries are bounded to an ingress gateway other than the `mesh` gateway.
|
||||
|
||||
## Istio Mutual TLS
|
||||
|
||||
@@ -809,7 +817,7 @@ spec:
|
||||
mode: ISTIO_MUTUAL
|
||||
```
|
||||
|
||||
If you run Istio in permissive mode you can disable TLS:
|
||||
If you run Istio in permissive mode, you can disable TLS:
|
||||
|
||||
```yaml
|
||||
apiVersion: flagger.app/v1beta1
|
||||
@@ -824,10 +832,10 @@ spec:
|
||||
#### If Flagger is outside of the mesh, how can it start the load test?
|
||||
|
||||
In order for Flagger to be able to call the load tester service from outside the mesh,
|
||||
you need to disable mTLS on port 80:
|
||||
you need to disable mTLS:
|
||||
|
||||
```yaml
|
||||
apiVersion: networking.istio.io/v1alpha3
|
||||
apiVersion: networking.istio.io/v1beta1
|
||||
kind: DestinationRule
|
||||
metadata:
|
||||
name: flagger-loadtester
|
||||
@@ -838,14 +846,15 @@ spec:
|
||||
tls:
|
||||
mode: DISABLE
|
||||
---
|
||||
apiVersion: authentication.istio.io/v1alpha1
|
||||
kind: Policy
|
||||
apiVersion: security.istio.io/v1beta1
|
||||
kind: PeerAuthentication
|
||||
metadata:
|
||||
name: flagger-loadtester
|
||||
namespace: test
|
||||
spec:
|
||||
targets:
|
||||
- name: flagger-loadtester
|
||||
ports:
|
||||
- number: 80
|
||||
selector:
|
||||
matchLabels:
|
||||
app: flagger-loadtester
|
||||
mtls:
|
||||
mode: DISABLE
|
||||
```
|
||||
|
||||
@@ -71,6 +71,16 @@ helm upgrade -i flagger flagger/flagger \
|
||||
--set metricsServer=http://appmesh-prometheus:9090
|
||||
```
|
||||
|
||||
Deploy Flagger for **Open Service Mesh (OSM)** (requires OSM to have been installed with Prometheus):
|
||||
|
||||
```console
|
||||
$ helm upgrade -i flagger flagger/flagger \
|
||||
--namespace=osm-system \
|
||||
--set crd.create=false \
|
||||
--set meshProvider=osm \
|
||||
--set metricsServer=http://osm-prometheus.osm-system.svc:7070
|
||||
```
|
||||
|
||||
You can install Flagger in any namespace as long as it can talk to the Prometheus service on port 9090.
|
||||
|
||||
For ingress controllers, the install instructions are:
|
||||
@@ -173,6 +183,14 @@ kustomize build https://github.com/fluxcd/flagger/kustomize/linkerd?ref=main | k
|
||||
|
||||
This deploys Flagger in the `linkerd` namespace and sets the metrics server URL to Linkerd's Prometheus instance.
|
||||
|
||||
Install Flagger for Open Service Mesh:
|
||||
|
||||
```bash
|
||||
kustomize build https://github.com/fluxcd/flagger/kustomize/osm?ref=main | kubectl apply -f -
|
||||
```
|
||||
|
||||
This deploys Flagger in the `osm-system` namespace and sets the metrics server URL to OSM's Prometheus instance.
|
||||
|
||||
If you want to install a specific Flagger release, add the version number to the URL:
|
||||
|
||||
```bash
|
||||
@@ -202,7 +220,7 @@ metadata:
|
||||
name: app
|
||||
namespace: test
|
||||
spec:
|
||||
# can be: kubernetes, istio, linkerd, appmesh, nginx, skipper, gloo, traefik
|
||||
# can be: kubernetes, istio, linkerd, appmesh, nginx, skipper, gloo, traefik, osm
|
||||
# use the kubernetes provider for Blue/Green style deployments
|
||||
provider: nginx
|
||||
```
|
||||
|
||||
@@ -337,7 +337,7 @@ A canary deployment can fail due to any of the following reasons:
|
||||
|
||||
* the container image can't be downloaded
|
||||
* the deployment replica set is stuck for more then ten minutes \(eg. due to a container crash loop\)
|
||||
* the webooks \(acceptance tests, helm tests, load tests, etc\) are returning a non 2xx response
|
||||
* the webhooks \(acceptance tests, helm tests, load tests, etc\) are returning a non 2xx response
|
||||
* the HTTP success rate \(non 5xx responses\) metric drops under the threshold
|
||||
* the HTTP average duration metric goes over the threshold
|
||||
* the Istio telemetry service is unable to collect traffic metrics
|
||||
|
||||
@@ -10,8 +10,8 @@ and Flagger to automate canary releases and A/B testing.
|
||||
Flagger requires a Kubernetes cluster **v1.16** or newer and Gloo Edge ingress **1.6.0** or newer.
|
||||
|
||||
This guide was written for Flagger version **1.6.0** or higher. Prior versions of Flagger
|
||||
used Gloo upstream groups to handle canaries, but newer versions of Flagger use Gloo
|
||||
route tables to handle canaries as well as A/B testing.
|
||||
used Gloo `UpstreamGroup`s to handle canaries, but newer versions of Flagger use Gloo
|
||||
`RouteTable`s to handle canaries as well as A/B testing.
|
||||
|
||||
Install Gloo with Helm v3:
|
||||
|
||||
@@ -36,7 +36,7 @@ helm upgrade -i flagger flagger/flagger \
|
||||
## Bootstrap
|
||||
|
||||
Flagger takes a Kubernetes deployment and optionally a horizontal pod autoscaler (HPA),
|
||||
then creates a series of objects (Kubernetes deployments, ClusterIP services and Gloo route tables groups).
|
||||
then creates a series of objects (Kubernetes deployments, ClusterIP services, Gloo route tables and upstreams).
|
||||
These objects expose the application outside the cluster and drive the canary analysis and promotion.
|
||||
|
||||
Create a test namespace:
|
||||
@@ -94,6 +94,14 @@ metadata:
|
||||
name: podinfo
|
||||
namespace: test
|
||||
spec:
|
||||
# upstreamRef (optional)
|
||||
# defines an upstream to copy the spec from when flagger generates new upstreams.
|
||||
# necessary to copy over TLS config, circuit breakers, etc. (anything nonstandard)
|
||||
# upstreamRef:
|
||||
# apiVersion: gloo.solo.io/v1
|
||||
# kind: Upstream
|
||||
# name: podinfo-upstream
|
||||
# namespace: gloo-system
|
||||
provider: gloo
|
||||
# deployment reference
|
||||
targetRef:
|
||||
@@ -152,6 +160,8 @@ spec:
|
||||
cmd: "hey -z 2m -q 5 -c 2 -host app.example.com http://gateway-proxy.gloo-system"
|
||||
```
|
||||
|
||||
*Note: when using upstreamRef the following fields are copied over from the original upstream: `Labels, SslConfig, CircuitBreakers, ConnectionConfig, UseHttp2, InitialStreamWindowSize`*
|
||||
|
||||
Save the above resource as podinfo-canary.yaml and then apply it:
|
||||
|
||||
```bash
|
||||
@@ -174,6 +184,8 @@ service/podinfo
|
||||
service/podinfo-canary
|
||||
service/podinfo-primary
|
||||
routetables.gateway.solo.io/podinfo
|
||||
upstreams.gloo.solo.io/test-podinfo-canaryupstream-9898
|
||||
upstreams.gloo.solo.io/test-podinfo-primaryupstream-9898
|
||||
```
|
||||
|
||||
When the bootstrap finishes Flagger will set the canary status to initialized:
|
||||
|
||||
@@ -6,7 +6,14 @@ This guide shows you how to use Linkerd and Flagger to automate canary deploymen
|
||||
|
||||
## Prerequisites
|
||||
|
||||
Flagger requires a Kubernetes cluster **v1.16** or newer and Linkerd **2.4** or newer.
|
||||
Flagger requires a Kubernetes cluster **v1.16** or newer and Linkerd **2.10** or newer.
|
||||
|
||||
Install Linkerd the Promethues (part of Linkerd Viz):
|
||||
|
||||
```bash
|
||||
linkerd install | kubectl apply -f -
|
||||
linkerd viz install | kubectl apply -f -
|
||||
```
|
||||
|
||||
Install Flagger in the linkerd namespace:
|
||||
|
||||
@@ -14,11 +21,11 @@ Install Flagger in the linkerd namespace:
|
||||
kubectl apply -k github.com/fluxcd/flagger//kustomize/linkerd
|
||||
```
|
||||
|
||||
Note that you'll need kubectl 1.14 or newer to run the above command.
|
||||
|
||||
## Bootstrap
|
||||
|
||||
Flagger takes a Kubernetes deployment and optionally a horizontal pod autoscaler \(HPA\), then creates a series of objects \(Kubernetes deployments, ClusterIP services and SMI traffic split\). These objects expose the application inside the mesh and drive the canary analysis and promotion.
|
||||
Flagger takes a Kubernetes deployment and optionally a horizontal pod autoscaler (HPA),
|
||||
then creates a series of objects (Kubernetes deployments, ClusterIP services and SMI traffic split).
|
||||
These objects expose the application inside the mesh and drive the canary analysis and promotion.
|
||||
|
||||
Create a test namespace and enable Linkerd proxy injection:
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@ This guide shows you how to use the NGINX ingress controller and Flagger to auto
|
||||
|
||||
## Prerequisites
|
||||
|
||||
Flagger requires a Kubernetes cluster **v1.16** or newer and NGINX ingress **v0.41** or newer.
|
||||
Flagger requires a Kubernetes cluster **v1.19** or newer and NGINX ingress **v0.46** or newer.
|
||||
|
||||
Install the NGINX ingress controller with Helm v3:
|
||||
|
||||
@@ -59,7 +59,7 @@ helm upgrade -i flagger-loadtester flagger/loadtester \
|
||||
Create an ingress definition (replace `app.example.com` with your own domain):
|
||||
|
||||
```yaml
|
||||
apiVersion: networking.k8s.io/v1beta1
|
||||
apiVersion: networking.k8s.io/v1
|
||||
kind: Ingress
|
||||
metadata:
|
||||
name: podinfo
|
||||
@@ -70,12 +70,16 @@ metadata:
|
||||
kubernetes.io/ingress.class: "nginx"
|
||||
spec:
|
||||
rules:
|
||||
- host: app.example.com
|
||||
- host: "app.example.com"
|
||||
http:
|
||||
paths:
|
||||
- backend:
|
||||
serviceName: podinfo
|
||||
servicePort: 80
|
||||
- pathType: Prefix
|
||||
path: "/"
|
||||
backend:
|
||||
service:
|
||||
name: podinfo
|
||||
port:
|
||||
number: 80
|
||||
```
|
||||
|
||||
Save the above resource as podinfo-ingress.yaml and then apply it:
|
||||
@@ -101,7 +105,7 @@ spec:
|
||||
name: podinfo
|
||||
# ingress reference
|
||||
ingressRef:
|
||||
apiVersion: networking.k8s.io/v1beta1
|
||||
apiVersion: networking.k8s.io/v1
|
||||
kind: Ingress
|
||||
name: podinfo
|
||||
# HPA reference (optional)
|
||||
|
||||
355
docs/gitbook/tutorials/osm-progressive-delivery.md
Normal file
@@ -0,0 +1,355 @@
|
||||
# Open Service Mesh Canary Deployments
|
||||
|
||||
This guide shows you how to use Open Service Mesh (OSM) and Flagger to automate canary deployments.
|
||||
|
||||

|
||||
|
||||
## Prerequisites
|
||||
|
||||
Flagger requires a Kubernetes cluster **v1.16** or newer and Open Service Mesh **0.9.1** or newer.
|
||||
|
||||
Install Open Service Mesh with Prometheus and permissive traffic policy enabled.
|
||||
|
||||
```bash
|
||||
osm install \
|
||||
--set=OpenServiceMesh.deployPrometheus=true \
|
||||
--set=OpenServiceMesh.enablePermissiveTrafficPolicy=true
|
||||
```
|
||||
|
||||
Install Flagger in the `osm-system` namespace using `kubectl`.
|
||||
|
||||
```bash
|
||||
kubectl apply -k https://github.com/fluxcd/flagger//kustomize/osm?ref=main
|
||||
```
|
||||
|
||||
Alternatively, Flagger can be installed in the `osm-system` namespace using `helm`.
|
||||
|
||||
```bash
|
||||
helm upgrade -i flagger flagger/flagger \
|
||||
--namespace=osm-system \
|
||||
--set meshProvider=osm \
|
||||
--set metricsServer=http://osm-prometheus.osm-system.svc:7070
|
||||
```
|
||||
|
||||
## Bootstrap
|
||||
|
||||
Flagger takes a Kubernetes deployment and optionally a horizontal pod autoscaler (HPA),
|
||||
then creates a series of objects (Kubernetes deployments, ClusterIP services and SMI traffic split).
|
||||
These objects expose the application inside the mesh and drive the canary analysis and promotion.
|
||||
|
||||
Create a `test` namespace and enable osm namespace monitoring and metrics scraping for the namespace.
|
||||
|
||||
```bash
|
||||
kubectl create namespace test
|
||||
osm namespace add test
|
||||
osm metrics enable --namespace test
|
||||
```
|
||||
|
||||
Create a `podinfo` deployment and a horizontal pod autoscaler:
|
||||
|
||||
```bash
|
||||
kubectl apply -k https://github.com/fluxcd/flagger//kustomize/podinfo?ref=main
|
||||
```
|
||||
|
||||
Install the load testing service to generate traffic during the canary analysis:
|
||||
|
||||
```bash
|
||||
kubectl apply -k https://github.com/fluxcd/flagger//kustomize/tester?ref=main
|
||||
```
|
||||
|
||||
Create a canary custom resource for the `podinfo` deployment.
|
||||
The following `podinfo` canary custom resource instructs Flagger to:
|
||||
1. monitor any changes to the `podinfo` deployment created earlier,
|
||||
2. detect `podinfo` deployment revision changes, and
|
||||
3. start a Flagger canary analysis, rollout, and promotion if there were deployment revision changes.
|
||||
|
||||
```yaml
|
||||
apiVersion: flagger.app/v1beta1
|
||||
kind: Canary
|
||||
metadata:
|
||||
name: podinfo
|
||||
namespace: test
|
||||
spec:
|
||||
provider: osm
|
||||
# deployment reference
|
||||
targetRef:
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
name: podinfo
|
||||
# HPA reference (optional)
|
||||
autoscalerRef:
|
||||
apiVersion: autoscaling/v2beta2
|
||||
kind: HorizontalPodAutoscaler
|
||||
name: podinfo
|
||||
# the maximum time in seconds for the canary deployment
|
||||
# to make progress before it is rolled back (default 600s)
|
||||
progressDeadlineSeconds: 60
|
||||
service:
|
||||
# ClusterIP port number
|
||||
port: 9898
|
||||
# container port number or name (optional)
|
||||
targetPort: 9898
|
||||
analysis:
|
||||
# schedule interval (default 60s)
|
||||
interval: 30s
|
||||
# max number of failed metric checks before rollback
|
||||
threshold: 5
|
||||
# max traffic percentage routed to canary
|
||||
# percentage (0-100)
|
||||
maxWeight: 50
|
||||
# canary increment step
|
||||
# percentage (0-100)
|
||||
stepWeight: 5
|
||||
# OSM Prometheus checks
|
||||
metrics:
|
||||
- name: request-success-rate
|
||||
# minimum req success rate (non 5xx responses)
|
||||
# percentage (0-100)
|
||||
thresholdRange:
|
||||
min: 99
|
||||
interval: 1m
|
||||
- name: request-duration
|
||||
# maximum req duration P99
|
||||
# milliseconds
|
||||
thresholdRange:
|
||||
max: 500
|
||||
interval: 30s
|
||||
# testing (optional)
|
||||
webhooks:
|
||||
- name: acceptance-test
|
||||
type: pre-rollout
|
||||
url: http://flagger-loadtester.test/
|
||||
timeout: 30s
|
||||
metadata:
|
||||
type: bash
|
||||
cmd: "curl -sd 'test' http://podinfo-canary.test:9898/token | grep token"
|
||||
- name: load-test
|
||||
type: rollout
|
||||
url: http://flagger-loadtester.test/
|
||||
timeout: 5s
|
||||
metadata:
|
||||
cmd: "hey -z 2m -q 10 -c 2 http://podinfo-canary.test:9898/"
|
||||
```
|
||||
|
||||
Save the above resource as podinfo-canary.yaml and then apply it:
|
||||
|
||||
```bash
|
||||
kubectl apply -f ./podinfo-canary.yaml
|
||||
```
|
||||
|
||||
When the canary analysis starts, Flagger will call the pre-rollout webhooks before routing traffic to the canary.
|
||||
The canary analysis will run for five minutes while validating the HTTP metrics and rollout hooks every half a minute.
|
||||
|
||||
After a couple of seconds Flagger will create the canary objects.
|
||||
|
||||
```bash
|
||||
# applied
|
||||
deployment.apps/podinfo
|
||||
horizontalpodautoscaler.autoscaling/podinfo
|
||||
ingresses.extensions/podinfo
|
||||
canary.flagger.app/podinfo
|
||||
|
||||
# generated
|
||||
deployment.apps/podinfo-primary
|
||||
horizontalpodautoscaler.autoscaling/podinfo-primary
|
||||
service/podinfo
|
||||
service/podinfo-canary
|
||||
service/podinfo-primary
|
||||
trafficsplits.split.smi-spec.io/podinfo
|
||||
```
|
||||
|
||||
After the boostrap, the `podinfo` deployment will be scaled to zero and the traffic to `podinfo.test` will be routed to the primary pods.
|
||||
During the canary analysis, the `podinfo-canary.test` address can be used to target directly the canary pods.
|
||||
|
||||
## Automated Canary Promotion
|
||||
|
||||
Flagger implements a control loop that gradually shifts traffic to the canary while measuring key performance indicators like HTTP requests success rate, requests average duration and pod health.
|
||||
Based on analysis of the KPIs a canary is promoted or aborted.
|
||||
|
||||

|
||||
|
||||
Trigger a canary deployment by updating the container image:
|
||||
|
||||
```bash
|
||||
kubectl -n test set image deployment/podinfo \
|
||||
podinfod=stefanprodan/podinfo:3.1.1
|
||||
```
|
||||
|
||||
Flagger detects that the deployment revision changed and starts a new rollout.
|
||||
|
||||
|
||||
```text
|
||||
kubectl -n test describe canary/podinfo
|
||||
|
||||
Status:
|
||||
Canary Weight: 0
|
||||
Failed Checks: 0
|
||||
Phase: Succeeded
|
||||
Events:
|
||||
New revision detected! Scaling up podinfo.test
|
||||
Waiting for podinfo.test rollout to finish: 0 of 1 updated replicas are available
|
||||
Pre-rollout check acceptance-test passed
|
||||
Advance podinfo.test canary weight 5
|
||||
Advance podinfo.test canary weight 10
|
||||
Advance podinfo.test canary weight 15
|
||||
Advance podinfo.test canary weight 20
|
||||
Advance podinfo.test canary weight 25
|
||||
Waiting for podinfo.test rollout to finish: 1 of 2 updated replicas are available
|
||||
Advance podinfo.test canary weight 30
|
||||
Advance podinfo.test canary weight 35
|
||||
Advance podinfo.test canary weight 40
|
||||
Advance podinfo.test canary weight 45
|
||||
Advance podinfo.test canary weight 50
|
||||
Copying podinfo.test template spec to podinfo-primary.test
|
||||
Waiting for podinfo-primary.test rollout to finish: 1 of 2 updated replicas are available
|
||||
Promotion completed! Scaling down podinfo.test
|
||||
```
|
||||
|
||||
**Note** that if you apply any new changes to the `podinfo` deployment during the canary analysis, Flagger will restart the analysis.
|
||||
|
||||
A canary deployment is triggered by changes in any of the following objects:
|
||||
|
||||
* Deployment PodSpec \(container image, command, ports, env, resources, etc\)
|
||||
* ConfigMaps mounted as volumes or mapped to environment variables
|
||||
* Secrets mounted as volumes or mapped to environment variables
|
||||
|
||||
You can monitor all canaries with:
|
||||
|
||||
```bash
|
||||
watch kubectl get canaries --all-namespaces
|
||||
|
||||
NAMESPACE NAME STATUS WEIGHT LASTTRANSITIONTIME
|
||||
test podinfo Progressing 15 2019-06-30T14:05:07Z
|
||||
prod frontend Succeeded 0 2019-06-30T16:15:07Z
|
||||
prod backend Failed 0 2019-06-30T17:05:07Z
|
||||
```
|
||||
|
||||
## Automated Rollback
|
||||
|
||||
During the canary analysis you can generate HTTP 500 errors and high latency to test if Flagger pauses and rolls back the faulted version.
|
||||
|
||||
Trigger another canary deployment:
|
||||
|
||||
```bash
|
||||
kubectl -n test set image deployment/podinfo \
|
||||
podinfod=stefanprodan/podinfo:3.1.2
|
||||
```
|
||||
|
||||
Exec into the load tester pod with:
|
||||
|
||||
```bash
|
||||
kubectl -n test exec -it flagger-loadtester-xx-xx sh
|
||||
```
|
||||
|
||||
Repeatedly generate HTTP 500 errors:
|
||||
|
||||
```bash
|
||||
watch -n 1 curl http://podinfo-canary.test:9898/status/500
|
||||
```
|
||||
|
||||
Repeatedly generate latency:
|
||||
|
||||
```bash
|
||||
watch -n 1 curl http://podinfo-canary.test:9898/delay/1
|
||||
```
|
||||
|
||||
When the number of failed checks reaches the canary analysis thresholds defined in the `podinfo` canary custom resource earlier, the traffic is routed back to the primary, the canary is scaled to zero and the rollout is marked as failed.
|
||||
|
||||
```text
|
||||
kubectl -n test describe canary/podinfo
|
||||
|
||||
Status:
|
||||
Canary Weight: 0
|
||||
Failed Checks: 10
|
||||
Phase: Failed
|
||||
Events:
|
||||
Starting canary analysis for podinfo.test
|
||||
Pre-rollout check acceptance-test passed
|
||||
Advance podinfo.test canary weight 5
|
||||
Advance podinfo.test canary weight 10
|
||||
Advance podinfo.test canary weight 15
|
||||
Halt podinfo.test advancement success rate 69.17% < 99%
|
||||
Halt podinfo.test advancement success rate 61.39% < 99%
|
||||
Halt podinfo.test advancement success rate 55.06% < 99%
|
||||
Halt podinfo.test advancement request duration 1.20s > 0.5s
|
||||
Halt podinfo.test advancement request duration 1.45s > 0.5s
|
||||
Rolling back podinfo.test failed checks threshold reached 5
|
||||
Canary failed! Scaling down podinfo.test
|
||||
```
|
||||
|
||||
## Custom Metrics
|
||||
|
||||
The canary analysis can be extended with Prometheus queries.
|
||||
|
||||
Let's a define a check for 404 not found errors.
|
||||
Edit the canary analysis (`podinfo-canary.yaml` file) and add the following metric.
|
||||
For more information on creating additional custom metrics using OSM metrics, please check the [metrics available in OSM](https://docs.openservicemesh.io/docs/guides/observability/metrics/#available-metrics).
|
||||
|
||||
```yaml
|
||||
analysis:
|
||||
metrics:
|
||||
- name: "404s percentage"
|
||||
threshold: 3
|
||||
query: |
|
||||
100 - (
|
||||
sum(
|
||||
rate(
|
||||
osm_request_total{
|
||||
destination_namespace="test",
|
||||
destination_kind="Deployment",
|
||||
destination_name="podinfo",
|
||||
response_code!="404"
|
||||
}[1m]
|
||||
)
|
||||
)
|
||||
/
|
||||
sum(
|
||||
rate(
|
||||
osm_request_total{
|
||||
destination_namespace="test",
|
||||
destination_kind="Deployment",
|
||||
destination_name="podinfo"
|
||||
}[1m]
|
||||
)
|
||||
) * 100
|
||||
)
|
||||
```
|
||||
|
||||
The above configuration validates the canary version by checking if the HTTP 404 req/sec percentage is below three percent of the total traffic.
|
||||
If the 404s rate reaches the 3% threshold, then the analysis is aborted and the canary is marked as failed.
|
||||
|
||||
Trigger a canary deployment by updating the container image:
|
||||
|
||||
```bash
|
||||
kubectl -n test set image deployment/podinfo \
|
||||
podinfod=stefanprodan/podinfo:3.1.3
|
||||
```
|
||||
|
||||
Exec into the load tester pod with:
|
||||
|
||||
```bash
|
||||
kubectl -n test exec -it flagger-loadtester-xx-xx sh
|
||||
```
|
||||
|
||||
Repeatedly generate 404s:
|
||||
|
||||
```bash
|
||||
watch -n 1 curl http://podinfo-canary.test:9898/status/404
|
||||
```
|
||||
|
||||
Watch Flagger logs to confirm successful canary rollback.
|
||||
|
||||
```text
|
||||
kubectl -n osm-system logs deployment/flagger -f | jq .msg
|
||||
|
||||
Starting canary deployment for podinfo.test
|
||||
Pre-rollout check acceptance-test passed
|
||||
Advance podinfo.test canary weight 5
|
||||
Halt podinfo.test advancement 404s percentage 6.20 > 3
|
||||
Halt podinfo.test advancement 404s percentage 6.45 > 3
|
||||
Halt podinfo.test advancement 404s percentage 7.22 > 3
|
||||
Halt podinfo.test advancement 404s percentage 6.50 > 3
|
||||
Halt podinfo.test advancement 404s percentage 6.34 > 3
|
||||
Rolling back podinfo.test failed checks threshold reached 5
|
||||
Canary failed! Scaling down podinfo.test
|
||||
```
|
||||
@@ -6,7 +6,7 @@ This guide shows you how to use the [Skipper ingress controller](https://opensou
|
||||
|
||||
## Prerequisites
|
||||
|
||||
Flagger requires a Kubernetes cluster **v1.16** or newer and Skipper ingress **0.11.40** or newer.
|
||||
Flagger requires a Kubernetes cluster **v1.19** or newer and Skipper ingress **v0.13** or newer.
|
||||
|
||||
Install Skipper ingress-controller using [upstream definition](https://opensource.zalando.com/skipper/kubernetes/ingress-controller/#install-skipper-as-ingress-controller).
|
||||
|
||||
@@ -36,7 +36,9 @@ kustomize build https://github.com/fluxcd/flagger/kustomize/kubernetes | kubectl
|
||||
|
||||
## Bootstrap
|
||||
|
||||
Flagger takes a Kubernetes deployment and optionally a horizontal pod autoscaler \(HPA\), then creates a series of objects \(Kubernetes deployments, ClusterIP services and canary ingress\). These objects expose the application outside the cluster and drive the canary analysis and promotion.
|
||||
Flagger takes a Kubernetes deployment and optionally a horizontal pod autoscaler (HPA),
|
||||
then creates a series of objects (Kubernetes deployments, ClusterIP services and canary ingress).
|
||||
These objects expose the application outside the cluster and drive the canary analysis and promotion.
|
||||
|
||||
Create a test namespace:
|
||||
|
||||
@@ -60,7 +62,7 @@ helm upgrade -i flagger-loadtester flagger/loadtester \
|
||||
Create an ingress definition \(replace `app.example.com` with your own domain\):
|
||||
|
||||
```yaml
|
||||
apiVersion: networking.k8s.io/v1beta1
|
||||
apiVersion: networking.k8s.io/v1
|
||||
kind: Ingress
|
||||
metadata:
|
||||
name: podinfo
|
||||
@@ -71,12 +73,16 @@ metadata:
|
||||
kubernetes.io/ingress.class: "skipper"
|
||||
spec:
|
||||
rules:
|
||||
- host: app.example.com
|
||||
- host: "app.example.com"
|
||||
http:
|
||||
paths:
|
||||
- backend:
|
||||
serviceName: podinfo
|
||||
servicePort: 80
|
||||
- pathType: Prefix
|
||||
path: "/"
|
||||
backend:
|
||||
service:
|
||||
name: podinfo
|
||||
port:
|
||||
number: 80
|
||||
```
|
||||
|
||||
Save the above resource as podinfo-ingress.yaml and then apply it:
|
||||
@@ -85,7 +91,7 @@ Save the above resource as podinfo-ingress.yaml and then apply it:
|
||||
kubectl apply -f ./podinfo-ingress.yaml
|
||||
```
|
||||
|
||||
Create a canary custom resource \(replace `app.example.com` with your own domain\):
|
||||
Create a canary custom resource (replace `app.example.com` with your own domain):
|
||||
|
||||
```yaml
|
||||
apiVersion: flagger.app/v1beta1
|
||||
@@ -102,7 +108,7 @@ spec:
|
||||
name: podinfo
|
||||
# ingress reference
|
||||
ingressRef:
|
||||
apiVersion: networking.k8s.io/v1beta1
|
||||
apiVersion: networking.k8s.io/v1
|
||||
kind: Ingress
|
||||
name: podinfo
|
||||
# HPA reference (optional)
|
||||
@@ -190,7 +196,9 @@ ingress.networking.k8s.io/podinfo-canary
|
||||
|
||||
## Automated canary promotion
|
||||
|
||||
Flagger implements a control loop that gradually shifts traffic to the canary while measuring key performance indicators like HTTP requests success rate, requests average duration and pod health. Based on analysis of the KPIs a canary is promoted or aborted, and the analysis result is published to Slack or MS Teams.
|
||||
Flagger implements a control loop that gradually shifts traffic to the canary while measuring
|
||||
key performance indicators like HTTP requests success rate, requests average duration and pod health.
|
||||
Based on analysis of the KPIs a canary is promoted or aborted, and the analysis result is published to Slack or MS Teams.
|
||||
|
||||

|
||||
|
||||
@@ -271,7 +279,8 @@ Generate latency:
|
||||
watch -n 1 curl http://app.example.com/delay/1
|
||||
```
|
||||
|
||||
When the number of failed checks reaches the canary analysis threshold, the traffic is routed back to the primary, the canary is scaled to zero and the rollout is marked as failed.
|
||||
When the number of failed checks reaches the canary analysis threshold, the traffic is routed back to the primary,
|
||||
the canary is scaled to zero and the rollout is marked as failed.
|
||||
|
||||
```text
|
||||
kubectl -n flagger-system logs deploy/flagger -f | jq .msg
|
||||
@@ -333,7 +342,8 @@ Edit the canary analysis and add the latency check:
|
||||
interval: 1m
|
||||
```
|
||||
|
||||
The threshold is set to 500ms so if the average request duration in the last minute goes over half a second then the analysis will fail and the canary will not be promoted.
|
||||
The threshold is set to 500ms so if the average request duration in the last minute goes over half a second
|
||||
then the analysis will fail and the canary will not be promoted.
|
||||
|
||||
Trigger a canary deployment by updating the container image:
|
||||
|
||||
@@ -367,4 +377,3 @@ Canary failed! Scaling down podinfo.test
|
||||
```
|
||||
|
||||
If you have alerting configured, Flagger will send a notification with the reason why the canary failed.
|
||||
|
||||
|
||||
@@ -13,9 +13,17 @@ Install Traefik with Helm v3:
|
||||
```bash
|
||||
helm repo add traefik https://helm.traefik.io/traefik
|
||||
kubectl create ns traefik
|
||||
helm upgrade -i traefik traefik/traefik \
|
||||
--namespace traefik \
|
||||
--set additionalArguments="--metrics.prometheus=true"
|
||||
|
||||
cat <<EOF | helm upgrade -i traefik traefik/traefik --namespace traefik -f -
|
||||
deployment:
|
||||
podAnnotations:
|
||||
prometheus.io/port: "9100"
|
||||
prometheus.io/scrape: "true"
|
||||
prometheus.io/path: "/metrics"
|
||||
metrics:
|
||||
prometheus:
|
||||
entryPoint: metrics
|
||||
EOF
|
||||
```
|
||||
|
||||
Install Flagger and the Prometheus add-on in the same namespace as Traefik:
|
||||
|
||||
@@ -5,11 +5,22 @@ You can define a global alert provider at install time or configure alerts on a
|
||||
|
||||
## Global configuration
|
||||
|
||||
Flagger can be configured to send Slack notifications:
|
||||
### Slack
|
||||
|
||||
#### Slack Configuration
|
||||
|
||||
Flagger requires a custom webhook integration from slack, instead of the new slack app system.
|
||||
|
||||
The webhook can be generated by following the [legacy slack documentation](https://api.slack.com/legacy/custom-integrations/messaging/webhooks)
|
||||
|
||||
#### Flagger configuration
|
||||
|
||||
Once the webhook has been generated. Flagger can be configured to send Slack notifications:
|
||||
|
||||
```bash
|
||||
helm upgrade -i flagger flagger/flagger \
|
||||
--set slack.url=https://hooks.slack.com/services/YOUR/SLACK/WEBHOOK \
|
||||
--set slack.proxy-url=my-http-proxy.com \ # optional http/s proxy
|
||||
--set slack.channel=general \
|
||||
--set slack.user=flagger
|
||||
```
|
||||
@@ -25,11 +36,14 @@ or if the analysis reached the maximum number of failed checks:
|
||||
|
||||

|
||||
|
||||
### Microsoft Teams
|
||||
|
||||
Flagger can be configured to send notifications to Microsoft Teams:
|
||||
|
||||
```bash
|
||||
helm upgrade -i flagger flagger/flagger \
|
||||
--set msteams.url=https://outlook.office.com/webhook/YOUR/TEAMS/WEBHOOK
|
||||
--set msteams.url=https://outlook.office.com/webhook/YOUR/TEAMS/WEBHOOK \
|
||||
--set msteams.proxy-url=my-http-proxy.com # optional http/s proxy
|
||||
```
|
||||
|
||||
Similar to Slack, Flagger alerts on canary analysis events:
|
||||
@@ -59,6 +73,8 @@ spec:
|
||||
username: flagger
|
||||
# webhook address (ignored if secretRef is specified)
|
||||
address: https://hooks.slack.com/services/YOUR/SLACK/WEBHOOK
|
||||
# optional http/s proxy
|
||||
proxy: http://my-http-proxy.com
|
||||
# secret containing the webhook address (optional)
|
||||
secretRef:
|
||||
name: on-call-url
|
||||
|
||||
@@ -3,11 +3,11 @@
|
||||
Flagger can run automated application analysis, promotion and rollback for the following deployment strategies:
|
||||
|
||||
* **Canary Release** \(progressive traffic shifting\)
|
||||
* Istio, Linkerd, App Mesh, NGINX, Skipper, Contour, Gloo Edge, Traefik
|
||||
* Istio, Linkerd, App Mesh, NGINX, Skipper, Contour, Gloo Edge, Traefik, Open Service Mesh
|
||||
* **A/B Testing** \(HTTP headers and cookies traffic routing\)
|
||||
* Istio, App Mesh, NGINX, Contour, Gloo Edge
|
||||
* **Blue/Green** \(traffic switching\)
|
||||
* Kubernetes CNI, Istio, Linkerd, App Mesh, NGINX, Contour, Gloo Edge
|
||||
* Kubernetes CNI, Istio, Linkerd, App Mesh, NGINX, Contour, Gloo Edge, Open Service Mesh
|
||||
* **Blue/Green Mirroring** \(traffic shadowing\)
|
||||
* Istio
|
||||
|
||||
|
||||
@@ -244,7 +244,7 @@ status:
|
||||
```
|
||||
|
||||
The `Promoted` status condition can have one of the following reasons:
|
||||
Initialized, Waiting, Progressing, Promoting, Finalising, Succeeded or Failed.
|
||||
Initialized, Waiting, Progressing, WaitingPromotion, Promoting, Finalising, Succeeded or Failed.
|
||||
A failed canary will have the promoted status set to `false`,
|
||||
the reason to `failed` and the last applied spec will be different to the last promoted one.
|
||||
|
||||
|
||||
@@ -46,8 +46,9 @@ metadata:
|
||||
name: my-metric
|
||||
spec:
|
||||
provider:
|
||||
type: # can be prometheus or datadog
|
||||
type: # can be prometheus, datadog, etc
|
||||
address: # API URL
|
||||
insecureSkipVerify: # if set to true, disables the TLS cert validation
|
||||
secretRef:
|
||||
name: # name of the secret containing the API credentials
|
||||
query: # metric query
|
||||
@@ -401,3 +402,78 @@ Reference the template in the canary analysis:
|
||||
max: 5
|
||||
interval: 1m
|
||||
```
|
||||
|
||||
## Graphite
|
||||
|
||||
You can create custom metric checks using the Graphite provider.
|
||||
|
||||
Graphite template example:
|
||||
|
||||
```yaml
|
||||
apiVersion: flagger.app/v1beta1
|
||||
kind: MetricTemplate
|
||||
metadata:
|
||||
name: graphite-request-success-rate
|
||||
spec:
|
||||
provider:
|
||||
type: graphite
|
||||
address: http://graphite.monitoring
|
||||
query: |
|
||||
target=summarize(
|
||||
asPercent(
|
||||
sumSeries(
|
||||
stats.timers.httpServerRequests.app.{{target}}.exception.*.method.*.outcome.{CLIENT_ERROR,INFORMATIONAL,REDIRECTION,SUCCESS}.status.*.uri.*.count
|
||||
),
|
||||
sumSeries(
|
||||
stats.timers.httpServerRequests.app.{{target}}.exception.*.method.*.outcome.*.status.*.uri.*.count
|
||||
)
|
||||
),
|
||||
{{interval}},
|
||||
'avg'
|
||||
)
|
||||
```
|
||||
|
||||
Reference the template in the canary analysis:
|
||||
|
||||
```yaml
|
||||
analysis:
|
||||
metrics:
|
||||
- name: "success rate"
|
||||
templateRef:
|
||||
name: graphite-request-success-rate
|
||||
thresholdRange:
|
||||
min: 90
|
||||
interval: 1min
|
||||
```
|
||||
|
||||
## Graphite authentication
|
||||
|
||||
If your Graphite API requires basic authentication, you can create a secret in the same namespace
|
||||
as the `MetricTemplate` with the basic-auth credentials:
|
||||
|
||||
```yaml
|
||||
apiVersion: v1
|
||||
kind: Secret
|
||||
metadata:
|
||||
name: graphite-basic-auth
|
||||
namespace: flagger
|
||||
data:
|
||||
username: your-user
|
||||
password: your-password
|
||||
```
|
||||
|
||||
Then, reference the secret in the `MetricTemplate`:
|
||||
|
||||
```yaml
|
||||
apiVersion: flagger.app/v1beta1
|
||||
kind: MetricTemplate
|
||||
metadata:
|
||||
name: my-metric
|
||||
namespace: flagger
|
||||
spec:
|
||||
provider:
|
||||
type: graphite
|
||||
address: http://graphite.monitoring
|
||||
secretRef:
|
||||
name: graphite-basic-auth
|
||||
```
|
||||
|
||||
@@ -16,6 +16,9 @@ There are several types of hooks:
|
||||
* **rollout** hooks are executed during the analysis on each iteration before the metric checks.
|
||||
If a rollout hook call fails the canary advancement is paused and eventfully rolled back.
|
||||
|
||||
* **confirm-traffic-increase** hooks are executed right before the weight on the canary is increased. The canary
|
||||
advancement is paused until this hook returns HTTP 200.
|
||||
|
||||
* **confirm-promotion** hooks are executed before the promotion step.
|
||||
The canary promotion is paused until the hooks return HTTP 200.
|
||||
While the promotion is paused, Flagger will continue to run the metrics checks and rollout hooks.
|
||||
@@ -51,6 +54,9 @@ Spec:
|
||||
timeout: 15s
|
||||
metadata:
|
||||
cmd: "hey -z 1m -q 5 -c 2 http://podinfo-canary.test:9898/"
|
||||
- name: "traffic increase gate"
|
||||
type: confirm-traffic-increase
|
||||
url: http://flagger-loadtester.test/gate/approve
|
||||
- name: "promotion gate"
|
||||
type: confirm-promotion
|
||||
url: http://flagger-loadtester.test/gate/approve
|
||||
@@ -347,7 +353,8 @@ the web-hook will try to call Concord before timing out (Default is 30s).
|
||||
## Manual Gating
|
||||
|
||||
For manual approval of a canary deployment you can use the `confirm-rollout` and `confirm-promotion` webhooks.
|
||||
The confirmation rollout hooks are executed before the pre-rollout hooks.
|
||||
The confirmation rollout hooks are executed before the pre-rollout hooks. For manually approving traffic weight increase,
|
||||
you can use the `confirm-traffic-increase` webhook.
|
||||
Flagger will halt the canary traffic shifting and analysis until the confirm webhook returns HTTP status 200.
|
||||
|
||||
For manual rollback of a canary deployment you can use the `rollback` webhook.
|
||||
@@ -370,6 +377,17 @@ The `/gate/halt` returns HTTP 403 thus blocking the rollout.
|
||||
If you have notifications enabled, Flagger will post a message to
|
||||
Slack or MS Teams if a canary rollout is waiting for approval.
|
||||
|
||||
The notifications can be disabled with:
|
||||
|
||||
```yaml
|
||||
analysis:
|
||||
webhooks:
|
||||
- name: "gate"
|
||||
type: confirm-rollout
|
||||
url: http://flagger-loadtester.test/gate/halt
|
||||
muteAlert: true
|
||||
```
|
||||
|
||||
Change the URL to `/gate/approve` to start the canary analysis:
|
||||
|
||||
```yaml
|
||||
|
||||
|
Before Width: | Height: | Size: 8.5 KiB After Width: | Height: | Size: 8.5 KiB |
|
Before Width: | Height: | Size: 4.2 KiB After Width: | Height: | Size: 4.2 KiB |
|
Before Width: | Height: | Size: 8.4 KiB After Width: | Height: | Size: 8.4 KiB |
|
Before Width: | Height: | Size: 7.5 KiB After Width: | Height: | Size: 7.5 KiB |
|
Before Width: | Height: | Size: 8.5 KiB After Width: | Height: | Size: 8.5 KiB |
|
Before Width: | Height: | Size: 4.6 KiB After Width: | Height: | Size: 4.6 KiB |
|
Before Width: | Height: | Size: 30 KiB |
@@ -1,28 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="64px" height="64px" viewBox="0 0 64 64" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<title>flagger-icon</title>
|
||||
<g id="flagger-icon" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<path d="M11.7870673,17.7791346 C10.7376442,17.0966346 10.7376442,15.5602885 11.7870673,14.8783654 L31.1659135,2.27951923 C31.4527085,2.09313128 31.7809164,2 32.109115,2 C32.1144833,2 32.1144833,30.6577081 32.1144833,30.6577081 C31.7844966,30.658555 31.4542722,30.565385 31.1659135,30.3779808 L11.7870673,17.7791346 Z" id="Fill-1" fill="#7BB09F"></path>
|
||||
<path d="M1.78706731,24.2791346 C0.737644231,23.5966346 0.737644231,22.0602885 1.78706731,21.3783654 L21.1659135,8.77951923 C21.4527085,8.59313128 21.7809164,8.5 22.109147,8.5 C22.1144833,8.5 16.7504591,14.9302441 16.4621003,14.7428399 L1.78706731,24.2791346 Z" id="Fill-1-Copy" fill="#7BB09F"></path>
|
||||
<path d="M32.1005414,32.7999243 C32.4314477,32.7984255 32.7627112,32.8915919 33.051875,33.0795192 L52.4312981,45.6783654 C53.4807212,46.3602885 53.4807212,47.8966346 52.4312981,48.5791346 L33.051875,61.1779808 C32.7723427,61.3596486 32.4534685,61.452763 32.1336066,61.4575 C32.1336066,61.4575 32.1005414,32.7999243 32.1005414,32.7999243 Z" id="Fill-1" fill="#7BB09F"></path>
|
||||
<path d="M42.6594534,51.6821881 L62.4312981,39.1784411 C63.4807212,39.8603641 63.4807212,41.3967103 62.4312981,42.0792103 L43.051875,54.6780564 C42.7723427,54.8597243 42.4534685,54.9528387 42.1336066,54.9573995 C42.1336066,54.9573995 42.3702896,51.4942608 42.6594534,51.6821881 Z" id="Fill-1-Copy-2" fill="#7BB09F"></path>
|
||||
<g id="Group" transform="translate(11.000000, 32.000000)" fill="#7BB09F">
|
||||
<path d="M23.1648462,1.79890385 C22.7177486,1.57560653 21.9079818,0.775616463 21.12525,0.8 C20.4471662,0.8 20.1819808,1.07951923 19.08525,1.79890385 C20.6106346,2.45198077 26.2588846,4.40082692 27.8390769,4.83755769 C25.3252832,3.17403545 23.7672062,2.16115083 23.1648462,1.79890385 Z" id="Fill-5"></path>
|
||||
<path d="M17.1629423,3.04898077 L15.4269808,4.17744231 C16.9371113,5.2881491 18.4473527,6.15609036 19.9577051,6.7812661 C23.0272183,8.05182074 26.9292047,8.86995809 27.8191154,9.08936538 C32.8706538,10.3349423 37.6418077,11.5107115 41.4783462,15.3478269 C41.6733462,15.54225 41.8562308,15.7407115 42.0373846,15.93975 C42.4308462,15.1880192 42.2335385,14.1957115 41.4466154,13.6845577 L33.8560385,8.74898077 C32.0133462,8.14090385 30.1360385,7.67590385 28.2806538,7.21898077 C26.5308462,6.78744231 23.5727919,6.02059898 21.9181765,5.49156052 C20.8150996,5.13886821 19.2300215,4.32467496 17.1629423,3.04898077 Z" id="Fill-7"></path>
|
||||
<path d="M16.8750849,8.20483098 C15.6193488,7.62821266 14.2831279,6.83594208 12.8664221,5.82801923 L11.2119808,6.91782692 C12.8335577,8.16072333 14.2385577,9.07106402 15.4269808,9.648849 C17.2096154,10.5155265 24.0114808,12.3722308 24.4326346,12.4760769 C29.4841731,13.7210769 34.2553269,14.8968462 38.0924423,18.7339615 C38.0987885,18.7408846 38.1045577,18.7472308 38.1114808,18.7541538 L39.75225,17.6868462 C39.6524423,17.5824231 39.5584038,17.4751154 39.4545577,17.3718462 C35.2384038,13.1551154 29.9791731,11.8587692 24.8941731,10.6051154 C24.3137885,10.4620385 18.7586891,9.06975845 16.8750849,8.20483098 Z" id="Fill-11"></path>
|
||||
<path d="M23.1650769,16.3935 C27.1175769,17.4140769 30.8341154,18.6342692 33.9823846,21.4381154 L35.6439231,20.3581154 C32.0465509,16.9762696 28.005918,15.3433009 23.4551919,14.4789663 C19.3757148,13.7041376 16.6984434,12.7436057 13.6520967,11.5324737 C11.621199,10.7250524 9.97648083,9.72718297 8.71794231,8.53886538 L7.04717308,9.62521154 C9.06194661,11.3700006 10.8411363,12.5664934 12.3847422,13.2146899 C14.4228927,14.0705575 18.0163376,15.1301608 23.1650769,16.3935 Z" id="Fill-17"></path>
|
||||
<path d="M4.57875,11.2299231 L2.92990385,12.3018462 C2.98759615,12.3612692 3.04009615,12.423 3.09951923,12.4818462 C7.31625,16.6985769 12.5743269,17.9949231 17.6599038,19.2485769 C22.0641346,20.3337692 26.2543269,21.3687692 29.7989423,24.1581923 L31.4893269,23.0591538 C27.4958654,19.6968462 22.7385577,18.5158846 18.1214423,17.3781923 C13.1206731,16.1453077 8.39567308,14.9758846 4.57875,11.2299231" id="Fill-19"></path>
|
||||
<path d="M1.07555769,14.5060962 C0.883442308,14.3139808 0.702865385,14.1184038 0.524019231,13.9216731 C-0.227711538,14.6745577 -0.139442308,15.9726346 0.80325,16.5853269 L6.50959615,20.2955192 C9.03536538,21.3409038 11.6765192,21.9945577 14.2738269,22.6349423 C18.3284423,23.6341731 22.2019038,24.5924423 25.5578654,26.9157115 L27.2834423,25.7930192 C23.4676731,22.9245577 19.0403654,21.8255192 14.7347885,20.7639808 C9.68382692,19.5189808 4.91267308,18.3432115 1.07555769,14.5060962" id="Fill-21"></path>
|
||||
<path d="M19.6441154,28.8342692 C20.0243077,29.0188846 20.3998846,29.2133077 20.7691154,29.4221538 C21.2093077,29.5150385 21.6771923,29.4383077 22.0683462,29.1838846 L23.0260385,28.5613846 C19.9493077,26.5035 16.5287308,25.461 13.1196923,24.5927308 L19.6441154,28.8342692 Z" id="Fill-23"></path>
|
||||
</g>
|
||||
<g id="Group-Copy" transform="translate(11.000000, 1.200000)" fill="#7BB09F">
|
||||
<path d="M23.1648462,1.79890385 C22.7177486,1.57560653 21.9079818,0.775616463 21.12525,0.8 C20.4471662,0.8 20.1819808,1.07951923 19.08525,1.79890385 C20.6106346,2.45198077 26.2588846,4.40082692 27.8390769,4.83755769 C25.3252832,3.17403545 23.7672062,2.16115083 23.1648462,1.79890385 Z" id="Fill-5"></path>
|
||||
<path d="M17.1629423,3.04898077 L15.4269808,4.17744231 C16.9371113,5.2881491 18.4473527,6.15609036 19.9577051,6.7812661 C23.0272183,8.05182074 26.9292047,8.86995809 27.8191154,9.08936538 C32.8706538,10.3349423 37.6418077,11.5107115 41.4783462,15.3478269 C41.6733462,15.54225 41.8562308,15.7407115 42.0373846,15.93975 C42.4308462,15.1880192 42.2335385,14.1957115 41.4466154,13.6845577 L33.8560385,8.74898077 C32.0133462,8.14090385 30.1360385,7.67590385 28.2806538,7.21898077 C26.5308462,6.78744231 23.5727919,6.02059898 21.9181765,5.49156052 C20.8150996,5.13886821 19.2300215,4.32467496 17.1629423,3.04898077 Z" id="Fill-7"></path>
|
||||
<path d="M16.8750849,8.20483098 C15.6193488,7.62821266 14.2831279,6.83594208 12.8664221,5.82801923 L11.2119808,6.91782692 C12.8335577,8.16072333 14.2385577,9.07106402 15.4269808,9.648849 C17.2096154,10.5155265 24.0114808,12.3722308 24.4326346,12.4760769 C29.4841731,13.7210769 34.2553269,14.8968462 38.0924423,18.7339615 C38.0987885,18.7408846 38.1045577,18.7472308 38.1114808,18.7541538 L39.75225,17.6868462 C39.6524423,17.5824231 39.5584038,17.4751154 39.4545577,17.3718462 C35.2384038,13.1551154 29.9791731,11.8587692 24.8941731,10.6051154 C24.3137885,10.4620385 18.7586891,9.06975845 16.8750849,8.20483098 Z" id="Fill-11"></path>
|
||||
<path d="M23.1650769,16.3935 C27.1175769,17.4140769 30.8341154,18.6342692 33.9823846,21.4381154 L35.6439231,20.3581154 C32.0465509,16.9762696 28.005918,15.3433009 23.4551919,14.4789663 C19.3757148,13.7041376 16.6984434,12.7436057 13.6520967,11.5324737 C11.621199,10.7250524 9.97648083,9.72718297 8.71794231,8.53886538 L7.04717308,9.62521154 C9.06194661,11.3700006 10.8411363,12.5664934 12.3847422,13.2146899 C14.4228927,14.0705575 18.0163376,15.1301608 23.1650769,16.3935 Z" id="Fill-17"></path>
|
||||
<path d="M4.57875,11.2299231 L2.92990385,12.3018462 C2.98759615,12.3612692 3.04009615,12.423 3.09951923,12.4818462 C7.31625,16.6985769 12.5743269,17.9949231 17.6599038,19.2485769 C22.0641346,20.3337692 26.2543269,21.3687692 29.7989423,24.1581923 L31.4893269,23.0591538 C27.4958654,19.6968462 22.7385577,18.5158846 18.1214423,17.3781923 C13.1206731,16.1453077 8.39567308,14.9758846 4.57875,11.2299231" id="Fill-19"></path>
|
||||
<path d="M1.07555769,14.5060962 C0.883442308,14.3139808 0.702865385,14.1184038 0.524019231,13.9216731 C-0.227711538,14.6745577 -0.139442308,15.9726346 0.80325,16.5853269 L6.50959615,20.2955192 C9.03536538,21.3409038 11.6765192,21.9945577 14.2738269,22.6349423 C18.3284423,23.6341731 22.2019038,24.5924423 25.5578654,26.9157115 L27.2834423,25.7930192 C23.4676731,22.9245577 19.0403654,21.8255192 14.7347885,20.7639808 C9.68382692,19.5189808 4.91267308,18.3432115 1.07555769,14.5060962" id="Fill-21"></path>
|
||||
<path d="M19.6441154,28.8342692 C20.0243077,29.0188846 20.3998846,29.2133077 20.7691154,29.4221538 C21.2093077,29.5150385 21.6771923,29.4383077 22.0683462,29.1838846 L23.0260385,28.5613846 C19.9493077,26.5035 16.5287308,25.461 13.1196923,24.5927308 L19.6441154,28.8342692 Z" id="Fill-23"></path>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 8.4 KiB |
29
docs/logo/flagger-stacked-black.svg
Normal file
@@ -0,0 +1,29 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="160px" height="160px" viewBox="0 0 160 160" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<title>flagger-stacked-black</title>
|
||||
<g id="flagger-stacked-black" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<path d="M10.1931429,149 L10.1931429,125.648 L15.6811429,125.648 L15.6811429,121.952 L10.1931429,121.952 L10.1931429,119.88 C10.1931429,116.408 11.7051429,114.56 14.5051429,114.56 C15.5131429,114.56 16.2411429,114.784 16.9131429,115.176 L17.9771429,111.984 C16.8571429,111.368 15.4571429,111.088 13.8331429,111.088 C9.18514286,111.088 5.99314286,114.28 5.99314286,119.88 L5.99314286,121.952 L1.51314286,121.952 L1.51314286,125.648 L5.99314286,125.648 L5.99314286,149 L10.1931429,149 Z M24.9211429,149 L24.9211429,111.648 L20.7211429,111.648 L20.7211429,149 L24.9211429,149 Z M10.1931429,149 L10.1931429,125.648 L15.6811429,125.648 L15.6811429,121.952 L10.1931429,121.952 L10.1931429,119.88 C10.1931429,116.408 11.7051429,114.56 14.5051429,114.56 C15.5131429,114.56 16.2411429,114.784 16.9131429,115.176 L17.9771429,111.984 C16.8571429,111.368 15.4571429,111.088 13.8331429,111.088 C9.18514286,111.088 5.99314286,114.28 5.99314286,119.88 L5.99314286,121.952 L1.51314286,121.952 L1.51314286,125.648 L5.99314286,125.648 L5.99314286,149 L10.1931429,149 Z M24.9211429,149 L24.9211429,111.648 L20.7211429,111.648 L20.7211429,149 L24.9211429,149 Z M38.9874286,149.672 C42.6274286,149.672 45.7634286,148.384 47.9474286,145.92 L47.9474286,149 L52.1474286,149 L52.1474286,130.408 C52.1474286,123.856 47.4434286,121.28 41.6754286,121.28 C37.2514286,121.28 33.7794286,122.736 30.8674286,125.76 L32.8274286,128.672 C35.2354286,126.04 37.8674286,124.92 41.1154286,124.92 C45.0354286,124.92 47.9474286,126.992 47.9474286,130.576 L47.9474286,135.448 C45.7634286,132.984 42.6834286,131.808 38.9874286,131.808 C34.3954286,131.808 29.5794286,134.608 29.5794286,140.712 C29.5794286,146.592 34.4514286,149.672 38.9874286,149.672 Z M40.5554286,146.648 C36.5794286,146.648 33.8354286,144.184 33.8354286,140.712 C33.8354286,137.296 36.5794286,134.832 40.5554286,134.832 C43.4674286,134.832 46.3234286,135.952 47.9474286,138.136 L47.9474286,143.288 C46.3234286,145.528 43.4674286,146.648 40.5554286,146.648 Z M69.1817143,159.976 C75.7897143,159.976 82.1177143,157.176 82.1177143,148.608 L82.1177143,121.952 L77.9177143,121.952 L77.9177143,126.04 C75.7337143,123.072 72.4297143,121.28 68.7897143,121.28 C61.6777143,121.28 56.7497143,126.656 56.7497143,135.336 C56.7497143,144.072 61.7337143,149.336 68.7897143,149.336 C72.5977143,149.336 75.9017143,147.264 77.9177143,144.52 L77.9177143,148.608 C77.9177143,154.32 73.6617143,156.504 69.1817143,156.504 C65.3177143,156.504 62.6297143,155.496 60.3897143,152.864 L58.2617143,155.888 C61.5097143,159.08 64.6457143,159.976 69.1817143,159.976 Z M69.8537143,145.584 C64.3657143,145.584 61.1177143,141.272 61.1177143,135.336 C61.1177143,129.344 64.3657143,125.032 69.8537143,125.032 C73.1577143,125.032 76.4057143,127.048 77.9177143,129.344 L77.9177143,141.216 C76.4057143,143.568 73.1577143,145.584 69.8537143,145.584 Z M99.096,159.976 C105.704,159.976 112.032,157.176 112.032,148.608 L112.032,121.952 L107.832,121.952 L107.832,126.04 C105.648,123.072 102.344,121.28 98.704,121.28 C91.592,121.28 86.664,126.656 86.664,135.336 C86.664,144.072 91.648,149.336 98.704,149.336 C102.512,149.336 105.816,147.264 107.832,144.52 L107.832,148.608 C107.832,154.32 103.576,156.504 99.096,156.504 C95.232,156.504 92.544,155.496 90.304,152.864 L88.176,155.888 C91.424,159.08 94.56,159.976 99.096,159.976 Z M99.768,145.584 C94.28,145.584 91.032,141.272 91.032,135.336 C91.032,129.344 94.28,125.032 99.768,125.032 C103.072,125.032 106.32,127.048 107.832,129.344 L107.832,141.216 C106.32,143.568 103.072,145.584 99.768,145.584 Z M130.410286,149.672 C134.778286,149.672 138.418286,148.16 141.162286,145.472 L139.146286,142.728 C136.962286,144.968 133.882286,146.2 130.746286,146.2 C124.922286,146.2 121.394286,141.944 121.058286,136.848 L142.898286,136.848 L142.898286,135.784 C142.898286,127.664 138.082286,121.28 129.906286,121.28 C122.178286,121.28 116.578286,127.608 116.578286,135.448 C116.578286,143.904 122.346286,149.672 130.410286,149.672 Z M138.754286,133.712 L121.002286,133.712 C121.226286,129.624 124.082286,124.752 129.850286,124.752 C136.010286,124.752 138.698286,129.736 138.754286,133.712 Z M151.588571,149 L151.588571,129.848 C152.820571,127.664 156.348571,125.536 158.980571,125.536 C159.596571,125.536 160.100571,125.592 160.604571,125.648 L160.604571,121.336 C156.908571,121.336 153.772571,123.464 151.588571,126.264 L151.588571,121.952 L147.388571,121.952 L147.388571,149 L151.588571,149 Z" id="fflagger" fill="#1A1A1A" fill-rule="nonzero"></path>
|
||||
<g id="flags" transform="translate(26.036697, 0.500000)">
|
||||
<path d="M53.9358922,0.7 L53.9361614,0.7149 L53.9361614,0.7149 L53.9369368,0.9336 C53.9370203,0.972 53.9371029,1.015 53.9371847,1.0625 L53.9378977,1.6088 C53.9379744,1.6824 53.9380503,1.7602 53.9381254,1.8421 L53.9389868,3.0153 C53.9390554,3.1284 53.9391232,3.2452 53.9391903,3.3656 L53.9399577,4.9768 C53.9400186,5.1244 53.9400788,5.2752 53.9401383,5.4291 L53.9409762,7.9576 C53.9410285,8.14 53.9410802,8.325 53.9411311,8.5125 L53.9419772,12.1359 C53.9420204,12.3498 53.9420629,12.5656 53.9421048,12.7832 L53.9429968,18.3 C53.9430294,18.54 53.9430615,18.781 53.943093,19.0229 L53.943952,27.1992 C53.9439728,27.4488 53.9439933,27.6982 53.9440133,27.9473 L53.9449541,50.7 L53.9449541,50.7 C53.3879217,50.7014777 52.830488,50.538921 52.3437254,50.211951 L19.6313575,28.2303499 C19.498497,28.1410415 19.375601,28.0433533 19.2626695,27.9385428 L1.40077569,39.7 C-0.466925231,38.5321603 -0.466925231,35.903287 1.40077569,34.7364344 L33.206,14.047 L52.3437254,1.18768595 C52.8278484,0.862489056 53.3818782,0.7 53.9358922,0.7 Z" id="Combined-Shape" fill="#1A1A1A"></path>
|
||||
<path d="M53.9449541,53.7 C54.518545,53.6973849 55.0927551,53.8599359 55.5939898,54.1878202 L89.1239541,76.1279689 L105.632086,65.7 C107.358112,66.8668656 107.358112,69.4957682 105.632086,70.663621 L73.3882295,91.6036587 C73.3686858,91.6168729 73.348778,91.6191194 73.3286088,91.6113313 L55.5939898,103.212312 C55.1094503,103.529275 54.5567157,103.691735 54.0022691,103.7 L54.0020013,103.4664 C54.0019573,103.428 54.001908,103.385 54.0018535,103.3375 L54.0009599,102.5579 C54.000866,102.476 54.0007674,102.39 54.0006643,102.3 L53.9999912,101.7128 C53.9953913,97.7 53.9845014,88.2 53.9736116,78.7 L53.9718931,77.2008 C53.9627374,69.2136 53.9538164,61.4312 53.9488864,57.1304 L53.9480097,56.3656 C53.9475957,56.0044 53.9472188,55.6756 53.9468821,55.3819 L53.9459959,54.6088 C53.9459115,54.5352 53.945832,54.4658 53.9457573,54.4007 L53.9449541,53.7 L53.9449541,53.7 Z" id="Combined-Shape" fill="#1A1A1A"></path>
|
||||
<g id="Group-Copy" transform="translate(17.363303, 0.000000)" fill="#171818">
|
||||
<path d="M40.0825271,2.57811824 C39.3101975,2.18406772 37.9113821,0.772333321 36.5592679,0.815362703 C35.3879258,0.815362703 34.9298365,1.30862747 33.0353111,2.57811824 C35.6703059,3.73059649 45.4272614,7.16970562 48.1569327,7.9404 C43.8145304,5.00479909 41.1230619,3.21737183 40.0825271,2.57811824 Z" id="Fill-5"></path>
|
||||
<path d="M29.6177773,4.85830684 L26.6147653,6.81885893 C29.4750473,8.76729329 32.2115554,10.2845904 34.8242897,11.3707502 C40.1341913,13.5781702 46.8841749,14.9995752 48.423617,15.3807663 C57.1621923,17.5447908 65.4157347,19.5875337 72.0525009,26.2540122 C72.3898283,26.5917965 72.7061975,26.9365971 73.0195726,27.2824 C73.7002154,25.9763676 73.358896,24.2523647 71.9976104,23.3643028 L58.8667933,14.7893932 C55.6791495,13.7329403 52.4316251,12.9250645 49.222025,12.1312213 C46.1950608,11.3814806 41.0779702,10.0491921 38.2156776,9.13005801 C36.3074826,8.51730196 33.4415158,7.0933849 29.6177773,4.85830684 Z" id="Fill-7"></path>
|
||||
<path d="M29.7315665,14.094497 C27.5581473,13.0954401 25.1789914,11.566935 22.5940987,9.50898164 L19.7614089,11.4291886 C22.680354,13.872933 25.1682837,15.5953444 27.225198,16.5964226 C30.3105695,18.09804 42.0831903,21.3149916 42.8121204,21.4949169 C51.5552876,23.6520212 59.5365954,25.256157 66.1778478,31.9045231 C66.1888316,31.9163913 68.9772132,30.2313417 68.797477,30.052416 C61.5001876,22.7464498 52.4120302,20.425361 43.6109479,18.253263 C42.6064223,18.005366 32.9916953,15.5930823 29.7315665,14.094497 Z" id="Fill-11"></path>
|
||||
<path d="M40.2748943,27.6858128 C47.2416777,29.4577639 53.792549,31.5762923 59.3417736,36.4444 L62.2704462,34.569277 C55.9296207,28.6976319 48.8074918,25.8624309 40.7862587,24.3617515 C33.595662,23.0164746 28.8766311,21.3487752 23.507058,19.2459776 C19.9273426,17.8441125 17.1081118,16.3021039 15.0493654,14.6199518 L12.1044223,16.5060931 C15.496129,19.1544049 18.552383,21.0412683 21.2731845,22.1666833 C24.8656838,23.6526619 31.1995871,25.4923718 40.2748943,27.6858128 Z" id="Fill-17"></path>
|
||||
<path d="M5.18885131,21.1343855 C5.29067424,21.2373258 5.38333311,21.3442637 5.48821073,21.4462046 C12.9304487,28.7509644 21.8300234,30.8575975 30.8057147,33.0293369 C38.5788773,34.9092456 45.6427477,36.4683588 51.8987485,41.3005539 L54.8844037,39.3547126 C47.8362204,33.5300936 39.7691873,31.7600736 31.6202982,29.7892176 C22.7942865,27.6534573 14.8355558,25.7666967 8.09895067,19.2774634 L5.18885131,21.1343855 Z" id="Fill-19"></path>
|
||||
<path d="M1.86538962,23.4720365 C0.558922248,24.8286618 0.712329392,27.1676708 2.35067758,28.271683 L12.2679982,34.9570906 C16.6576484,36.8407725 20.0248373,37.7569569 24.5388174,38.9108681 C31.5855194,40.7113852 38.2525371,42.1959537 44.0850166,46.38226 L46.9264812,44.4396723 C40.2948809,39.2709822 32.8228032,37.452366 25.3399436,35.5395764 C16.5616459,33.2962069 9.49263239,31.439221 2.82393361,24.5251104 C2.49004747,24.178937 2.17621456,23.8265263 1.86538962,23.4720365 Z" id="Fill-21"></path>
|
||||
<path d="M34.1645854,49.6645268 C34.893506,50.0634031 35.1425612,50.5086988 36.1796702,50.7 C36.9305233,50.7 37.7585832,50.659873 38.4352738,50.23418 L40.0920678,49.1926318 C34.7693674,45.7494414 29.2447004,43.7586502 23.3471124,42.3058883 L34.1645854,49.6645268 Z" id="Fill-23"></path>
|
||||
</g>
|
||||
<g id="Group-Copy-2" transform="translate(17.363303, 53.000000)" fill="#131415">
|
||||
<path d="M40.0825271,2.57811824 C39.3101975,2.18406772 37.9113821,0.772333321 36.5592679,0.815362703 C35.3879258,0.815362703 34.9298365,1.30862747 33.0353111,2.57811824 C35.6703059,3.73059649 45.4272614,7.16970562 48.1569327,7.9404 C43.8145304,5.00479909 41.1230619,3.21737183 40.0825271,2.57811824 Z" id="Fill-5"></path>
|
||||
<path d="M29.6177773,4.85830684 L26.6147653,6.81885893 C29.4750473,8.76729329 32.2115554,10.2845904 34.8242897,11.3707502 C40.1341913,13.5781702 46.8841749,14.9995752 48.423617,15.3807663 C57.1621923,17.5447908 65.4157347,19.5875337 72.0525009,26.2540122 C72.3898283,26.5917965 72.7061975,26.9365971 73.0195726,27.2824 C73.7002154,25.9763676 73.358896,24.2523647 71.9976104,23.3643028 L58.8667933,14.7893932 C55.6791495,13.7329403 52.4316251,12.9250645 49.222025,12.1312213 C46.1950608,11.3814806 41.0779702,10.0491921 38.2156776,9.13005801 C36.3074826,8.51730196 33.4415158,7.0933849 29.6177773,4.85830684 Z" id="Fill-7"></path>
|
||||
<path d="M29.7315665,14.094497 C27.5581473,13.0954401 25.1789914,11.566935 22.5940987,9.50898164 L19.7614089,11.4291886 C22.680354,13.872933 25.1682837,15.5953444 27.225198,16.5964226 C30.3105695,18.09804 42.0831903,21.3149916 42.8121204,21.4949169 C51.5552876,23.6520212 59.5365954,25.256157 66.1778478,31.9045231 C66.1888316,31.9163913 68.9772132,30.2313417 68.797477,30.052416 C61.5001876,22.7464498 52.4120302,20.425361 43.6109479,18.253263 C42.6064223,18.005366 32.9916953,15.5930823 29.7315665,14.094497 Z" id="Fill-11"></path>
|
||||
<path d="M40.2748943,27.6858128 C47.2416777,29.4577639 53.792549,31.5762923 59.3417736,36.4444 L62.2704462,34.569277 C55.9296207,28.6976319 48.8074918,25.8624309 40.7862587,24.3617515 C33.595662,23.0164746 28.8766311,21.3487752 23.507058,19.2459776 C19.9273426,17.8441125 17.1081118,16.3021039 15.0493654,14.6199518 L12.1044223,16.5060931 C15.496129,19.1544049 18.552383,21.0412683 21.2731845,22.1666833 C24.8656838,23.6526619 31.1995871,25.4923718 40.2748943,27.6858128 Z" id="Fill-17"></path>
|
||||
<path d="M5.18885131,21.1343855 C5.29067424,21.2373258 5.38333311,21.3442637 5.48821073,21.4462046 C12.9304487,28.7509644 21.8300234,30.8575975 30.8057147,33.0293369 C38.5788773,34.9092456 45.6427477,36.4683588 51.8987485,41.3005539 L54.8844037,39.3547126 C47.8362204,33.5300936 39.7691873,31.7600736 31.6202982,29.7892176 C22.7942865,27.6534573 14.8355558,25.7666967 8.09895067,19.2774634 L5.18885131,21.1343855 Z" id="Fill-19"></path>
|
||||
<path d="M1.86538962,23.4720365 C0.558922248,24.8286618 0.712329392,27.1676708 2.35067758,28.271683 L12.2679982,34.9570906 C16.6576484,36.8407725 20.0248373,37.7569569 24.5388174,38.9108681 C31.5855194,40.7113852 38.2525371,42.1959537 44.0850166,46.38226 L46.9264812,44.4396723 C40.2948809,39.2709822 32.8228032,37.452366 25.3399436,35.5395764 C16.5616459,33.2962069 9.49263239,31.439221 2.82393361,24.5251104 C2.49004747,24.178937 2.17621456,23.8265263 1.86538962,23.4720365 Z" id="Fill-21"></path>
|
||||
<path d="M34.1645854,49.6645268 C34.893506,50.0634031 35.1425612,50.5086988 36.1796702,50.7 C36.9305233,50.7 37.7585832,50.659873 38.4352738,50.23418 L40.0920678,49.1926318 C34.7693674,45.7494414 29.2447004,43.7586502 23.3471124,42.3058883 L34.1645854,49.6645268 Z" id="Fill-23"></path>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 13 KiB |
BIN
docs/logo/flagger-stacked-black@2x.png
Normal file
|
After Width: | Height: | Size: 27 KiB |
29
docs/logo/flagger-stacked-color.svg
Normal file
@@ -0,0 +1,29 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="160px" height="160px" viewBox="0 0 160 160" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<title>flagger-stacked-color</title>
|
||||
<g id="flagger-stacked-color" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<path d="M10.1931429,149 L10.1931429,125.648 L15.6811429,125.648 L15.6811429,121.952 L10.1931429,121.952 L10.1931429,119.88 C10.1931429,116.408 11.7051429,114.56 14.5051429,114.56 C15.5131429,114.56 16.2411429,114.784 16.9131429,115.176 L17.9771429,111.984 C16.8571429,111.368 15.4571429,111.088 13.8331429,111.088 C9.18514286,111.088 5.99314286,114.28 5.99314286,119.88 L5.99314286,121.952 L1.51314286,121.952 L1.51314286,125.648 L5.99314286,125.648 L5.99314286,149 L10.1931429,149 Z M24.9211429,149 L24.9211429,111.648 L20.7211429,111.648 L20.7211429,149 L24.9211429,149 Z M10.1931429,149 L10.1931429,125.648 L15.6811429,125.648 L15.6811429,121.952 L10.1931429,121.952 L10.1931429,119.88 C10.1931429,116.408 11.7051429,114.56 14.5051429,114.56 C15.5131429,114.56 16.2411429,114.784 16.9131429,115.176 L17.9771429,111.984 C16.8571429,111.368 15.4571429,111.088 13.8331429,111.088 C9.18514286,111.088 5.99314286,114.28 5.99314286,119.88 L5.99314286,121.952 L1.51314286,121.952 L1.51314286,125.648 L5.99314286,125.648 L5.99314286,149 L10.1931429,149 Z M24.9211429,149 L24.9211429,111.648 L20.7211429,111.648 L20.7211429,149 L24.9211429,149 Z M38.9874286,149.672 C42.6274286,149.672 45.7634286,148.384 47.9474286,145.92 L47.9474286,149 L52.1474286,149 L52.1474286,130.408 C52.1474286,123.856 47.4434286,121.28 41.6754286,121.28 C37.2514286,121.28 33.7794286,122.736 30.8674286,125.76 L32.8274286,128.672 C35.2354286,126.04 37.8674286,124.92 41.1154286,124.92 C45.0354286,124.92 47.9474286,126.992 47.9474286,130.576 L47.9474286,135.448 C45.7634286,132.984 42.6834286,131.808 38.9874286,131.808 C34.3954286,131.808 29.5794286,134.608 29.5794286,140.712 C29.5794286,146.592 34.4514286,149.672 38.9874286,149.672 Z M40.5554286,146.648 C36.5794286,146.648 33.8354286,144.184 33.8354286,140.712 C33.8354286,137.296 36.5794286,134.832 40.5554286,134.832 C43.4674286,134.832 46.3234286,135.952 47.9474286,138.136 L47.9474286,143.288 C46.3234286,145.528 43.4674286,146.648 40.5554286,146.648 Z M69.1817143,159.976 C75.7897143,159.976 82.1177143,157.176 82.1177143,148.608 L82.1177143,121.952 L77.9177143,121.952 L77.9177143,126.04 C75.7337143,123.072 72.4297143,121.28 68.7897143,121.28 C61.6777143,121.28 56.7497143,126.656 56.7497143,135.336 C56.7497143,144.072 61.7337143,149.336 68.7897143,149.336 C72.5977143,149.336 75.9017143,147.264 77.9177143,144.52 L77.9177143,148.608 C77.9177143,154.32 73.6617143,156.504 69.1817143,156.504 C65.3177143,156.504 62.6297143,155.496 60.3897143,152.864 L58.2617143,155.888 C61.5097143,159.08 64.6457143,159.976 69.1817143,159.976 Z M69.8537143,145.584 C64.3657143,145.584 61.1177143,141.272 61.1177143,135.336 C61.1177143,129.344 64.3657143,125.032 69.8537143,125.032 C73.1577143,125.032 76.4057143,127.048 77.9177143,129.344 L77.9177143,141.216 C76.4057143,143.568 73.1577143,145.584 69.8537143,145.584 Z M99.096,159.976 C105.704,159.976 112.032,157.176 112.032,148.608 L112.032,121.952 L107.832,121.952 L107.832,126.04 C105.648,123.072 102.344,121.28 98.704,121.28 C91.592,121.28 86.664,126.656 86.664,135.336 C86.664,144.072 91.648,149.336 98.704,149.336 C102.512,149.336 105.816,147.264 107.832,144.52 L107.832,148.608 C107.832,154.32 103.576,156.504 99.096,156.504 C95.232,156.504 92.544,155.496 90.304,152.864 L88.176,155.888 C91.424,159.08 94.56,159.976 99.096,159.976 Z M99.768,145.584 C94.28,145.584 91.032,141.272 91.032,135.336 C91.032,129.344 94.28,125.032 99.768,125.032 C103.072,125.032 106.32,127.048 107.832,129.344 L107.832,141.216 C106.32,143.568 103.072,145.584 99.768,145.584 Z M130.410286,149.672 C134.778286,149.672 138.418286,148.16 141.162286,145.472 L139.146286,142.728 C136.962286,144.968 133.882286,146.2 130.746286,146.2 C124.922286,146.2 121.394286,141.944 121.058286,136.848 L142.898286,136.848 L142.898286,135.784 C142.898286,127.664 138.082286,121.28 129.906286,121.28 C122.178286,121.28 116.578286,127.608 116.578286,135.448 C116.578286,143.904 122.346286,149.672 130.410286,149.672 Z M138.754286,133.712 L121.002286,133.712 C121.226286,129.624 124.082286,124.752 129.850286,124.752 C136.010286,124.752 138.698286,129.736 138.754286,133.712 Z M151.588571,149 L151.588571,129.848 C152.820571,127.664 156.348571,125.536 158.980571,125.536 C159.596571,125.536 160.100571,125.592 160.604571,125.648 L160.604571,121.336 C156.908571,121.336 153.772571,123.464 151.588571,126.264 L151.588571,121.952 L147.388571,121.952 L147.388571,149 L151.588571,149 Z" id="fflagger" fill="#1A1A1A" fill-rule="nonzero"></path>
|
||||
<g id="flags" transform="translate(26.036697, 0.500000)" fill="#7BB09F">
|
||||
<path d="M53.9358922,0.7 L53.9361614,0.7149 L53.9361614,0.7149 L53.9369368,0.9336 C53.9370203,0.972 53.9371029,1.015 53.9371847,1.0625 L53.9378977,1.6088 C53.9379744,1.6824 53.9380503,1.7602 53.9381254,1.8421 L53.9389868,3.0153 C53.9390554,3.1284 53.9391232,3.2452 53.9391903,3.3656 L53.9399577,4.9768 C53.9400186,5.1244 53.9400788,5.2752 53.9401383,5.4291 L53.9409762,7.9576 C53.9410285,8.14 53.9410802,8.325 53.9411311,8.5125 L53.9419772,12.1359 C53.9420204,12.3498 53.9420629,12.5656 53.9421048,12.7832 L53.9429968,18.3 C53.9430294,18.54 53.9430615,18.781 53.943093,19.0229 L53.943952,27.1992 C53.9439728,27.4488 53.9439933,27.6982 53.9440133,27.9473 L53.9449541,50.7 L53.9449541,50.7 C53.3879217,50.7014777 52.830488,50.538921 52.3437254,50.211951 L19.6313575,28.2303499 C19.498497,28.1410415 19.375601,28.0433533 19.2626695,27.9385428 L1.40077569,39.7 C-0.466925231,38.5321603 -0.466925231,35.903287 1.40077569,34.7364344 L33.206,14.047 L52.3437254,1.18768595 C52.8278484,0.862489056 53.3818782,0.7 53.9358922,0.7 Z" id="Combined-Shape"></path>
|
||||
<path d="M53.9449541,53.7 C54.518545,53.6973849 55.0927551,53.8599359 55.5939898,54.1878202 L89.1239541,76.1279689 L105.632086,65.7 C107.358112,66.8668656 107.358112,69.4957682 105.632086,70.663621 L73.3882295,91.6036587 C73.3686858,91.6168729 73.348778,91.6191194 73.3286088,91.6113313 L55.5939898,103.212312 C55.1094503,103.529275 54.5567157,103.691735 54.0022691,103.7 L54.0020013,103.4664 C54.0019573,103.428 54.001908,103.385 54.0018535,103.3375 L54.0009599,102.5579 C54.000866,102.476 54.0007674,102.39 54.0006643,102.3 L53.9999912,101.7128 C53.9953913,97.7 53.9845014,88.2 53.9736116,78.7 L53.9718931,77.2008 C53.9627374,69.2136 53.9538164,61.4312 53.9488864,57.1304 L53.9480097,56.3656 C53.9475957,56.0044 53.9472188,55.6756 53.9468821,55.3819 L53.9459959,54.6088 C53.9459115,54.5352 53.945832,54.4658 53.9457573,54.4007 L53.9449541,53.7 L53.9449541,53.7 Z" id="Combined-Shape"></path>
|
||||
<g id="Group-Copy" transform="translate(17.363303, 0.000000)">
|
||||
<path d="M40.0825271,2.57811824 C39.3101975,2.18406772 37.9113821,0.772333321 36.5592679,0.815362703 C35.3879258,0.815362703 34.9298365,1.30862747 33.0353111,2.57811824 C35.6703059,3.73059649 45.4272614,7.16970562 48.1569327,7.9404 C43.8145304,5.00479909 41.1230619,3.21737183 40.0825271,2.57811824 Z" id="Fill-5"></path>
|
||||
<path d="M29.6177773,4.85830684 L26.6147653,6.81885893 C29.4750473,8.76729329 32.2115554,10.2845904 34.8242897,11.3707502 C40.1341913,13.5781702 46.8841749,14.9995752 48.423617,15.3807663 C57.1621923,17.5447908 65.4157347,19.5875337 72.0525009,26.2540122 C72.3898283,26.5917965 72.7061975,26.9365971 73.0195726,27.2824 C73.7002154,25.9763676 73.358896,24.2523647 71.9976104,23.3643028 L58.8667933,14.7893932 C55.6791495,13.7329403 52.4316251,12.9250645 49.222025,12.1312213 C46.1950608,11.3814806 41.0779702,10.0491921 38.2156776,9.13005801 C36.3074826,8.51730196 33.4415158,7.0933849 29.6177773,4.85830684 Z" id="Fill-7"></path>
|
||||
<path d="M29.7315665,14.094497 C27.5581473,13.0954401 25.1789914,11.566935 22.5940987,9.50898164 L19.7614089,11.4291886 C22.680354,13.872933 25.1682837,15.5953444 27.225198,16.5964226 C30.3105695,18.09804 42.0831903,21.3149916 42.8121204,21.4949169 C51.5552876,23.6520212 59.5365954,25.256157 66.1778478,31.9045231 C66.1888316,31.9163913 68.9772132,30.2313417 68.797477,30.052416 C61.5001876,22.7464498 52.4120302,20.425361 43.6109479,18.253263 C42.6064223,18.005366 32.9916953,15.5930823 29.7315665,14.094497 Z" id="Fill-11"></path>
|
||||
<path d="M40.2748943,27.6858128 C47.2416777,29.4577639 53.792549,31.5762923 59.3417736,36.4444 L62.2704462,34.569277 C55.9296207,28.6976319 48.8074918,25.8624309 40.7862587,24.3617515 C33.595662,23.0164746 28.8766311,21.3487752 23.507058,19.2459776 C19.9273426,17.8441125 17.1081118,16.3021039 15.0493654,14.6199518 L12.1044223,16.5060931 C15.496129,19.1544049 18.552383,21.0412683 21.2731845,22.1666833 C24.8656838,23.6526619 31.1995871,25.4923718 40.2748943,27.6858128 Z" id="Fill-17"></path>
|
||||
<path d="M5.18885131,21.1343855 C5.29067424,21.2373258 5.38333311,21.3442637 5.48821073,21.4462046 C12.9304487,28.7509644 21.8300234,30.8575975 30.8057147,33.0293369 C38.5788773,34.9092456 45.6427477,36.4683588 51.8987485,41.3005539 L54.8844037,39.3547126 C47.8362204,33.5300936 39.7691873,31.7600736 31.6202982,29.7892176 C22.7942865,27.6534573 14.8355558,25.7666967 8.09895067,19.2774634 L5.18885131,21.1343855 Z" id="Fill-19"></path>
|
||||
<path d="M1.86538962,23.4720365 C0.558922248,24.8286618 0.712329392,27.1676708 2.35067758,28.271683 L12.2679982,34.9570906 C16.6576484,36.8407725 20.0248373,37.7569569 24.5388174,38.9108681 C31.5855194,40.7113852 38.2525371,42.1959537 44.0850166,46.38226 L46.9264812,44.4396723 C40.2948809,39.2709822 32.8228032,37.452366 25.3399436,35.5395764 C16.5616459,33.2962069 9.49263239,31.439221 2.82393361,24.5251104 C2.49004747,24.178937 2.17621456,23.8265263 1.86538962,23.4720365 Z" id="Fill-21"></path>
|
||||
<path d="M34.1645854,49.6645268 C34.893506,50.0634031 35.1425612,50.5086988 36.1796702,50.7 C36.9305233,50.7 37.7585832,50.659873 38.4352738,50.23418 L40.0920678,49.1926318 C34.7693674,45.7494414 29.2447004,43.7586502 23.3471124,42.3058883 L34.1645854,49.6645268 Z" id="Fill-23"></path>
|
||||
</g>
|
||||
<g id="Group-Copy-2" transform="translate(17.363303, 53.000000)">
|
||||
<path d="M40.0825271,2.57811824 C39.3101975,2.18406772 37.9113821,0.772333321 36.5592679,0.815362703 C35.3879258,0.815362703 34.9298365,1.30862747 33.0353111,2.57811824 C35.6703059,3.73059649 45.4272614,7.16970562 48.1569327,7.9404 C43.8145304,5.00479909 41.1230619,3.21737183 40.0825271,2.57811824 Z" id="Fill-5"></path>
|
||||
<path d="M29.6177773,4.85830684 L26.6147653,6.81885893 C29.4750473,8.76729329 32.2115554,10.2845904 34.8242897,11.3707502 C40.1341913,13.5781702 46.8841749,14.9995752 48.423617,15.3807663 C57.1621923,17.5447908 65.4157347,19.5875337 72.0525009,26.2540122 C72.3898283,26.5917965 72.7061975,26.9365971 73.0195726,27.2824 C73.7002154,25.9763676 73.358896,24.2523647 71.9976104,23.3643028 L58.8667933,14.7893932 C55.6791495,13.7329403 52.4316251,12.9250645 49.222025,12.1312213 C46.1950608,11.3814806 41.0779702,10.0491921 38.2156776,9.13005801 C36.3074826,8.51730196 33.4415158,7.0933849 29.6177773,4.85830684 Z" id="Fill-7"></path>
|
||||
<path d="M29.7315665,14.094497 C27.5581473,13.0954401 25.1789914,11.566935 22.5940987,9.50898164 L19.7614089,11.4291886 C22.680354,13.872933 25.1682837,15.5953444 27.225198,16.5964226 C30.3105695,18.09804 42.0831903,21.3149916 42.8121204,21.4949169 C51.5552876,23.6520212 59.5365954,25.256157 66.1778478,31.9045231 C66.1888316,31.9163913 68.9772132,30.2313417 68.797477,30.052416 C61.5001876,22.7464498 52.4120302,20.425361 43.6109479,18.253263 C42.6064223,18.005366 32.9916953,15.5930823 29.7315665,14.094497 Z" id="Fill-11"></path>
|
||||
<path d="M40.2748943,27.6858128 C47.2416777,29.4577639 53.792549,31.5762923 59.3417736,36.4444 L62.2704462,34.569277 C55.9296207,28.6976319 48.8074918,25.8624309 40.7862587,24.3617515 C33.595662,23.0164746 28.8766311,21.3487752 23.507058,19.2459776 C19.9273426,17.8441125 17.1081118,16.3021039 15.0493654,14.6199518 L12.1044223,16.5060931 C15.496129,19.1544049 18.552383,21.0412683 21.2731845,22.1666833 C24.8656838,23.6526619 31.1995871,25.4923718 40.2748943,27.6858128 Z" id="Fill-17"></path>
|
||||
<path d="M5.18885131,21.1343855 C5.29067424,21.2373258 5.38333311,21.3442637 5.48821073,21.4462046 C12.9304487,28.7509644 21.8300234,30.8575975 30.8057147,33.0293369 C38.5788773,34.9092456 45.6427477,36.4683588 51.8987485,41.3005539 L54.8844037,39.3547126 C47.8362204,33.5300936 39.7691873,31.7600736 31.6202982,29.7892176 C22.7942865,27.6534573 14.8355558,25.7666967 8.09895067,19.2774634 L5.18885131,21.1343855 Z" id="Fill-19"></path>
|
||||
<path d="M1.86538962,23.4720365 C0.558922248,24.8286618 0.712329392,27.1676708 2.35067758,28.271683 L12.2679982,34.9570906 C16.6576484,36.8407725 20.0248373,37.7569569 24.5388174,38.9108681 C31.5855194,40.7113852 38.2525371,42.1959537 44.0850166,46.38226 L46.9264812,44.4396723 C40.2948809,39.2709822 32.8228032,37.452366 25.3399436,35.5395764 C16.5616459,33.2962069 9.49263239,31.439221 2.82393361,24.5251104 C2.49004747,24.178937 2.17621456,23.8265263 1.86538962,23.4720365 Z" id="Fill-21"></path>
|
||||
<path d="M34.1645854,49.6645268 C34.893506,50.0634031 35.1425612,50.5086988 36.1796702,50.7 C36.9305233,50.7 37.7585832,50.659873 38.4352738,50.23418 L40.0920678,49.1926318 C34.7693674,45.7494414 29.2447004,43.7586502 23.3471124,42.3058883 L34.1645854,49.6645268 Z" id="Fill-23"></path>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 13 KiB |
BIN
docs/logo/flagger-stacked-color@2x.png
Normal file
|
After Width: | Height: | Size: 24 KiB |
29
docs/logo/flagger-stacked-white.svg
Normal file
@@ -0,0 +1,29 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="160px" height="160px" viewBox="0 0 160 160" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<title>flagger-stacked-white</title>
|
||||
<g id="flagger-stacked-white" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<path d="M10.1931429,149 L10.1931429,125.648 L15.6811429,125.648 L15.6811429,121.952 L10.1931429,121.952 L10.1931429,119.88 C10.1931429,116.408 11.7051429,114.56 14.5051429,114.56 C15.5131429,114.56 16.2411429,114.784 16.9131429,115.176 L17.9771429,111.984 C16.8571429,111.368 15.4571429,111.088 13.8331429,111.088 C9.18514286,111.088 5.99314286,114.28 5.99314286,119.88 L5.99314286,121.952 L1.51314286,121.952 L1.51314286,125.648 L5.99314286,125.648 L5.99314286,149 L10.1931429,149 Z M24.9211429,149 L24.9211429,111.648 L20.7211429,111.648 L20.7211429,149 L24.9211429,149 Z M10.1931429,149 L10.1931429,125.648 L15.6811429,125.648 L15.6811429,121.952 L10.1931429,121.952 L10.1931429,119.88 C10.1931429,116.408 11.7051429,114.56 14.5051429,114.56 C15.5131429,114.56 16.2411429,114.784 16.9131429,115.176 L17.9771429,111.984 C16.8571429,111.368 15.4571429,111.088 13.8331429,111.088 C9.18514286,111.088 5.99314286,114.28 5.99314286,119.88 L5.99314286,121.952 L1.51314286,121.952 L1.51314286,125.648 L5.99314286,125.648 L5.99314286,149 L10.1931429,149 Z M24.9211429,149 L24.9211429,111.648 L20.7211429,111.648 L20.7211429,149 L24.9211429,149 Z M38.9874286,149.672 C42.6274286,149.672 45.7634286,148.384 47.9474286,145.92 L47.9474286,149 L52.1474286,149 L52.1474286,130.408 C52.1474286,123.856 47.4434286,121.28 41.6754286,121.28 C37.2514286,121.28 33.7794286,122.736 30.8674286,125.76 L32.8274286,128.672 C35.2354286,126.04 37.8674286,124.92 41.1154286,124.92 C45.0354286,124.92 47.9474286,126.992 47.9474286,130.576 L47.9474286,135.448 C45.7634286,132.984 42.6834286,131.808 38.9874286,131.808 C34.3954286,131.808 29.5794286,134.608 29.5794286,140.712 C29.5794286,146.592 34.4514286,149.672 38.9874286,149.672 Z M40.5554286,146.648 C36.5794286,146.648 33.8354286,144.184 33.8354286,140.712 C33.8354286,137.296 36.5794286,134.832 40.5554286,134.832 C43.4674286,134.832 46.3234286,135.952 47.9474286,138.136 L47.9474286,143.288 C46.3234286,145.528 43.4674286,146.648 40.5554286,146.648 Z M69.1817143,159.976 C75.7897143,159.976 82.1177143,157.176 82.1177143,148.608 L82.1177143,121.952 L77.9177143,121.952 L77.9177143,126.04 C75.7337143,123.072 72.4297143,121.28 68.7897143,121.28 C61.6777143,121.28 56.7497143,126.656 56.7497143,135.336 C56.7497143,144.072 61.7337143,149.336 68.7897143,149.336 C72.5977143,149.336 75.9017143,147.264 77.9177143,144.52 L77.9177143,148.608 C77.9177143,154.32 73.6617143,156.504 69.1817143,156.504 C65.3177143,156.504 62.6297143,155.496 60.3897143,152.864 L58.2617143,155.888 C61.5097143,159.08 64.6457143,159.976 69.1817143,159.976 Z M69.8537143,145.584 C64.3657143,145.584 61.1177143,141.272 61.1177143,135.336 C61.1177143,129.344 64.3657143,125.032 69.8537143,125.032 C73.1577143,125.032 76.4057143,127.048 77.9177143,129.344 L77.9177143,141.216 C76.4057143,143.568 73.1577143,145.584 69.8537143,145.584 Z M99.096,159.976 C105.704,159.976 112.032,157.176 112.032,148.608 L112.032,121.952 L107.832,121.952 L107.832,126.04 C105.648,123.072 102.344,121.28 98.704,121.28 C91.592,121.28 86.664,126.656 86.664,135.336 C86.664,144.072 91.648,149.336 98.704,149.336 C102.512,149.336 105.816,147.264 107.832,144.52 L107.832,148.608 C107.832,154.32 103.576,156.504 99.096,156.504 C95.232,156.504 92.544,155.496 90.304,152.864 L88.176,155.888 C91.424,159.08 94.56,159.976 99.096,159.976 Z M99.768,145.584 C94.28,145.584 91.032,141.272 91.032,135.336 C91.032,129.344 94.28,125.032 99.768,125.032 C103.072,125.032 106.32,127.048 107.832,129.344 L107.832,141.216 C106.32,143.568 103.072,145.584 99.768,145.584 Z M130.410286,149.672 C134.778286,149.672 138.418286,148.16 141.162286,145.472 L139.146286,142.728 C136.962286,144.968 133.882286,146.2 130.746286,146.2 C124.922286,146.2 121.394286,141.944 121.058286,136.848 L142.898286,136.848 L142.898286,135.784 C142.898286,127.664 138.082286,121.28 129.906286,121.28 C122.178286,121.28 116.578286,127.608 116.578286,135.448 C116.578286,143.904 122.346286,149.672 130.410286,149.672 Z M138.754286,133.712 L121.002286,133.712 C121.226286,129.624 124.082286,124.752 129.850286,124.752 C136.010286,124.752 138.698286,129.736 138.754286,133.712 Z M151.588571,149 L151.588571,129.848 C152.820571,127.664 156.348571,125.536 158.980571,125.536 C159.596571,125.536 160.100571,125.592 160.604571,125.648 L160.604571,121.336 C156.908571,121.336 153.772571,123.464 151.588571,126.264 L151.588571,121.952 L147.388571,121.952 L147.388571,149 L151.588571,149 Z" id="fflagger" fill="#FFFFFF" fill-rule="nonzero"></path>
|
||||
<g id="flags" transform="translate(26.036697, 0.500000)" fill="#FFFFFF">
|
||||
<path d="M53.9358922,0.7 L53.9361614,0.7149 L53.9361614,0.7149 L53.9369368,0.9336 C53.9370203,0.972 53.9371029,1.015 53.9371847,1.0625 L53.9378977,1.6088 C53.9379744,1.6824 53.9380503,1.7602 53.9381254,1.8421 L53.9389868,3.0153 C53.9390554,3.1284 53.9391232,3.2452 53.9391903,3.3656 L53.9399577,4.9768 C53.9400186,5.1244 53.9400788,5.2752 53.9401383,5.4291 L53.9409762,7.9576 C53.9410285,8.14 53.9410802,8.325 53.9411311,8.5125 L53.9419772,12.1359 C53.9420204,12.3498 53.9420629,12.5656 53.9421048,12.7832 L53.9429968,18.3 C53.9430294,18.54 53.9430615,18.781 53.943093,19.0229 L53.943952,27.1992 C53.9439728,27.4488 53.9439933,27.6982 53.9440133,27.9473 L53.9449541,50.7 L53.9449541,50.7 C53.3879217,50.7014777 52.830488,50.538921 52.3437254,50.211951 L19.6313575,28.2303499 C19.498497,28.1410415 19.375601,28.0433533 19.2626695,27.9385428 L1.40077569,39.7 C-0.466925231,38.5321603 -0.466925231,35.903287 1.40077569,34.7364344 L33.206,14.047 L52.3437254,1.18768595 C52.8278484,0.862489056 53.3818782,0.7 53.9358922,0.7 Z" id="Combined-Shape"></path>
|
||||
<path d="M53.9449541,53.7 C54.518545,53.6973849 55.0927551,53.8599359 55.5939898,54.1878202 L89.1239541,76.1279689 L105.632086,65.7 C107.358112,66.8668656 107.358112,69.4957682 105.632086,70.663621 L73.3882295,91.6036587 C73.3686858,91.6168729 73.348778,91.6191194 73.3286088,91.6113313 L55.5939898,103.212312 C55.1094503,103.529275 54.5567157,103.691735 54.0022691,103.7 L54.0020013,103.4664 C54.0019573,103.428 54.001908,103.385 54.0018535,103.3375 L54.0009599,102.5579 C54.000866,102.476 54.0007674,102.39 54.0006643,102.3 L53.9999912,101.7128 C53.9953913,97.7 53.9845014,88.2 53.9736116,78.7 L53.9718931,77.2008 C53.9627374,69.2136 53.9538164,61.4312 53.9488864,57.1304 L53.9480097,56.3656 C53.9475957,56.0044 53.9472188,55.6756 53.9468821,55.3819 L53.9459959,54.6088 C53.9459115,54.5352 53.945832,54.4658 53.9457573,54.4007 L53.9449541,53.7 L53.9449541,53.7 Z" id="Combined-Shape"></path>
|
||||
<g id="Group-Copy" transform="translate(17.363303, 0.000000)">
|
||||
<path d="M40.0825271,2.57811824 C39.3101975,2.18406772 37.9113821,0.772333321 36.5592679,0.815362703 C35.3879258,0.815362703 34.9298365,1.30862747 33.0353111,2.57811824 C35.6703059,3.73059649 45.4272614,7.16970562 48.1569327,7.9404 C43.8145304,5.00479909 41.1230619,3.21737183 40.0825271,2.57811824 Z" id="Fill-5"></path>
|
||||
<path d="M29.6177773,4.85830684 L26.6147653,6.81885893 C29.4750473,8.76729329 32.2115554,10.2845904 34.8242897,11.3707502 C40.1341913,13.5781702 46.8841749,14.9995752 48.423617,15.3807663 C57.1621923,17.5447908 65.4157347,19.5875337 72.0525009,26.2540122 C72.3898283,26.5917965 72.7061975,26.9365971 73.0195726,27.2824 C73.7002154,25.9763676 73.358896,24.2523647 71.9976104,23.3643028 L58.8667933,14.7893932 C55.6791495,13.7329403 52.4316251,12.9250645 49.222025,12.1312213 C46.1950608,11.3814806 41.0779702,10.0491921 38.2156776,9.13005801 C36.3074826,8.51730196 33.4415158,7.0933849 29.6177773,4.85830684 Z" id="Fill-7"></path>
|
||||
<path d="M29.7315665,14.094497 C27.5581473,13.0954401 25.1789914,11.566935 22.5940987,9.50898164 L19.7614089,11.4291886 C22.680354,13.872933 25.1682837,15.5953444 27.225198,16.5964226 C30.3105695,18.09804 42.0831903,21.3149916 42.8121204,21.4949169 C51.5552876,23.6520212 59.5365954,25.256157 66.1778478,31.9045231 C66.1888316,31.9163913 68.9772132,30.2313417 68.797477,30.052416 C61.5001876,22.7464498 52.4120302,20.425361 43.6109479,18.253263 C42.6064223,18.005366 32.9916953,15.5930823 29.7315665,14.094497 Z" id="Fill-11"></path>
|
||||
<path d="M40.2748943,27.6858128 C47.2416777,29.4577639 53.792549,31.5762923 59.3417736,36.4444 L62.2704462,34.569277 C55.9296207,28.6976319 48.8074918,25.8624309 40.7862587,24.3617515 C33.595662,23.0164746 28.8766311,21.3487752 23.507058,19.2459776 C19.9273426,17.8441125 17.1081118,16.3021039 15.0493654,14.6199518 L12.1044223,16.5060931 C15.496129,19.1544049 18.552383,21.0412683 21.2731845,22.1666833 C24.8656838,23.6526619 31.1995871,25.4923718 40.2748943,27.6858128 Z" id="Fill-17"></path>
|
||||
<path d="M5.18885131,21.1343855 C5.29067424,21.2373258 5.38333311,21.3442637 5.48821073,21.4462046 C12.9304487,28.7509644 21.8300234,30.8575975 30.8057147,33.0293369 C38.5788773,34.9092456 45.6427477,36.4683588 51.8987485,41.3005539 L54.8844037,39.3547126 C47.8362204,33.5300936 39.7691873,31.7600736 31.6202982,29.7892176 C22.7942865,27.6534573 14.8355558,25.7666967 8.09895067,19.2774634 L5.18885131,21.1343855 Z" id="Fill-19"></path>
|
||||
<path d="M1.86538962,23.4720365 C0.558922248,24.8286618 0.712329392,27.1676708 2.35067758,28.271683 L12.2679982,34.9570906 C16.6576484,36.8407725 20.0248373,37.7569569 24.5388174,38.9108681 C31.5855194,40.7113852 38.2525371,42.1959537 44.0850166,46.38226 L46.9264812,44.4396723 C40.2948809,39.2709822 32.8228032,37.452366 25.3399436,35.5395764 C16.5616459,33.2962069 9.49263239,31.439221 2.82393361,24.5251104 C2.49004747,24.178937 2.17621456,23.8265263 1.86538962,23.4720365 Z" id="Fill-21"></path>
|
||||
<path d="M34.1645854,49.6645268 C34.893506,50.0634031 35.1425612,50.5086988 36.1796702,50.7 C36.9305233,50.7 37.7585832,50.659873 38.4352738,50.23418 L40.0920678,49.1926318 C34.7693674,45.7494414 29.2447004,43.7586502 23.3471124,42.3058883 L34.1645854,49.6645268 Z" id="Fill-23"></path>
|
||||
</g>
|
||||
<g id="Group-Copy-2" transform="translate(17.363303, 53.000000)">
|
||||
<path d="M40.0825271,2.57811824 C39.3101975,2.18406772 37.9113821,0.772333321 36.5592679,0.815362703 C35.3879258,0.815362703 34.9298365,1.30862747 33.0353111,2.57811824 C35.6703059,3.73059649 45.4272614,7.16970562 48.1569327,7.9404 C43.8145304,5.00479909 41.1230619,3.21737183 40.0825271,2.57811824 Z" id="Fill-5"></path>
|
||||
<path d="M29.6177773,4.85830684 L26.6147653,6.81885893 C29.4750473,8.76729329 32.2115554,10.2845904 34.8242897,11.3707502 C40.1341913,13.5781702 46.8841749,14.9995752 48.423617,15.3807663 C57.1621923,17.5447908 65.4157347,19.5875337 72.0525009,26.2540122 C72.3898283,26.5917965 72.7061975,26.9365971 73.0195726,27.2824 C73.7002154,25.9763676 73.358896,24.2523647 71.9976104,23.3643028 L58.8667933,14.7893932 C55.6791495,13.7329403 52.4316251,12.9250645 49.222025,12.1312213 C46.1950608,11.3814806 41.0779702,10.0491921 38.2156776,9.13005801 C36.3074826,8.51730196 33.4415158,7.0933849 29.6177773,4.85830684 Z" id="Fill-7"></path>
|
||||
<path d="M29.7315665,14.094497 C27.5581473,13.0954401 25.1789914,11.566935 22.5940987,9.50898164 L19.7614089,11.4291886 C22.680354,13.872933 25.1682837,15.5953444 27.225198,16.5964226 C30.3105695,18.09804 42.0831903,21.3149916 42.8121204,21.4949169 C51.5552876,23.6520212 59.5365954,25.256157 66.1778478,31.9045231 C66.1888316,31.9163913 68.9772132,30.2313417 68.797477,30.052416 C61.5001876,22.7464498 52.4120302,20.425361 43.6109479,18.253263 C42.6064223,18.005366 32.9916953,15.5930823 29.7315665,14.094497 Z" id="Fill-11"></path>
|
||||
<path d="M40.2748943,27.6858128 C47.2416777,29.4577639 53.792549,31.5762923 59.3417736,36.4444 L62.2704462,34.569277 C55.9296207,28.6976319 48.8074918,25.8624309 40.7862587,24.3617515 C33.595662,23.0164746 28.8766311,21.3487752 23.507058,19.2459776 C19.9273426,17.8441125 17.1081118,16.3021039 15.0493654,14.6199518 L12.1044223,16.5060931 C15.496129,19.1544049 18.552383,21.0412683 21.2731845,22.1666833 C24.8656838,23.6526619 31.1995871,25.4923718 40.2748943,27.6858128 Z" id="Fill-17"></path>
|
||||
<path d="M5.18885131,21.1343855 C5.29067424,21.2373258 5.38333311,21.3442637 5.48821073,21.4462046 C12.9304487,28.7509644 21.8300234,30.8575975 30.8057147,33.0293369 C38.5788773,34.9092456 45.6427477,36.4683588 51.8987485,41.3005539 L54.8844037,39.3547126 C47.8362204,33.5300936 39.7691873,31.7600736 31.6202982,29.7892176 C22.7942865,27.6534573 14.8355558,25.7666967 8.09895067,19.2774634 L5.18885131,21.1343855 Z" id="Fill-19"></path>
|
||||
<path d="M1.86538962,23.4720365 C0.558922248,24.8286618 0.712329392,27.1676708 2.35067758,28.271683 L12.2679982,34.9570906 C16.6576484,36.8407725 20.0248373,37.7569569 24.5388174,38.9108681 C31.5855194,40.7113852 38.2525371,42.1959537 44.0850166,46.38226 L46.9264812,44.4396723 C40.2948809,39.2709822 32.8228032,37.452366 25.3399436,35.5395764 C16.5616459,33.2962069 9.49263239,31.439221 2.82393361,24.5251104 C2.49004747,24.178937 2.17621456,23.8265263 1.86538962,23.4720365 Z" id="Fill-21"></path>
|
||||
<path d="M34.1645854,49.6645268 C34.893506,50.0634031 35.1425612,50.5086988 36.1796702,50.7 C36.9305233,50.7 37.7585832,50.659873 38.4352738,50.23418 L40.0920678,49.1926318 C34.7693674,45.7494414 29.2447004,43.7586502 23.3471124,42.3058883 L34.1645854,49.6645268 Z" id="Fill-23"></path>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 13 KiB |
BIN
docs/logo/flagger-stacked-white@2x.png
Normal file
|
After Width: | Height: | Size: 17 KiB |
29
docs/logo/flagger-vertical-black.svg
Normal file
@@ -0,0 +1,29 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="359px" height="106px" viewBox="0 0 359 106" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<title>flagger-vertical-black</title>
|
||||
<g id="flagger-vertical-black" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<path d="M136.167,78 L136.167,45.891 L143.713,45.891 L143.713,40.809 L136.167,40.809 L136.167,37.96 C136.167,33.186 138.246,30.645 142.096,30.645 C143.482,30.645 144.483,30.953 145.407,31.492 L146.87,27.103 C145.33,26.256 143.405,25.871 141.172,25.871 C134.781,25.871 130.392,30.26 130.392,37.96 L130.392,40.809 L124.232,40.809 L124.232,45.891 L130.392,45.891 L130.392,78 L136.167,78 Z M156.418,78 L156.418,26.641 L150.643,26.641 L150.643,78 L156.418,78 Z M136.167,78 L136.167,45.891 L143.713,45.891 L143.713,40.809 L136.167,40.809 L136.167,37.96 C136.167,33.186 138.246,30.645 142.096,30.645 C143.482,30.645 144.483,30.953 145.407,31.492 L146.87,27.103 C145.33,26.256 143.405,25.871 141.172,25.871 C134.781,25.871 130.392,30.26 130.392,37.96 L130.392,40.809 L124.232,40.809 L124.232,45.891 L130.392,45.891 L130.392,78 L136.167,78 Z M156.418,78 L156.418,26.641 L150.643,26.641 L150.643,78 L156.418,78 Z M178.902,78.924 C183.907,78.924 188.219,77.153 191.222,73.765 L191.222,78 L196.997,78 L196.997,52.436 C196.997,43.427 190.529,39.885 182.598,39.885 C176.515,39.885 171.741,41.887 167.737,46.045 L170.432,50.049 C173.743,46.43 177.362,44.89 181.828,44.89 C187.218,44.89 191.222,47.739 191.222,52.667 L191.222,59.366 C188.219,55.978 183.984,54.361 178.902,54.361 C172.588,54.361 165.966,58.211 165.966,66.604 C165.966,74.689 172.665,78.924 178.902,78.924 Z M181.058,74.766 C175.591,74.766 171.818,71.378 171.818,66.604 C171.818,61.907 175.591,58.519 181.058,58.519 C185.062,58.519 188.989,60.059 191.222,63.062 L191.222,70.146 C188.989,73.226 185.062,74.766 181.058,74.766 Z M223.562,93.092 C232.648,93.092 241.349,89.242 241.349,77.461 L241.349,40.809 L235.574,40.809 L235.574,46.43 C232.571,42.349 228.028,39.885 223.023,39.885 C213.244,39.885 206.468,47.277 206.468,59.212 C206.468,71.224 213.321,78.462 223.023,78.462 C228.259,78.462 232.802,75.613 235.574,71.84 L235.574,77.461 C235.574,85.315 229.722,88.318 223.562,88.318 C218.249,88.318 214.553,86.932 211.473,83.313 L208.547,87.471 C213.013,91.86 217.325,93.092 223.562,93.092 Z M224.486,73.303 C216.94,73.303 212.474,67.374 212.474,59.212 C212.474,50.973 216.94,45.044 224.486,45.044 C229.029,45.044 233.495,47.816 235.574,50.973 L235.574,67.297 C233.495,70.531 229.029,73.303 224.486,73.303 Z M267.837,93.092 C276.923,93.092 285.624,89.242 285.624,77.461 L285.624,40.809 L279.849,40.809 L279.849,46.43 C276.846,42.349 272.303,39.885 267.298,39.885 C257.519,39.885 250.743,47.277 250.743,59.212 C250.743,71.224 257.596,78.462 267.298,78.462 C272.534,78.462 277.077,75.613 279.849,71.84 L279.849,77.461 C279.849,85.315 273.997,88.318 267.837,88.318 C262.524,88.318 258.828,86.932 255.748,83.313 L252.822,87.471 C257.288,91.86 261.6,93.092 267.837,93.092 Z M268.761,73.303 C261.215,73.303 256.749,67.374 256.749,59.212 C256.749,50.973 261.215,45.044 268.761,45.044 C273.304,45.044 277.77,47.816 279.849,50.973 L279.849,67.297 C277.77,70.531 273.304,73.303 268.761,73.303 Z M314.037,78.924 C320.043,78.924 325.048,76.845 328.821,73.149 L326.049,69.376 C323.046,72.456 318.811,74.15 314.499,74.15 C306.491,74.15 301.64,68.298 301.178,61.291 L331.208,61.291 L331.208,59.828 C331.208,48.663 324.586,39.885 313.344,39.885 C302.718,39.885 295.018,48.586 295.018,59.366 C295.018,70.993 302.949,78.924 314.037,78.924 Z M325.51,56.979 L301.101,56.979 C301.409,51.358 305.336,44.659 313.267,44.659 C321.737,44.659 325.433,51.512 325.51,56.979 Z M346.3,78 L346.3,51.666 C347.994,48.663 352.845,45.737 356.464,45.737 C357.311,45.737 358.004,45.814 358.697,45.891 L358.697,39.962 C353.615,39.962 349.303,42.888 346.3,46.738 L346.3,40.809 L340.525,40.809 L340.525,78 L346.3,78 Z" id="fflagger" fill="#1A1A1A" fill-rule="nonzero"></path>
|
||||
<g id="flags" transform="translate(0.036697, 0.500000)" fill="#1A1A1A">
|
||||
<path d="M53.9358922,0.7 L53.9361614,0.7149 L53.9361614,0.7149 L53.9369368,0.9336 C53.9370203,0.972 53.9371029,1.015 53.9371847,1.0625 L53.9378977,1.6088 C53.9379744,1.6824 53.9380503,1.7602 53.9381254,1.8421 L53.9389868,3.0153 C53.9390554,3.1284 53.9391232,3.2452 53.9391903,3.3656 L53.9399577,4.9768 C53.9400186,5.1244 53.9400788,5.2752 53.9401383,5.4291 L53.9409762,7.9576 C53.9410285,8.14 53.9410802,8.325 53.9411311,8.5125 L53.9419772,12.1359 C53.9420204,12.3498 53.9420629,12.5656 53.9421048,12.7832 L53.9429968,18.3 C53.9430294,18.54 53.9430615,18.781 53.943093,19.0229 L53.943952,27.1992 C53.9439728,27.4488 53.9439933,27.6982 53.9440133,27.9473 L53.9449541,50.7 L53.9449541,50.7 C53.3879217,50.7014777 52.830488,50.538921 52.3437254,50.211951 L19.6313575,28.2303499 C19.498497,28.1410415 19.375601,28.0433533 19.2626695,27.9385428 L1.40077569,39.7 C-0.466925231,38.5321603 -0.466925231,35.903287 1.40077569,34.7364344 L33.206,14.047 L52.3437254,1.18768595 C52.8278484,0.862489056 53.3818782,0.7 53.9358922,0.7 Z" id="Combined-Shape"></path>
|
||||
<path d="M53.9449541,53.7 C54.518545,53.6973849 55.0927551,53.8599359 55.5939898,54.1878202 L89.1239541,76.1279689 L105.632086,65.7 C107.358112,66.8668656 107.358112,69.4957682 105.632086,70.663621 L73.3882295,91.6036587 C73.3686858,91.6168729 73.348778,91.6191194 73.3286088,91.6113313 L55.5939898,103.212312 C55.1094503,103.529275 54.5567157,103.691735 54.0022691,103.7 L54.0020013,103.4664 C54.0019573,103.428 54.001908,103.385 54.0018535,103.3375 L54.0009599,102.5579 C54.000866,102.476 54.0007674,102.39 54.0006643,102.3 L53.9999912,101.7128 C53.9953913,97.7 53.9845014,88.2 53.9736116,78.7 L53.9718931,77.2008 C53.9627374,69.2136 53.9538164,61.4312 53.9488864,57.1304 L53.9480097,56.3656 C53.9475957,56.0044 53.9472188,55.6756 53.9468821,55.3819 L53.9459959,54.6088 C53.9459115,54.5352 53.945832,54.4658 53.9457573,54.4007 L53.9449541,53.7 L53.9449541,53.7 Z" id="Combined-Shape"></path>
|
||||
<g id="Group-Copy" transform="translate(17.363303, 0.000000)">
|
||||
<path d="M40.0825271,2.57811824 C39.3101975,2.18406772 37.9113821,0.772333321 36.5592679,0.815362703 C35.3879258,0.815362703 34.9298365,1.30862747 33.0353111,2.57811824 C35.6703059,3.73059649 45.4272614,7.16970562 48.1569327,7.9404 C43.8145304,5.00479909 41.1230619,3.21737183 40.0825271,2.57811824 Z" id="Fill-5"></path>
|
||||
<path d="M29.6177773,4.85830684 L26.6147653,6.81885893 C29.4750473,8.76729329 32.2115554,10.2845904 34.8242897,11.3707502 C40.1341913,13.5781702 46.8841749,14.9995752 48.423617,15.3807663 C57.1621923,17.5447908 65.4157347,19.5875337 72.0525009,26.2540122 C72.3898283,26.5917965 72.7061975,26.9365971 73.0195726,27.2824 C73.7002154,25.9763676 73.358896,24.2523647 71.9976104,23.3643028 L58.8667933,14.7893932 C55.6791495,13.7329403 52.4316251,12.9250645 49.222025,12.1312213 C46.1950608,11.3814806 41.0779702,10.0491921 38.2156776,9.13005801 C36.3074826,8.51730196 33.4415158,7.0933849 29.6177773,4.85830684 Z" id="Fill-7"></path>
|
||||
<path d="M29.7315665,14.094497 C27.5581473,13.0954401 25.1789914,11.566935 22.5940987,9.50898164 L19.7614089,11.4291886 C22.680354,13.872933 25.1682837,15.5953444 27.225198,16.5964226 C30.3105695,18.09804 42.0831903,21.3149916 42.8121204,21.4949169 C51.5552876,23.6520212 59.5365954,25.256157 66.1778478,31.9045231 C66.1888316,31.9163913 68.9772132,30.2313417 68.797477,30.052416 C61.5001876,22.7464498 52.4120302,20.425361 43.6109479,18.253263 C42.6064223,18.005366 32.9916953,15.5930823 29.7315665,14.094497 Z" id="Fill-11"></path>
|
||||
<path d="M40.2748943,27.6858128 C47.2416777,29.4577639 53.792549,31.5762923 59.3417736,36.4444 L62.2704462,34.569277 C55.9296207,28.6976319 48.8074918,25.8624309 40.7862587,24.3617515 C33.595662,23.0164746 28.8766311,21.3487752 23.507058,19.2459776 C19.9273426,17.8441125 17.1081118,16.3021039 15.0493654,14.6199518 L12.1044223,16.5060931 C15.496129,19.1544049 18.552383,21.0412683 21.2731845,22.1666833 C24.8656838,23.6526619 31.1995871,25.4923718 40.2748943,27.6858128 Z" id="Fill-17"></path>
|
||||
<path d="M5.18885131,21.1343855 C5.29067424,21.2373258 5.38333311,21.3442637 5.48821073,21.4462046 C12.9304487,28.7509644 21.8300234,30.8575975 30.8057147,33.0293369 C38.5788773,34.9092456 45.6427477,36.4683588 51.8987485,41.3005539 L54.8844037,39.3547126 C47.8362204,33.5300936 39.7691873,31.7600736 31.6202982,29.7892176 C22.7942865,27.6534573 14.8355558,25.7666967 8.09895067,19.2774634 L5.18885131,21.1343855 Z" id="Fill-19"></path>
|
||||
<path d="M1.86538962,23.4720365 C0.558922248,24.8286618 0.712329392,27.1676708 2.35067758,28.271683 L12.2679982,34.9570906 C16.6576484,36.8407725 20.0248373,37.7569569 24.5388174,38.9108681 C31.5855194,40.7113852 38.2525371,42.1959537 44.0850166,46.38226 L46.9264812,44.4396723 C40.2948809,39.2709822 32.8228032,37.452366 25.3399436,35.5395764 C16.5616459,33.2962069 9.49263239,31.439221 2.82393361,24.5251104 C2.49004747,24.178937 2.17621456,23.8265263 1.86538962,23.4720365 Z" id="Fill-21"></path>
|
||||
<path d="M34.1645854,49.6645268 C34.893506,50.0634031 35.1425612,50.5086988 36.1796702,50.7 C36.9305233,50.7 37.7585832,50.659873 38.4352738,50.23418 L40.0920678,49.1926318 C34.7693674,45.7494414 29.2447004,43.7586502 23.3471124,42.3058883 L34.1645854,49.6645268 Z" id="Fill-23"></path>
|
||||
</g>
|
||||
<g id="Group-Copy-2" transform="translate(17.363303, 53.000000)">
|
||||
<path d="M40.0825271,2.57811824 C39.3101975,2.18406772 37.9113821,0.772333321 36.5592679,0.815362703 C35.3879258,0.815362703 34.9298365,1.30862747 33.0353111,2.57811824 C35.6703059,3.73059649 45.4272614,7.16970562 48.1569327,7.9404 C43.8145304,5.00479909 41.1230619,3.21737183 40.0825271,2.57811824 Z" id="Fill-5"></path>
|
||||
<path d="M29.6177773,4.85830684 L26.6147653,6.81885893 C29.4750473,8.76729329 32.2115554,10.2845904 34.8242897,11.3707502 C40.1341913,13.5781702 46.8841749,14.9995752 48.423617,15.3807663 C57.1621923,17.5447908 65.4157347,19.5875337 72.0525009,26.2540122 C72.3898283,26.5917965 72.7061975,26.9365971 73.0195726,27.2824 C73.7002154,25.9763676 73.358896,24.2523647 71.9976104,23.3643028 L58.8667933,14.7893932 C55.6791495,13.7329403 52.4316251,12.9250645 49.222025,12.1312213 C46.1950608,11.3814806 41.0779702,10.0491921 38.2156776,9.13005801 C36.3074826,8.51730196 33.4415158,7.0933849 29.6177773,4.85830684 Z" id="Fill-7"></path>
|
||||
<path d="M29.7315665,14.094497 C27.5581473,13.0954401 25.1789914,11.566935 22.5940987,9.50898164 L19.7614089,11.4291886 C22.680354,13.872933 25.1682837,15.5953444 27.225198,16.5964226 C30.3105695,18.09804 42.0831903,21.3149916 42.8121204,21.4949169 C51.5552876,23.6520212 59.5365954,25.256157 66.1778478,31.9045231 C66.1888316,31.9163913 68.9772132,30.2313417 68.797477,30.052416 C61.5001876,22.7464498 52.4120302,20.425361 43.6109479,18.253263 C42.6064223,18.005366 32.9916953,15.5930823 29.7315665,14.094497 Z" id="Fill-11"></path>
|
||||
<path d="M40.2748943,27.6858128 C47.2416777,29.4577639 53.792549,31.5762923 59.3417736,36.4444 L62.2704462,34.569277 C55.9296207,28.6976319 48.8074918,25.8624309 40.7862587,24.3617515 C33.595662,23.0164746 28.8766311,21.3487752 23.507058,19.2459776 C19.9273426,17.8441125 17.1081118,16.3021039 15.0493654,14.6199518 L12.1044223,16.5060931 C15.496129,19.1544049 18.552383,21.0412683 21.2731845,22.1666833 C24.8656838,23.6526619 31.1995871,25.4923718 40.2748943,27.6858128 Z" id="Fill-17"></path>
|
||||
<path d="M5.18885131,21.1343855 C5.29067424,21.2373258 5.38333311,21.3442637 5.48821073,21.4462046 C12.9304487,28.7509644 21.8300234,30.8575975 30.8057147,33.0293369 C38.5788773,34.9092456 45.6427477,36.4683588 51.8987485,41.3005539 L54.8844037,39.3547126 C47.8362204,33.5300936 39.7691873,31.7600736 31.6202982,29.7892176 C22.7942865,27.6534573 14.8355558,25.7666967 8.09895067,19.2774634 L5.18885131,21.1343855 Z" id="Fill-19"></path>
|
||||
<path d="M1.86538962,23.4720365 C0.558922248,24.8286618 0.712329392,27.1676708 2.35067758,28.271683 L12.2679982,34.9570906 C16.6576484,36.8407725 20.0248373,37.7569569 24.5388174,38.9108681 C31.5855194,40.7113852 38.2525371,42.1959537 44.0850166,46.38226 L46.9264812,44.4396723 C40.2948809,39.2709822 32.8228032,37.452366 25.3399436,35.5395764 C16.5616459,33.2962069 9.49263239,31.439221 2.82393361,24.5251104 C2.49004747,24.178937 2.17621456,23.8265263 1.86538962,23.4720365 Z" id="Fill-21"></path>
|
||||
<path d="M34.1645854,49.6645268 C34.893506,50.0634031 35.1425612,50.5086988 36.1796702,50.7 C36.9305233,50.7 37.7585832,50.659873 38.4352738,50.23418 L40.0920678,49.1926318 C34.7693674,45.7494414 29.2447004,43.7586502 23.3471124,42.3058883 L34.1645854,49.6645268 Z" id="Fill-23"></path>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 13 KiB |
BIN
docs/logo/flagger-vertical-black@2x.png
Normal file
|
After Width: | Height: | Size: 28 KiB |
29
docs/logo/flagger-vertical-color.svg
Normal file
@@ -0,0 +1,29 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="359px" height="106px" viewBox="0 0 359 106" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<title>flagger-vertical-color</title>
|
||||
<g id="flagger-vertical-color" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<path d="M136.167,78 L136.167,45.891 L143.713,45.891 L143.713,40.809 L136.167,40.809 L136.167,37.96 C136.167,33.186 138.246,30.645 142.096,30.645 C143.482,30.645 144.483,30.953 145.407,31.492 L146.87,27.103 C145.33,26.256 143.405,25.871 141.172,25.871 C134.781,25.871 130.392,30.26 130.392,37.96 L130.392,40.809 L124.232,40.809 L124.232,45.891 L130.392,45.891 L130.392,78 L136.167,78 Z M156.418,78 L156.418,26.641 L150.643,26.641 L150.643,78 L156.418,78 Z M136.167,78 L136.167,45.891 L143.713,45.891 L143.713,40.809 L136.167,40.809 L136.167,37.96 C136.167,33.186 138.246,30.645 142.096,30.645 C143.482,30.645 144.483,30.953 145.407,31.492 L146.87,27.103 C145.33,26.256 143.405,25.871 141.172,25.871 C134.781,25.871 130.392,30.26 130.392,37.96 L130.392,40.809 L124.232,40.809 L124.232,45.891 L130.392,45.891 L130.392,78 L136.167,78 Z M156.418,78 L156.418,26.641 L150.643,26.641 L150.643,78 L156.418,78 Z M178.902,78.924 C183.907,78.924 188.219,77.153 191.222,73.765 L191.222,78 L196.997,78 L196.997,52.436 C196.997,43.427 190.529,39.885 182.598,39.885 C176.515,39.885 171.741,41.887 167.737,46.045 L170.432,50.049 C173.743,46.43 177.362,44.89 181.828,44.89 C187.218,44.89 191.222,47.739 191.222,52.667 L191.222,59.366 C188.219,55.978 183.984,54.361 178.902,54.361 C172.588,54.361 165.966,58.211 165.966,66.604 C165.966,74.689 172.665,78.924 178.902,78.924 Z M181.058,74.766 C175.591,74.766 171.818,71.378 171.818,66.604 C171.818,61.907 175.591,58.519 181.058,58.519 C185.062,58.519 188.989,60.059 191.222,63.062 L191.222,70.146 C188.989,73.226 185.062,74.766 181.058,74.766 Z M223.562,93.092 C232.648,93.092 241.349,89.242 241.349,77.461 L241.349,40.809 L235.574,40.809 L235.574,46.43 C232.571,42.349 228.028,39.885 223.023,39.885 C213.244,39.885 206.468,47.277 206.468,59.212 C206.468,71.224 213.321,78.462 223.023,78.462 C228.259,78.462 232.802,75.613 235.574,71.84 L235.574,77.461 C235.574,85.315 229.722,88.318 223.562,88.318 C218.249,88.318 214.553,86.932 211.473,83.313 L208.547,87.471 C213.013,91.86 217.325,93.092 223.562,93.092 Z M224.486,73.303 C216.94,73.303 212.474,67.374 212.474,59.212 C212.474,50.973 216.94,45.044 224.486,45.044 C229.029,45.044 233.495,47.816 235.574,50.973 L235.574,67.297 C233.495,70.531 229.029,73.303 224.486,73.303 Z M267.837,93.092 C276.923,93.092 285.624,89.242 285.624,77.461 L285.624,40.809 L279.849,40.809 L279.849,46.43 C276.846,42.349 272.303,39.885 267.298,39.885 C257.519,39.885 250.743,47.277 250.743,59.212 C250.743,71.224 257.596,78.462 267.298,78.462 C272.534,78.462 277.077,75.613 279.849,71.84 L279.849,77.461 C279.849,85.315 273.997,88.318 267.837,88.318 C262.524,88.318 258.828,86.932 255.748,83.313 L252.822,87.471 C257.288,91.86 261.6,93.092 267.837,93.092 Z M268.761,73.303 C261.215,73.303 256.749,67.374 256.749,59.212 C256.749,50.973 261.215,45.044 268.761,45.044 C273.304,45.044 277.77,47.816 279.849,50.973 L279.849,67.297 C277.77,70.531 273.304,73.303 268.761,73.303 Z M314.037,78.924 C320.043,78.924 325.048,76.845 328.821,73.149 L326.049,69.376 C323.046,72.456 318.811,74.15 314.499,74.15 C306.491,74.15 301.64,68.298 301.178,61.291 L331.208,61.291 L331.208,59.828 C331.208,48.663 324.586,39.885 313.344,39.885 C302.718,39.885 295.018,48.586 295.018,59.366 C295.018,70.993 302.949,78.924 314.037,78.924 Z M325.51,56.979 L301.101,56.979 C301.409,51.358 305.336,44.659 313.267,44.659 C321.737,44.659 325.433,51.512 325.51,56.979 Z M346.3,78 L346.3,51.666 C347.994,48.663 352.845,45.737 356.464,45.737 C357.311,45.737 358.004,45.814 358.697,45.891 L358.697,39.962 C353.615,39.962 349.303,42.888 346.3,46.738 L346.3,40.809 L340.525,40.809 L340.525,78 L346.3,78 Z" id="fflagger" fill="#1A1A1A" fill-rule="nonzero"></path>
|
||||
<g id="flags" transform="translate(0.036697, 0.500000)" fill="#7BB09F">
|
||||
<path d="M53.9358922,0.7 L53.9361614,0.7149 L53.9361614,0.7149 L53.9369368,0.9336 C53.9370203,0.972 53.9371029,1.015 53.9371847,1.0625 L53.9378977,1.6088 C53.9379744,1.6824 53.9380503,1.7602 53.9381254,1.8421 L53.9389868,3.0153 C53.9390554,3.1284 53.9391232,3.2452 53.9391903,3.3656 L53.9399577,4.9768 C53.9400186,5.1244 53.9400788,5.2752 53.9401383,5.4291 L53.9409762,7.9576 C53.9410285,8.14 53.9410802,8.325 53.9411311,8.5125 L53.9419772,12.1359 C53.9420204,12.3498 53.9420629,12.5656 53.9421048,12.7832 L53.9429968,18.3 C53.9430294,18.54 53.9430615,18.781 53.943093,19.0229 L53.943952,27.1992 C53.9439728,27.4488 53.9439933,27.6982 53.9440133,27.9473 L53.9449541,50.7 L53.9449541,50.7 C53.3879217,50.7014777 52.830488,50.538921 52.3437254,50.211951 L19.6313575,28.2303499 C19.498497,28.1410415 19.375601,28.0433533 19.2626695,27.9385428 L1.40077569,39.7 C-0.466925231,38.5321603 -0.466925231,35.903287 1.40077569,34.7364344 L33.206,14.047 L52.3437254,1.18768595 C52.8278484,0.862489056 53.3818782,0.7 53.9358922,0.7 Z" id="Combined-Shape"></path>
|
||||
<path d="M53.9449541,53.7 C54.518545,53.6973849 55.0927551,53.8599359 55.5939898,54.1878202 L89.1239541,76.1279689 L105.632086,65.7 C107.358112,66.8668656 107.358112,69.4957682 105.632086,70.663621 L73.3882295,91.6036587 C73.3686858,91.6168729 73.348778,91.6191194 73.3286088,91.6113313 L55.5939898,103.212312 C55.1094503,103.529275 54.5567157,103.691735 54.0022691,103.7 L54.0020013,103.4664 C54.0019573,103.428 54.001908,103.385 54.0018535,103.3375 L54.0009599,102.5579 C54.000866,102.476 54.0007674,102.39 54.0006643,102.3 L53.9999912,101.7128 C53.9953913,97.7 53.9845014,88.2 53.9736116,78.7 L53.9718931,77.2008 C53.9627374,69.2136 53.9538164,61.4312 53.9488864,57.1304 L53.9480097,56.3656 C53.9475957,56.0044 53.9472188,55.6756 53.9468821,55.3819 L53.9459959,54.6088 C53.9459115,54.5352 53.945832,54.4658 53.9457573,54.4007 L53.9449541,53.7 L53.9449541,53.7 Z" id="Combined-Shape"></path>
|
||||
<g id="Group-Copy" transform="translate(17.363303, 0.000000)">
|
||||
<path d="M40.0825271,2.57811824 C39.3101975,2.18406772 37.9113821,0.772333321 36.5592679,0.815362703 C35.3879258,0.815362703 34.9298365,1.30862747 33.0353111,2.57811824 C35.6703059,3.73059649 45.4272614,7.16970562 48.1569327,7.9404 C43.8145304,5.00479909 41.1230619,3.21737183 40.0825271,2.57811824 Z" id="Fill-5"></path>
|
||||
<path d="M29.6177773,4.85830684 L26.6147653,6.81885893 C29.4750473,8.76729329 32.2115554,10.2845904 34.8242897,11.3707502 C40.1341913,13.5781702 46.8841749,14.9995752 48.423617,15.3807663 C57.1621923,17.5447908 65.4157347,19.5875337 72.0525009,26.2540122 C72.3898283,26.5917965 72.7061975,26.9365971 73.0195726,27.2824 C73.7002154,25.9763676 73.358896,24.2523647 71.9976104,23.3643028 L58.8667933,14.7893932 C55.6791495,13.7329403 52.4316251,12.9250645 49.222025,12.1312213 C46.1950608,11.3814806 41.0779702,10.0491921 38.2156776,9.13005801 C36.3074826,8.51730196 33.4415158,7.0933849 29.6177773,4.85830684 Z" id="Fill-7"></path>
|
||||
<path d="M29.7315665,14.094497 C27.5581473,13.0954401 25.1789914,11.566935 22.5940987,9.50898164 L19.7614089,11.4291886 C22.680354,13.872933 25.1682837,15.5953444 27.225198,16.5964226 C30.3105695,18.09804 42.0831903,21.3149916 42.8121204,21.4949169 C51.5552876,23.6520212 59.5365954,25.256157 66.1778478,31.9045231 C66.1888316,31.9163913 68.9772132,30.2313417 68.797477,30.052416 C61.5001876,22.7464498 52.4120302,20.425361 43.6109479,18.253263 C42.6064223,18.005366 32.9916953,15.5930823 29.7315665,14.094497 Z" id="Fill-11"></path>
|
||||
<path d="M40.2748943,27.6858128 C47.2416777,29.4577639 53.792549,31.5762923 59.3417736,36.4444 L62.2704462,34.569277 C55.9296207,28.6976319 48.8074918,25.8624309 40.7862587,24.3617515 C33.595662,23.0164746 28.8766311,21.3487752 23.507058,19.2459776 C19.9273426,17.8441125 17.1081118,16.3021039 15.0493654,14.6199518 L12.1044223,16.5060931 C15.496129,19.1544049 18.552383,21.0412683 21.2731845,22.1666833 C24.8656838,23.6526619 31.1995871,25.4923718 40.2748943,27.6858128 Z" id="Fill-17"></path>
|
||||
<path d="M5.18885131,21.1343855 C5.29067424,21.2373258 5.38333311,21.3442637 5.48821073,21.4462046 C12.9304487,28.7509644 21.8300234,30.8575975 30.8057147,33.0293369 C38.5788773,34.9092456 45.6427477,36.4683588 51.8987485,41.3005539 L54.8844037,39.3547126 C47.8362204,33.5300936 39.7691873,31.7600736 31.6202982,29.7892176 C22.7942865,27.6534573 14.8355558,25.7666967 8.09895067,19.2774634 L5.18885131,21.1343855 Z" id="Fill-19"></path>
|
||||
<path d="M1.86538962,23.4720365 C0.558922248,24.8286618 0.712329392,27.1676708 2.35067758,28.271683 L12.2679982,34.9570906 C16.6576484,36.8407725 20.0248373,37.7569569 24.5388174,38.9108681 C31.5855194,40.7113852 38.2525371,42.1959537 44.0850166,46.38226 L46.9264812,44.4396723 C40.2948809,39.2709822 32.8228032,37.452366 25.3399436,35.5395764 C16.5616459,33.2962069 9.49263239,31.439221 2.82393361,24.5251104 C2.49004747,24.178937 2.17621456,23.8265263 1.86538962,23.4720365 Z" id="Fill-21"></path>
|
||||
<path d="M34.1645854,49.6645268 C34.893506,50.0634031 35.1425612,50.5086988 36.1796702,50.7 C36.9305233,50.7 37.7585832,50.659873 38.4352738,50.23418 L40.0920678,49.1926318 C34.7693674,45.7494414 29.2447004,43.7586502 23.3471124,42.3058883 L34.1645854,49.6645268 Z" id="Fill-23"></path>
|
||||
</g>
|
||||
<g id="Group-Copy-2" transform="translate(17.363303, 53.000000)">
|
||||
<path d="M40.0825271,2.57811824 C39.3101975,2.18406772 37.9113821,0.772333321 36.5592679,0.815362703 C35.3879258,0.815362703 34.9298365,1.30862747 33.0353111,2.57811824 C35.6703059,3.73059649 45.4272614,7.16970562 48.1569327,7.9404 C43.8145304,5.00479909 41.1230619,3.21737183 40.0825271,2.57811824 Z" id="Fill-5"></path>
|
||||
<path d="M29.6177773,4.85830684 L26.6147653,6.81885893 C29.4750473,8.76729329 32.2115554,10.2845904 34.8242897,11.3707502 C40.1341913,13.5781702 46.8841749,14.9995752 48.423617,15.3807663 C57.1621923,17.5447908 65.4157347,19.5875337 72.0525009,26.2540122 C72.3898283,26.5917965 72.7061975,26.9365971 73.0195726,27.2824 C73.7002154,25.9763676 73.358896,24.2523647 71.9976104,23.3643028 L58.8667933,14.7893932 C55.6791495,13.7329403 52.4316251,12.9250645 49.222025,12.1312213 C46.1950608,11.3814806 41.0779702,10.0491921 38.2156776,9.13005801 C36.3074826,8.51730196 33.4415158,7.0933849 29.6177773,4.85830684 Z" id="Fill-7"></path>
|
||||
<path d="M29.7315665,14.094497 C27.5581473,13.0954401 25.1789914,11.566935 22.5940987,9.50898164 L19.7614089,11.4291886 C22.680354,13.872933 25.1682837,15.5953444 27.225198,16.5964226 C30.3105695,18.09804 42.0831903,21.3149916 42.8121204,21.4949169 C51.5552876,23.6520212 59.5365954,25.256157 66.1778478,31.9045231 C66.1888316,31.9163913 68.9772132,30.2313417 68.797477,30.052416 C61.5001876,22.7464498 52.4120302,20.425361 43.6109479,18.253263 C42.6064223,18.005366 32.9916953,15.5930823 29.7315665,14.094497 Z" id="Fill-11"></path>
|
||||
<path d="M40.2748943,27.6858128 C47.2416777,29.4577639 53.792549,31.5762923 59.3417736,36.4444 L62.2704462,34.569277 C55.9296207,28.6976319 48.8074918,25.8624309 40.7862587,24.3617515 C33.595662,23.0164746 28.8766311,21.3487752 23.507058,19.2459776 C19.9273426,17.8441125 17.1081118,16.3021039 15.0493654,14.6199518 L12.1044223,16.5060931 C15.496129,19.1544049 18.552383,21.0412683 21.2731845,22.1666833 C24.8656838,23.6526619 31.1995871,25.4923718 40.2748943,27.6858128 Z" id="Fill-17"></path>
|
||||
<path d="M5.18885131,21.1343855 C5.29067424,21.2373258 5.38333311,21.3442637 5.48821073,21.4462046 C12.9304487,28.7509644 21.8300234,30.8575975 30.8057147,33.0293369 C38.5788773,34.9092456 45.6427477,36.4683588 51.8987485,41.3005539 L54.8844037,39.3547126 C47.8362204,33.5300936 39.7691873,31.7600736 31.6202982,29.7892176 C22.7942865,27.6534573 14.8355558,25.7666967 8.09895067,19.2774634 L5.18885131,21.1343855 Z" id="Fill-19"></path>
|
||||
<path d="M1.86538962,23.4720365 C0.558922248,24.8286618 0.712329392,27.1676708 2.35067758,28.271683 L12.2679982,34.9570906 C16.6576484,36.8407725 20.0248373,37.7569569 24.5388174,38.9108681 C31.5855194,40.7113852 38.2525371,42.1959537 44.0850166,46.38226 L46.9264812,44.4396723 C40.2948809,39.2709822 32.8228032,37.452366 25.3399436,35.5395764 C16.5616459,33.2962069 9.49263239,31.439221 2.82393361,24.5251104 C2.49004747,24.178937 2.17621456,23.8265263 1.86538962,23.4720365 Z" id="Fill-21"></path>
|
||||
<path d="M34.1645854,49.6645268 C34.893506,50.0634031 35.1425612,50.5086988 36.1796702,50.7 C36.9305233,50.7 37.7585832,50.659873 38.4352738,50.23418 L40.0920678,49.1926318 C34.7693674,45.7494414 29.2447004,43.7586502 23.3471124,42.3058883 L34.1645854,49.6645268 Z" id="Fill-23"></path>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 13 KiB |
BIN
docs/logo/flagger-vertical-color@2x.png
Normal file
|
After Width: | Height: | Size: 30 KiB |
29
docs/logo/flagger-vertical-white.svg
Normal file
@@ -0,0 +1,29 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="359px" height="106px" viewBox="0 0 359 106" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<title>flagger-vertical-white</title>
|
||||
<g id="flagger-vertical-white" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<path d="M136.167,78 L136.167,45.891 L143.713,45.891 L143.713,40.809 L136.167,40.809 L136.167,37.96 C136.167,33.186 138.246,30.645 142.096,30.645 C143.482,30.645 144.483,30.953 145.407,31.492 L146.87,27.103 C145.33,26.256 143.405,25.871 141.172,25.871 C134.781,25.871 130.392,30.26 130.392,37.96 L130.392,40.809 L124.232,40.809 L124.232,45.891 L130.392,45.891 L130.392,78 L136.167,78 Z M156.418,78 L156.418,26.641 L150.643,26.641 L150.643,78 L156.418,78 Z M136.167,78 L136.167,45.891 L143.713,45.891 L143.713,40.809 L136.167,40.809 L136.167,37.96 C136.167,33.186 138.246,30.645 142.096,30.645 C143.482,30.645 144.483,30.953 145.407,31.492 L146.87,27.103 C145.33,26.256 143.405,25.871 141.172,25.871 C134.781,25.871 130.392,30.26 130.392,37.96 L130.392,40.809 L124.232,40.809 L124.232,45.891 L130.392,45.891 L130.392,78 L136.167,78 Z M156.418,78 L156.418,26.641 L150.643,26.641 L150.643,78 L156.418,78 Z M178.902,78.924 C183.907,78.924 188.219,77.153 191.222,73.765 L191.222,78 L196.997,78 L196.997,52.436 C196.997,43.427 190.529,39.885 182.598,39.885 C176.515,39.885 171.741,41.887 167.737,46.045 L170.432,50.049 C173.743,46.43 177.362,44.89 181.828,44.89 C187.218,44.89 191.222,47.739 191.222,52.667 L191.222,59.366 C188.219,55.978 183.984,54.361 178.902,54.361 C172.588,54.361 165.966,58.211 165.966,66.604 C165.966,74.689 172.665,78.924 178.902,78.924 Z M181.058,74.766 C175.591,74.766 171.818,71.378 171.818,66.604 C171.818,61.907 175.591,58.519 181.058,58.519 C185.062,58.519 188.989,60.059 191.222,63.062 L191.222,70.146 C188.989,73.226 185.062,74.766 181.058,74.766 Z M223.562,93.092 C232.648,93.092 241.349,89.242 241.349,77.461 L241.349,40.809 L235.574,40.809 L235.574,46.43 C232.571,42.349 228.028,39.885 223.023,39.885 C213.244,39.885 206.468,47.277 206.468,59.212 C206.468,71.224 213.321,78.462 223.023,78.462 C228.259,78.462 232.802,75.613 235.574,71.84 L235.574,77.461 C235.574,85.315 229.722,88.318 223.562,88.318 C218.249,88.318 214.553,86.932 211.473,83.313 L208.547,87.471 C213.013,91.86 217.325,93.092 223.562,93.092 Z M224.486,73.303 C216.94,73.303 212.474,67.374 212.474,59.212 C212.474,50.973 216.94,45.044 224.486,45.044 C229.029,45.044 233.495,47.816 235.574,50.973 L235.574,67.297 C233.495,70.531 229.029,73.303 224.486,73.303 Z M267.837,93.092 C276.923,93.092 285.624,89.242 285.624,77.461 L285.624,40.809 L279.849,40.809 L279.849,46.43 C276.846,42.349 272.303,39.885 267.298,39.885 C257.519,39.885 250.743,47.277 250.743,59.212 C250.743,71.224 257.596,78.462 267.298,78.462 C272.534,78.462 277.077,75.613 279.849,71.84 L279.849,77.461 C279.849,85.315 273.997,88.318 267.837,88.318 C262.524,88.318 258.828,86.932 255.748,83.313 L252.822,87.471 C257.288,91.86 261.6,93.092 267.837,93.092 Z M268.761,73.303 C261.215,73.303 256.749,67.374 256.749,59.212 C256.749,50.973 261.215,45.044 268.761,45.044 C273.304,45.044 277.77,47.816 279.849,50.973 L279.849,67.297 C277.77,70.531 273.304,73.303 268.761,73.303 Z M314.037,78.924 C320.043,78.924 325.048,76.845 328.821,73.149 L326.049,69.376 C323.046,72.456 318.811,74.15 314.499,74.15 C306.491,74.15 301.64,68.298 301.178,61.291 L331.208,61.291 L331.208,59.828 C331.208,48.663 324.586,39.885 313.344,39.885 C302.718,39.885 295.018,48.586 295.018,59.366 C295.018,70.993 302.949,78.924 314.037,78.924 Z M325.51,56.979 L301.101,56.979 C301.409,51.358 305.336,44.659 313.267,44.659 C321.737,44.659 325.433,51.512 325.51,56.979 Z M346.3,78 L346.3,51.666 C347.994,48.663 352.845,45.737 356.464,45.737 C357.311,45.737 358.004,45.814 358.697,45.891 L358.697,39.962 C353.615,39.962 349.303,42.888 346.3,46.738 L346.3,40.809 L340.525,40.809 L340.525,78 L346.3,78 Z" id="fflagger" fill="#FFFFFF" fill-rule="nonzero"></path>
|
||||
<g id="flags" transform="translate(0.036697, 0.500000)" fill="#FFFFFF">
|
||||
<path d="M53.9358922,0.7 L53.9361614,0.7149 L53.9361614,0.7149 L53.9369368,0.9336 C53.9370203,0.972 53.9371029,1.015 53.9371847,1.0625 L53.9378977,1.6088 C53.9379744,1.6824 53.9380503,1.7602 53.9381254,1.8421 L53.9389868,3.0153 C53.9390554,3.1284 53.9391232,3.2452 53.9391903,3.3656 L53.9399577,4.9768 C53.9400186,5.1244 53.9400788,5.2752 53.9401383,5.4291 L53.9409762,7.9576 C53.9410285,8.14 53.9410802,8.325 53.9411311,8.5125 L53.9419772,12.1359 C53.9420204,12.3498 53.9420629,12.5656 53.9421048,12.7832 L53.9429968,18.3 C53.9430294,18.54 53.9430615,18.781 53.943093,19.0229 L53.943952,27.1992 C53.9439728,27.4488 53.9439933,27.6982 53.9440133,27.9473 L53.9449541,50.7 L53.9449541,50.7 C53.3879217,50.7014777 52.830488,50.538921 52.3437254,50.211951 L19.6313575,28.2303499 C19.498497,28.1410415 19.375601,28.0433533 19.2626695,27.9385428 L1.40077569,39.7 C-0.466925231,38.5321603 -0.466925231,35.903287 1.40077569,34.7364344 L33.206,14.047 L52.3437254,1.18768595 C52.8278484,0.862489056 53.3818782,0.7 53.9358922,0.7 Z" id="Combined-Shape"></path>
|
||||
<path d="M53.9449541,53.7 C54.518545,53.6973849 55.0927551,53.8599359 55.5939898,54.1878202 L89.1239541,76.1279689 L105.632086,65.7 C107.358112,66.8668656 107.358112,69.4957682 105.632086,70.663621 L73.3882295,91.6036587 C73.3686858,91.6168729 73.348778,91.6191194 73.3286088,91.6113313 L55.5939898,103.212312 C55.1094503,103.529275 54.5567157,103.691735 54.0022691,103.7 L54.0020013,103.4664 C54.0019573,103.428 54.001908,103.385 54.0018535,103.3375 L54.0009599,102.5579 C54.000866,102.476 54.0007674,102.39 54.0006643,102.3 L53.9999912,101.7128 C53.9953913,97.7 53.9845014,88.2 53.9736116,78.7 L53.9718931,77.2008 C53.9627374,69.2136 53.9538164,61.4312 53.9488864,57.1304 L53.9480097,56.3656 C53.9475957,56.0044 53.9472188,55.6756 53.9468821,55.3819 L53.9459959,54.6088 C53.9459115,54.5352 53.945832,54.4658 53.9457573,54.4007 L53.9449541,53.7 L53.9449541,53.7 Z" id="Combined-Shape"></path>
|
||||
<g id="Group-Copy" transform="translate(17.363303, 0.000000)">
|
||||
<path d="M40.0825271,2.57811824 C39.3101975,2.18406772 37.9113821,0.772333321 36.5592679,0.815362703 C35.3879258,0.815362703 34.9298365,1.30862747 33.0353111,2.57811824 C35.6703059,3.73059649 45.4272614,7.16970562 48.1569327,7.9404 C43.8145304,5.00479909 41.1230619,3.21737183 40.0825271,2.57811824 Z" id="Fill-5"></path>
|
||||
<path d="M29.6177773,4.85830684 L26.6147653,6.81885893 C29.4750473,8.76729329 32.2115554,10.2845904 34.8242897,11.3707502 C40.1341913,13.5781702 46.8841749,14.9995752 48.423617,15.3807663 C57.1621923,17.5447908 65.4157347,19.5875337 72.0525009,26.2540122 C72.3898283,26.5917965 72.7061975,26.9365971 73.0195726,27.2824 C73.7002154,25.9763676 73.358896,24.2523647 71.9976104,23.3643028 L58.8667933,14.7893932 C55.6791495,13.7329403 52.4316251,12.9250645 49.222025,12.1312213 C46.1950608,11.3814806 41.0779702,10.0491921 38.2156776,9.13005801 C36.3074826,8.51730196 33.4415158,7.0933849 29.6177773,4.85830684 Z" id="Fill-7"></path>
|
||||
<path d="M29.7315665,14.094497 C27.5581473,13.0954401 25.1789914,11.566935 22.5940987,9.50898164 L19.7614089,11.4291886 C22.680354,13.872933 25.1682837,15.5953444 27.225198,16.5964226 C30.3105695,18.09804 42.0831903,21.3149916 42.8121204,21.4949169 C51.5552876,23.6520212 59.5365954,25.256157 66.1778478,31.9045231 C66.1888316,31.9163913 68.9772132,30.2313417 68.797477,30.052416 C61.5001876,22.7464498 52.4120302,20.425361 43.6109479,18.253263 C42.6064223,18.005366 32.9916953,15.5930823 29.7315665,14.094497 Z" id="Fill-11"></path>
|
||||
<path d="M40.2748943,27.6858128 C47.2416777,29.4577639 53.792549,31.5762923 59.3417736,36.4444 L62.2704462,34.569277 C55.9296207,28.6976319 48.8074918,25.8624309 40.7862587,24.3617515 C33.595662,23.0164746 28.8766311,21.3487752 23.507058,19.2459776 C19.9273426,17.8441125 17.1081118,16.3021039 15.0493654,14.6199518 L12.1044223,16.5060931 C15.496129,19.1544049 18.552383,21.0412683 21.2731845,22.1666833 C24.8656838,23.6526619 31.1995871,25.4923718 40.2748943,27.6858128 Z" id="Fill-17"></path>
|
||||
<path d="M5.18885131,21.1343855 C5.29067424,21.2373258 5.38333311,21.3442637 5.48821073,21.4462046 C12.9304487,28.7509644 21.8300234,30.8575975 30.8057147,33.0293369 C38.5788773,34.9092456 45.6427477,36.4683588 51.8987485,41.3005539 L54.8844037,39.3547126 C47.8362204,33.5300936 39.7691873,31.7600736 31.6202982,29.7892176 C22.7942865,27.6534573 14.8355558,25.7666967 8.09895067,19.2774634 L5.18885131,21.1343855 Z" id="Fill-19"></path>
|
||||
<path d="M1.86538962,23.4720365 C0.558922248,24.8286618 0.712329392,27.1676708 2.35067758,28.271683 L12.2679982,34.9570906 C16.6576484,36.8407725 20.0248373,37.7569569 24.5388174,38.9108681 C31.5855194,40.7113852 38.2525371,42.1959537 44.0850166,46.38226 L46.9264812,44.4396723 C40.2948809,39.2709822 32.8228032,37.452366 25.3399436,35.5395764 C16.5616459,33.2962069 9.49263239,31.439221 2.82393361,24.5251104 C2.49004747,24.178937 2.17621456,23.8265263 1.86538962,23.4720365 Z" id="Fill-21"></path>
|
||||
<path d="M34.1645854,49.6645268 C34.893506,50.0634031 35.1425612,50.5086988 36.1796702,50.7 C36.9305233,50.7 37.7585832,50.659873 38.4352738,50.23418 L40.0920678,49.1926318 C34.7693674,45.7494414 29.2447004,43.7586502 23.3471124,42.3058883 L34.1645854,49.6645268 Z" id="Fill-23"></path>
|
||||
</g>
|
||||
<g id="Group-Copy-2" transform="translate(17.363303, 53.000000)">
|
||||
<path d="M40.0825271,2.57811824 C39.3101975,2.18406772 37.9113821,0.772333321 36.5592679,0.815362703 C35.3879258,0.815362703 34.9298365,1.30862747 33.0353111,2.57811824 C35.6703059,3.73059649 45.4272614,7.16970562 48.1569327,7.9404 C43.8145304,5.00479909 41.1230619,3.21737183 40.0825271,2.57811824 Z" id="Fill-5"></path>
|
||||
<path d="M29.6177773,4.85830684 L26.6147653,6.81885893 C29.4750473,8.76729329 32.2115554,10.2845904 34.8242897,11.3707502 C40.1341913,13.5781702 46.8841749,14.9995752 48.423617,15.3807663 C57.1621923,17.5447908 65.4157347,19.5875337 72.0525009,26.2540122 C72.3898283,26.5917965 72.7061975,26.9365971 73.0195726,27.2824 C73.7002154,25.9763676 73.358896,24.2523647 71.9976104,23.3643028 L58.8667933,14.7893932 C55.6791495,13.7329403 52.4316251,12.9250645 49.222025,12.1312213 C46.1950608,11.3814806 41.0779702,10.0491921 38.2156776,9.13005801 C36.3074826,8.51730196 33.4415158,7.0933849 29.6177773,4.85830684 Z" id="Fill-7"></path>
|
||||
<path d="M29.7315665,14.094497 C27.5581473,13.0954401 25.1789914,11.566935 22.5940987,9.50898164 L19.7614089,11.4291886 C22.680354,13.872933 25.1682837,15.5953444 27.225198,16.5964226 C30.3105695,18.09804 42.0831903,21.3149916 42.8121204,21.4949169 C51.5552876,23.6520212 59.5365954,25.256157 66.1778478,31.9045231 C66.1888316,31.9163913 68.9772132,30.2313417 68.797477,30.052416 C61.5001876,22.7464498 52.4120302,20.425361 43.6109479,18.253263 C42.6064223,18.005366 32.9916953,15.5930823 29.7315665,14.094497 Z" id="Fill-11"></path>
|
||||
<path d="M40.2748943,27.6858128 C47.2416777,29.4577639 53.792549,31.5762923 59.3417736,36.4444 L62.2704462,34.569277 C55.9296207,28.6976319 48.8074918,25.8624309 40.7862587,24.3617515 C33.595662,23.0164746 28.8766311,21.3487752 23.507058,19.2459776 C19.9273426,17.8441125 17.1081118,16.3021039 15.0493654,14.6199518 L12.1044223,16.5060931 C15.496129,19.1544049 18.552383,21.0412683 21.2731845,22.1666833 C24.8656838,23.6526619 31.1995871,25.4923718 40.2748943,27.6858128 Z" id="Fill-17"></path>
|
||||
<path d="M5.18885131,21.1343855 C5.29067424,21.2373258 5.38333311,21.3442637 5.48821073,21.4462046 C12.9304487,28.7509644 21.8300234,30.8575975 30.8057147,33.0293369 C38.5788773,34.9092456 45.6427477,36.4683588 51.8987485,41.3005539 L54.8844037,39.3547126 C47.8362204,33.5300936 39.7691873,31.7600736 31.6202982,29.7892176 C22.7942865,27.6534573 14.8355558,25.7666967 8.09895067,19.2774634 L5.18885131,21.1343855 Z" id="Fill-19"></path>
|
||||
<path d="M1.86538962,23.4720365 C0.558922248,24.8286618 0.712329392,27.1676708 2.35067758,28.271683 L12.2679982,34.9570906 C16.6576484,36.8407725 20.0248373,37.7569569 24.5388174,38.9108681 C31.5855194,40.7113852 38.2525371,42.1959537 44.0850166,46.38226 L46.9264812,44.4396723 C40.2948809,39.2709822 32.8228032,37.452366 25.3399436,35.5395764 C16.5616459,33.2962069 9.49263239,31.439221 2.82393361,24.5251104 C2.49004747,24.178937 2.17621456,23.8265263 1.86538962,23.4720365 Z" id="Fill-21"></path>
|
||||
<path d="M34.1645854,49.6645268 C34.893506,50.0634031 35.1425612,50.5086988 36.1796702,50.7 C36.9305233,50.7 37.7585832,50.659873 38.4352738,50.23418 L40.0920678,49.1926318 C34.7693674,45.7494414 29.2447004,43.7586502 23.3471124,42.3058883 L34.1645854,49.6645268 Z" id="Fill-23"></path>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 13 KiB |
BIN
docs/logo/flagger-vertical-white@2x.png
Normal file
|
After Width: | Height: | Size: 21 KiB |
@@ -1,71 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 16.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="900px" height="900px" viewBox="0 0 900 900" enable-background="new 0 0 900 900" xml:space="preserve">
|
||||
<g>
|
||||
<defs>
|
||||
<rect id="SVGID_1_" width="900" height="900"/>
|
||||
</defs>
|
||||
<clipPath id="SVGID_2_">
|
||||
<use xlink:href="#SVGID_1_" overflow="visible"/>
|
||||
</clipPath>
|
||||
<path clip-path="url(#SVGID_2_)" fill="#33324B" d="M356.003,268.915L586.001,63.471c-18.262-14.35-38.76-25.978-60.934-34.188
|
||||
L356.003,180.298V268.915z"/>
|
||||
<path clip-path="url(#SVGID_2_)" fill="#33324B" d="M289.914,239.333l-62.307,55.655c5.674,23.087,14.884,44.774,27.05,64.454
|
||||
l35.257-31.493V239.333z"/>
|
||||
<path clip-path="url(#SVGID_2_)" fill="#40C6F1" d="M479.023,70.412V17.631c-10.554-1.513-21.329-2.338-32.302-2.338
|
||||
c-11.484,0-22.764,0.871-33.787,2.527v111.626L479.023,70.412z"/>
|
||||
<path clip-path="url(#SVGID_2_)" fill="#40C6F1" d="M479.023,380.863V159.029l-66.089,59.033v246.046
|
||||
c11.023,1.655,22.303,2.526,33.787,2.526c13.449,0,26.601-1.244,39.404-3.5l176.98-158.086c6.01-20.321,9.287-41.815,9.287-64.085
|
||||
c0-10.488-0.774-20.79-2.159-30.898L479.023,380.863z"/>
|
||||
<path clip-path="url(#SVGID_2_)" fill="#F04E27" d="M479.023,315.734l177.305-158.376c-8.446-21.157-19.978-40.739-34.079-58.175
|
||||
L479.023,227.118V315.734z"/>
|
||||
<path clip-path="url(#SVGID_2_)" fill="#F04E27" d="M412.935,286.152l-56.931,50.854V34.328
|
||||
c-24.657,10.841-46.992,25.96-66.09,44.426v324.42c14.897,14.403,31.742,26.797,50.147,36.688l72.874-65.094V286.152z"/>
|
||||
<polygon clip-path="url(#SVGID_2_)" fill="#33324B" points="175.804,603.774 207.413,485.167 249.859,485.167 202.897,650.136
|
||||
152.926,650.136 124.93,539.054 96.933,650.136 46.961,650.136 0,485.167 42.446,485.167 74.055,603.774 105.362,485.167
|
||||
144.497,485.167 "/>
|
||||
<path clip-path="url(#SVGID_2_)" fill="#33324B" d="M406.409,595.948c-4.816,32.812-30.103,56.293-73.452,56.293
|
||||
c-46.059,0-80.076-27.695-80.076-83.686c0-56.293,35.222-85.495,80.076-85.495c49.67,0,75.861,36.426,75.861,85.191v8.73H295.025
|
||||
c0,18.365,7.526,41.543,37.328,41.543c16.558,0,29.502-8.127,32.814-23.479L406.409,595.948z M365.77,547.784
|
||||
c-1.506-22.88-16.256-31.308-33.114-31.308c-19.266,0-34.017,11.738-36.124,31.308H365.77z"/>
|
||||
<path clip-path="url(#SVGID_2_)" fill="#33324B" d="M530.318,543.269v-5.721c0-12.944-5.42-21.374-29.803-21.374
|
||||
c-30.404,0-31.308,16.859-31.308,22.58h-39.134c0-24.386,10.234-55.693,71.646-55.693c58.702,0,69.238,29.201,69.238,52.982v90.912
|
||||
c0,6.624,0.301,12.041,0.903,16.256l1.204,6.925h-41.544v-16.557c-11.739,11.738-27.995,18.662-51.176,18.662
|
||||
c-32.511,0-57.196-18.965-57.196-51.777c0-37.93,35.824-46.059,50.273-48.465L530.318,543.269z M530.318,574.275l-15.955,2.406
|
||||
c-8.73,1.506-19.267,3.011-25.588,4.215c-6.925,1.205-12.945,2.71-17.46,6.321c-4.215,3.313-6.321,7.829-6.321,13.546
|
||||
c0,4.818,1.806,19.87,24.385,19.87c13.243,0,24.984-4.816,31.307-11.14c8.128-8.127,9.633-18.362,9.633-26.49V574.275z"/>
|
||||
<polygon clip-path="url(#SVGID_2_)" fill="#33324B" points="687.764,650.136 632.675,650.136 578.488,485.167 623.041,485.167
|
||||
660.972,611.303 699.203,485.167 742.552,485.167 "/>
|
||||
<path clip-path="url(#SVGID_2_)" fill="#33324B" d="M897.591,595.948c-4.816,32.812-30.103,56.293-73.452,56.293
|
||||
c-46.059,0-80.075-27.695-80.075-83.686c0-56.293,35.222-85.495,80.075-85.495c49.67,0,75.861,36.426,75.861,85.191v8.73H786.208
|
||||
c0,18.365,7.526,41.543,37.328,41.543c16.558,0,29.502-8.127,32.812-23.479L897.591,595.948z M856.952,547.784
|
||||
c-1.506-22.88-16.256-31.308-33.114-31.308c-19.266,0-34.017,11.738-36.124,31.308H856.952z"/>
|
||||
</g>
|
||||
<g id="flagger1">
|
||||
<path id="fagger" fill="#566991" d="M138.27,737.32h-30.625v113.925H87.8V737.32H64.77v-16.905H87.8v-22.05
|
||||
c0-18.62,11.515-29.89,32.095-29.89c8.575,0,20.09,0.489,20.09,0.489v17.15c-1.225,0-10.535-0.245-13.965-0.245
|
||||
c-10.535,0-18.375,1.225-18.375,14.945v19.6h30.625V737.32z M179.675,851.245h-20.09v-181.3h20.09V851.245z M293.519,800.285
|
||||
V785.34c0,0-28.42,3.675-42.875,5.88c-13.965,1.96-25.235,6.615-25.235,22.051c0,12.984,8.82,22.784,26.705,22.784
|
||||
C276.858,836.055,293.519,821.845,293.519,800.285z M239.618,776.521c12.495-2.45,53.9-7.351,53.9-7.351v-7.104
|
||||
c0-18.13-7.84-26.705-30.87-26.705c-24.745,0-31.605,11.27-32.585,24.5h-20.09c0-16.905,9.555-41.16,52.185-41.16
|
||||
c44.835,0,51.45,23.275,51.45,44.1v67.375c0,6.125,0.245,15.926,1.715,21.07h-20.335c0,0-0.49-7.105-0.49-17.64
|
||||
c-6.37,8.33-19.11,19.354-45.815,19.354c-25.235,0-44.1-14.7-44.1-39.2C204.583,786.565,226.388,779.215,239.618,776.521z
|
||||
M338.271,782.646c0-42.386,24.99-63.945,55.86-63.945c22.295,0,36.015,10.535,40.425,20.58v-18.865h19.845V850.51
|
||||
c0,25.235-12.25,49.49-58.31,49.49c-34.3,0-55.125-13.72-55.86-42.63h20.335c0,14.945,10.535,25.97,36.015,25.97
|
||||
c29.399,0,37.729-13.475,37.729-35.035v-22.784c-4.41,10.045-18.62,20.58-40.915,20.58
|
||||
C362.527,846.101,338.271,825.03,338.271,782.646z M434.312,782.4c0-33.32-14.7-46.55-38.22-46.55
|
||||
c-20.825,0-37.485,11.76-37.485,46.305s16.66,46.795,37.485,46.795C419.611,828.95,434.312,815.72,434.312,782.4z M478.575,782.646
|
||||
c0-42.386,24.99-63.945,55.859-63.945c22.296,0,36.016,10.535,40.426,20.58v-18.865h19.845V850.51
|
||||
c0,25.235-12.25,49.49-58.311,49.49c-34.3,0-55.125-13.72-55.859-42.63h20.335c0,14.945,10.535,25.97,36.015,25.97
|
||||
c29.4,0,37.73-13.475,37.73-35.035v-22.784c-4.41,10.045-18.62,20.58-40.915,20.58C502.83,846.101,478.575,825.03,478.575,782.646z
|
||||
M574.615,782.4c0-33.32-14.7-46.55-38.221-46.55c-20.824,0-37.484,11.76-37.484,46.305s16.66,46.795,37.484,46.795
|
||||
C559.915,828.95,574.615,815.72,574.615,782.4z M714.674,806.165l20.335,0.245c-2.695,23.03-18.62,46.55-56.105,46.55
|
||||
c-34.79,0-60.025-23.765-60.025-66.885c0-40.67,24.99-67.375,59.78-67.375c36.75,0,57.085,27.439,57.085,70.56h-96.285
|
||||
c0.49,24.745,10.78,46.795,39.69,46.795C700.463,836.055,712.958,822.825,714.674,806.165z M640.193,773.335h73.745
|
||||
c-1.96-27.685-17.885-37.729-35.771-37.729C658.078,735.605,642.644,749.08,640.193,773.335z M829.497,740.995h-8.82
|
||||
c-23.521,0-39.936,8.085-39.936,38.955v71.295h-20.09v-130.83h19.846v22.54c8.574-16.66,25.97-22.54,39.689-22.54h9.311V740.995z"
|
||||
/>
|
||||
</g>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 6.3 KiB |
|
Before Width: | Height: | Size: 3.0 KiB |
21
go.mod
@@ -1,21 +1,20 @@
|
||||
module github.com/fluxcd/flagger
|
||||
|
||||
go 1.14
|
||||
go 1.16
|
||||
|
||||
require (
|
||||
github.com/Masterminds/semver/v3 v3.0.3
|
||||
github.com/aws/aws-sdk-go v1.36.20
|
||||
github.com/aws/aws-sdk-go v1.37.32
|
||||
github.com/davecgh/go-spew v1.1.1
|
||||
github.com/go-logr/zapr v0.3.0
|
||||
github.com/google/go-cmp v0.5.2
|
||||
github.com/prometheus/client_golang v1.5.1
|
||||
github.com/stretchr/testify v1.6.1
|
||||
github.com/google/go-cmp v0.5.5
|
||||
github.com/prometheus/client_golang v1.11.0
|
||||
github.com/stretchr/testify v1.7.0
|
||||
go.uber.org/zap v1.14.1
|
||||
golang.org/x/tools v0.1.0 // indirect
|
||||
gopkg.in/h2non/gock.v1 v1.0.15
|
||||
k8s.io/api v0.20.1
|
||||
k8s.io/apimachinery v0.20.1
|
||||
k8s.io/client-go v0.20.1
|
||||
k8s.io/code-generator v0.20.1
|
||||
k8s.io/klog/v2 v2.4.0
|
||||
k8s.io/api v0.21.1
|
||||
k8s.io/apimachinery v0.21.1
|
||||
k8s.io/client-go v0.21.1
|
||||
k8s.io/code-generator v0.21.1
|
||||
k8s.io/klog/v2 v2.8.0
|
||||
)
|
||||
|
||||
191
go.sum
@@ -1,6 +1,5 @@
|
||||
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
|
||||
cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
|
||||
cloud.google.com/go v0.38.0 h1:ROfEUZz+Gh5pa62DJWXSaonyu3StP6EA6lPEXPI6mCo=
|
||||
cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU=
|
||||
cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU=
|
||||
cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY=
|
||||
@@ -24,11 +23,9 @@ cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0Zeo
|
||||
cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk=
|
||||
dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
|
||||
github.com/Azure/go-autorest v14.2.0+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24=
|
||||
github.com/Azure/go-autorest/autorest v0.11.1/go.mod h1:JFgpikqFJ/MleTTxwepExTKnFUKKszPS8UavbQYUMuw=
|
||||
github.com/Azure/go-autorest/autorest/adal v0.9.0/go.mod h1:/c022QCutn2P7uY+/oQWWNcK9YU+MH96NgK+jErpbcg=
|
||||
github.com/Azure/go-autorest/autorest v0.11.12/go.mod h1:eipySxLmqSyC5s5k1CLupqet0PSENBEDP93LQ9a8QYw=
|
||||
github.com/Azure/go-autorest/autorest/adal v0.9.5/go.mod h1:B7KF7jKIeC9Mct5spmyCB/A8CG/sEz1vwIRGv/bbw7A=
|
||||
github.com/Azure/go-autorest/autorest/date v0.3.0/go.mod h1:BI0uouVdmngYNUzGWeSYnokU+TrmwEsOqdt8Y6sso74=
|
||||
github.com/Azure/go-autorest/autorest/mocks v0.4.0/go.mod h1:LTp+uSrOhSkaKrUy935gNZuuIPPVsHlr9DSOxSayd+k=
|
||||
github.com/Azure/go-autorest/autorest/mocks v0.4.1/go.mod h1:LTp+uSrOhSkaKrUy935gNZuuIPPVsHlr9DSOxSayd+k=
|
||||
github.com/Azure/go-autorest/logger v0.2.0/go.mod h1:T9E3cAhj2VqvPOtCYAvby9aBXkZmbF5NWuPV8+WeEW8=
|
||||
github.com/Azure/go-autorest/tracing v0.6.0/go.mod h1:+vhtPC754Xsa23ID7GlGsrdKBpUA79WCAKPPZVC2DeU=
|
||||
@@ -44,11 +41,11 @@ github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuy
|
||||
github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
|
||||
github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
|
||||
github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
|
||||
github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho=
|
||||
github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY=
|
||||
github.com/aws/aws-sdk-go v1.36.20 h1:IQr81xegCd40Xq21ZjFToKw9llaCzO1LRE75CgnvJ1Q=
|
||||
github.com/aws/aws-sdk-go v1.36.20/go.mod h1:hcU610XS61/+aQV88ixoOzUoG7v3b31pl2zKMmprdro=
|
||||
github.com/aws/aws-sdk-go v1.37.32 h1:gLEASuX1phzqb00APUZU/xVIqf13IoA250RlgQ9rz28=
|
||||
github.com/aws/aws-sdk-go v1.37.32/go.mod h1:hcU610XS61/+aQV88ixoOzUoG7v3b31pl2zKMmprdro=
|
||||
github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
|
||||
github.com/beorn7/perks v1.0.0 h1:HWo1m869IqiPhD389kmkxeTalrjNbbJTC8LXupb+sl0=
|
||||
github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8=
|
||||
github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
|
||||
github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
|
||||
@@ -59,11 +56,10 @@ github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWR
|
||||
github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI=
|
||||
github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU=
|
||||
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
|
||||
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
|
||||
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
|
||||
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||
github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ=
|
||||
github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96/go.mod h1:Qh8CwZgvJUkLughtfhJv5dyTYa91l1fOUCrgjqmcifM=
|
||||
github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE=
|
||||
github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc=
|
||||
github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs=
|
||||
@@ -75,23 +71,19 @@ github.com/evanphx/json-patch v4.9.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLi
|
||||
github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k=
|
||||
github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I=
|
||||
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
|
||||
github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4=
|
||||
github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
|
||||
github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
|
||||
github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU=
|
||||
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
|
||||
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
|
||||
github.com/go-kit/kit v0.8.0 h1:Wz+5lgoB0kkuqLEc6NVmwRknTKP6dTGbSqvhZtBI/j0=
|
||||
github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
|
||||
github.com/go-kit/kit v0.9.0 h1:wDJmvq38kDhkVxi50ni9ykkdUr1PKgqKOoi01fa0Mdk=
|
||||
github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
|
||||
github.com/go-logfmt/logfmt v0.3.0 h1:8HUsc87TaSWLKwrnumgC8/YconD2fJQsRJAsWaPg2ic=
|
||||
github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY=
|
||||
github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE=
|
||||
github.com/go-logfmt/logfmt v0.4.0 h1:MP4Eh7ZCb31lleYCFuwm0oe4/YGak+5l1vA2NOE80nA=
|
||||
github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk=
|
||||
github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A=
|
||||
github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas=
|
||||
github.com/go-logr/logr v0.2.0 h1:QvGt2nLcHH0WK9orKa+ppBPAxREcH364nPUedEpK0TY=
|
||||
github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU=
|
||||
github.com/go-logr/logr v0.4.0 h1:K7/B1jt6fIBQVd4Owv2MqGQClcgf0R266+7C/QjRcLc=
|
||||
github.com/go-logr/logr v0.4.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU=
|
||||
github.com/go-logr/zapr v0.3.0 h1:iyiCRZ29uPmbO7mWIjOEiYMXrTxZWTyK4tCatLyGpUY=
|
||||
github.com/go-logr/zapr v0.3.0/go.mod h1:qhKdvif7YF5GI9NWEpyxTSSBdGmzkNguibrdCNVPunU=
|
||||
github.com/go-openapi/jsonpointer v0.19.2/go.mod h1:3akKfEdA7DF1sugOqz1dVQHBcuDBPKZGEoHC/NkiQRg=
|
||||
@@ -99,13 +91,13 @@ github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34
|
||||
github.com/go-openapi/jsonreference v0.19.2/go.mod h1:jMjeRr2HHw6nAVajTXJ4eiUwohSTlpa0o73RUL1owJc=
|
||||
github.com/go-openapi/jsonreference v0.19.3/go.mod h1:rjx6GuL8TTa9VaixXglHmQmIL98+wF9xc8zWvFonSJ8=
|
||||
github.com/go-openapi/spec v0.19.3/go.mod h1:FpwSN1ksY1eteniUU7X0N/BgJ7a4WvBFVA8Lj9mJglo=
|
||||
github.com/go-openapi/spec v0.19.5/go.mod h1:Hm2Jr4jv8G1ciIAo+frC/Ft+rR2kQDh8JHKHb3gWUSk=
|
||||
github.com/go-openapi/swag v0.19.2/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk=
|
||||
github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk=
|
||||
github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
|
||||
github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
|
||||
github.com/gogo/protobuf v1.3.1 h1:DqDEcV5aeaTmdFBePNpYsp3FlcVH/2ISVVM9Qf8PSls=
|
||||
github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o=
|
||||
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58=
|
||||
github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
|
||||
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
|
||||
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
|
||||
github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
|
||||
github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
|
||||
@@ -117,9 +109,7 @@ github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFU
|
||||
github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=
|
||||
github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=
|
||||
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
||||
github.com/golang/protobuf v1.3.1 h1:YF8+flBXS5eO826T4nzqPrxfhQThhXl0YzfuUPu4SBg=
|
||||
github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
||||
github.com/golang/protobuf v1.3.2 h1:6nsPYzhq5kReh6QImI3k5qWzO4PEbvbIW2cwSfR/6xs=
|
||||
github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
||||
github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
|
||||
github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
|
||||
@@ -129,20 +119,20 @@ github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrU
|
||||
github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
|
||||
github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
|
||||
github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
|
||||
github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
|
||||
github.com/golang/protobuf v1.4.3 h1:JjCZWpVbqXDqFVmTfYWEVTMIYrL/NPdPSCHPJ0T/raM=
|
||||
github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
|
||||
github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
|
||||
github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
|
||||
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
|
||||
github.com/google/go-cmp v0.3.0 h1:crn/baboCvb5fXaQ0IJ1SGTsTVrWpDsCWC8EGETZijY=
|
||||
github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
|
||||
github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
|
||||
github.com/google/go-cmp v0.4.0 h1:xsAVV57WRhGj6kEIi8ReJzQlHHqcBYCElAvkovg3B/4=
|
||||
github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||
github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||
github.com/google/go-cmp v0.5.2 h1:X2ev0eStA3AbceY54o37/0PQ/UWqKEiiO2dKL5OPaFM=
|
||||
github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||
github.com/google/gofuzz v1.0.0 h1:A8PeW59pxE9IoFRqBp37U+mSNaQoZ46F1f0f863XSXw=
|
||||
github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||
github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU=
|
||||
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
|
||||
github.com/google/gofuzz v1.1.0 h1:Hsa8mG0dQ46ij8Sl2AYJDUv1oA9/d6Vk+3LG99Oe02g=
|
||||
github.com/google/gofuzz v1.1.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
|
||||
@@ -153,7 +143,6 @@ github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hf
|
||||
github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
|
||||
github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
|
||||
github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
|
||||
github.com/google/uuid v1.1.1 h1:Gkbcsh/GbpXz7lPftLA3P6TYMwjCLYm83jiFQZF/3gY=
|
||||
github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
||||
github.com/google/uuid v1.1.2 h1:EVhdT+1Kseyi1/pUmXKaFxYsDNy9RQYkMWRH68J/W7Y=
|
||||
github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
||||
@@ -161,6 +150,7 @@ github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+
|
||||
github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk=
|
||||
github.com/googleapis/gnostic v0.4.1 h1:DLJCy1n/vrD4HPjOvYcT8aYQXpPIzoRZONaYwyycI+I=
|
||||
github.com/googleapis/gnostic v0.4.1/go.mod h1:LRhVm6pbyptWbWbuZ38d1eyptfvIytN3ir6b65WBswg=
|
||||
github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
|
||||
github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA=
|
||||
github.com/h2non/parth v0.0.0-20190131123155-b4df798d6542 h1:2VTzZjLZBgl62/EtslCrtky5vbi9dd7HrQPQIx6wqiw=
|
||||
github.com/h2non/parth v0.0.0-20190131123155-b4df798d6542/go.mod h1:Ow0tF8D4Kplbc8s8sSb3V2oUCygFHVp8gC3Dn6U4MNI=
|
||||
@@ -176,33 +166,34 @@ github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9Y
|
||||
github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo=
|
||||
github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8=
|
||||
github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U=
|
||||
github.com/json-iterator/go v1.1.6 h1:MrUvLMLTMxbqFJ9kzlvat/rYZqZnW3u4wkLzWTaFwKs=
|
||||
github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4=
|
||||
github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
|
||||
github.com/json-iterator/go v1.1.9 h1:9yzud/Ht36ygwatGx56VwCZtlI/2AD15T1X2sjSuGns=
|
||||
github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
|
||||
github.com/json-iterator/go v1.1.10 h1:Kz6Cvnvv2wGdaG/V8yMvfkmNiXq9Ya2KUv4rouJJr68=
|
||||
github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
|
||||
github.com/json-iterator/go v1.1.11 h1:uVUAXhF2To8cbw/3xN3pxj6kk7TYKs98NIrTqPlMWAQ=
|
||||
github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
|
||||
github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU=
|
||||
github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk=
|
||||
github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=
|
||||
github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00=
|
||||
github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM=
|
||||
github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
|
||||
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
|
||||
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
|
||||
github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
|
||||
github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc=
|
||||
github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI=
|
||||
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
|
||||
github.com/kr/pretty v0.2.0 h1:s5hAObm+yFO5uHYt5dYjxi2rXrsnmRpJx4OYvIWUaQs=
|
||||
github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
|
||||
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
|
||||
github.com/kr/pty v1.1.5/go.mod h1:9r2w37qlBe7rQ6e1fg1S/9xpWHSnaqNdHD3WcMdbPDA=
|
||||
github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
|
||||
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
|
||||
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
|
||||
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
|
||||
github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
|
||||
github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
|
||||
github.com/mailru/easyjson v0.7.0/go.mod h1:KAzv3t3aY1NaHWoQz1+4F1ccyAH66Jk7yos7ldAVICs=
|
||||
github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU=
|
||||
github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
|
||||
github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
|
||||
github.com/moby/spdystream v0.2.0/go.mod h1:f7i0iNDQJ059oMTcWxx8MA/zKFIuD/lY+0GqbN2Wy8c=
|
||||
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
|
||||
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
|
||||
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
|
||||
@@ -211,9 +202,12 @@ github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9
|
||||
github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
|
||||
github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
|
||||
github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
|
||||
github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
|
||||
github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw=
|
||||
github.com/nbio/st v0.0.0-20140626010706-e9e8d9816f32 h1:W6apQkHrMkS0Muv8G/TipAy/FJl/rCYT0+EuS8+Z0z4=
|
||||
github.com/nbio/st v0.0.0-20140626010706-e9e8d9816f32/go.mod h1:9wM+0iRr9ahx58uYLpLIr5fm8diHn0JbqRycJi6w0Ms=
|
||||
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs=
|
||||
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno=
|
||||
github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
|
||||
github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
|
||||
github.com/onsi/ginkgo v1.11.0 h1:JAKSXpt1YjtLA7YpPiqO9ss6sNXEsPfSGdwN0UHqzrw=
|
||||
@@ -221,7 +215,6 @@ github.com/onsi/ginkgo v1.11.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+
|
||||
github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA=
|
||||
github.com/onsi/gomega v1.7.0 h1:XPnZz8VVBHjVsy1vzJmRwIcSwiUO+JFfrv/xGiigmME=
|
||||
github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
|
||||
github.com/peterbourgon/diskv v2.0.1+incompatible h1:UBdAOUP5p4RWqPBg048CAvpKN+vxiaj6gdUUzhl4XmI=
|
||||
github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU=
|
||||
github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
||||
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
||||
@@ -230,44 +223,41 @@ github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINE
|
||||
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||
github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
|
||||
github.com/prometheus/client_golang v1.0.0 h1:vrDKnkGzuGvhNAL56c7DBz29ZL+KxnoR0x7enabFceM=
|
||||
github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo=
|
||||
github.com/prometheus/client_golang v1.5.1 h1:bdHYieyGlH+6OLEk2YQha8THib30KP0/yD0YH9m6xcA=
|
||||
github.com/prometheus/client_golang v1.5.1/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU=
|
||||
github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M=
|
||||
github.com/prometheus/client_golang v1.11.0 h1:HNkLOAEQMIDv/K+04rukrLx6ch7msSRwf3/SASFAGtQ=
|
||||
github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0=
|
||||
github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
|
||||
github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90 h1:S/YWwWx/RA8rT8tKFRuGUZhuA90OyIBpPCXkcbwU8DE=
|
||||
github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
|
||||
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
|
||||
github.com/prometheus/client_model v0.2.0 h1:uq5h0d+GuxiXLJLNABMgp2qUWDPiLvgCzz2dUR+/W/M=
|
||||
github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
|
||||
github.com/prometheus/common v0.4.1 h1:K0MGApIoQvMw27RTdJkPbr3JZ7DNbtxQNyi5STVM6Kw=
|
||||
github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
|
||||
github.com/prometheus/common v0.9.1 h1:KOMtN28tlbam3/7ZKEYKHhKoJZYYj3gMH4uc62x7X7U=
|
||||
github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4=
|
||||
github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo=
|
||||
github.com/prometheus/common v0.26.0 h1:iMAkS2TDoNWnKM+Kopnx/8tnEStIfpYA0ur0xQzzhMQ=
|
||||
github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc=
|
||||
github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
|
||||
github.com/prometheus/procfs v0.0.2 h1:6LJUbpNm42llc4HRCuvApCSWB/WfhuNo9K98Q9sNGfs=
|
||||
github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
|
||||
github.com/prometheus/procfs v0.0.8 h1:+fpWZdT24pJBiqJdAwYBjPSk+5YmQzYNPYzQsdzLkt8=
|
||||
github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A=
|
||||
github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU=
|
||||
github.com/prometheus/procfs v0.6.0 h1:mxy4L2jP6qMonqmq+aTtOx1ifVWUgG/TAmntgbh3xv4=
|
||||
github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA=
|
||||
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
|
||||
github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
|
||||
github.com/sirupsen/logrus v1.4.2 h1:SPIRibHv4MatM3XXNO2BJeFLZwZ2LvZgfQ5+UNI2im4=
|
||||
github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
|
||||
github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88=
|
||||
github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk=
|
||||
github.com/spf13/pflag v0.0.0-20170130214245-9ff6c6923cff/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
|
||||
github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
|
||||
github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
|
||||
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||
github.com/stretchr/objx v0.2.0 h1:Hbg2NidpLE8veEBkEZTL3CvlkUIVzuU9jDplZO54c48=
|
||||
github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE=
|
||||
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
|
||||
github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q=
|
||||
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
|
||||
github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk=
|
||||
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
|
||||
github.com/stretchr/testify v1.6.1 h1:hDPOHmpOpP40lSULcqw7IrRb/u7w6RpDC9399XyoNd0=
|
||||
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||
github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY=
|
||||
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
|
||||
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
|
||||
go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU=
|
||||
@@ -292,8 +282,9 @@ golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8U
|
||||
golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
||||
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
||||
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
||||
golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0 h1:hb9wdF1z5waM+dSIICn1l0DkLVDT3hqhhQsDNUmHPRE=
|
||||
golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
||||
golang.org/x/crypto v0.0.0-20210220033148-5ea612d1eb83 h1:/ZScEX8SfEmUGRHs0gxpqteO5nfNW6axyZbBdw9A12g=
|
||||
golang.org/x/crypto v0.0.0-20210220033148-5ea612d1eb83/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I=
|
||||
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
||||
golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
||||
golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
|
||||
@@ -312,7 +303,6 @@ golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTk
|
||||
golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
|
||||
golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
|
||||
golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
|
||||
golang.org/x/lint v0.0.0-20190930215403-16217165b5de h1:5hukYrvBGR8/eNkX5mdUezrA6JiaEZDtJb9Ei+1LlBs=
|
||||
golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
|
||||
golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs=
|
||||
golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
|
||||
@@ -322,12 +312,12 @@ golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU
|
||||
golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o=
|
||||
golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc=
|
||||
golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY=
|
||||
golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee h1:WG0RUwxtNT4qqaXX3DPA8zHFNm/D9xaBpxzHt1WcA/E=
|
||||
golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
|
||||
golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
|
||||
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
||||
golang.org/x/mod v0.3.0 h1:RM4zey1++hCTbCVQfnWeKs9/IEsaBLA8vTkd0WVtmH4=
|
||||
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
||||
golang.org/x/mod v0.3.1-0.20200828183125-ce943fd02449 h1:xUIPaMhvROX9dhPvRCenIJtU78+lbEenGbgqB5hfHCQ=
|
||||
golang.org/x/mod v0.3.1-0.20200828183125-ce943fd02449/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
||||
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||
@@ -345,32 +335,30 @@ golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLL
|
||||
golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||
golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||
golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||
golang.org/x/net v0.0.0-20200202094626-16171245cfb2 h1:CCH4IOTTfewWjGOlSp+zGcjutRKlBEZQ6wTn8ozI/nI=
|
||||
golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||
golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||
golang.org/x/net v0.0.0-20200301022130-244492dfa37a h1:GuSPYbZzB5/dcLNCwLQLsg3obCJtX9IJhpXkvY7kzk0=
|
||||
golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||
golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
|
||||
golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
|
||||
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
|
||||
golang.org/x/net v0.0.0-20201110031124-69a78807bb2b h1:uwuIcX0g4Yl1NC5XAz37xsr2lTtcqevgzYNVt49waME=
|
||||
golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
|
||||
golang.org/x/net v0.0.0-20210224082022-3d97a244fca7 h1:OgUuv8lsRpBibGNbSizVwKWlysjaNzmC9gYMhPVfqFM=
|
||||
golang.org/x/net v0.0.0-20210224082022-3d97a244fca7/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
|
||||
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
|
||||
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421 h1:Wo7BWFiOk0QRFMLYMqJGFMd9CgUAcGx7V+qEg/h5IBI=
|
||||
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
|
||||
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45 h1:SVwTIAaPC2U/AvvLNZ2a7OVsmBpC8L5BlwK1whH3hm0=
|
||||
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
|
||||
golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
|
||||
golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d h1:TzXSXBo42m9gQenoE3b9BGiEpg5IG2JkU5FkPIawgtw=
|
||||
golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
|
||||
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f h1:Bl/8QSvNqXvPGPGXa2z5xUTmV7VDcZyvRZ+QQXkXTZQ=
|
||||
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||
golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||
@@ -386,38 +374,43 @@ golang.org/x/sys v0.0.0-20190616124812-15dcb6c0061f/go.mod h1:h1NjWce9XRLGQEsW7w
|
||||
golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20200122134326-e047566fdf82 h1:ywK/j/KkyTHcdyYSZNXGjMwgmDSfjglYZ3vStQ/gSCU=
|
||||
golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20201112073958-5cba982894dd h1:5CtCZbICpIOFdgO940moixOPjc0178IU44m4EjOO5IY=
|
||||
golang.org/x/sys v0.0.0-20201112073958-5cba982894dd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4 h1:myAQVi0cGEoqQVR5POX+8RR2mrocKqNN1hmeMqhX27k=
|
||||
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20210225134936-a50acf3fe073/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40 h1:JWgyZ1qgdTaF3N3oxC+MdTV7qvEEgHo3otj+HB5CM7Q=
|
||||
golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
|
||||
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
||||
golang.org/x/term v0.0.0-20210220032956-6a3ed077a48d h1:SZxvLBoTP5yHO3Frd4z4vrF+DBX9vMVanchswa69toE=
|
||||
golang.org/x/term v0.0.0-20210220032956-6a3ed077a48d/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
||||
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||
golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs=
|
||||
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
|
||||
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||
golang.org/x/text v0.3.4 h1:0YWbFKbhXG/wIiuHDSKpS0Iy7FSA+u45VtBMfQcFTTc=
|
||||
golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
||||
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4 h1:SvFZT6jyqRaOeXpc5h/JSfZenJ2O330aBsf7JfSUXmQ=
|
||||
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
||||
golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
||||
golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e h1:EHBhcS0mlXEAVwNyO2dLfjToGsyY4j24pTs2ScHnX7s=
|
||||
golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
||||
golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba h1:O8mE0/t419eoIwhTFpKVkHiTs/Igowgfkj25AcZrtiE=
|
||||
golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
||||
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||
golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||
golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||
golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
|
||||
golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
|
||||
@@ -434,7 +427,6 @@ golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtn
|
||||
golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
||||
golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
||||
golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
||||
golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5 h1:hKsoRgsbwY1NafxrwTs+k64bikrLBkAgPir1TNCj3Zs=
|
||||
golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
||||
golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
||||
golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
||||
@@ -452,13 +444,12 @@ golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapK
|
||||
golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
|
||||
golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw=
|
||||
golang.org/x/tools v0.0.0-20200505023115-26f46d2f7ef8/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
|
||||
golang.org/x/tools v0.0.0-20200616133436-c1934b75d054 h1:HHeAlu5H9b71C+Fx0K+1dGgVFN1DM1/wz4aoGOA5qS8=
|
||||
golang.org/x/tools v0.0.0-20200616133436-c1934b75d054/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
|
||||
golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
|
||||
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
|
||||
golang.org/x/tools v0.1.0 h1:po9/4sTYwZU9lPhi1tOrb4hCv3qrhiQ77LZfGa2OjwY=
|
||||
golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0=
|
||||
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4=
|
||||
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE=
|
||||
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
@@ -473,9 +464,7 @@ google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/
|
||||
google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
|
||||
google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
|
||||
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
|
||||
google.golang.org/appengine v1.4.0 h1:/wp5JvzpHIxhs/dumFmF7BXTf3Z+dd4uXta4kVyO508=
|
||||
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
|
||||
google.golang.org/appengine v1.5.0 h1:KxkO13IPW4Lslp2bz+KHP2E3gtFlrIGNThxkZQ3g+4c=
|
||||
google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
|
||||
google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0=
|
||||
google.golang.org/appengine v1.6.5 h1:tycE03LOZYQNhDpS27tcQdAzLCVMaj7QT2SXxebnpCM=
|
||||
@@ -514,14 +503,15 @@ google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzi
|
||||
google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
|
||||
google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
|
||||
google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
|
||||
google.golang.org/protobuf v1.25.0 h1:Ejskq+SyPohKW+1uil0JJMtmHCgJPJ/qWTxr8qp+R4c=
|
||||
google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
|
||||
google.golang.org/protobuf v1.26.0-rc.1 h1:7QnIQpGRHE5RnLKnESfDoxm2dTapTZua5a0kS0A+VXQ=
|
||||
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
|
||||
gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
|
||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY=
|
||||
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo=
|
||||
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f h1:BLraFXnmrev5lT+xlilqcH8XK9/i0At2xKjWk4p6zsU=
|
||||
gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
|
||||
gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4=
|
||||
gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
|
||||
@@ -532,49 +522,46 @@ gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw=
|
||||
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
|
||||
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
|
||||
gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||
gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw=
|
||||
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||
gopkg.in/yaml.v2 v2.2.4 h1:/eiJrUcujPVeJ3xlSWaiNi3uSVmDGBK1pDHUHAnao1I=
|
||||
gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||
gopkg.in/yaml.v2 v2.2.5 h1:ymVxjfMaHvXD8RqPRmzHHsB3VvucivSkIAvJFDI5O3c=
|
||||
gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||
gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10=
|
||||
gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||
gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||
gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
|
||||
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
|
||||
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo=
|
||||
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
||||
honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
||||
honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
||||
honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
||||
honnef.co/go/tools v0.0.1-2019.2.3 h1:3JgtbtFHMiCmsznwGVTUWbgGov+pVqnlf1dEJTNAXeM=
|
||||
honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
|
||||
honnef.co/go/tools v0.0.1-2020.1.3 h1:sXmLre5bzIR6ypkjXCDI3jHPssRhc8KD/Ome589sc3U=
|
||||
honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
|
||||
k8s.io/api v0.20.1 h1:ud1c3W3YNzGd6ABJlbFfKXBKXO+1KdGfcgGGNgFR03E=
|
||||
k8s.io/api v0.20.1/go.mod h1:KqwcCVogGxQY3nBlRpwt+wpAMF/KjaCc7RpywacvqUo=
|
||||
k8s.io/apimachinery v0.20.1 h1:LAhz8pKbgR8tUwn7boK+b2HZdt7MiTu2mkYtFMUjTRQ=
|
||||
k8s.io/apimachinery v0.20.1/go.mod h1:WlLqWAHZGg07AeltaI0MV5uk1Omp8xaN0JGLY6gkRpU=
|
||||
k8s.io/client-go v0.20.1 h1:Qquik0xNFbK9aUG92pxHYsyfea5/RPO9o9bSywNor+M=
|
||||
k8s.io/client-go v0.20.1/go.mod h1:/zcHdt1TeWSd5HoUe6elJmHSQ6uLLgp4bIJHVEuy+/Y=
|
||||
k8s.io/code-generator v0.20.1 h1:kre3GNich5gbO3d1FyTT8fHI4ZJezZV217yFdWlQaRQ=
|
||||
k8s.io/code-generator v0.20.1/go.mod h1:UsqdF+VX4PU2g46NC2JRs4gc+IfrctnwHb76RNbWHJg=
|
||||
k8s.io/api v0.21.1 h1:94bbZ5NTjdINJEdzOkpS4vdPhkb1VFpTYC9zh43f75c=
|
||||
k8s.io/api v0.21.1/go.mod h1:FstGROTmsSHBarKc8bylzXih8BLNYTiS3TZcsoEDg2s=
|
||||
k8s.io/apimachinery v0.21.1 h1:Q6XuHGlj2xc+hlMCvqyYfbv3H7SRGn2c8NycxJquDVs=
|
||||
k8s.io/apimachinery v0.21.1/go.mod h1:jbreFvJo3ov9rj7eWT7+sYiRx+qZuCYXwWT1bcDswPY=
|
||||
k8s.io/client-go v0.21.1 h1:bhblWYLZKUu+pm50plvQF8WpY6TXdRRtcS/K9WauOj4=
|
||||
k8s.io/client-go v0.21.1/go.mod h1:/kEw4RgW+3xnBGzvp9IWxKSNA+lXn3A7AuH3gdOAzLs=
|
||||
k8s.io/code-generator v0.21.1 h1:jvcxHpVu5dm/LMXr3GOj/jroiP8+v2YnJE9i2OVRenk=
|
||||
k8s.io/code-generator v0.21.1/go.mod h1:hUlps5+9QaTrKx+jiM4rmq7YmH8wPOIko64uZCHDh6Q=
|
||||
k8s.io/gengo v0.0.0-20200413195148-3a45101e95ac/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0=
|
||||
k8s.io/gengo v0.0.0-20201113003025-83324d819ded h1:JApXBKYyB7l9xx+DK7/+mFjC7A9Bt5A93FPvFD0HIFE=
|
||||
k8s.io/gengo v0.0.0-20201113003025-83324d819ded/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E=
|
||||
k8s.io/gengo v0.0.0-20201214224949-b6c5ce23f027 h1:Uusb3oh8XcdzDF/ndlI4ToKTYVlkCSJP39SRY2mfRAw=
|
||||
k8s.io/gengo v0.0.0-20201214224949-b6c5ce23f027/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E=
|
||||
k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE=
|
||||
k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y=
|
||||
k8s.io/klog/v2 v2.4.0 h1:7+X0fUguPyrKEC4WjH8iGDg3laWgMo5tMnRTIGTTxGQ=
|
||||
k8s.io/klog/v2 v2.4.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y=
|
||||
k8s.io/kube-openapi v0.0.0-20201113171705-d219536bb9fd h1:sOHNzJIkytDF6qadMNKhhDRpc6ODik8lVC6nOur7B2c=
|
||||
k8s.io/kube-openapi v0.0.0-20201113171705-d219536bb9fd/go.mod h1:WOJ3KddDSol4tAGcJo0Tvi+dK12EcqSLqcWsryKMpfM=
|
||||
k8s.io/klog/v2 v2.8.0 h1:Q3gmuM9hKEjefWFFYF0Mat+YyFJvsUyYuwyNNJ5C9Ts=
|
||||
k8s.io/klog/v2 v2.8.0/go.mod h1:hy9LJ/NvuK+iVyP4Ehqva4HxZG/oXyIS3n3Jmire4Ec=
|
||||
k8s.io/kube-openapi v0.0.0-20210305001622-591a79e4bda7 h1:vEx13qjvaZ4yfObSSXW7BrMc/KQBBT/Jyee8XtLf4x0=
|
||||
k8s.io/kube-openapi v0.0.0-20210305001622-591a79e4bda7/go.mod h1:wXW5VT87nVfh/iLV8FpR2uDvrFyomxbtb1KivDbvPTE=
|
||||
k8s.io/utils v0.0.0-20201110183641-67b214c5f920 h1:CbnUZsM497iRC5QMVkHwyl8s2tB3g7yaSHkYPkpgelw=
|
||||
k8s.io/utils v0.0.0-20201110183641-67b214c5f920/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
|
||||
rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=
|
||||
rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0=
|
||||
rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA=
|
||||
sigs.k8s.io/structured-merge-diff/v4 v4.0.2 h1:YHQV7Dajm86OuqnIR6zAelnDWBRjo+YhYV9PmGrh1s8=
|
||||
sigs.k8s.io/structured-merge-diff/v4 v4.0.2/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw=
|
||||
sigs.k8s.io/yaml v1.1.0 h1:4A07+ZFc2wgJwo8YNlQpr1rVlgUDlxXHhPJciaPY5gs=
|
||||
sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o=
|
||||
sigs.k8s.io/structured-merge-diff/v4 v4.1.0 h1:C4r9BgJ98vrKnnVCjwCSXcWjWe0NKcUQkmzDXZXGwH8=
|
||||
sigs.k8s.io/structured-merge-diff/v4 v4.1.0/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw=
|
||||
sigs.k8s.io/yaml v1.2.0 h1:kr/MCeFWJWTwyaHoR9c8EjH9OumOmoF9YGiZd7lFm/Q=
|
||||
sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc=
|
||||
|
||||
@@ -30,7 +30,7 @@ chmod +x ${CODEGEN_PKG}/generate-groups.sh
|
||||
|
||||
${CODEGEN_PKG}/generate-groups.sh all \
|
||||
github.com/fluxcd/flagger/pkg/client github.com/fluxcd/flagger/pkg/apis \
|
||||
"flagger:v1beta1 appmesh:v1beta2 appmesh:v1beta1 istio:v1alpha3 smi:v1alpha1 smi:v1alpha2 gloo:v1 projectcontour:v1 traefik:v1alpha1" \
|
||||
"flagger:v1beta1 appmesh:v1beta2 appmesh:v1beta1 istio:v1alpha3 smi:v1alpha1 smi:v1alpha2 smi:v1alpha3 gloo/gloo:v1 gloo/gateway:v1 projectcontour:v1 traefik:v1alpha1" \
|
||||
--output-base "${TEMP_DIR}" \
|
||||
--go-header-file ${SCRIPT_ROOT}/hack/boilerplate.go.txt
|
||||
|
||||
|
||||
@@ -31,7 +31,16 @@ Install Flagger for Linkerd:
|
||||
kustomize build https://github.com/fluxcd/flagger/kustomize/linkerd?ref=main | kubectl apply -f -
|
||||
```
|
||||
|
||||
This deploys Flagger in the `linkerd` namespace and sets the metrics server URL to Linkerd's Prometheus instance.
|
||||
This deploys Flagger in the `linkerd` namespace and sets the metrics server URL to linkerd-viz extension's Prometheus instance
|
||||
which lives under `linkerd-viz` namespace by default.
|
||||
|
||||
Install Flagger for Open Service Mesh:
|
||||
|
||||
```bash
|
||||
kustomize build https://github.com/fluxcd/flagger/kustomize/osm?ref=main | kubectl apply -f -
|
||||
```
|
||||
|
||||
This deploys Flagger in the `osm-system` namespace and sets the metrics server URL to OSM's Prometheus instance.
|
||||
|
||||
If you want to install a specific Flagger release, add the version number to the URL:
|
||||
|
||||
@@ -67,7 +76,7 @@ metadata:
|
||||
name: app
|
||||
namespace: test
|
||||
spec:
|
||||
# can be: kubernetes, istio, linkerd, appmesh, nginx, skipper, gloo
|
||||
# can be: kubernetes, istio, linkerd, appmesh, nginx, skipper, gloo, osm
|
||||
# use the kubernetes provider for Blue/Green style deployments
|
||||
provider: nginx
|
||||
```
|
||||
|
||||
@@ -13,7 +13,7 @@ spec:
|
||||
- -mesh-provider=appmesh
|
||||
- -metrics-server=http://appmesh-prometheus:9090
|
||||
---
|
||||
apiVersion: rbac.authorization.k8s.io/v1beta1
|
||||
apiVersion: rbac.authorization.k8s.io/v1
|
||||
kind: ClusterRoleBinding
|
||||
metadata:
|
||||
name: flagger
|
||||
|
||||
@@ -129,6 +129,21 @@ spec:
|
||||
- Ingress
|
||||
name:
|
||||
type: string
|
||||
upstreamRef:
|
||||
description: Gloo Upstream selector
|
||||
type: object
|
||||
required: [ "apiVersion", "kind", "name" ]
|
||||
properties:
|
||||
apiVersion:
|
||||
type: string
|
||||
kind:
|
||||
type: string
|
||||
enum:
|
||||
- Upstream
|
||||
name:
|
||||
type: string
|
||||
namespace:
|
||||
type: string
|
||||
service:
|
||||
description: Kubernetes Service spec
|
||||
type: object
|
||||
@@ -940,6 +955,10 @@ spec:
|
||||
- post-rollout
|
||||
- event
|
||||
- rollback
|
||||
- confirm-traffic-increase
|
||||
muteAlert:
|
||||
description: Mute all alerts for the webhook
|
||||
type: boolean
|
||||
url:
|
||||
description: URL address of this webhook
|
||||
type: string
|
||||
@@ -966,6 +985,7 @@ spec:
|
||||
- Initialized
|
||||
- Waiting
|
||||
- Progressing
|
||||
- WaitingPromotion
|
||||
- Promoting
|
||||
- Finalising
|
||||
- Succeeded
|
||||
@@ -1086,6 +1106,7 @@ spec:
|
||||
- datadog
|
||||
- cloudwatch
|
||||
- newrelic
|
||||
- graphite
|
||||
address:
|
||||
description: API address of this provider
|
||||
type: string
|
||||
@@ -1101,6 +1122,9 @@ spec:
|
||||
region:
|
||||
description: Region of the provider
|
||||
type: string
|
||||
insecureSkipVerify:
|
||||
description: Disable SSL certificate validation for the provider address
|
||||
type: boolean
|
||||
query:
|
||||
description: Query of this metric template
|
||||
type: string
|
||||
@@ -1167,6 +1191,7 @@ spec:
|
||||
- msteams
|
||||
- discord
|
||||
- rocket
|
||||
- gchat
|
||||
channel:
|
||||
description: Alert channel for this provider
|
||||
type: string
|
||||
@@ -1176,6 +1201,9 @@ spec:
|
||||
address:
|
||||
description: Hook URL address of this provider
|
||||
type: string
|
||||
proxy:
|
||||
description: Http/s proxy of this provider
|
||||
type: string
|
||||
secretRef:
|
||||
description: Kubernetes secret reference containing the provider address
|
||||
type: object
|
||||
|
||||
@@ -9,4 +9,4 @@ resources:
|
||||
images:
|
||||
- name: ghcr.io/fluxcd/flagger
|
||||
newName: ghcr.io/fluxcd/flagger
|
||||
newTag: 1.6.3
|
||||
newTag: 1.13.0
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
apiVersion: rbac.authorization.k8s.io/v1beta1
|
||||
apiVersion: rbac.authorization.k8s.io/v1
|
||||
kind: ClusterRole
|
||||
metadata:
|
||||
name: flagger
|
||||
@@ -182,7 +182,7 @@ rules:
|
||||
verbs:
|
||||
- get
|
||||
---
|
||||
apiVersion: rbac.authorization.k8s.io/v1beta1
|
||||
apiVersion: rbac.authorization.k8s.io/v1
|
||||
kind: ClusterRoleBinding
|
||||
metadata:
|
||||
name: flagger
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
apiVersion: rbac.authorization.k8s.io/v1beta1
|
||||
apiVersion: rbac.authorization.k8s.io/v1
|
||||
kind: ClusterRole
|
||||
metadata:
|
||||
name: flagger-prometheus
|
||||
@@ -18,7 +18,7 @@ rules:
|
||||
- nonResourceURLs: ["/metrics"]
|
||||
verbs: ["get"]
|
||||
---
|
||||
apiVersion: rbac.authorization.k8s.io/v1beta1
|
||||
apiVersion: rbac.authorization.k8s.io/v1
|
||||
kind: ClusterRoleBinding
|
||||
metadata:
|
||||
name: flagger-prometheus
|
||||
|
||||
@@ -13,7 +13,7 @@ spec:
|
||||
- -mesh-provider=istio
|
||||
- -metrics-server=http://prometheus:9090
|
||||
---
|
||||
apiVersion: rbac.authorization.k8s.io/v1beta1
|
||||
apiVersion: rbac.authorization.k8s.io/v1
|
||||
kind: ClusterRoleBinding
|
||||
metadata:
|
||||
name: flagger
|
||||
|
||||
@@ -11,9 +11,9 @@ spec:
|
||||
- -log-level=info
|
||||
- -include-label-prefix=app.kubernetes.io
|
||||
- -mesh-provider=linkerd
|
||||
- -metrics-server=http://linkerd-prometheus:9090
|
||||
- -metrics-server=http://prometheus.linkerd-viz:9090
|
||||
---
|
||||
apiVersion: rbac.authorization.k8s.io/v1beta1
|
||||
apiVersion: rbac.authorization.k8s.io/v1
|
||||
kind: ClusterRoleBinding
|
||||
metadata:
|
||||
name: flagger
|
||||
|
||||
5
kustomize/osm/kustomization.yaml
Normal file
@@ -0,0 +1,5 @@
|
||||
namespace: osm-system
|
||||
bases:
|
||||
- ../base/flagger/
|
||||
patchesStrategicMerge:
|
||||
- patch.yaml
|
||||
27
kustomize/osm/patch.yaml
Normal file
@@ -0,0 +1,27 @@
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: flagger
|
||||
spec:
|
||||
template:
|
||||
spec:
|
||||
containers:
|
||||
- name: flagger
|
||||
args:
|
||||
- -log-level=info
|
||||
- -include-label-prefix=app.kubernetes.io
|
||||
- -mesh-provider=osm
|
||||
- -metrics-server=http://osm-prometheus.osm-system.svc:7070
|
||||
---
|
||||
apiVersion: rbac.authorization.k8s.io/v1
|
||||
kind: ClusterRoleBinding
|
||||
metadata:
|
||||
name: flagger
|
||||
roleRef:
|
||||
apiGroup: rbac.authorization.k8s.io
|
||||
kind: ClusterRole
|
||||
name: flagger
|
||||
subjects:
|
||||
- kind: ServiceAccount
|
||||
name: flagger
|
||||
namespace: osm-system
|
||||
@@ -15,6 +15,7 @@ spec:
|
||||
annotations:
|
||||
prometheus.io/scrape: "true"
|
||||
prometheus.io/port: "8080"
|
||||
openservicemesh.io/inbound-port-exclusion-list: "80, 8080"
|
||||
spec:
|
||||
containers:
|
||||
- name: loadtester
|
||||
|
||||
@@ -64,6 +64,10 @@ type AlertProviderSpec struct {
|
||||
// +optional
|
||||
Address string `json:"address,omitempty"`
|
||||
|
||||
// HTTP/S address of the proxy
|
||||
// +optional
|
||||
Proxy string `json:"proxy,omitempty"`
|
||||
|
||||
// Secret reference containing the provider webhook URL
|
||||
// +optional
|
||||
SecretRef *corev1.LocalObjectReference `json:"secretRef,omitempty"`
|
||||
|
||||
@@ -77,6 +77,11 @@ type CanarySpec struct {
|
||||
// +optional
|
||||
IngressRef *CrossNamespaceObjectReference `json:"ingressRef,omitempty"`
|
||||
|
||||
// Reference to Gloo Upstream resource. Upstream config is copied from
|
||||
// the referenced upstream to the upstreams generated by flagger.
|
||||
// +optional
|
||||
UpstreamRef *CrossNamespaceObjectReference `json:"upstreamRef,omitempty"`
|
||||
|
||||
// Service defines how ClusterIP services, service mesh or ingress routing objects are generated
|
||||
Service CanaryService `json:"service"`
|
||||
|
||||
@@ -314,6 +319,8 @@ const (
|
||||
EventHook HookType = "event"
|
||||
// RollbackHook rollback canary analysis if webhook returns HTTP 200
|
||||
RollbackHook HookType = "rollback"
|
||||
// ConfirmTrafficIncreaseHook increases traffic weight if webhook returns HTTP 200
|
||||
ConfirmTrafficIncreaseHook = "confirm-traffic-increase"
|
||||
)
|
||||
|
||||
// CanaryWebhook holds the reference to external checks used for canary analysis
|
||||
@@ -327,6 +334,9 @@ type CanaryWebhook struct {
|
||||
// URL address of this webhook
|
||||
URL string `json:"url"`
|
||||
|
||||
// MuteAlert mutes all alerts generated from this webhook, if any
|
||||
MuteAlert bool `json:"muteAlert"`
|
||||
|
||||
// Request timeout for this webhook
|
||||
Timeout string `json:"timeout,omitempty"`
|
||||
|
||||
|
||||
@@ -74,6 +74,10 @@ type MetricTemplateProvider struct {
|
||||
// Region of the provider
|
||||
// +optional
|
||||
Region string `json:"region,omitempty"`
|
||||
|
||||
// InsecureSkipVerify disables certificate verification for the provider
|
||||
// +optional
|
||||
InsecureSkipVerify bool `json:"insecureSkipVerify,omitempty"`
|
||||
}
|
||||
|
||||
// MetricTemplateModel is the query template model
|
||||
|
||||
@@ -11,4 +11,5 @@ const (
|
||||
KubernetesProvider string = "kubernetes"
|
||||
SkipperProvider string = "skipper"
|
||||
TraefikProvider string = "traefik"
|
||||
OsmProvider string = "osm"
|
||||
)
|
||||
|
||||
@@ -47,6 +47,8 @@ const (
|
||||
CanaryPhaseWaiting CanaryPhase = "Waiting"
|
||||
// CanaryPhaseProgressing means the canary analysis is underway
|
||||
CanaryPhaseProgressing CanaryPhase = "Progressing"
|
||||
// CanaryPhaseWaitingPromotion means the canary promotion is paused (waiting for confirmation to proceed)
|
||||
CanaryPhaseWaitingPromotion CanaryPhase = "WaitingPromotion"
|
||||
// CanaryPhasePromoting means the canary analysis is finished and the primary spec has been updated
|
||||
CanaryPhasePromoting CanaryPhase = "Promoting"
|
||||
// CanaryPhaseFinalising means the canary promotion is finished and traffic has been routed back to primary
|
||||
|
||||
@@ -411,6 +411,11 @@ func (in *CanarySpec) DeepCopyInto(out *CanarySpec) {
|
||||
*out = new(CrossNamespaceObjectReference)
|
||||
**out = **in
|
||||
}
|
||||
if in.UpstreamRef != nil {
|
||||
in, out := &in.UpstreamRef, &out.UpstreamRef
|
||||
*out = new(CrossNamespaceObjectReference)
|
||||
**out = **in
|
||||
}
|
||||
in.Service.DeepCopyInto(&out.Service)
|
||||
if in.Analysis != nil {
|
||||
in, out := &in.Analysis, &out.Analysis
|
||||
|
||||
@@ -8,7 +8,7 @@ import (
|
||||
)
|
||||
|
||||
// SchemeGroupVersion is group version used to register these objects
|
||||
var SchemeGroupVersion = schema.GroupVersion{Group: gloo.GroupName, Version: "v1"}
|
||||
var SchemeGroupVersion = schema.GroupVersion{Group: gloo.GatewayGroupName, Version: "v1"}
|
||||
|
||||
// Kind takes an unqualified kind and returns back a Group qualified GroupKind
|
||||
func Kind(kind string) schema.GroupKind {
|
||||