mirror of
https://github.com/fluxcd/flagger.git
synced 2026-02-24 06:44:24 +00:00
Compare commits
169 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d4a94f03de | ||
|
|
b3b7958790 | ||
|
|
200584f5cd | ||
|
|
48a45a6142 | ||
|
|
550e768120 | ||
|
|
6b050a3702 | ||
|
|
c8055e652d | ||
|
|
1f788e4980 | ||
|
|
fae2dc52bb | ||
|
|
b8bce87149 | ||
|
|
4ccf2beba7 | ||
|
|
b7a1fb69f2 | ||
|
|
c1c9e5cc43 | ||
|
|
b83f69b75c | ||
|
|
b816e58c7c | ||
|
|
a8911b2fc7 | ||
|
|
d5ae4d3467 | ||
|
|
0381f85425 | ||
|
|
e65f125ee5 | ||
|
|
cf3963a62a | ||
|
|
c5b6f50cad | ||
|
|
a9ee2aa455 | ||
|
|
b1bcf3c010 | ||
|
|
8dba425b2b | ||
|
|
82e9c1fda2 | ||
|
|
1424e8f2bf | ||
|
|
83feb035b8 | ||
|
|
88d65a19a9 | ||
|
|
fe34721a74 | ||
|
|
fbc4fb21a3 | ||
|
|
1378300d06 | ||
|
|
4fe36885eb | ||
|
|
8cd370ee0a | ||
|
|
1b4c5067c9 | ||
|
|
b00c8b97d9 | ||
|
|
55587026d8 | ||
|
|
1a538100e7 | ||
|
|
0394f94200 | ||
|
|
6333bc45d3 | ||
|
|
3ab45bd3e8 | ||
|
|
39eade6319 | ||
|
|
d30f82f3d6 | ||
|
|
b075d4b797 | ||
|
|
3d638326d9 | ||
|
|
29486e31d8 | ||
|
|
f5cd13cc78 | ||
|
|
f211a898c4 | ||
|
|
2028cac167 | ||
|
|
4a1fa4edad | ||
|
|
1e69a78648 | ||
|
|
9fe712d618 | ||
|
|
cab0ad1273 | ||
|
|
edbc023fa6 | ||
|
|
3bd46efa7f | ||
|
|
ce5fad4724 | ||
|
|
a943e7cf10 | ||
|
|
58d618ed82 | ||
|
|
d10ff53531 | ||
|
|
9fd93e019f | ||
|
|
623c8193a1 | ||
|
|
6ae108a955 | ||
|
|
fc5e240ffe | ||
|
|
3b3cb55f0e | ||
|
|
983a68f9a1 | ||
|
|
d064fa62b6 | ||
|
|
c530d694fc | ||
|
|
b5e374b873 | ||
|
|
89eac0b361 | ||
|
|
f3451820fd | ||
|
|
2c9ca4a817 | ||
|
|
7e238c129a | ||
|
|
6884e4184d | ||
|
|
68148f4f33 | ||
|
|
75e3e652ef | ||
|
|
c9c97c379d | ||
|
|
b102a046a7 | ||
|
|
f4094f1e1d | ||
|
|
746848f362 | ||
|
|
feb869de03 | ||
|
|
0ba873e310 | ||
|
|
b44ecf7ded | ||
|
|
7324da08d7 | ||
|
|
f08a0ffc5a | ||
|
|
e087d5f638 | ||
|
|
a600f9f46c | ||
|
|
86d1c9f792 | ||
|
|
91d6161993 | ||
|
|
d750e737e0 | ||
|
|
3597117bd5 | ||
|
|
be1b12fac5 | ||
|
|
a252d43a32 | ||
|
|
a1f8b6fcd7 | ||
|
|
edfe897112 | ||
|
|
5947402048 | ||
|
|
8739ab6973 | ||
|
|
436d6374f0 | ||
|
|
c280e235b5 | ||
|
|
06dc29e79c | ||
|
|
5b6a257258 | ||
|
|
ef404a0d81 | ||
|
|
370a660be1 | ||
|
|
83f570876d | ||
|
|
0d20480f34 | ||
|
|
ab726411fd | ||
|
|
8c9b45fc4b | ||
|
|
0c48ad8332 | ||
|
|
e9451e52a4 | ||
|
|
41b4135e6b | ||
|
|
e1b4264d1a | ||
|
|
1215310d9e | ||
|
|
d89cb68c2a | ||
|
|
5baf41e798 | ||
|
|
b727088b0f | ||
|
|
7f47cb669e | ||
|
|
35bfb4cc83 | ||
|
|
432ca88ae9 | ||
|
|
a632a93963 | ||
|
|
40b3063821 | ||
|
|
774935c680 | ||
|
|
9bac4fe592 | ||
|
|
237720d2c9 | ||
|
|
1ddff9e80e | ||
|
|
9b076a4cee | ||
|
|
50ef7a2c64 | ||
|
|
d985083b18 | ||
|
|
c8de6c3433 | ||
|
|
ca129d2d01 | ||
|
|
adb3d11b37 | ||
|
|
10688060bc | ||
|
|
07d86b4f9f | ||
|
|
236f7b5d31 | ||
|
|
a28741c3ee | ||
|
|
3f198d158f | ||
|
|
44377ea9c5 | ||
|
|
d793a38656 | ||
|
|
33b0e712f1 | ||
|
|
1cc21d9fe3 | ||
|
|
23bc8fe0df | ||
|
|
b8bcfd1b0a | ||
|
|
c2120ceeb7 | ||
|
|
7286d5225f | ||
|
|
3a153fa534 | ||
|
|
eddf7c4e9b | ||
|
|
1661b8bc2f | ||
|
|
79d034bace | ||
|
|
c318058fec | ||
|
|
fab0bd0616 | ||
|
|
71840ce2a0 | ||
|
|
83a216caca | ||
|
|
d7546d4579 | ||
|
|
b0e646274b | ||
|
|
e790103cd3 | ||
|
|
0285647239 | ||
|
|
d9f280750a | ||
|
|
7f47441ce8 | ||
|
|
2ad02f052a | ||
|
|
b0eda2612f | ||
|
|
597449b68e | ||
|
|
16d793b132 | ||
|
|
e078fdffdf | ||
|
|
8ba7997dd8 | ||
|
|
4758c86787 | ||
|
|
eb6253354d | ||
|
|
47c8b6ee5d | ||
|
|
193c21108e | ||
|
|
a0a8aa0327 | ||
|
|
060ac5476e | ||
|
|
236a6ca0bf | ||
|
|
1d566fd1e3 |
16
.circleci/config.yml
Normal file
16
.circleci/config.yml
Normal file
@@ -0,0 +1,16 @@
|
||||
version: 2.1
|
||||
jobs:
|
||||
build:
|
||||
machine: true
|
||||
steps:
|
||||
- run: "echo skip"
|
||||
|
||||
workflows:
|
||||
version: 2
|
||||
ignore:
|
||||
jobs:
|
||||
- build:
|
||||
filters:
|
||||
branches:
|
||||
ignore:
|
||||
- gh-pages
|
||||
53
.github/workflows/website.yaml
vendored
53
.github/workflows/website.yaml
vendored
@@ -1,53 +0,0 @@
|
||||
name: website
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- website
|
||||
|
||||
jobs:
|
||||
vuepress:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v5
|
||||
- uses: actions/setup-node@v5
|
||||
with:
|
||||
node-version: '12.x'
|
||||
- id: yarn-cache-dir-path
|
||||
run: echo "::set-output name=dir::$(yarn cache dir)"
|
||||
- uses: actions/cache@v4
|
||||
id: yarn-cache
|
||||
with:
|
||||
path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
|
||||
key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
|
||||
restore-keys: |
|
||||
${{ runner.os }}-yarn-
|
||||
- name: Build
|
||||
run: |
|
||||
yarn add -D vuepress
|
||||
yarn docs:build
|
||||
mkdir $HOME/site
|
||||
rsync -avzh docs/.vuepress/dist/ $HOME/site
|
||||
- name: Publish
|
||||
env:
|
||||
REPOSITORY: "https://x-access-token:${{ secrets.BOT_GITHUB_TOKEN }}@github.com/fluxcd/flagger.git"
|
||||
run: |
|
||||
tmpDir=$(mktemp -d)
|
||||
pushd $tmpDir >& /dev/null
|
||||
|
||||
git clone ${REPOSITORY}
|
||||
cd flagger
|
||||
git config user.name ${{ github.actor }}
|
||||
git config user.email ${{ github.actor }}@users.noreply.github.com
|
||||
git remote set-url origin ${REPOSITORY}
|
||||
git checkout gh-pages
|
||||
rm -rf assets
|
||||
rsync -avzh $HOME/site/ .
|
||||
rm -rf node_modules
|
||||
git add .
|
||||
git commit -m "Publish website"
|
||||
git push origin gh-pages
|
||||
|
||||
popd >& /dev/null
|
||||
rm -rf $tmpDir
|
||||
7
.gitignore
vendored
7
.gitignore
vendored
@@ -1,3 +1,4 @@
|
||||
|
||||
# Logs
|
||||
logs
|
||||
*.log
|
||||
@@ -48,9 +49,6 @@ typings/
|
||||
# Optional REPL history
|
||||
.node_repl_history
|
||||
|
||||
# Output of 'npm pack'
|
||||
*.tgz
|
||||
|
||||
# Yarn Integrity file
|
||||
.yarn-integrity
|
||||
|
||||
@@ -60,6 +58,5 @@ typings/
|
||||
# next.js build output
|
||||
.next
|
||||
|
||||
bin/
|
||||
docs/.vuepress/dist/
|
||||
Makefile.dev
|
||||
bin/
|
||||
26
404.html
Normal file
26
404.html
Normal file
@@ -0,0 +1,26 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en-US">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1">
|
||||
<title>Flagger</title>
|
||||
<meta name="generator" content="VuePress 1.9.10">
|
||||
<link rel="icon" href="/favicon.png">
|
||||
<link rel="stylesheet" href="/website.css">
|
||||
<meta name="description" content="Progressive Delivery operator for Kubernetes (Canary, A/B Testing and Blue/Green deployments)">
|
||||
<meta name="keywords" content="gitops kubernetes flagger flux istio linkerd appmesh contour gloo nginx skipper traefik">
|
||||
<meta name="twitter:card" content="summary_large_image">
|
||||
<meta name="twitter:title" content="Flagger">
|
||||
<meta name="twitter:description" content="Progressive delivery Kubernetes operator (Canary, A/B Testing and Blue/Green deployments)">
|
||||
<meta name="twitter:image:src" content="https://flagger.app/flagger-overview.png">
|
||||
|
||||
<link rel="preload" href="/assets/css/0.styles.6bc4203f.css" as="style"><link rel="preload" href="/assets/js/app.a29d2723.js" as="script"><link rel="preload" href="/assets/js/7.e62ef287.js" as="script"><link rel="prefetch" href="/assets/js/1.231ad2b8.js"><link rel="prefetch" href="/assets/js/10.f8611bf6.js"><link rel="prefetch" href="/assets/js/11.88ab7ab3.js"><link rel="prefetch" href="/assets/js/12.fd171bf8.js"><link rel="prefetch" href="/assets/js/13.9a0f9bc6.js"><link rel="prefetch" href="/assets/js/14.31f4ed2f.js"><link rel="prefetch" href="/assets/js/15.0445c5e3.js"><link rel="prefetch" href="/assets/js/16.51c9c6ac.js"><link rel="prefetch" href="/assets/js/17.81fe6f29.js"><link rel="prefetch" href="/assets/js/18.b08e7074.js"><link rel="prefetch" href="/assets/js/19.ad5e0e55.js"><link rel="prefetch" href="/assets/js/2.29a21a78.js"><link rel="prefetch" href="/assets/js/20.1dc9b2d7.js"><link rel="prefetch" href="/assets/js/21.d29d05f0.js"><link rel="prefetch" href="/assets/js/22.9ec5f7d7.js"><link rel="prefetch" href="/assets/js/3.bff69ddf.js"><link rel="prefetch" href="/assets/js/4.9ac45811.js"><link rel="prefetch" href="/assets/js/5.fd30eb93.js"><link rel="prefetch" href="/assets/js/6.4f9d90d2.js"><link rel="prefetch" href="/assets/js/vendors~docsearch.46a2d037.js">
|
||||
<link rel="stylesheet" href="/assets/css/0.styles.6bc4203f.css">
|
||||
</head>
|
||||
<body>
|
||||
<div id="app" data-server-rendered="true"><div class="theme-container"><div class="theme-default-content"><h1>404</h1> <blockquote>How did we get here?</blockquote> <a href="/" class="router-link-active">
|
||||
Take me home.
|
||||
</a></div></div><div class="global-ui"></div></div>
|
||||
<script src="/assets/js/app.a29d2723.js" defer></script><script src="/assets/js/7.e62ef287.js" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
201
LICENSE
201
LICENSE
@@ -1,201 +0,0 @@
|
||||
Apache License
|
||||
Version 2.0, January 2004
|
||||
http://www.apache.org/licenses/
|
||||
|
||||
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||
|
||||
1. Definitions.
|
||||
|
||||
"License" shall mean the terms and conditions for use, reproduction,
|
||||
and distribution as defined by Sections 1 through 9 of this document.
|
||||
|
||||
"Licensor" shall mean the copyright owner or entity authorized by
|
||||
the copyright owner that is granting the License.
|
||||
|
||||
"Legal Entity" shall mean the union of the acting entity and all
|
||||
other entities that control, are controlled by, or are under common
|
||||
control with that entity. For the purposes of this definition,
|
||||
"control" means (i) the power, direct or indirect, to cause the
|
||||
direction or management of such entity, whether by contract or
|
||||
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||
|
||||
"You" (or "Your") shall mean an individual or Legal Entity
|
||||
exercising permissions granted by this License.
|
||||
|
||||
"Source" form shall mean the preferred form for making modifications,
|
||||
including but not limited to software source code, documentation
|
||||
source, and configuration files.
|
||||
|
||||
"Object" form shall mean any form resulting from mechanical
|
||||
transformation or translation of a Source form, including but
|
||||
not limited to compiled object code, generated documentation,
|
||||
and conversions to other media types.
|
||||
|
||||
"Work" shall mean the work of authorship, whether in Source or
|
||||
Object form, made available under the License, as indicated by a
|
||||
copyright notice that is included in or attached to the work
|
||||
(an example is provided in the Appendix below).
|
||||
|
||||
"Derivative Works" shall mean any work, whether in Source or Object
|
||||
form, that is based on (or derived from) the Work and for which the
|
||||
editorial revisions, annotations, elaborations, or other modifications
|
||||
represent, as a whole, an original work of authorship. For the purposes
|
||||
of this License, Derivative Works shall not include works that remain
|
||||
separable from, or merely link (or bind by name) to the interfaces of,
|
||||
the Work and Derivative Works thereof.
|
||||
|
||||
"Contribution" shall mean any work of authorship, including
|
||||
the original version of the Work and any modifications or additions
|
||||
to that Work or Derivative Works thereof, that is intentionally
|
||||
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||
or by an individual or Legal Entity authorized to submit on behalf of
|
||||
the copyright owner. For the purposes of this definition, "submitted"
|
||||
means any form of electronic, verbal, or written communication sent
|
||||
to the Licensor or its representatives, including but not limited to
|
||||
communication on electronic mailing lists, source code control systems,
|
||||
and issue tracking systems that are managed by, or on behalf of, the
|
||||
Licensor for the purpose of discussing and improving the Work, but
|
||||
excluding communication that is conspicuously marked or otherwise
|
||||
designated in writing by the copyright owner as "Not a Contribution."
|
||||
|
||||
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||
on behalf of whom a Contribution has been received by Licensor and
|
||||
subsequently incorporated within the Work.
|
||||
|
||||
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
copyright license to reproduce, prepare Derivative Works of,
|
||||
publicly display, publicly perform, sublicense, and distribute the
|
||||
Work and such Derivative Works in Source or Object form.
|
||||
|
||||
3. Grant of Patent License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
(except as stated in this section) patent license to make, have made,
|
||||
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||
where such license applies only to those patent claims licensable
|
||||
by such Contributor that are necessarily infringed by their
|
||||
Contribution(s) alone or by combination of their Contribution(s)
|
||||
with the Work to which such Contribution(s) was submitted. If You
|
||||
institute patent litigation against any entity (including a
|
||||
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||
or a Contribution incorporated within the Work constitutes direct
|
||||
or contributory patent infringement, then any patent licenses
|
||||
granted to You under this License for that Work shall terminate
|
||||
as of the date such litigation is filed.
|
||||
|
||||
4. Redistribution. You may reproduce and distribute copies of the
|
||||
Work or Derivative Works thereof in any medium, with or without
|
||||
modifications, and in Source or Object form, provided that You
|
||||
meet the following conditions:
|
||||
|
||||
(a) You must give any other recipients of the Work or
|
||||
Derivative Works a copy of this License; and
|
||||
|
||||
(b) You must cause any modified files to carry prominent notices
|
||||
stating that You changed the files; and
|
||||
|
||||
(c) You must retain, in the Source form of any Derivative Works
|
||||
that You distribute, all copyright, patent, trademark, and
|
||||
attribution notices from the Source form of the Work,
|
||||
excluding those notices that do not pertain to any part of
|
||||
the Derivative Works; and
|
||||
|
||||
(d) If the Work includes a "NOTICE" text file as part of its
|
||||
distribution, then any Derivative Works that You distribute must
|
||||
include a readable copy of the attribution notices contained
|
||||
within such NOTICE file, excluding those notices that do not
|
||||
pertain to any part of the Derivative Works, in at least one
|
||||
of the following places: within a NOTICE text file distributed
|
||||
as part of the Derivative Works; within the Source form or
|
||||
documentation, if provided along with the Derivative Works; or,
|
||||
within a display generated by the Derivative Works, if and
|
||||
wherever such third-party notices normally appear. The contents
|
||||
of the NOTICE file are for informational purposes only and
|
||||
do not modify the License. You may add Your own attribution
|
||||
notices within Derivative Works that You distribute, alongside
|
||||
or as an addendum to the NOTICE text from the Work, provided
|
||||
that such additional attribution notices cannot be construed
|
||||
as modifying the License.
|
||||
|
||||
You may add Your own copyright statement to Your modifications and
|
||||
may provide additional or different license terms and conditions
|
||||
for use, reproduction, or distribution of Your modifications, or
|
||||
for any such Derivative Works as a whole, provided Your use,
|
||||
reproduction, and distribution of the Work otherwise complies with
|
||||
the conditions stated in this License.
|
||||
|
||||
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||
any Contribution intentionally submitted for inclusion in the Work
|
||||
by You to the Licensor shall be under the terms and conditions of
|
||||
this License, without any additional terms or conditions.
|
||||
Notwithstanding the above, nothing herein shall supersede or modify
|
||||
the terms of any separate license agreement you may have executed
|
||||
with Licensor regarding such Contributions.
|
||||
|
||||
6. Trademarks. This License does not grant permission to use the trade
|
||||
names, trademarks, service marks, or product names of the Licensor,
|
||||
except as required for reasonable and customary use in describing the
|
||||
origin of the Work and reproducing the content of the NOTICE file.
|
||||
|
||||
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||
agreed to in writing, Licensor provides the Work (and each
|
||||
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||
implied, including, without limitation, any warranties or conditions
|
||||
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||
appropriateness of using or redistributing the Work and assume any
|
||||
risks associated with Your exercise of permissions under this License.
|
||||
|
||||
8. Limitation of Liability. In no event and under no legal theory,
|
||||
whether in tort (including negligence), contract, or otherwise,
|
||||
unless required by applicable law (such as deliberate and grossly
|
||||
negligent acts) or agreed to in writing, shall any Contributor be
|
||||
liable to You for damages, including any direct, indirect, special,
|
||||
incidental, or consequential damages of any character arising as a
|
||||
result of this License or out of the use or inability to use the
|
||||
Work (including but not limited to damages for loss of goodwill,
|
||||
work stoppage, computer failure or malfunction, or any and all
|
||||
other commercial damages or losses), even if such Contributor
|
||||
has been advised of the possibility of such damages.
|
||||
|
||||
9. Accepting Warranty or Additional Liability. While redistributing
|
||||
the Work or Derivative Works thereof, You may choose to offer,
|
||||
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||
or other liability obligations and/or rights consistent with this
|
||||
License. However, in accepting such obligations, You may act only
|
||||
on Your own behalf and on Your sole responsibility, not on behalf
|
||||
of any other Contributor, and only if You agree to indemnify,
|
||||
defend, and hold each Contributor harmless for any liability
|
||||
incurred by, or claims asserted against, such Contributor by reason
|
||||
of your accepting any such warranty or additional liability.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
APPENDIX: How to apply the Apache License to your work.
|
||||
|
||||
To apply the Apache License to your work, attach the following
|
||||
boilerplate notice, with the fields enclosed by brackets "[]"
|
||||
replaced with your own identifying information. (Don't include
|
||||
the brackets!) The text should be enclosed in the appropriate
|
||||
comment syntax for the file format. We also recommend that a
|
||||
file or class name and description of purpose be included on the
|
||||
same "printed page" as the copyright notice for easier
|
||||
identification within third-party archives.
|
||||
|
||||
Copyright 2019 Weaveworks
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
59
README.md
59
README.md
@@ -1,4 +1,59 @@
|
||||
# flagger website
|
||||
# Flagger
|
||||
|
||||
[flagger.app](https://flagger.app)
|
||||
Continuous delivery is accepted as an enterprise software practice, and is a natural evolution of well-established
|
||||
continuous integration principles. However continuous deployment continues to be notably rare,
|
||||
perhaps due to the complexity of management and the fear of failed deployments impacting system availability.
|
||||
|
||||
Flagger is an open source Kubernetes operator that aims to untangle this complexity.
|
||||
It automates the promotion of canary deployments by using
|
||||
Istio, Linkerd, App Mesh, Gloo or NGNIX traffic shifting and Prometheus metrics to analyse the application's behaviour during a controlled rollout.
|
||||
The canary analysis can be extended with webhooks for running integration tests, load tests or any other custom validation.
|
||||
|
||||
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 pods health. Based on the KPIs analysis
|
||||
a canary is promoted or aborted and the analysis result is published to Slack or MS Teams.
|
||||
|
||||
Flagger can automate the application analysis for the following deployment strategies:
|
||||
|
||||
* Canary (progressive traffic shifting)
|
||||
* A/B Testing (HTTP headers and cookies traffic routing)
|
||||
* Blue/Green (traffic switch)
|
||||
|
||||
With Flagger you don't have to worry about keeping code and configuration changes in sync. Flagger keeps track of
|
||||
ConfigMaps and Secrets referenced by a Kubernetes Deployment and triggers a canary analysis if any of those objects change.
|
||||
When promoting a workload in production, both code (container images) and configuration (config maps and secrets) are
|
||||
being synchronised.
|
||||
|
||||
### Documentation
|
||||
|
||||
Flagger documentation can be found at [docs.flagger.app](https://docs.flagger.app)
|
||||
|
||||
* Install
|
||||
* [Flagger install on Kubernetes](https://docs.flagger.app/install/flagger-install-on-kubernetes)
|
||||
* [Flagger install on GKE Istio](https://docs.flagger.app/install/flagger-install-on-google-cloud)
|
||||
* [Flagger install on EKS App Mesh](https://docs.flagger.app/install/flagger-install-on-eks-appmesh)
|
||||
* [Flagger install with SuperGloo](https://docs.flagger.app/install/flagger-install-with-supergloo)
|
||||
* How it works
|
||||
* [Canary custom resource](https://docs.flagger.app/how-it-works#canary-custom-resource)
|
||||
* [Routing](https://docs.flagger.app/how-it-works#istio-routing)
|
||||
* [Canary deployment stages](https://docs.flagger.app/how-it-works#canary-deployment)
|
||||
* [Canary analysis](https://docs.flagger.app/how-it-works#canary-analysis)
|
||||
* [HTTP metrics](https://docs.flagger.app/how-it-works#http-metrics)
|
||||
* [Custom metrics](https://docs.flagger.app/how-it-works#custom-metrics)
|
||||
* [Webhooks](https://docs.flagger.app/how-it-works#webhooks)
|
||||
* [Load testing](https://docs.flagger.app/how-it-works#load-testing)
|
||||
* [Integration testing](https://docs.flagger.app/how-it-works#integration-testing)
|
||||
* [Manual gating](https://docs.flagger.app/how-it-works#manual-gating)
|
||||
* [FAQ](https://docs.flagger.app/faq)
|
||||
* Usage
|
||||
* [Istio canary deployments](https://docs.flagger.app/usage/progressive-delivery)
|
||||
* [Istio A/B testing](https://docs.flagger.app/usage/ab-testing)
|
||||
* [Linkerd canary deployments](https://docs.flagger.app/usage/linkerd-progressive-delivery)
|
||||
* [App Mesh canary deployments](https://docs.flagger.app/usage/appmesh-progressive-delivery)
|
||||
* [NGINX ingress controller canary deployments](https://docs.flagger.app/usage/nginx-progressive-delivery)
|
||||
* [Gloo Canary Deployments](https://docs.flagger.app/usage/gloo-progressive-delivery.md)
|
||||
* [Blue/Green deployments](https://docs.flagger.app/usage/blue-green)
|
||||
* [Monitoring](https://docs.flagger.app/usage/monitoring)
|
||||
* [Alerting](https://docs.flagger.app/usage/alerting)
|
||||
|
||||
This project is sponsored by [Weaveworks](https://www.weave.works/)
|
||||
|
||||
1
assets/css/0.styles.6bc4203f.css
Normal file
1
assets/css/0.styles.6bc4203f.css
Normal file
File diff suppressed because one or more lines are too long
1
assets/img/search.83621669.svg
Normal file
1
assets/img/search.83621669.svg
Normal file
@@ -0,0 +1 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="12" height="13"><g stroke-width="2" stroke="#aaa" fill="none"><path d="M11.29 11.71l-4-4"/><circle cx="5" cy="5" r="4"/></g></svg>
|
||||
|
After Width: | Height: | Size: 216 B |
1
assets/js/1.231ad2b8.js
Normal file
1
assets/js/1.231ad2b8.js
Normal file
File diff suppressed because one or more lines are too long
1
assets/js/10.f8611bf6.js
Normal file
1
assets/js/10.f8611bf6.js
Normal file
File diff suppressed because one or more lines are too long
1
assets/js/11.88ab7ab3.js
Normal file
1
assets/js/11.88ab7ab3.js
Normal file
File diff suppressed because one or more lines are too long
1
assets/js/12.fd171bf8.js
Normal file
1
assets/js/12.fd171bf8.js
Normal file
File diff suppressed because one or more lines are too long
1
assets/js/13.9a0f9bc6.js
Normal file
1
assets/js/13.9a0f9bc6.js
Normal file
File diff suppressed because one or more lines are too long
1
assets/js/14.31f4ed2f.js
Normal file
1
assets/js/14.31f4ed2f.js
Normal file
@@ -0,0 +1 @@
|
||||
(window.webpackJsonp=window.webpackJsonp||[]).push([[14],{305:function(e,t,a){"use strict";var i=TypeError;e.exports=function(e,t){if(e<t)throw new i("Not enough arguments");return e}},306:function(e,t,a){},316:function(e,t,a){"use strict";var i=a(43),n=a(4),r=a(120),s=a(305),o=URLSearchParams,l=o.prototype,h=n(l.append),u=n(l.delete),c=n(l.forEach),p=n([].push),d=new o("a=1&a=2&b=3");d.delete("a",1),d.delete("b",void 0),d+""!="a=2"&&i(l,"delete",function(e){var t=arguments.length,a=t<2?void 0:arguments[1];if(t&&void 0===a)return u(this,e);var i=[];c(this,function(e,t){p(i,{key:t,value:e})}),s(t,1);for(var n,o=r(e),l=r(a),d=0,f=0,v=!1,g=i.length;d<g;)n=i[d++],v||n.key===o?(v=!0,u(this,n.key)):f++;for(;f<g;)(n=i[f++]).key===o&&n.value===l||h(this,n.key,n.value)},{enumerable:!0,unsafe:!0})},317:function(e,t,a){"use strict";var i=a(43),n=a(4),r=a(120),s=a(305),o=URLSearchParams,l=o.prototype,h=n(l.getAll),u=n(l.has),c=new o("a=1");!c.has("a",2)&&c.has("a",void 0)||i(l,"has",function(e){var t=arguments.length,a=t<2?void 0:arguments[1];if(t&&void 0===a)return u(this,e);var i=h(this,e);s(t,1);for(var n=r(a),o=0;o<i.length;)if(i[o++]===n)return!0;return!1},{enumerable:!0,unsafe:!0})},318:function(e,t,a){"use strict";var i=a(5),n=a(4),r=a(121),s=URLSearchParams.prototype,o=n(s.forEach);!i||"size"in s||r(s,"size",{get:function(){var e=0;return o(this,function(){e++}),e},configurable:!0,enumerable:!0})},319:function(e,t,a){"use strict";a(306)},328:function(e,t,a){"use strict";a.r(t);a(118),a(316),a(317),a(318);var i={name:"AlgoliaSearchBox",props:["options"],data:()=>({placeholder:void 0}),watch:{$lang(e){this.update(this.options,e)},options(e){this.update(e,this.$lang)}},mounted(){this.initialize(this.options,this.$lang),this.placeholder=this.$site.themeConfig.searchPlaceholder||""},methods:{initialize(e,t){Promise.all([Promise.all([a.e(0),a.e(9)]).then(a.t.bind(null,326,7)),Promise.all([a.e(0),a.e(9)]).then(a.t.bind(null,327,7))]).then(([a])=>{a=a.default;const{algoliaOptions:i={}}=e;a(Object.assign({},e,{inputSelector:"#algolia-search-input",algoliaOptions:{...i,facetFilters:[`lang:${t}`].concat(i.facetFilters||[])},handleSelected:(e,t,a)=>{const{pathname:i,hash:n}=new URL(a.url),r=i.replace(this.$site.base,"/"),s=decodeURIComponent(n);this.$router.push(`${r}${s}`)}}))})},update(e,t){this.$el.innerHTML='<input id="algolia-search-input" class="search-query">',this.initialize(e,t)}}},n=(a(319),a(26)),r=Object(n.a)(i,function(){var e=this._self._c;return e("form",{staticClass:"algolia-search-wrapper search-box",attrs:{id:"search-form",role:"search"}},[e("input",{staticClass:"search-query",attrs:{id:"algolia-search-input",placeholder:this.placeholder}})])},[],!1,null,null,null);t.default=r.exports}}]);
|
||||
1
assets/js/15.0445c5e3.js
Normal file
1
assets/js/15.0445c5e3.js
Normal file
File diff suppressed because one or more lines are too long
1
assets/js/16.51c9c6ac.js
Normal file
1
assets/js/16.51c9c6ac.js
Normal file
File diff suppressed because one or more lines are too long
1
assets/js/17.81fe6f29.js
Normal file
1
assets/js/17.81fe6f29.js
Normal file
@@ -0,0 +1 @@
|
||||
(window.webpackJsonp=window.webpackJsonp||[]).push([[17],{271:function(t,e,n){"use strict";n.d(e,"d",function(){return i}),n.d(e,"a",function(){return a}),n.d(e,"i",function(){return s}),n.d(e,"f",function(){return c}),n.d(e,"g",function(){return u}),n.d(e,"h",function(){return l}),n.d(e,"b",function(){return d}),n.d(e,"e",function(){return p}),n.d(e,"k",function(){return f}),n.d(e,"l",function(){return h}),n.d(e,"c",function(){return m}),n.d(e,"j",function(){return b});n(118),n(17),n(27),n(62),n(42);const i=/#.*$/,r=/\.(md|html)$/,a=/\/$/,s=/^[a-z]+:/i;function o(t){return decodeURI(t).replace(i,"").replace(r,"")}function c(t){return s.test(t)}function u(t){return/^mailto:/.test(t)}function l(t){return/^tel:/.test(t)}function d(t){if(c(t))return t;const e=t.match(i),n=e?e[0]:"",r=o(t);return a.test(r)?t:r+".html"+n}function p(t,e){const n=decodeURIComponent(t.hash),r=function(t){const e=t.match(i);if(e)return e[0]}(e);return(!r||n===r)&&o(t.path)===o(e)}function f(t,e,n){if(c(e))return{type:"external",path:e};n&&(e=function(t,e,n){const i=t.charAt(0);if("/"===i)return t;if("?"===i||"#"===i)return e+t;const r=e.split("/");n&&r[r.length-1]||r.pop();const a=t.replace(/^\//,"").split("/");for(let t=0;t<a.length;t++){const e=a[t];".."===e?r.pop():"."!==e&&r.push(e)}""!==r[0]&&r.unshift("");return r.join("/")}(e,n));const i=o(e);for(let e=0;e<t.length;e++)if(o(t[e].regularPath)===i)return Object.assign({},t[e],{type:"page",path:d(t[e].path)});return console.error(`[vuepress] No matching page found for sidebar item "${e}"`),{}}function h(t,e,n,i){const{pages:r,themeConfig:a}=n,s=i&&a.locales&&a.locales[i]||a;if("auto"===(t.frontmatter.sidebar||s.sidebar||a.sidebar))return g(t);const o=s.sidebar||a.sidebar;if(o){const{base:n,config:i}=function(t,e){if(Array.isArray(e))return{base:"/",config:e};for(const i in e)if(0===(n=t,/(\.html|\/)$/.test(n)?n:n+"/").indexOf(encodeURI(i)))return{base:i,config:e[i]};var n;return{}}(e,o);return"auto"===i?g(t):i?i.map(t=>(function t(e,n,i,r=1){if("string"==typeof e)return f(n,e,i);if(Array.isArray(e))return Object.assign(f(n,e[0],i),{title:e[1]});{const a=e.children||[];return 0===a.length&&e.path?Object.assign(f(n,e.path,i),{title:e.title}):{type:"group",path:e.path,title:e.title,sidebarDepth:e.sidebarDepth,initialOpenGroupIndex:e.initialOpenGroupIndex,children:a.map(e=>t(e,n,i,r+1)),collapsable:!1!==e.collapsable}}})(t,r,n)):[]}return[]}function g(t){const e=m(t.headers||[]);return[{type:"group",collapsable:!1,title:t.title,path:null,children:e.map(e=>({type:"auto",title:e.title,basePath:t.path,path:t.path+"#"+e.slug,children:e.children||[]}))}]}function m(t){let e;return(t=t.map(t=>Object.assign({},t))).forEach(t=>{2===t.level?e=t:e&&(e.children||(e.children=[])).push(t)}),t.filter(t=>2===t.level)}function b(t){return Object.assign(t,{type:t.items&&t.items.length?"links":"link"})}},278:function(t,e){t.exports=function(t){return null==t}},280:function(t,e,n){},291:function(t,e,n){"use strict";n(280)},299:function(t,e,n){"use strict";n.r(e);var i=n(278),r=n.n(i),a=n(271),s={name:"PageEdit",computed:{lastUpdated(){return this.$page.lastUpdated},lastUpdatedText(){return"string"==typeof this.$themeLocaleConfig.lastUpdated?this.$themeLocaleConfig.lastUpdated:"string"==typeof this.$site.themeConfig.lastUpdated?this.$site.themeConfig.lastUpdated:"Last Updated"},editLink(){const t=r()(this.$page.frontmatter.editLink)?this.$site.themeConfig.editLinks:this.$page.frontmatter.editLink,{repo:e,docsDir:n="",docsBranch:i="master",docsRepo:a=e}=this.$site.themeConfig;return t&&a&&this.$page.relativePath?this.createEditLink(e,a,n,i,this.$page.relativePath):null},editLinkText(){return this.$themeLocaleConfig.editLinkText||this.$site.themeConfig.editLinkText||"Edit this page"}},methods:{createEditLink(t,e,n,i,r){if(/bitbucket.org/.test(e)){return e.replace(a.a,"")+"/src"+`/${i}/`+(n?n.replace(a.a,"")+"/":"")+r+`?mode=edit&spa=0&at=${i}&fileviewer=file-view-default`}if(/gitlab.com/.test(e)){return e.replace(a.a,"")+"/-/edit"+`/${i}/`+(n?n.replace(a.a,"")+"/":"")+r}return(a.i.test(e)?e:`https://github.com/${e}`).replace(a.a,"")+"/edit"+`/${i}/`+(n?n.replace(a.a,"")+"/":"")+r}}},o=(n(291),n(26)),c=Object(o.a)(s,function(){var t=this,e=t._self._c;return e("footer",{staticClass:"page-edit"},[t.editLink?e("div",{staticClass:"edit-link"},[e("a",{attrs:{href:t.editLink,target:"_blank",rel:"noopener noreferrer"}},[t._v(t._s(t.editLinkText))]),t._v(" "),e("OutboundLink")],1):t._e(),t._v(" "),t.lastUpdated?e("div",{staticClass:"last-updated"},[e("span",{staticClass:"prefix"},[t._v(t._s(t.lastUpdatedText)+":")]),t._v(" "),e("span",{staticClass:"time"},[t._v(t._s(t.lastUpdated))])]):t._e()])},[],!1,null,null,null);e.default=c.exports}}]);
|
||||
1
assets/js/18.b08e7074.js
Normal file
1
assets/js/18.b08e7074.js
Normal file
@@ -0,0 +1 @@
|
||||
(window.webpackJsonp=window.webpackJsonp||[]).push([[18],{271:function(t,e,n){"use strict";n.d(e,"d",function(){return r}),n.d(e,"a",function(){return a}),n.d(e,"i",function(){return s}),n.d(e,"f",function(){return o}),n.d(e,"g",function(){return c}),n.d(e,"h",function(){return l}),n.d(e,"b",function(){return p}),n.d(e,"e",function(){return f}),n.d(e,"k",function(){return d}),n.d(e,"l",function(){return h}),n.d(e,"c",function(){return g}),n.d(e,"j",function(){return m});n(118),n(17),n(27),n(62),n(42);const r=/#.*$/,i=/\.(md|html)$/,a=/\/$/,s=/^[a-z]+:/i;function u(t){return decodeURI(t).replace(r,"").replace(i,"")}function o(t){return s.test(t)}function c(t){return/^mailto:/.test(t)}function l(t){return/^tel:/.test(t)}function p(t){if(o(t))return t;const e=t.match(r),n=e?e[0]:"",i=u(t);return a.test(i)?t:i+".html"+n}function f(t,e){const n=decodeURIComponent(t.hash),i=function(t){const e=t.match(r);if(e)return e[0]}(e);return(!i||n===i)&&u(t.path)===u(e)}function d(t,e,n){if(o(e))return{type:"external",path:e};n&&(e=function(t,e,n){const r=t.charAt(0);if("/"===r)return t;if("?"===r||"#"===r)return e+t;const i=e.split("/");n&&i[i.length-1]||i.pop();const a=t.replace(/^\//,"").split("/");for(let t=0;t<a.length;t++){const e=a[t];".."===e?i.pop():"."!==e&&i.push(e)}""!==i[0]&&i.unshift("");return i.join("/")}(e,n));const r=u(e);for(let e=0;e<t.length;e++)if(u(t[e].regularPath)===r)return Object.assign({},t[e],{type:"page",path:p(t[e].path)});return console.error(`[vuepress] No matching page found for sidebar item "${e}"`),{}}function h(t,e,n,r){const{pages:i,themeConfig:a}=n,s=r&&a.locales&&a.locales[r]||a;if("auto"===(t.frontmatter.sidebar||s.sidebar||a.sidebar))return b(t);const u=s.sidebar||a.sidebar;if(u){const{base:n,config:r}=function(t,e){if(Array.isArray(e))return{base:"/",config:e};for(const r in e)if(0===(n=t,/(\.html|\/)$/.test(n)?n:n+"/").indexOf(encodeURI(r)))return{base:r,config:e[r]};var n;return{}}(e,u);return"auto"===r?b(t):r?r.map(t=>(function t(e,n,r,i=1){if("string"==typeof e)return d(n,e,r);if(Array.isArray(e))return Object.assign(d(n,e[0],r),{title:e[1]});{const a=e.children||[];return 0===a.length&&e.path?Object.assign(d(n,e.path,r),{title:e.title}):{type:"group",path:e.path,title:e.title,sidebarDepth:e.sidebarDepth,initialOpenGroupIndex:e.initialOpenGroupIndex,children:a.map(e=>t(e,n,r,i+1)),collapsable:!1!==e.collapsable}}})(t,i,n)):[]}return[]}function b(t){const e=g(t.headers||[]);return[{type:"group",collapsable:!1,title:t.title,path:null,children:e.map(e=>({type:"auto",title:e.title,basePath:t.path,path:t.path+"#"+e.slug,children:e.children||[]}))}]}function g(t){let e;return(t=t.map(t=>Object.assign({},t))).forEach(t=>{2===t.level?e=t:e&&(e.children||(e.children=[])).push(t)}),t.filter(t=>2===t.level)}function m(t){return Object.assign(t,{type:t.items&&t.items.length?"links":"link"})}},277:function(t,e,n){},284:function(t,e,n){"use strict";n(277)},287:function(t,e,n){"use strict";n.r(e);n(17),n(42),n(117);var r=n(271);function i(t,e,n,r,i){const a={props:{to:e,activeClass:"",exactActiveClass:""},class:{active:r,"sidebar-link":!0}};return i>2&&(a.style={"padding-left":i+"rem"}),t("RouterLink",a,n)}function a(t,e,n,s,u,o=1){return!e||o>u?null:t("ul",{class:"sidebar-sub-headers"},e.map(e=>{const c=Object(r.e)(s,n+"#"+e.slug);return t("li",{class:"sidebar-sub-header"},[i(t,n+"#"+e.slug,e.title,c,e.level-1),a(t,e.children,n,s,u,o+1)])}))}var s={functional:!0,props:["item","sidebarDepth"],render(t,{parent:{$page:e,$site:n,$route:s,$themeConfig:u,$themeLocaleConfig:o},props:{item:c,sidebarDepth:l}}){const p=Object(r.e)(s,c.path),f="auto"===c.type?p||c.children.some(t=>Object(r.e)(s,c.basePath+"#"+t.slug)):p,d="external"===c.type?function(t,e,n){return t("a",{attrs:{href:e,target:"_blank",rel:"noopener noreferrer"},class:{"sidebar-link":!0}},[n,t("OutboundLink")])}(t,c.path,c.title||c.path):i(t,c.path,c.title||c.path,f),h=[e.frontmatter.sidebarDepth,l,o.sidebarDepth,u.sidebarDepth,1].find(t=>void 0!==t),b=o.displayAllHeaders||u.displayAllHeaders;if("auto"===c.type)return[d,a(t,c.children,c.basePath,s,h)];if((f||b)&&c.headers&&!r.d.test(c.path)){return[d,a(t,Object(r.c)(c.headers),c.path,s,h)]}return d}},u=(n(284),n(26)),o=Object(u.a)(s,void 0,void 0,!1,null,null,null);e.default=o.exports}}]);
|
||||
1
assets/js/19.ad5e0e55.js
Normal file
1
assets/js/19.ad5e0e55.js
Normal file
@@ -0,0 +1 @@
|
||||
(window.webpackJsonp=window.webpackJsonp||[]).push([[19],{272:function(t,e,n){},274:function(t,e,n){"use strict";n.r(e);var s={name:"DropdownTransition",methods:{setHeight(t){t.style.height=t.scrollHeight+"px"},unsetHeight(t){t.style.height=""}}},i=(n(275),n(26)),o=Object(i.a)(s,function(){return(0,this._self._c)("transition",{attrs:{name:"dropdown"},on:{enter:this.setHeight,"after-enter":this.unsetHeight,"before-leave":this.setHeight}},[this._t("default")],2)},[],!1,null,null,null);e.default=o.exports},275:function(t,e,n){"use strict";n(272)}}]);
|
||||
1
assets/js/2.29a21a78.js
Normal file
1
assets/js/2.29a21a78.js
Normal file
File diff suppressed because one or more lines are too long
1
assets/js/20.1dc9b2d7.js
Normal file
1
assets/js/20.1dc9b2d7.js
Normal file
@@ -0,0 +1 @@
|
||||
(window.webpackJsonp=window.webpackJsonp||[]).push([[20],{290:function(t,c,n){},302:function(t,c,n){"use strict";n(290)},315:function(t,c,n){"use strict";n.r(c);n(302);var i=n(26),s=Object(i.a)({},function(){var t=this,c=t._self._c;return c("div",{staticClass:"sidebar-button",on:{click:function(c){return t.$emit("toggle-sidebar")}}},[c("svg",{staticClass:"icon",attrs:{xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",role:"img",viewBox:"0 0 448 512"}},[c("path",{attrs:{fill:"currentColor",d:"M436 124H12c-6.627 0-12-5.373-12-12V80c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12zm0 160H12c-6.627 0-12-5.373-12-12v-32c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12zm0 160H12c-6.627 0-12-5.373-12-12v-32c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12z"}})])])},[],!1,null,null,null);c.default=s.exports}}]);
|
||||
1
assets/js/21.d29d05f0.js
Normal file
1
assets/js/21.d29d05f0.js
Normal file
@@ -0,0 +1 @@
|
||||
(window.webpackJsonp=window.webpackJsonp||[]).push([[21],{271:function(t,n,e){"use strict";e.d(n,"d",function(){return r}),e.d(n,"a",function(){return s}),e.d(n,"i",function(){return u}),e.d(n,"f",function(){return a}),e.d(n,"g",function(){return l}),e.d(n,"h",function(){return c}),e.d(n,"b",function(){return f}),e.d(n,"e",function(){return h}),e.d(n,"k",function(){return p}),e.d(n,"l",function(){return d}),e.d(n,"c",function(){return b}),e.d(n,"j",function(){return m});e(118),e(17),e(27),e(62),e(42);const r=/#.*$/,i=/\.(md|html)$/,s=/\/$/,u=/^[a-z]+:/i;function o(t){return decodeURI(t).replace(r,"").replace(i,"")}function a(t){return u.test(t)}function l(t){return/^mailto:/.test(t)}function c(t){return/^tel:/.test(t)}function f(t){if(a(t))return t;const n=t.match(r),e=n?n[0]:"",i=o(t);return s.test(i)?t:i+".html"+e}function h(t,n){const e=decodeURIComponent(t.hash),i=function(t){const n=t.match(r);if(n)return n[0]}(n);return(!i||e===i)&&o(t.path)===o(n)}function p(t,n,e){if(a(n))return{type:"external",path:n};e&&(n=function(t,n,e){const r=t.charAt(0);if("/"===r)return t;if("?"===r||"#"===r)return n+t;const i=n.split("/");e&&i[i.length-1]||i.pop();const s=t.replace(/^\//,"").split("/");for(let t=0;t<s.length;t++){const n=s[t];".."===n?i.pop():"."!==n&&i.push(n)}""!==i[0]&&i.unshift("");return i.join("/")}(n,e));const r=o(n);for(let n=0;n<t.length;n++)if(o(t[n].regularPath)===r)return Object.assign({},t[n],{type:"page",path:f(t[n].path)});return console.error(`[vuepress] No matching page found for sidebar item "${n}"`),{}}function d(t,n,e,r){const{pages:i,themeConfig:s}=e,u=r&&s.locales&&s.locales[r]||s;if("auto"===(t.frontmatter.sidebar||u.sidebar||s.sidebar))return g(t);const o=u.sidebar||s.sidebar;if(o){const{base:e,config:r}=function(t,n){if(Array.isArray(n))return{base:"/",config:n};for(const r in n)if(0===(e=t,/(\.html|\/)$/.test(e)?e:e+"/").indexOf(encodeURI(r)))return{base:r,config:n[r]};var e;return{}}(n,o);return"auto"===r?g(t):r?r.map(t=>(function t(n,e,r,i=1){if("string"==typeof n)return p(e,n,r);if(Array.isArray(n))return Object.assign(p(e,n[0],r),{title:n[1]});{const s=n.children||[];return 0===s.length&&n.path?Object.assign(p(e,n.path,r),{title:n.title}):{type:"group",path:n.path,title:n.title,sidebarDepth:n.sidebarDepth,initialOpenGroupIndex:n.initialOpenGroupIndex,children:s.map(n=>t(n,e,r,i+1)),collapsable:!1!==n.collapsable}}})(t,i,e)):[]}return[]}function g(t){const n=b(t.headers||[]);return[{type:"group",collapsable:!1,title:t.title,path:null,children:n.map(n=>({type:"auto",title:n.title,basePath:t.path,path:t.path+"#"+n.slug,children:n.children||[]}))}]}function b(t){let n;return(t=t.map(t=>Object.assign({},t))).forEach(t=>{2===t.level?n=t:n&&(n.children||(n.children=[])).push(t)}),t.filter(t=>2===t.level)}function m(t){return Object.assign(t,{type:t.items&&t.items.length?"links":"link"})}},273:function(t,n,e){"use strict";e.r(n);e(17),e(117);var r=e(271),i={name:"NavLink",props:{item:{required:!0}},computed:{link(){return Object(r.b)(this.item.link)},exact(){return this.$site.locales?Object.keys(this.$site.locales).some(t=>t===this.link):"/"===this.link},isNonHttpURI(){return Object(r.g)(this.link)||Object(r.h)(this.link)},isBlankTarget(){return"_blank"===this.target},isInternal(){return!Object(r.f)(this.link)&&!this.isBlankTarget},target(){return this.isNonHttpURI?null:this.item.target?this.item.target:Object(r.f)(this.link)?"_blank":""},rel(){return this.isNonHttpURI?null:!1===this.item.rel?null:this.item.rel?this.item.rel:this.isBlankTarget?"noopener noreferrer":null}},methods:{focusoutAction(){this.$emit("focusout")}}},s=e(26),u=Object(s.a)(i,function(){var t=this,n=t._self._c;return t.isInternal?n("RouterLink",{staticClass:"nav-link",attrs:{to:t.link,exact:t.exact},nativeOn:{focusout:function(n){return t.focusoutAction.apply(null,arguments)}}},[t._v("\n "+t._s(t.item.text)+"\n")]):n("a",{staticClass:"nav-link external",attrs:{href:t.link,target:t.target,rel:t.rel},on:{focusout:t.focusoutAction}},[t._v("\n "+t._s(t.item.text)+"\n "),t.isBlankTarget?n("OutboundLink"):t._e()],1)},[],!1,null,null,null);n.default=u.exports}}]);
|
||||
1
assets/js/22.9ec5f7d7.js
Normal file
1
assets/js/22.9ec5f7d7.js
Normal file
File diff suppressed because one or more lines are too long
1
assets/js/3.bff69ddf.js
Normal file
1
assets/js/3.bff69ddf.js
Normal file
File diff suppressed because one or more lines are too long
1
assets/js/4.9ac45811.js
Normal file
1
assets/js/4.9ac45811.js
Normal file
@@ -0,0 +1 @@
|
||||
(window.webpackJsonp=window.webpackJsonp||[]).push([[4],{309:function(t,e,n){},322:function(t,e,n){"use strict";n(309)},333:function(t,e,n){"use strict";n.r(e);var i={functional:!0,props:{type:{type:String,default:"tip"},text:String,vertical:{type:String,default:"top"}},render:(t,{props:e,slots:n})=>t("span",{class:["badge",e.type],style:{verticalAlign:e.vertical}},e.text||n().default)},p=(n(322),n(26)),l=Object(p.a)(i,void 0,void 0,!1,null,"15b7b770",null);e.default=l.exports}}]);
|
||||
1
assets/js/5.fd30eb93.js
Normal file
1
assets/js/5.fd30eb93.js
Normal file
@@ -0,0 +1 @@
|
||||
(window.webpackJsonp=window.webpackJsonp||[]).push([[5],{310:function(t,e,a){},323:function(t,e,a){"use strict";a(310)},329:function(t,e,a){"use strict";a.r(e);var s={name:"CodeBlock",props:{title:{type:String,required:!0},active:{type:Boolean,default:!1}},mounted(){this.$parent&&this.$parent.loadTabs&&this.$parent.loadTabs()}},i=(a(323),a(26)),n=Object(i.a)(s,function(){return(0,this._self._c)("div",{staticClass:"theme-code-block",class:{"theme-code-block__active":this.active}},[this._t("default")],2)},[],!1,null,"759a7d02",null);e.default=n.exports}}]);
|
||||
1
assets/js/6.4f9d90d2.js
Normal file
1
assets/js/6.4f9d90d2.js
Normal file
@@ -0,0 +1 @@
|
||||
(window.webpackJsonp=window.webpackJsonp||[]).push([[6],{311:function(e,t,a){},324:function(e,t,a){"use strict";a(311)},330:function(e,t,a){"use strict";a.r(t);a(17),a(27),a(62),a(42);var o={name:"CodeGroup",data:()=>({codeTabs:[],activeCodeTabIndex:-1}),watch:{activeCodeTabIndex(e){this.activateCodeTab(e)}},mounted(){this.loadTabs()},methods:{changeCodeTab(e){this.activeCodeTabIndex=e},loadTabs(){this.codeTabs=(this.$slots.default||[]).filter(e=>Boolean(e.componentOptions)).map((e,t)=>(""===e.componentOptions.propsData.active&&(this.activeCodeTabIndex=t),{title:e.componentOptions.propsData.title,elm:e.elm})),-1===this.activeCodeTabIndex&&this.codeTabs.length>0&&(this.activeCodeTabIndex=0),this.activateCodeTab(0)},activateCodeTab(e){this.codeTabs.forEach(e=>{e.elm&&e.elm.classList.remove("theme-code-block__active")}),this.codeTabs[e].elm&&this.codeTabs[e].elm.classList.add("theme-code-block__active")}}},s=(a(324),a(26)),c=Object(s.a)(o,function(){var e=this,t=e._self._c;return t("ClientOnly",[t("div",{staticClass:"theme-code-group"},[t("div",{staticClass:"theme-code-group__nav"},[t("ul",{staticClass:"theme-code-group__ul"},e._l(e.codeTabs,function(a,o){return t("li",{key:a.title,staticClass:"theme-code-group__li"},[t("button",{staticClass:"theme-code-group__nav-tab",class:{"theme-code-group__nav-tab-active":o===e.activeCodeTabIndex},on:{click:function(t){return e.changeCodeTab(o)}}},[e._v("\n "+e._s(a.title)+"\n ")])])}),0)]),e._v(" "),e._t("default"),e._v(" "),e.codeTabs.length<1?t("pre",{staticClass:"pre-blank"},[e._v("// Make sure to add code blocks to your code group")]):e._e()],2)])},[],!1,null,"deefee04",null);t.default=c.exports}}]);
|
||||
1
assets/js/7.e62ef287.js
Normal file
1
assets/js/7.e62ef287.js
Normal file
@@ -0,0 +1 @@
|
||||
(window.webpackJsonp=window.webpackJsonp||[]).push([[7],{331:function(t,e,s){"use strict";s.r(e);const o=["There's nothing here.","How did we get here?","That's a Four-Oh-Four.","Looks like we've got some broken links."];var n={methods:{getMsg:()=>o[Math.floor(Math.random()*o.length)]}},h=s(26),i=Object(h.a)(n,function(){var t=this._self._c;return t("div",{staticClass:"theme-container"},[t("div",{staticClass:"theme-default-content"},[t("h1",[this._v("404")]),this._v(" "),t("blockquote",[this._v(this._s(this.getMsg()))]),this._v(" "),t("RouterLink",{attrs:{to:"/"}},[this._v("\n Take me home.\n ")])],1)])},[],!1,null,null,null);e.default=i.exports}}]);
|
||||
10
assets/js/app.a29d2723.js
Normal file
10
assets/js/app.a29d2723.js
Normal file
File diff suppressed because one or more lines are too long
3
assets/js/vendors~docsearch.46a2d037.js
Normal file
3
assets/js/vendors~docsearch.46a2d037.js
Normal file
File diff suppressed because one or more lines are too long
|
Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 24 KiB |
BIN
diagrams/flagger-overview.png
Normal file
BIN
diagrams/flagger-overview.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 99 KiB |
@@ -1,23 +0,0 @@
|
||||
module.exports = {
|
||||
title: 'Flagger',
|
||||
description: 'Progressive Delivery operator for Kubernetes (Canary, A/B Testing and Blue/Green deployments)',
|
||||
themeConfig: {
|
||||
search: true,
|
||||
activeHeaderLinks: false,
|
||||
docsDir: 'docs',
|
||||
repo: 'fluxcd/flagger',
|
||||
nav: [
|
||||
{ text: 'Docs', link: 'https://docs.flagger.app' },
|
||||
{ text: 'Changelog', link: 'https://github.com/fluxcd/flagger/blob/main/CHANGELOG.md' }
|
||||
]
|
||||
},
|
||||
head: [
|
||||
['link', { rel: 'icon', href: '/favicon.png' }],
|
||||
['link', { rel: 'stylesheet', href: '/website.css' }],
|
||||
['meta', { name: 'keywords', content: 'gitops kubernetes flagger flux istio linkerd appmesh contour gloo nginx skipper traefik' }],
|
||||
['meta', { name: 'twitter:card', content: 'summary_large_image' }],
|
||||
['meta', { name: 'twitter:title', content: 'Flagger' }],
|
||||
['meta', { name: 'twitter:description', content: 'Progressive delivery Kubernetes operator (Canary, A/B Testing and Blue/Green deployments)' }],
|
||||
['meta', { name: 'twitter:image:src', content: 'https://flagger.app/flagger-overview.png' }]
|
||||
]
|
||||
};
|
||||
100
docs/README.md
100
docs/README.md
@@ -1,100 +0,0 @@
|
||||
---
|
||||
title: Flagger
|
||||
home: true
|
||||
heroText: Flagger
|
||||
tagline: Progressive Delivery Operator for Kubernetes
|
||||
actionText: Get Started →
|
||||
actionLink: https://docs.flagger.app
|
||||
features:
|
||||
- title: Safer Releases
|
||||
details: Reduce the risk of introducing a new software version in production by gradually shifting traffic to the new version while measuring metrics like HTTP/gRPC request success rate and latency.
|
||||
- title: Flexible Traffic Routing
|
||||
details: Shift and route traffic between app versions automatically using an ingress controller or a service mesh compatible with Kubernetes Gateway API.
|
||||
- title: Extensible Validation
|
||||
details: Besides the builtin metrics checks, you can extend your application analysis with custom metrics and webhooks for running acceptance tests, load tests, or any other custom validation.
|
||||
footer: Apache License 2.0 | Copyright © 2018-2025 The Flux authors
|
||||
---
|
||||
|
||||
## Progressive Delivery
|
||||
|
||||
Flagger was designed to give developers confidence in automating production releases with progressive delivery techniques.
|
||||
|
||||
::: tip Canary release
|
||||
|
||||
A benefit of using canary releases is the ability to do capacity testing of the new version in a production environment
|
||||
with a safe rollback strategy if issues are found. By slowly ramping up the load, you can monitor and capture metrics
|
||||
about how the new version impacts the production environment.
|
||||
|
||||
[Martin Fowler](https://martinfowler.com/bliki/CanaryRelease.html)
|
||||
:::
|
||||
|
||||
Flagger can run automated application analysis, testing, promotion and rollback for the following deployment strategies:
|
||||
* **Canary** (progressive traffic shifting with session affinity)
|
||||
* [Istio](https://docs.flagger.app/tutorials/istio-progressive-delivery),
|
||||
[Linkerd](https://docs.flagger.app/tutorials/linkerd-progressive-delivery),
|
||||
[Kuma Service Mesh](https://docs.flagger.app/tutorials/kuma-progressive-delivery),
|
||||
[Gateway API](https://docs.flagger.app/tutorials/gatewayapi-progressive-delivery)
|
||||
* [Contour](https://docs.flagger.app/tutorials/contour-progressive-delivery),
|
||||
[Gloo](https://docs.flagger.app/tutorials/gloo-progressive-delivery),
|
||||
[NGINX](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),
|
||||
[Apache APISIX](https://docs.flagger.app/tutorials/apisix-progressive-delivery),
|
||||
[Knative](https://docs.flagger.app/tutorials/knative-progressive-delivery)
|
||||
* **A/B Testing** (HTTP headers and cookies traffic routing)
|
||||
* [Istio](https://docs.flagger.app/tutorials/istio-ab-testing),
|
||||
[Gateway API](https://docs.flagger.app/tutorials/gatewayapi-progressive-delivery#a-b-testing),
|
||||
[Contour](https://docs.flagger.app/tutorials/contour-progressive-delivery#a-b-testing),
|
||||
[NGINX](https://docs.flagger.app/tutorials/nginx-progressive-delivery#a-b-testing)
|
||||
* **Blue/Green** (traffic switching and mirroring)
|
||||
* [Kubernetes CNI](https://docs.flagger.app/tutorials/kubernetes-blue-green),
|
||||
[Istio](https://docs.flagger.app/tutorials/istio-progressive-delivery#traffic-mirroring),
|
||||
Linkerd, Kuma, Contour, Gloo, NGINX, Skipper, Traefik, Apache
|
||||
|
||||
Flagger's application analysis can be extended with metric queries targeting Prometheus, Datadog,
|
||||
CloudWatch, New Relic, Graphite, Dynatrace, InfluxDB and Google Cloud Monitoring.
|
||||
|
||||
Flagger can be configured to [send notifications](https://docs.flagger.app/usage/alerting) to
|
||||
Slack, Microsoft Teams, Discord and Rocket.
|
||||
It will post messages when a deployment has been initialised,
|
||||
when a new revision has been detected and if the canary analysis failed or succeeded.
|
||||
|
||||
## GitOps
|
||||
|
||||

|
||||
|
||||
You can build fully automated GitOps pipelines for canary deployments with Flagger and
|
||||
[Flux](https://github.com/fluxcd/flux2).
|
||||
|
||||
::: tip GitOps
|
||||
|
||||
GitOps is a way to do Kubernetes cluster management and application delivery.
|
||||
It works by using Git as a single source of truth for declarative infrastructure and applications.
|
||||
With Git at the center of your delivery pipelines, developers can make pull requests
|
||||
to accelerate and simplify application deployments and operations tasks to Kubernetes.
|
||||
|
||||
:::
|
||||
|
||||
## Getting Help
|
||||
|
||||
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.
|
||||
* File an [issue](https://github.com/fluxcd/flagger/issues/new).
|
||||
|
||||
Your feedback is always welcome!
|
||||
|
||||
## License
|
||||
|
||||
Flagger is [Apache 2.0](https://raw.githubusercontent.com/fluxcd/flagger/main/LICENSE)
|
||||
licensed and accepts contributions via GitHub pull requests.
|
||||
|
||||
Flagger was initially developed in 2018 at Weaveworks by Stefan Prodan.
|
||||
In 2020 Flagger became a [Cloud Native Computing Foundation](https://cncf.io/) project,
|
||||
part of [Flux](https://fluxcd.io) family of GitOps tools.
|
||||
|
||||
[](https://cncf.io/)
|
||||
|
Before Width: | Height: | Size: 7.5 KiB After Width: | Height: | Size: 7.5 KiB |
BIN
flagger-0.1.0.tgz
Normal file
BIN
flagger-0.1.0.tgz
Normal file
Binary file not shown.
BIN
flagger-0.1.1.tgz
Normal file
BIN
flagger-0.1.1.tgz
Normal file
Binary file not shown.
BIN
flagger-0.1.2.tgz
Normal file
BIN
flagger-0.1.2.tgz
Normal file
Binary file not shown.
BIN
flagger-0.10.0.tgz
Normal file
BIN
flagger-0.10.0.tgz
Normal file
Binary file not shown.
BIN
flagger-0.11.0.tgz
Normal file
BIN
flagger-0.11.0.tgz
Normal file
Binary file not shown.
BIN
flagger-0.11.1.tgz
Normal file
BIN
flagger-0.11.1.tgz
Normal file
Binary file not shown.
BIN
flagger-0.12.0.tgz
Normal file
BIN
flagger-0.12.0.tgz
Normal file
Binary file not shown.
BIN
flagger-0.13.0.tgz
Normal file
BIN
flagger-0.13.0.tgz
Normal file
Binary file not shown.
BIN
flagger-0.13.1.tgz
Normal file
BIN
flagger-0.13.1.tgz
Normal file
Binary file not shown.
BIN
flagger-0.13.2.tgz
Normal file
BIN
flagger-0.13.2.tgz
Normal file
Binary file not shown.
BIN
flagger-0.14.0.tgz
Normal file
BIN
flagger-0.14.0.tgz
Normal file
Binary file not shown.
BIN
flagger-0.14.1.tgz
Normal file
BIN
flagger-0.14.1.tgz
Normal file
Binary file not shown.
BIN
flagger-0.15.0.tgz
Normal file
BIN
flagger-0.15.0.tgz
Normal file
Binary file not shown.
BIN
flagger-0.16.0.tgz
Normal file
BIN
flagger-0.16.0.tgz
Normal file
Binary file not shown.
BIN
flagger-0.17.0.tgz
Normal file
BIN
flagger-0.17.0.tgz
Normal file
Binary file not shown.
BIN
flagger-0.18.0.tgz
Normal file
BIN
flagger-0.18.0.tgz
Normal file
Binary file not shown.
BIN
flagger-0.18.1.tgz
Normal file
BIN
flagger-0.18.1.tgz
Normal file
Binary file not shown.
BIN
flagger-0.18.2.tgz
Normal file
BIN
flagger-0.18.2.tgz
Normal file
Binary file not shown.
BIN
flagger-0.18.4.tgz
Normal file
BIN
flagger-0.18.4.tgz
Normal file
Binary file not shown.
BIN
flagger-0.18.5.tgz
Normal file
BIN
flagger-0.18.5.tgz
Normal file
Binary file not shown.
BIN
flagger-0.18.6.tgz
Normal file
BIN
flagger-0.18.6.tgz
Normal file
Binary file not shown.
BIN
flagger-0.19.0.tgz
Normal file
BIN
flagger-0.19.0.tgz
Normal file
Binary file not shown.
BIN
flagger-0.2.0.tgz
Normal file
BIN
flagger-0.2.0.tgz
Normal file
Binary file not shown.
BIN
flagger-0.20.0.tgz
Normal file
BIN
flagger-0.20.0.tgz
Normal file
Binary file not shown.
BIN
flagger-0.20.1.tgz
Normal file
BIN
flagger-0.20.1.tgz
Normal file
Binary file not shown.
BIN
flagger-0.20.2.tgz
Normal file
BIN
flagger-0.20.2.tgz
Normal file
Binary file not shown.
BIN
flagger-0.20.3.tgz
Normal file
BIN
flagger-0.20.3.tgz
Normal file
Binary file not shown.
BIN
flagger-0.20.4.tgz
Normal file
BIN
flagger-0.20.4.tgz
Normal file
Binary file not shown.
BIN
flagger-0.21.0.tgz
Normal file
BIN
flagger-0.21.0.tgz
Normal file
Binary file not shown.
BIN
flagger-0.22.0.tgz
Normal file
BIN
flagger-0.22.0.tgz
Normal file
Binary file not shown.
BIN
flagger-0.23.0.tgz
Normal file
BIN
flagger-0.23.0.tgz
Normal file
Binary file not shown.
BIN
flagger-0.24.0.tgz
Normal file
BIN
flagger-0.24.0.tgz
Normal file
Binary file not shown.
BIN
flagger-0.25.0.tgz
Normal file
BIN
flagger-0.25.0.tgz
Normal file
Binary file not shown.
BIN
flagger-0.26.0.tgz
Normal file
BIN
flagger-0.26.0.tgz
Normal file
Binary file not shown.
BIN
flagger-0.27.0.tgz
Normal file
BIN
flagger-0.27.0.tgz
Normal file
Binary file not shown.
BIN
flagger-0.3.0.tgz
Normal file
BIN
flagger-0.3.0.tgz
Normal file
Binary file not shown.
BIN
flagger-0.4.0.tgz
Normal file
BIN
flagger-0.4.0.tgz
Normal file
Binary file not shown.
BIN
flagger-0.4.1.tgz
Normal file
BIN
flagger-0.4.1.tgz
Normal file
Binary file not shown.
BIN
flagger-0.5.0.tgz
Normal file
BIN
flagger-0.5.0.tgz
Normal file
Binary file not shown.
BIN
flagger-0.5.1.tgz
Normal file
BIN
flagger-0.5.1.tgz
Normal file
Binary file not shown.
BIN
flagger-0.6.0.tgz
Normal file
BIN
flagger-0.6.0.tgz
Normal file
Binary file not shown.
BIN
flagger-0.7.0.tgz
Normal file
BIN
flagger-0.7.0.tgz
Normal file
Binary file not shown.
BIN
flagger-0.8.0.tgz
Normal file
BIN
flagger-0.8.0.tgz
Normal file
Binary file not shown.
BIN
flagger-0.9.0.tgz
Normal file
BIN
flagger-0.9.0.tgz
Normal file
Binary file not shown.
BIN
flagger-1.0.0.tgz
Normal file
BIN
flagger-1.0.0.tgz
Normal file
Binary file not shown.
BIN
flagger-1.0.1.tgz
Normal file
BIN
flagger-1.0.1.tgz
Normal file
Binary file not shown.
BIN
flagger-1.1.0.tgz
Normal file
BIN
flagger-1.1.0.tgz
Normal file
Binary file not shown.
BIN
flagger-1.10.0.tgz
Normal file
BIN
flagger-1.10.0.tgz
Normal file
Binary file not shown.
BIN
flagger-1.11.0.tgz
Normal file
BIN
flagger-1.11.0.tgz
Normal file
Binary file not shown.
BIN
flagger-1.12.0.tgz
Normal file
BIN
flagger-1.12.0.tgz
Normal file
Binary file not shown.
BIN
flagger-1.12.1.tgz
Normal file
BIN
flagger-1.12.1.tgz
Normal file
Binary file not shown.
BIN
flagger-1.13.0.tgz
Normal file
BIN
flagger-1.13.0.tgz
Normal file
Binary file not shown.
BIN
flagger-1.14.0.tgz
Normal file
BIN
flagger-1.14.0.tgz
Normal file
Binary file not shown.
BIN
flagger-1.15.0.tgz
Normal file
BIN
flagger-1.15.0.tgz
Normal file
Binary file not shown.
BIN
flagger-1.16.0.tgz
Normal file
BIN
flagger-1.16.0.tgz
Normal file
Binary file not shown.
BIN
flagger-1.16.1.tgz
Normal file
BIN
flagger-1.16.1.tgz
Normal file
Binary file not shown.
BIN
flagger-1.17.0.tgz
Normal file
BIN
flagger-1.17.0.tgz
Normal file
Binary file not shown.
BIN
flagger-1.18.0.tgz
Normal file
BIN
flagger-1.18.0.tgz
Normal file
Binary file not shown.
BIN
flagger-1.19.0.tgz
Normal file
BIN
flagger-1.19.0.tgz
Normal file
Binary file not shown.
BIN
flagger-1.2.0.tgz
Normal file
BIN
flagger-1.2.0.tgz
Normal file
Binary file not shown.
BIN
flagger-1.20.0.tgz
Normal file
BIN
flagger-1.20.0.tgz
Normal file
Binary file not shown.
BIN
flagger-1.21.0.tgz
Normal file
BIN
flagger-1.21.0.tgz
Normal file
Binary file not shown.
BIN
flagger-1.22.0.tgz
Normal file
BIN
flagger-1.22.0.tgz
Normal file
Binary file not shown.
BIN
flagger-1.22.1.tgz
Normal file
BIN
flagger-1.22.1.tgz
Normal file
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user