From fdb1319ce3dd2ddfda997b1b0ebf54f063cb7b35 Mon Sep 17 00:00:00 2001 From: Eugene Date: Thu, 29 Jul 2021 16:15:37 -0700 Subject: [PATCH 01/17] gh-pages --- .flake8 | 5 - .github/workflows/cd.yaml | 57 --- .github/workflows/ci.yaml | 66 ---- .github/workflows/pr.yaml | 29 -- .github/workflows/publish.yaml | 49 --- .github/workflows/utils/create-pr.sh | 82 ----- .github/workflows/utils/generate-manifests.sh | 52 --- .github/workflows/utils/publish_helm_chart.sh | 48 --- .gitignore | 132 ------- .mdlrc | 3 - LICENSE | 21 -- README.md | 340 +----------------- img/README.md | 1 - img/azdo-commit-status.png | Bin 48945 -> 0 bytes img/gh-commit-status.png | Bin 69359 -> 0 bytes img/gitops-connector.png | Bin 126066 -> 0 bytes img/src/README.md | 1 - img/src/gitops-connector.drawio | 1 - internal/setup/flux/README.md | 1 - internal/setup/flux/flux-notifications.yaml | 24 -- internal/setup/flux/prod-helm-release.yaml | 34 -- internal/setup/flux/sync.yaml | 31 -- manifests/helm/Chart.yaml | 10 - manifests/helm/README.md | 1 - manifests/helm/templates/deployment.yaml | 135 ------- manifests/helm/templates/secret.yaml | 9 - manifests/helm/templates/service.yaml | 10 - manifests/helm/templates/subscribers.yaml | 10 - manifests/helm/values.yaml | 21 -- src/Dockerfile | 14 - src/README.md | 1 - src/clients/azdo_client.py | 22 -- src/clients/github_client.py | 19 - src/gitops_connector.py | 82 ----- src/gitops_event_handler.py | 67 ---- src/operators/argo_gitops_operator.py | 68 ---- src/operators/flux_gitops_operator.py | 207 ----------- src/operators/git_commit_status.py | 19 - src/operators/gitops_operator.py | 27 -- src/operators/gitops_operator_factory.py | 24 -- src/orchestrators/azdo_cicd_orchestrator.py | 122 ------- src/orchestrators/cicd_orchestrator.py | 19 - .../cicd_orchestrator_factory.py | 26 -- src/orchestrators/github_cicd_orchestrator.py | 43 --- src/repositories/azdo_git_repository.py | 131 ------- src/repositories/git_repository.py | 27 -- src/repositories/git_repository_factory.py | 25 -- src/repositories/github_git_repository.py | 86 ----- src/repositories/raw_subscriber.py | 72 ---- src/requirements.txt | 5 - src/utils.py | 13 - 51 files changed, 4 insertions(+), 2288 deletions(-) delete mode 100644 .flake8 delete mode 100644 .github/workflows/cd.yaml delete mode 100644 .github/workflows/ci.yaml delete mode 100644 .github/workflows/pr.yaml delete mode 100644 .github/workflows/publish.yaml delete mode 100755 .github/workflows/utils/create-pr.sh delete mode 100755 .github/workflows/utils/generate-manifests.sh delete mode 100755 .github/workflows/utils/publish_helm_chart.sh delete mode 100644 .gitignore delete mode 100644 .mdlrc delete mode 100644 LICENSE delete mode 100644 img/README.md delete mode 100644 img/azdo-commit-status.png delete mode 100644 img/gh-commit-status.png delete mode 100644 img/gitops-connector.png delete mode 100644 img/src/README.md delete mode 100644 img/src/gitops-connector.drawio delete mode 100644 internal/setup/flux/README.md delete mode 100644 internal/setup/flux/flux-notifications.yaml delete mode 100644 internal/setup/flux/prod-helm-release.yaml delete mode 100644 internal/setup/flux/sync.yaml delete mode 100644 manifests/helm/Chart.yaml delete mode 100644 manifests/helm/README.md delete mode 100644 manifests/helm/templates/deployment.yaml delete mode 100644 manifests/helm/templates/secret.yaml delete mode 100644 manifests/helm/templates/service.yaml delete mode 100644 manifests/helm/templates/subscribers.yaml delete mode 100644 manifests/helm/values.yaml delete mode 100644 src/Dockerfile delete mode 100644 src/README.md delete mode 100644 src/clients/azdo_client.py delete mode 100644 src/clients/github_client.py delete mode 100644 src/gitops_connector.py delete mode 100644 src/gitops_event_handler.py delete mode 100644 src/operators/argo_gitops_operator.py delete mode 100644 src/operators/flux_gitops_operator.py delete mode 100644 src/operators/git_commit_status.py delete mode 100644 src/operators/gitops_operator.py delete mode 100644 src/operators/gitops_operator_factory.py delete mode 100644 src/orchestrators/azdo_cicd_orchestrator.py delete mode 100644 src/orchestrators/cicd_orchestrator.py delete mode 100644 src/orchestrators/cicd_orchestrator_factory.py delete mode 100644 src/orchestrators/github_cicd_orchestrator.py delete mode 100644 src/repositories/azdo_git_repository.py delete mode 100644 src/repositories/git_repository.py delete mode 100644 src/repositories/git_repository_factory.py delete mode 100644 src/repositories/github_git_repository.py delete mode 100644 src/repositories/raw_subscriber.py delete mode 100644 src/requirements.txt delete mode 100644 src/utils.py diff --git a/.flake8 b/.flake8 deleted file mode 100644 index fa22783..0000000 --- a/.flake8 +++ /dev/null @@ -1,5 +0,0 @@ -[flake8] -ignore = - E128, # Continuation line under-indented for visual indent - E501, # Long lines - W504 # Line break after binary operator \ No newline at end of file diff --git a/.github/workflows/cd.yaml b/.github/workflows/cd.yaml deleted file mode 100644 index fff5079..0000000 --- a/.github/workflows/cd.yaml +++ /dev/null @@ -1,57 +0,0 @@ -name: CD - -on: - workflow_run: - workflows: ["CI"] - branches: [main] - types: - - completed - -jobs: - deploy_to_dev: - runs-on: ubuntu-latest - environment: dev - if: ${{ github.event.workflow_run.conclusion == 'success' }} - steps: - - name: Checkout - uses: actions/checkout@v2 - - name: Download Image Tags - uses: dawidd6/action-download-artifact@v2 - with: - name: image_tags - workflow: ci.yml - run_id: ${{ github.event.workflow_run.id}} - path: ${{ github.workspace }} - - name: Download Manifests - uses: dawidd6/action-download-artifact@v2 - with: - name: manifests - workflow: ci.yml - run_id: ${{ github.event.workflow_run.id}} - path: ${{ github.workspace }} - - name: Read Image Tags - run: | - echo "IMAGE_TAG=$(cat ${{ github.workspace }}/IMAGE_TAG)" >> $GITHUB_ENV - - name: Generate Manifests - run: | - .github/workflows/utils/generate-manifests.sh ${{ github.workspace }}/manifests gen_manifests all - env: - APP_BUILD_VERSION: ${{ env.IMAGE_TAG }} - - GIT_REPOSITORY_TYPE: ${{ secrets.GIT_REPOSITORY_TYPE }} - CICD_ORCHESTRATOR_TYPE: ${{ secrets.CICD_ORCHESTRATOR_TYPE }} - GITOPS_OPERATOR_TYPE: ${{ secrets.GITOPS_OPERATOR_TYPE }} - GITHUB_GITOPS_REPO_NAME: ${{ secrets.GH_GITOPS_REPO_NAME }} - GITHUB_GITOPS_MANIFEST_REPO_NAME: ${{ secrets.GH_GITOPS_MANIFEST_REPO_NAME }} - GITHUB_ORG_URL: ${{ secrets.GH_ORG_URL }} - - GITOPS_APP_URL: ${{ secrets.GITOPS_APP_URL }} - AZDO_GITOPS_REPO_NAME: ${{ secrets.AZDO_GITOPS_REPO_NAME }} - AZDO_PR_REPO_NAME: ${{ secrets.AZDO_PR_REPO_NAME }} - AZDO_ORG_URL: ${{ secrets.AZDO_ORG_URL }} - ORCHESTRATOR_PAT: ${{ secrets.ORCHESTRATOR_PAT }} - - name: Create PR - run: | - .github/workflows/utils//create-pr.sh -s ${{ github.workspace }}/gen_manifests -d ${{ secrets.MANIFESTS_FOLDER }} -r ${{ secrets.MANIFESTS_REPO }} -b ${{ secrets.MANIFESTS_BRANCH }} -i ${{ github.event.workflow_run.id}} -t ${{ secrets.MANIFESTS_PAT }} -e ${{ secrets.ENVIRONMENT_NAME }} - - diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml deleted file mode 100644 index d22794a..0000000 --- a/.github/workflows/ci.yaml +++ /dev/null @@ -1,66 +0,0 @@ - -name: CI - -on: - push: - branches: - - main - - eedorenko/update-home - -jobs: - code_quality_checks: - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v2 - - uses: TrueBrain/actions-flake8@master - name: Linting - if: "true" - with: - path: ./src - - uses: hadolint/hadolint-action@v1.5.0 - name: Docker Linting - with: - dockerfile: ./src/Dockerfile - - name: MD Linting - uses: actionshub/markdownlint@main - - name: Stay woke - uses: get-woke/woke-action@v0 - with: - # Cause the check to fail on any broke rules - fail-on-error: true - - Build_Push_Image: - runs-on: ubuntu-latest - needs: code_quality_checks - steps: - - name: Checkout - uses: actions/checkout@v2 - - name: Login to DockerHub - uses: docker/login-action@v1 - with: - registry: ghcr.io - username: ${{ github.actor }} - password: ${{ secrets.GITHUB_TOKEN }} - - name: Generate Image Tag - run: | - IMAGE_TAG=${{ secrets.MAJOR_VERSION }}.${{ secrets.MINOR_VERSION }}.${{ secrets.HF_VERSION }}-${{ github.run_number }} - echo "IMAGE_TAG=$IMAGE_TAG" >> $GITHUB_ENV - echo $IMAGE_TAG > $GITHUB_WORKSPACE/IMAGE_TAG - - name: Build and Push to Docker Hub - uses: docker/build-push-action@v2 - with: - push: true - context: ./src - tags: ghcr.io/azure/gitops-connector:${{ env.IMAGE_TAG }}, ghcr.io/azure/gitops-connector:latest - - name: Upload Image Tags - uses: actions/upload-artifact@v2.2.2 - with: - name: image_tags - path: ${{ github.workspace }}/IMAGE_TAG - - name: Upload Manifests Templates - uses: actions/upload-artifact@v2.2.2 - with: - name: manifests - path: ${{ github.workspace }}/manifests - \ No newline at end of file diff --git a/.github/workflows/pr.yaml b/.github/workflows/pr.yaml deleted file mode 100644 index 297a7dc..0000000 --- a/.github/workflows/pr.yaml +++ /dev/null @@ -1,29 +0,0 @@ -name: PR - -on: - pull_request: - branches: [main] - -jobs: - code_quality_checks: - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v2 - - uses: TrueBrain/actions-flake8@master - name: Linting - if: "true" - with: - path: ./src - - uses: hadolint/hadolint-action@v1.5.0 - name: Docker Linting - with: - dockerfile: ./src/Dockerfile - - name: MD Linting - uses: actionshub/markdownlint@main - - name: Stay woke - uses: get-woke/woke-action@v0 - with: - # Cause the check to fail on any broke rules - fail-on-error: true - diff --git a/.github/workflows/publish.yaml b/.github/workflows/publish.yaml deleted file mode 100644 index da5357b..0000000 --- a/.github/workflows/publish.yaml +++ /dev/null @@ -1,49 +0,0 @@ -name: Publish - -on: - # repository_dispatch: - # types: [sync-success] - workflow_run: - workflows: ["CI"] - branches: [main, eedorenko/update-home] - types: - - completed - -jobs: - update_helm_chart: - name: "Update Helm Chart" - environment: prod - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v2.3.4 - - name: Download Image Tags - uses: dawidd6/action-download-artifact@v2 - with: - name: image_tags - workflow: ci.yml - # run_id: ${{ github.event.client_payload.runid }} - run_id: ${{ github.event.workflow_run.id }} - path: ${{ github.workspace }} - - name: Download Manifests - uses: dawidd6/action-download-artifact@v2 - with: - name: manifests - workflow: ci.yml - # run_id: ${{ github.event.client_payload.runid }} - run_id: ${{ github.event.workflow_run.id }} - path: ${{ github.workspace }} - - name: Read Image Tags - run: | - echo "IMAGE_TAG=$(cat ${{ github.workspace }}/IMAGE_TAG)" >> $GITHUB_ENV - - name: Generate Manifests - run: | - .github/workflows/utils/generate-manifests.sh ${{ github.workspace }}/manifests gen_manifests hld_only - env: - APP_BUILD_VERSION: ${{ env.IMAGE_TAG }} - ORCHESTRATOR_PAT: ${{ secrets.ORCHESTRATOR_PAT }} - - name: Publish Helm Chart - run: | - .github/workflows/utils/publish_helm_chart.sh gen_manifests/hld/helm ${{ secrets.HELM_CHARTS_REPO_NAME }} ${{ secrets.HELM_CHARTS_URL }} - env: - TOKEN: ${{ secrets.HELM_CHARTS_PAT }} diff --git a/.github/workflows/utils/create-pr.sh b/.github/workflows/utils/create-pr.sh deleted file mode 100755 index 10a17ee..0000000 --- a/.github/workflows/utils/create-pr.sh +++ /dev/null @@ -1,82 +0,0 @@ -# Copyright (c) Microsoft Corporation. -# Licensed under the MIT License. - -#!/usr/bin/env bash - -while getopts "s:d:r:b:i:t:e:p:" option; - do - case "$option" in - s ) SOURCE_FOLDER=${OPTARG};; - d ) DEST_FOLDER=${OPTARG};; - r ) DEST_REPO=${OPTARG};; - b ) DEST_BRANCH=${OPTARG};; - i ) DEPLOY_ID=${OPTARG};; - t ) TOKEN=${OPTARG};; - e ) ENV_NAME=${OPTARG};; - esac -done -echo "List input params" -echo $SOURCE_FOLDER -echo $DEST_FOLDER -echo $DEST_REPO -echo $DEST_BRANCH -echo $DEPLOY_ID -echo $ENV_NAME -echo "end of list" - -set -euo pipefail # fail on error - -pr_user_name="Git Ops" -pr_user_email="agent@gitops.com" - -git config --global user.email $pr_user_email -git config --global user.name $pr_user_name - -# Clone manifests repo -echo "Clone manifests repo" -repo_url="${DEST_REPO#http://}" -repo_url="${DEST_REPO#https://}" -repo_url="https://automated:$TOKEN@$repo_url" - -echo "git clone $repo_url -b $DEST_BRANCH --depth 1 --single-branch" -git clone $repo_url -b $DEST_BRANCH --depth 1 --single-branch -repo=${DEST_REPO##*/} -repo_name=${repo%.*} -cd "$repo_name" -echo "git status" -git status - -# Create a new branch -deploy_branch_name=deploy/$DEPLOY_ID/$IMAGE_TAG/$DEST_BRANCH - -echo "Create a new branch $deploy_branch_name" -git checkout -b $deploy_branch_name - -# Add generated manifests to the new deploy branch -mkdir -p $DEST_FOLDER -cp -r $SOURCE_FOLDER/* $DEST_FOLDER/ -git add -A -echo "git status" -git status -echo `git status --porcelain | head -1` -if [[ `git status --porcelain | head -1` ]]; then - git commit -m "deployment $DEPLOY_ID" - - # Push to the deploy branch - echo "Push to the deploy branch $deploy_branch_name" - echo "git push --set-upstream $repo_url $deploy_branch_name" - git push --set-upstream $repo_url $deploy_branch_name - - # Create a PR - echo "Create a PR to $DEST_BRANCH" - - owner_repo="${DEST_REPO#https://github.com/}" - echo $owner_repo - pr_response=$(curl -H "Authorization: token $TOKEN" -H "Content-Type: application/json" --fail \ - -d '{"head":"refs/heads/'$deploy_branch_name'", "base":"refs/heads/'$DEST_BRANCH'", "body":"Deploy to '$ENV_NAME'", "title":"deployment '$DEPLOY_ID'"}' \ - "https://api.github.com/repos/$owner_repo/pulls") - # This cli is still very buggy: - # echo $TOKEN | gh auth login --with-token - # pr_response=$(gh pr create --base $DEST_BRANCH --head $deploy_branch_name --title "deployment '$DEPLOY_ID'") - echo $pr_response -fi \ No newline at end of file diff --git a/.github/workflows/utils/generate-manifests.sh b/.github/workflows/utils/generate-manifests.sh deleted file mode 100755 index 8e98133..0000000 --- a/.github/workflows/utils/generate-manifests.sh +++ /dev/null @@ -1,52 +0,0 @@ -# Copyright (c) Microsoft Corporation. -# Licensed under the MIT License. - -#!/bin/bash - -# Generates K8s manifests from Helm + Kustomize templates -# Uses env variables to substitute values -# Requires to be installed: -# - helm -# - kubectl -# - envsubst (https://command-not-found.com/envsubst) -# -echo $1 -echo $2 -echo $3 - -set -euo pipefail # fail on error - -export gen_manifests_file_name='gen_manifests.yaml' - -# Usage: -# generate-manifests.sh FOLDER_WITH_MANIFESTS GENERATED_MANIFESTS_FOLDER -# e.g.: -# generate-manifests.sh cloud-native-ops/azure-vote/manifests gen_manifests -# -# the script will put Helm + Kustomize manifests with substituted variable values -# to gen_manifests/hld folder and plain yaml manifests to gen_manifests/gen_manifests.yaml file - - -mkdir -p $2 -mkdir -p $2/hld -mkdir -p $2/manifest - -# Substitute env variables in Helm yaml files in the manifest folder -for file in `find $1 -type f \( -name "values.yaml" -o -name "Chart.yaml" \)`; do envsubst <"$file" > "$file"1 && mv "$file"1 "$file"; done - -# Generate manifests -# for app in `find $1 -type d -maxdepth 1 -mindepth 1`; do \ -cp -r "$1"/helm $2/hld/ - -if [[ $3 == "all" ]]; then -helm template "$1"/helm > $2/manifest/$gen_manifests_file_name && \ -cat $2/manifest/$gen_manifests_file_name -if [ $? -gt 0 ] - then - echo "Could not render manifests" - exit 1 - fi -fi -# done -pwd - diff --git a/.github/workflows/utils/publish_helm_chart.sh b/.github/workflows/utils/publish_helm_chart.sh deleted file mode 100755 index 84e56f9..0000000 --- a/.github/workflows/utils/publish_helm_chart.sh +++ /dev/null @@ -1,48 +0,0 @@ -# Copyright (c) Microsoft Corporation. -# Licensed under the MIT License. - -#!/usr/bin/env bash - -# Usage: -# publish_helm_chart.sh FOLDER_WITH_CHART CHART_REPO_NAME CHART_REPO_URL - -set -euo pipefail # fail on error - -FOLDER_WITH_CHART=$1 -CHART_REPO_NAME=$2 -CHART_REPO_URL=$3 - -helm package $FOLDER_WITH_CHART - -DEST_BRANCH="gh-pages" - -pr_user_name="Git Ops" -pr_user_email="agent@gitops.com" - -git config --global user.email $pr_user_email -git config --global user.name $pr_user_name - -# Clone manifests repo -echo "Clone manifests repo" -repo_url="${CHART_REPO_NAME#http://}" -repo_url="${CHART_REPO_NAME#https://}" -repo_url="https://automated:$TOKEN@$repo_url" - -echo "git clone $repo_url -b $DEST_BRANCH --depth 1 --single-branch" - -git clone $repo_url -b $DEST_BRANCH --depth 1 --single-branch - -echo "git clone" - -repo=${CHART_REPO_NAME##*/} -repo_name=${repo%.*} -cp *.tgz $repo_name/ -cd $repo_name -helm repo index . --url $CHART_REPO_URL - -git add -A -echo "git status" -git status - -git commit -m "add a new chart" -git push origin \ No newline at end of file diff --git a/.gitignore b/.gitignore deleted file mode 100644 index 3b89c95..0000000 --- a/.gitignore +++ /dev/null @@ -1,132 +0,0 @@ -# Byte-compiled / optimized / DLL files -__pycache__/ -*.py[cod] -*$py.class - -# C extensions -*.so - -# Distribution / packaging -.Python -build/ -develop-eggs/ -dist/ -downloads/ -eggs/ -.eggs/ -lib/ -lib64/ -parts/ -sdist/ -var/ -wheels/ -pip-wheel-metadata/ -share/python-wheels/ -*.egg-info/ -.installed.cfg -*.egg -MANIFEST - -# PyInstaller -# Usually these files are written by a python script from a template -# before PyInstaller builds the exe, so as to inject date/other infos into it. -*.manifest -*.spec - -# Installer logs -pip-log.txt -pip-delete-this-directory.txt - -# Unit test / coverage reports -htmlcov/ -.tox/ -.nox/ -.coverage -.coverage.* -.cache -nosetests.xml -coverage.xml -*.cover -*.py,cover -.hypothesis/ -.pytest_cache/ - -# Translations -*.mo -*.pot - -# Django stuff: -*.log -local_settings.py -db.sqlite3 -db.sqlite3-journal - -# Flask stuff: -instance/ -.webassets-cache - -# Scrapy stuff: -.scrapy - -# Sphinx documentation -docs/_build/ - -# PyBuilder -target/ - -# Jupyter Notebook -.ipynb_checkpoints - -# IPython -profile_default/ -ipython_config.py - -# pyenv -.python-version - -# pipenv -# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. -# However, in case of collaboration, if having platform-specific dependencies or dependencies -# having no cross-platform support, pipenv may install dependencies that don't work, or not -# install all needed dependencies. -#Pipfile.lock - -# PEP 582; used by e.g. github.com/David-OConnor/pyflow -__pypackages__/ - -# Celery stuff -celerybeat-schedule -celerybeat.pid - -# SageMath parsed files -*.sage.py - -# Environments -.env -.venv -env/ -venv/ -ENV/ -env.bak/ -venv.bak/ - -# Spyder project settings -.spyderproject -.spyproject - -# Rope project settings -.ropeproject - -# mkdocs documentation -/site - -# mypy -.mypy_cache/ -.dmypy.json -dmypy.json - -# Pyre type checker -.pyre/ - -# VSCode -.vscode diff --git a/.mdlrc b/.mdlrc deleted file mode 100644 index d0b3b43..0000000 --- a/.mdlrc +++ /dev/null @@ -1,3 +0,0 @@ -rules "~MD013, ~MD009, ~MD012, ~MD033, ~MD034" # Disable "long line", "Trailing spaces", "Multiple consecutive blank lines", "Multiple consecutive blank lines", "Bare URL used" warnings - - diff --git a/LICENSE b/LICENSE deleted file mode 100644 index f90094b..0000000 --- a/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2021 Microsoft Corporation. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/README.md b/README.md index a588aa0..adb19da 100644 --- a/README.md +++ b/README.md @@ -1,341 +1,9 @@ -![build](https://github.com/kaizentm/gitops-connector/actions/workflows/ci.yaml/badge.svg) -![deploy](https://github.com/kaizentm/gitops-connector/actions/workflows/cd.yaml/badge.svg) -![publish](https://github.com/kaizentm/gitops-connector/actions/workflows/publish.yaml/badge.svg) +# GitOps Connector Helm Repository -# GitOps Connector - -GitOps Connector is a custom component with the goal of enriching the integration of a GitOps operator and a CI/CD orchestrator so the user experience in the entire CI/CD process is smoother and more observable. The whole process can be handled and monitored from a CI/CD orchestrator. - -![publish](./img/gitops-connector.png) - -During the reconciliation process a GitOps operator notifies on every phase change and every health check the GitOps connector. This component serves as an adapter, it "knows" how to communicate to a Git repository and it updates the Git commit status so the synchronization progress is visible in the Manifests repository. When the reconciliation including health check has successfully finished or failed the connector notifies a CI/CD orchestrator, so the CD pipelines/workflows may perform corresponding actions such as testing, post-deployment activities and moving on to the next stage in the deployment chain. - -Refer to the following implementations to understand the role the GitOps Connector plays in various GitOps flows: - -- [GitOps with Azure DevOps and ArgoCD/Flux](https://github.com/kaizentm/cloud-native-ops/blob/master/docs/azdo-gitops.md) -- [HLD based CI/CD Pipeline with GitOps connector](https://github.com/kaizentm/cloud-native-ops/blob/master/docs/cicd-hld-pipeline.md) -- [GitOps with GitHub and Flux v2](https://github.com/kaizentm/cloud-native-ops/blob/master/docs/azdo-gitops-githubfluxv2.md) - -## Motivation - -One of the biggest challenges in GitOps is observability. When a CI/CD pipeline orchestrates the deployment process by manipulating manifests in the repository, the real deployment is handled by a GitOps operator. When it happens, how it goes and when it finishes, successfully or not, we don't know. Neither does the CI/CD pipeline. To build a multistage CD pipeline there must be a backward connection from a GitOps operator to CI/CD orchestrator that reports the deployment state/result so the CD pipeline can proceed with testing, notifying, deploying to next environment. - -Partly this challenge can be addressed by leveraging notifications components of GitOps operators such as [FluxCD Notification Controller](https://fluxcd.io/docs/components/notification/) and [ArgoCD Notifications](https://argocd-notifications.readthedocs.io/en/stable/). It's possible to configure basic notifications from Flux/ArgoCD to Azure DevOps/GitHub so the deployment phases are reflected with the Git Commit status in the repo. - -#### So why cannot we "just" use the existing notification functionality of Argo/Flux events? - -The thing is that "basic" is not enough. - -What we need: - - A CD pipeline (e.g. Azure Pipeline) creates a PR to the manifests repo (e.g. GitHub) and waits until it's merged and deployment is finished. When the deployment is finished we need to find out which PR caused this deployment and invoke an Azure Pipelines API to notify a corresponding pipeline run to resume or fail. - - In Git Commit status we want to see more details on what resources have been applied and what resources didn't pass the health check. - -We simply can't do what we need just by configuring notifications in FluxCD/ArgoCD. To implement the logic of what we need we want to write some code and run it somewhere. We need some freedom in getting out of the boundaries of what is "out-of-the-box" in FluxCD/ArgoCD and extending it with custom logic to build a comprehensive CD flow with Azure Pipelines and/or GitHub actions. At the same time we want to keep pipelines simple and not dependent on underlying GitOps operator. Hence, the GitOps connector. - -#### Why cannot we enhance ArgoCD/FluxCD notification functionality to achieve the same? - -Actually we can. The only thing that we'd have to do that twice. And again, when we support another GitOps operator. And separately for GitHub and Azure DevOps. And again when we support another CI/CD orchestrator. So should we? The GitOps connector decouples ArgoCD/FluxCD from GitHub/Azure DevOps. It reduces dependencies serving as a glue between them. -Think of the GitOps connector as of an extension of FluxCD/ArgoCD (one for both) or, in terms of FluxCD notifications, a custom provider for GitHub, Azure DevOps, various observability dashboards (e.g. Spektate). A custom provider extracted as a separate microservice with an independent lifecycle. When we want to build same CI/CD flow with another GitOps operator, we will update the connector keeping the same pipelines setup. When we want to enrich look-n-feel of Git Commit status or use a new feature in Azure DevOps / GitHub or start supporting another CI/CD orchestrator we will update the connector without touching FluxCD/ArgoCD at all. Hence, the GitOps connector. - -## GitOps operators - -The GitOps Connector supports the following Git Ops operators: - -- [FluxCD](https://fluxcd.io) -- [ArgoCD](https://argoproj.github.io/argo-cd/) - -## Git Commit Status Update - -The GitOps Connector supports the following Git repositories: - -- [Azure Repos](https://azure.microsoft.com/services/devops/repos/) -- [GitHub](https://github.com) - -The connector reports the deployment process updates to the Git repositories with the Git commit status: - -|Commit Status in GitHub|Commit Status in Azure Repos| -|---------|-----------| -|![](./img/gh-commit-status.png)|![](./img/azdo-commit-status.png)| - - -In addition to updating the Git commit status in Git repositories, the GitOps connector may optionally notify a list of custom subscribers with a json payload: - -|Attribute|Description|Sample| -|---------|-----------|------| -|commit_id| Commit Id in Manifests repo|42e2e5af9d49de268cd1fda3587788da4ace418a| -|status_name| Event context | Sync; Health| -|state| Event state | Progressing; Failed| -|message| Full event message | Pending - Fetched revision 42e2e5af9d49de268cd1fda3587788da4ace418a| -|callback_url| Callback URL with the details | https://github.com/kaizentm/gitops-manifests/commit/42e2e5af9d49de268cd1fda3587788da4ace418a| -|gitops_operator| GitOps operator (Flux or ArgoCD) | Flux| -|genre| Message category | GitRepository | - - -Refer to [installation guide](#installation) for the details on configuring a list of custom subscribers. - - -## Notification on Deployment Completion - -The GitOps connector analyzes the incoming messages from the GitOps operator and figures out when the deployment is finished, successfully or not. It notifies on this event the CI/CD orchestrator, so the orchestrator can proceed with the CD process. - -The notification mechanism on deployment completion varies for different CI/CD orchestrators. - -### Azure Pipelines - -An Azure CD pipeline is supposed to create a PR to the manifests repo and wait in agentless mode until the PR is merged and the GitOps operator finishes the deployment. It may use PR properties as a storage for the agentless task callback parameters. -When the deployment is finished, the GitOps connector seeks the PR to the manifest repo that caused the deployment and looks for the PR's properties under the **/callback-task-id** path. It expects to find a json object with the following data: - -``` -{"taskid":"$(System.TaskInstanceId)", - "jobid:"$(System.JobId)", - "planurl":"$(System.CollectionUri)", - "planid":"$(System.PlanId)", - "projectid":"$(System.TeamProjectId)", - "pr_num":"$(pr_num)"} -``` - -The GitOps connector uses this data to provide a callback to the agentless task with the following API: +Add GitOps Connector repository to Helm repos: ``` -POST {planurl}{projectid}/_apis/distributedtask/hubs/build/plans/{planid}/events?api-version=2.0-preview.1 -payload = { - 'name': "TaskCompleted", - 'taskId': {taskid}, - 'jobid': {jobid}, - 'result': "succeeded"/"failed" -} +helm repo add gitops-connector https://azure.github.io/gitops-connector/ ``` -Refer to [a sample of such agentless task](https://github.com/kaizentm/cloud-native-ops/blob/master/.pipelines/pr-completion-task-template.yaml) for the implementation details. - -### GitHub Actions - -If the CI/CD orchestrator is GitHub Actions, the GitOps connector sends a [dispatch event](https://docs.github.com/en/rest/reference/repos#create-a-repository-dispatch-event) on the successful deployment completion: - -``` -POST /repos/{owner}/{repo}/dispatches -payload = { - 'event_type': "sync-success", - 'client_payload': {'sha': {commmit_id}, //Commit Id in source repo that started the CI/CD process - 'runid': {github_workflow_run_id} //GitHub Actions Workflow RunId that produced artifacts (e.g. Docker Image Tags) - } -``` - -If the deployment fails, the connector doesn't send a dispatch event to GitHub Actions. - -For the implementation details refer to [the CD workflow in this repo](.github/workflows/cd.yaml) that consumes CI artifacts, generates manifests and issues a PR to the manifests repo. Also, look at [the publish workflow](.github/workflows/publish.yaml) which is triggered on the deployment completion by the dispatch event from the GitOps connector. - - -## Installation - -### Install GitOps Connector with Helm - -Add **kaizentm** repository to Helm repos: - -``` -helm repo add kaizentm https://kaizentm.github.io/charts/ -``` - - -Prepare **values.yaml** file with the following attributes: - -|Attribute|Description|Sample| -|---------|-----------|------| -|gitRepositoryType| Git Repository Type (**AZDO** or **GITHUB**)| GITHUB | -|ciCdOrchestratorType| CI/CD Orchestrator Type (**AZDO** or **GITHUB**)| GITHUB | -|gitOpsOperatorType| GitOps Operator Type (**FLUX** or **ARGOCD**)| FLUX | -|gitOpsAppURL| Call back URL from the Commit Status Window| https://github.com/kaizentm/gitops-manifests/commit; https://github.com/microsoft/spektate| -|orchestratorPAT| GitHub or Azure DevOps personal access token | - - - -If Git Repository Type is AZDO, add the following attributes: -|Attribute|Description|Sample| -|---------|-----------|------| -|azdoGitOpsRepoName| Azure DevOps Mainifests repository name| gen3-manifest | -|azdoOrgUrl| Azure DevOps Organization URL| https://dev.azure.com/DataCommons/ProjectDataCommons | - - - -If CI/CD Orchestrator Type is AZDO, add the following attributes: -|Attribute|Description|Sample| -|---------|-----------|------| -|azdoPrRepoName| Optional. When PRs are not issued to the manifests repo, but to a [separate HLD repo](https://github.com/kaizentm/cloud-native-ops/blob/master/docs/cicd-hld-pipeline.md) | gen3-hld | -|azdoOrgUrl| Azure DevOps Organization URL| https://dev.azure.com/DataCommons/ProjectDataCommons | - - - -If Git Repository Type is GITHUB, add the following attributes: -|Attribute|Description|Sample| -|---------|-----------|------| -|gitHubGitOpsManifestsRepoName| GitHub Mainifests repository name| gitops-manifests | -|gitHubOrgUrl| API url for the GitHub org| https://api.github.com/repos/kaizentm | - - - -If CI/CD Orchestrator Type is GITHUB, add the following attributes: -|Attribute|Description|Sample| -|---------|-----------|------| -|gitHubGitOpsRepoName| GitHub Actions repository name| gitops-connector | -|gitHubOrgUrl| API url for the GitHub org| https://api.github.com/repos/kaizentm | - - - -Optional. If there are custom Git Commit status subscribers: -|Attribute|Description|Sample| -|---------|-----------|------| -|subscribers| List of key:value pairs defining subscriber name and endpoint | subscribers:
 spektate: 'http://spektate-server:5000/api/flux' - - -A sample **values.yaml** file for Flux and GitHub might look like this one: - -``` -gitRepositoryType: GITHUB -ciCdOrchestratorType: GITHUB -gitOpsOperatorType: FLUX -gitHubGitOpsRepoName: gitops-connector -gitHubGitOpsManifestsRepoName: gitops-manifests -gitHubOrgUrl: https://api.github.com/repos/kaizentm -gitOpsAppURL: https://github.com/kaizentm/gitops-manifests/commit -orchestratorPAT: -subscribers: - spektate: 'http://spektate-server:5000/api/flux' -``` - -A sample **values.yaml** file for Flux and Azure DevOps might look like this one: - -``` -gitRepositoryType: AZDO -ciCdOrchestratorType: AZDO -gitOpsOperatorType: FLUX -azdoGitOpsRepoName: manifest-repo -azdoOrgUrl: https://dev.azure.com/MyOrg/MyProject -azdoPrRepoName: hld-repo -gitOpsAppURL: https://github.com/microsoft/spektate -orchestratorPAT: -subscribers: - spektate: 'http://spektate-server:5000/api/flux' -``` - -Install GitOps connector with the following command: - -``` -helm upgrade -i gitops-connector kaizentm/gitops-connector \ ---namespace \ ---values values.yaml - -# Check GitOps connector is up and running: -kubectl get pods -l=app=gitops-connector -n - -# Check the connector logs: -kubectl logs -l=app=gitops-connector -n -f -# DEBUG:root:0 subscribers added. -# INFO:timeloop:Starting Timeloop.. -# [2021-05-25 00:19:23,595] [timeloop] [INFO] Starting Timeloop.. -# [2021-05-25 00:19:23,595] [timeloop] [INFO] Registered job -# [2021-05-25 00:19:23,596] [timeloop] [INFO] Timeloop now started. Jobs will run based on the interval set -# INFO:timeloop:Registered job -# INFO:timeloop:Timeloop now started. Jobs will run based on the interval set -# INFO:root:Starting commit status thread -# INFO:root:Starting periodic PR cleanup -# INFO:root:Finished PR cleanup, sleeping for 30 seconds... - -``` - -### Configure FluxCD to send notifications to GitOps connector - -[FluxCD Notification Controller](https://fluxcd.io/docs/components/notification/) sends notifications to GitOps connector on events related to **GitRepository** and **Kustomization** Flux resources. Apply the following yaml to the cluster to subscribe GitOps connector instance on Flux notifications: - -``` -apiVersion: notification.toolkit.fluxcd.io/v1beta1 -kind: Alert -metadata: - name: gitops-connector - namespace: -spec: - eventSeverity: info - eventSources: - - kind: GitRepository - name: - - kind: Kustomization - name: - providerRef: - name: gitops-connector ---- -apiVersion: notification.toolkit.fluxcd.io/v1beta1 -kind: Provider -metadata: - name: gitops-connector - namespace: -spec: - type: generic - address: http://gitops-connector:8080/gitopsphase -``` - -### Configure ArgoCD to send notifications to GitOps connector - -[ArgoCD Notifications](https://argocd-notifications.readthedocs.io/en/stable/) sends updates on every deployment phase. Apply the following yaml to the cluster to subscribe GitOps connector instance on ArgoCD notifications: - -``` -apiVersion: v1 -kind: ConfigMap -metadata: - name: argocd-notifications-cm - namespace: -data: - config.yaml: | - triggers: - - name: sync-operation-failed - condition: app.status.operationState.phase in ['Error', 'Failed'] - template: sync-operation-status-change - - name: sync-operation-succeeded - condition: app.status.operationState.phase in ['Succeeded'] - template: sync-operation-status-change - - name: sync-operation-running - condition: app.status.operationState.phase in ['Running'] - template: sync-operation-status-change - - name: sync-operation-progressing - condition: app.status.health.status in ['Progressing'] - template: sync-operation-status-change - - name: sync-operation-healthy - condition: app.status.health.status in ['Healthy'] && app.status.operationState.phase in ['Succeeded'] - template: sync-operation-status-change - - name: sync-operation-unhealthy - condition: app.status.health.status in ['Unknown', 'Suspended', 'Degraded', 'Missing'] - template: sync-operation-status-change - templates: - - name: sync-operation-status-change - webhook: - test-receiver: - method: POST - body: | - { - "commitid": "{{.app.status.operationState.operation.sync.revision}}", - "phase": "{{.app.status.operationState.phase}}", - "sync_status": "{{.app.status.sync.status}}", - "health": "{{.app.status.health.status}}", - "message": "{{.app.status.operationState.message}}", - "resources": {{toJson .app.status.resources}} - } ---- -apiVersion: v1 -kind: Secret -metadata: - name: argocd-notifications-secret - namespace: -stringData: - notifiers.yaml: | - webhook: - - name: test-receiver - url: http://gitops-connector:8080/gitopsphase - headers: - - name: Content-Type - value: application/json -type: Opaque -``` - -## Contributing - -This project welcomes contributions and suggestions. Most contributions require you to agree to a Contributor License Agreement (CLA) declaring that you have the right to, and actually do, grant us the rights to use your contribution. For details, visit - -This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/). For more information see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any additional questions or comments. +- [Install GitOps Connector](https://github.com/azure/gitops-connector#installation) diff --git a/img/README.md b/img/README.md deleted file mode 100644 index c73caac..0000000 --- a/img/README.md +++ /dev/null @@ -1 +0,0 @@ -Images, diagrams used in md documents. \ No newline at end of file diff --git a/img/azdo-commit-status.png b/img/azdo-commit-status.png deleted file mode 100644 index ebb6d465e9d6d8141622f512e005f42e3608c47a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 48945 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 CUQwz5 diff --git a/img/gh-commit-status.png b/img/gh-commit-status.png deleted file mode 100644 index 347e86f72b023740420817f77f82e1cd52d28cbd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 69359 zcmeEtWmH^kwkGZx+zABNKyY_=f(8%n?hb)KaCZnEtZ;XCcPl)&I|Wnuy8G*%xp&r@ z-?MJ5Q&p$VYv=6!ZhQ8w@5+i&s7QoJ5D*ZkGScFz5D+k&5D<{z2yoylEewWd5D+Lb zmSSScGGb!n%1-uXmNupk5Ype1G~u<>hHY=RydP8Zes<4h}-l2H$s%t{zVj zj^JogEeajHmHkExaT0`(=I={`;t?X-_Jsfz`jnPKK>TExTa{;trN0ypNBznw5?&~q zSup_qC>{7rpHTpV*2f1yKI_4+%?Yu>q&!K#Yc585nt{8u0gjHPH?hdOvCf(6sHxJvO zzA41T@(sNeX(cB9njpx>jZiawzwj-UZc^cg#;RdMKZW8+Zj^jn?${=-v47qNHudos zg^75H4;Ck;k5}DZ)u9w0xio^yki}(G2(w9ivg!Rz!gWL5xm}URC<_Xj0dNCZ8NcZ9 zxyjJVEX+l^$|8$med?$x@Vq4S&ZHlUR6nYC&zXQnZRK;B3)MtE|Kd?zM=mInMU$P@ zON3Q50nY;UF#x&;0+|*#1fwQ`hS7Nc>AuV0C=Hvuh+2}zOJy^zm`Rlq?kRR90kMSJTDqW_oxUWlA%b&q8`YmA6Xaq zxf7k==Bo3kCG%BKu4-K1n7(iIu^MB44Ei0Cu`S{OK?+^<-oXRd(X?sUU~r14gg_D! z7GfQu*i%8b{chR)7SN?Ng-9uGVKwp6V75kDZ+nfAO) z0r$VpnW{sV^iMvyq3}hL^rb^0^99u#;sL~D`RgJ`%QU79>tH?$Hpfc6#CY&4$eYsa z*`eC4+vUtT!}d_@J!3i)$(j%KE&qhVCF*z#WvmPlGUgub9q%Q9*mD;LrF)I5`;uYo zH&?a9b3wo$!NI|y`OWutnR{)bLn!C?%<~X`tAeJ4m{7mKsS&M5)6_=@Kym?MnL;rJ zpgM%ydO+A?K!^%+<3n!?zmtYeFiMed5E$)pVMQK;H_e4&gf0`|Sc2dTv^Atzf==%i zaX`t0I_RcyKwS$gD@NvrZwE5{mcj@LnZkrK4$`7<3rF4#e4r4K=6)Caf!tCWEc z1C|Y0J3yVBA=c_ErE1Je1hH`Rd-FK7UEC{(LrMMjWGX0yd2l5>Rx#1yzABuAQPg<} zQ#LMyIzN(s%1zPNp{)mU<_%6=|K_N}@{PVTf|%_|O~u)dcr+$vM3Wn=VI|;%XBecf z<}Jsx4t=}EDaShQ76giC2G%-gHU;Hhe9eqe>OBBPURwDOZG_}>RRPg2^k0wz6UqrWJd| z9Ex(~97<)f){P4U74SM_7Ehnd3Bx$!igKCqYzs*W*MGJb%^u#}V0iJi2Xut!D+wuf zD*0E9Pm$)0&*NH5&R0&`&2*H5M8kfX6!$Kqm8+GjmDXw={8Wr#mRQtJ$se7~%Gb^J z7QX*xmqRKxsmG$oVqjmr;nrU3HF+cRboaFN1O-wBDLf6{l6_?Th8o-pWXEOYWLIQs zK?#RLgZmOp9E=p41$PS9{_W{oK8hMjB#Jc(I)NM8$0C7*(J>Qd(=#J|bH7h)T*gF* zQMd#ggnFD_=KN#aeOeY@?Ak^j(l4d3l4Y7?DuH;YVZp&GxE)Y0+r4YnW-MXdsnEX`E_+7SI-k7pN9m%g>jUZGCKOY&4eZ zmTy*cR-)^(OjixPSEG#&tZ8a=P25+`vf6`ve}Q7|#_uMHe~>hx^`oJpxsx15cSp|> z9}`#cVrKbdIb|*I=s8JdwP#99a7^IoDdXAWRgdzfL~n&``Snuu9)H_(C~U6LL)Ihu zLiWQjI-Ed-?Wbp7WLyK~tQ0eur`IkX7fU05T)%DZK=?>Gi-Obru_3iLQ>233tHIV4Mb?N>G zSvSj^edVS|C;IEgE9|TH%Nvpd>JaJ@>4i;Quf^8y@q98^9r!CKE;u*1>L9itKeQv1 z2Bdx1MOYz}YDCNs8${0$H{%0DJTM@Yej+ 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 S!2AOElaWvmuM{)*{J#L$GZ+&9 diff --git a/img/gitops-connector.png b/img/gitops-connector.png deleted file mode 100644 index 0f2819f241544832448a9aeb7bf783d81d9fa63a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 126066 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

J%P1 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 \ No newline at end of file diff --git a/internal/setup/flux/README.md b/internal/setup/flux/README.md deleted file mode 100644 index 4f16b84..0000000 --- a/internal/setup/flux/README.md +++ /dev/null @@ -1 +0,0 @@ -A set of Flux resources to setup GitOps connector development environment. It's supposed to be used by the maintainers of this repository. \ No newline at end of file diff --git a/internal/setup/flux/flux-notifications.yaml b/internal/setup/flux/flux-notifications.yaml deleted file mode 100644 index 89d0262..0000000 --- a/internal/setup/flux/flux-notifications.yaml +++ /dev/null @@ -1,24 +0,0 @@ -apiVersion: notification.toolkit.fluxcd.io/v1beta1 -kind: Alert -metadata: - name: gitops-connector - namespace: flux-system -spec: - eventSeverity: info - eventSources: - - kind: GitRepository - name: gitops-connector-dev - - kind: Kustomization - name: gitops-connector-dev - providerRef: - name: gitops-connector ---- -apiVersion: notification.toolkit.fluxcd.io/v1beta1 -kind: Provider -metadata: - name: gitops-connector - namespace: flux-system -spec: - type: generic - address: http://gitops-connector:8080/gitopsphase - diff --git a/internal/setup/flux/prod-helm-release.yaml b/internal/setup/flux/prod-helm-release.yaml deleted file mode 100644 index 81b6def..0000000 --- a/internal/setup/flux/prod-helm-release.yaml +++ /dev/null @@ -1,34 +0,0 @@ -apiVersion: source.toolkit.fluxcd.io/v1beta1 -kind: HelmRepository -metadata: - name: kaizentm - namespace: flux-system -spec: - url: https://kaizentm.github.io/charts/ - interval: 1m ---- -apiVersion: helm.toolkit.fluxcd.io/v2beta1 -kind: HelmRelease -metadata: - name: gitops-connector - namespace: flux-system -spec: - chart: - spec: - chart: gitops-connector - version: ">=1.x.x-0" - sourceRef: - kind: HelmRepository - name: kaizentm - namespace: flux-system - interval: 2m - interval: 1m - values: - gitRepositoryType: GITHUB - ciCdOrchestratorType: GITHUB - gitOpsOperatorType: FLUX - gitHubGitOpsRepoName: gitops-connector - gitHubGitOpsManifestsRepoName: gitops-manifests - gitHubOrgUrl: https://api.github.com/repos/kaizentm - gitOpsAppURL: https://github.com/kaizentm/gitops-manifests/commit - orchestratorPAT: diff --git a/internal/setup/flux/sync.yaml b/internal/setup/flux/sync.yaml deleted file mode 100644 index aabd400..0000000 --- a/internal/setup/flux/sync.yaml +++ /dev/null @@ -1,31 +0,0 @@ ---- -apiVersion: source.toolkit.fluxcd.io/v1beta1 -kind: GitRepository -metadata: - name: gitops-connector-dev - namespace: flux-system -spec: - interval: 30s - ref: - branch: dev - timeout: 20s - url: https://github.com/kaizentm/gitops-manifests ---- -apiVersion: kustomize.toolkit.fluxcd.io/v1beta1 -kind: Kustomization -metadata: - name: gitops-connector-dev - namespace: flux-system -spec: - targetNamespace: dev - interval: 0m10s - path: ./gitops-connector/manifest - prune: false - healthChecks: - - kind: Deployment - name: gitops-connector - namespace: dev - sourceRef: - kind: GitRepository - name: gitops-connector-dev - diff --git a/manifests/helm/Chart.yaml b/manifests/helm/Chart.yaml deleted file mode 100644 index d15b7e8..0000000 --- a/manifests/helm/Chart.yaml +++ /dev/null @@ -1,10 +0,0 @@ -apiVersion: v2 -name: gitops-connector -description: A Helm chart for GitOps connector - -type: application - -version: $APP_BUILD_VERSION - -appVersion: $APP_BUILD_VERSION - diff --git a/manifests/helm/README.md b/manifests/helm/README.md deleted file mode 100644 index 26f5e4f..0000000 --- a/manifests/helm/README.md +++ /dev/null @@ -1 +0,0 @@ -GitOps connector Helm Chart template. \ No newline at end of file diff --git a/manifests/helm/templates/deployment.yaml b/manifests/helm/templates/deployment.yaml deleted file mode 100644 index f473a91..0000000 --- a/manifests/helm/templates/deployment.yaml +++ /dev/null @@ -1,135 +0,0 @@ -apiVersion: v1 -kind: ConfigMap -metadata: - name: gitops-connector-cm -data: - GIT_REPOSITORY_TYPE: {{ required "Provide a value for gitRepositoryType" .Values.gitRepositoryType}} - CICD_ORCHESTRATOR_TYPE: {{ required "Provide a value for ciCdOrchestratorType" .Values.ciCdOrchestratorType}} - GITOPS_OPERATOR_TYPE: {{ required "Provide a value for gitOpsOperatorType" .Values.gitOpsOperatorType}} - GITOPS_APP_URL: {{ required "Provide a value for gitOpsAppURL" .Values.gitOpsAppURL}} - - {{- if eq .Values.gitRepositoryType "AZDO"}} - AZDO_GITOPS_REPO_NAME: {{ required "Provide a value for azdoGitOpsRepoName" .Values.azdoGitOpsRepoName}} - {{- end }} - - {{- if and (eq .Values.ciCdOrchestratorType "AZDO") (.Values.azdoPrRepoName)}} - AZDO_PR_REPO_NAME: {{ .Values.azdoPrRepoName}} - {{- end }} - - {{- if or (eq .Values.gitRepositoryType "AZDO") (eq .Values.ciCdOrchestratorType "AZDO")}} - AZDO_ORG_URL: {{ required "Provide a value for azdoOrgUrl" .Values.azdoOrgUrl}} - {{- end }} - - - {{- if eq .Values.ciCdOrchestratorType "GITHUB"}} - GITHUB_GITOPS_REPO_NAME: {{ required "Provide a value for gitHubGitOpsRepoName" .Values.gitHubGitOpsRepoName}} - {{- end }} - - {{- if eq .Values.gitRepositoryType "GITHUB"}} - GITHUB_GITOPS_MANIFEST_REPO_NAME: {{ required "Provide a value for gitHubGitOpsManifestsRepoName" .Values.gitHubGitOpsManifestsRepoName}} - {{- end }} - - {{- if or (eq .Values.gitRepositoryType "GITHUB") (eq .Values.ciCdOrchestratorType "GITHUB")}} - GITHUB_ORG_URL: {{ required "Provide a value for gitHubOrgUrl" .Values.gitHubOrgUrl}} - {{- end }} ---- -apiVersion: apps/v1 -kind: Deployment -metadata: - name: gitops-connector - labels: - app: gitops-connector -spec: - replicas: 1 - selector: - matchLabels: - app: gitops-connector - template: - metadata: - labels: - app: gitops-connector - spec: - containers: - - name: connector - image: {{ .Values.imageName}}:{{ .Values.imageTag}} - env: - - name: GIT_REPOSITORY_TYPE - valueFrom: - configMapKeyRef: - name: gitops-connector-cm - key: GIT_REPOSITORY_TYPE - - name: CICD_ORCHESTRATOR_TYPE - valueFrom: - configMapKeyRef: - name: gitops-connector-cm - key: CICD_ORCHESTRATOR_TYPE - - name: GITOPS_OPERATOR_TYPE - valueFrom: - configMapKeyRef: - name: gitops-connector-cm - key: GITOPS_OPERATOR_TYPE - - name: GITOPS_APP_URL - valueFrom: - configMapKeyRef: - name: gitops-connector-cm - key: GITOPS_APP_URL - {{- if eq .Values.gitRepositoryType "AZDO"}} - - name: AZDO_GITOPS_REPO_NAME - valueFrom: - configMapKeyRef: - name: gitops-connector-cm - key: AZDO_GITOPS_REPO_NAME - {{- end}} - {{- if and (eq .Values.ciCdOrchestratorType "AZDO") (.Values.azdoPrRepoName)}} - - name: AZDO_PR_REPO_NAME - valueFrom: - configMapKeyRef: - name: gitops-connector-cm - key: AZDO_PR_REPO_NAME - {{- end}} - {{- if or (eq .Values.gitRepositoryType "AZDO") (eq .Values.ciCdOrchestratorType "AZDO")}} - - name: AZDO_ORG_URL - valueFrom: - configMapKeyRef: - name: gitops-connector-cm - key: AZDO_ORG_URL - {{- end}} - {{- if eq .Values.ciCdOrchestratorType "GITHUB"}} - - name: GITHUB_GITOPS_REPO_NAME - valueFrom: - configMapKeyRef: - name: gitops-connector-cm - key: GITHUB_GITOPS_REPO_NAME - {{- end}} - {{- if eq .Values.gitRepositoryType "GITHUB"}} - - name: GITHUB_GITOPS_MANIFEST_REPO_NAME - valueFrom: - configMapKeyRef: - name: gitops-connector-cm - key: GITHUB_GITOPS_MANIFEST_REPO_NAME - {{- end}} - {{- if or (eq .Values.gitRepositoryType "GITHUB") (eq .Values.ciCdOrchestratorType "GITHUB")}} - - name: GITHUB_ORG_URL - valueFrom: - configMapKeyRef: - name: gitops-connector-cm - key: GITHUB_ORG_URL - {{- end}} - - name: PAT - valueFrom: - secretKeyRef: - name: gitops-connector-secret - key: PAT - imagePullPolicy: Always - ports: - - name: http - containerPort: {{ .Values.containerPort}} -{{ if .Values.subscribers }} - volumeMounts: - - name: subscribers - mountPath: /subscribers - volumes: - - name: subscribers - configMap: - name: gitops-connector-subscribers-config -{{ end }} diff --git a/manifests/helm/templates/secret.yaml b/manifests/helm/templates/secret.yaml deleted file mode 100644 index f55b39a..0000000 --- a/manifests/helm/templates/secret.yaml +++ /dev/null @@ -1,9 +0,0 @@ -{{ if .Values.orchestratorPAT }} -apiVersion: v1 -kind: Secret -metadata: - name: gitops-connector-secret -stringData: - PAT: {{ .Values.orchestratorPAT}} -type: Opaque -{{ end }} \ No newline at end of file diff --git a/manifests/helm/templates/service.yaml b/manifests/helm/templates/service.yaml deleted file mode 100644 index ef16cf3..0000000 --- a/manifests/helm/templates/service.yaml +++ /dev/null @@ -1,10 +0,0 @@ -apiVersion: v1 -kind: Service -metadata: - name: gitops-connector -spec: - selector: - app: gitops-connector - ports: - - port: {{ .Values.containerPort}} - targetPort: {{ .Values.containerPort}} diff --git a/manifests/helm/templates/subscribers.yaml b/manifests/helm/templates/subscribers.yaml deleted file mode 100644 index ca6e982..0000000 --- a/manifests/helm/templates/subscribers.yaml +++ /dev/null @@ -1,10 +0,0 @@ -{{ if .Values.subscribers }} -apiVersion: v1 -kind: ConfigMap -metadata: - name: gitops-connector-subscribers-config -data: - {{- range $key, $val := .Values.subscribers }} - {{ $key }}: {{ $val | quote }} - {{- end }} -{{ end }} diff --git a/manifests/helm/values.yaml b/manifests/helm/values.yaml deleted file mode 100644 index d244c05..0000000 --- a/manifests/helm/values.yaml +++ /dev/null @@ -1,21 +0,0 @@ -imageName: kaizentm/gitops-connector -imageTag: $IMAGE_TAG -containerPort: 8080 - -gitRepositoryType: $GIT_REPOSITORY_TYPE -ciCdOrchestratorType: $CICD_ORCHESTRATOR_TYPE -gitOpsOperatorType: $GITOPS_OPERATOR_TYPE -gitOpsAppURL: $GITOPS_APP_URL -azdoGitOpsRepoName: $AZDO_GITOPS_REPO_NAME -azdoPrRepoName: $AZDO_PR_REPO_NAME -azdoOrgUrl: $AZDO_ORG_URL -orchestratorPAT: $ORCHESTRATOR_PAT - -gitHubGitOpsRepoName: $GITHUB_GITOPS_REPO_NAME -gitHubGitOpsManifestsRepoName: $GITHUB_GITOPS_MANIFEST_REPO_NAME -gitHubOrgUrl: $GITHUB_ORG_URL - -# Optional list of subscriber endpoints to send raw JSON to -#subscribers: -# sub1: http://localhost:8080/gitopsphase -# sub2: http://127.0.0.1:1234/ diff --git a/src/Dockerfile b/src/Dockerfile deleted file mode 100644 index 0112a29..0000000 --- a/src/Dockerfile +++ /dev/null @@ -1,14 +0,0 @@ -FROM python:3.9-slim - -ENV APP_HOME /app -ENV WORKERS 1 -ENV THREADS 1 -ENV PREDICTIVE_UNIT_SERVICE_PORT 8080 -WORKDIR $APP_HOME -COPY . ./ -ENV PYTHONUNBUFFERED=1 - - -RUN pip install --no-cache-dir -r ./requirements.txt - -CMD ["sh","-c","gunicorn --bind 0.0.0.0:$PREDICTIVE_UNIT_SERVICE_PORT --workers $WORKERS --threads $THREADS gitops_event_handler"] \ No newline at end of file diff --git a/src/README.md b/src/README.md deleted file mode 100644 index 1a2e136..0000000 --- a/src/README.md +++ /dev/null @@ -1 +0,0 @@ -GitOps Connector source code. \ No newline at end of file diff --git a/src/clients/azdo_client.py b/src/clients/azdo_client.py deleted file mode 100644 index 4088742..0000000 --- a/src/clients/azdo_client.py +++ /dev/null @@ -1,22 +0,0 @@ -# Copyright (c) Microsoft Corporation. -# Licensed under the MIT License. - -import base64 -import utils - - -class AzdoClient: - - def __init__(self): - # https://dev.azure.com/csedevops/GitOps - self.org_url = utils.getenv("AZDO_ORG_URL") - # token is supposed to be stored in a secret without any transformations - token = base64.b64encode(f':{utils.getenv("PAT")}'.encode("ascii")).decode("ascii") - self.headers = {'authorization': f'Basic {token}', - 'Content-Type': 'application/json'} - - def get_rest_api_headers(self) -> dict: - return self.headers - - def get_rest_api_url(self) -> str: - return self.org_url diff --git a/src/clients/github_client.py b/src/clients/github_client.py deleted file mode 100644 index 762547d..0000000 --- a/src/clients/github_client.py +++ /dev/null @@ -1,19 +0,0 @@ -# Copyright (c) Microsoft Corporation. -# Licensed under the MIT License. - -import utils - - -class GitHubClient: - - def __init__(self): - self.org_url = utils.getenv("GITHUB_ORG_URL") # https://api.github.com/repos/kaizentm - # token is supposed to be stored in a secret without any transformations - self.token = utils.getenv("PAT") - self.headers = {'Authorization': f'token {self.token}'} - - def get_rest_api_headers(self) -> dict: - return self.headers - - def get_rest_api_url(self) -> str: - return self.org_url diff --git a/src/gitops_connector.py b/src/gitops_connector.py deleted file mode 100644 index 356226f..0000000 --- a/src/gitops_connector.py +++ /dev/null @@ -1,82 +0,0 @@ -# Copyright (c) Microsoft Corporation. -# Licensed under the MIT License. - -import logging -from queue import PriorityQueue - -from operators.gitops_operator_factory import GitopsOperatorFactory -from repositories.git_repository_factory import GitRepositoryFactory -from repositories.raw_subscriber import RawSubscriberFactory -from orchestrators.cicd_orchestrator_factory import CicdOrchestratorFactory - - -# Instance is shared across threads. -class GitopsConnector: - - def __init__(self): - self._gitops_operator = GitopsOperatorFactory.new_gitops_operator() - self._git_repository = GitRepositoryFactory.new_git_repository() - self._cicd_orchestrator = CicdOrchestratorFactory.new_cicd_orchestrator(self._git_repository) - - # Subscribers that take unprocessed JSON, forwarded from the notifications - self._raw_subscribers = RawSubscriberFactory.new_raw_subscribers() - - # Commit status notification queue - self._global_message_queue = PriorityQueue() - - def process_gitops_phase(self, phase_data, req_time): - if self._gitops_operator.is_supported_message(phase_data): - self._queue_commit_statuses(phase_data, req_time) - self._notify_orchestrator(phase_data) - else: - logging.debug(f'Message is not supported: {phase_data}') - - def _queue_commit_statuses(self, phase_data, req_time): - commit_statuses = self._gitops_operator.extract_commit_statuses(phase_data) - for commit_status in commit_statuses: - self._global_message_queue.put(item=(req_time, commit_status)) - - def _notify_orchestrator(self, phase_data): - is_finished, is_successful = self._gitops_operator.is_finished(phase_data) - if is_finished: - commit_id = self._gitops_operator.get_commit_id(phase_data) - self._cicd_orchestrator.notify_on_deployment_completion(commit_id, is_successful) - - # Entrypoint for the periodic task to search for abandoned PRs linked to - # agentless tasks. - def notify_abandoned_pr_tasks(self): - try: - self._cicd_orchestrator.notify_abandoned_pr_tasks() - except Exception as e: - logging.error(f'Failed to notify abandoned PRs: {e}') - - # Entrypoint for the commit status thread. - # The thread waits for items in the priority queue and sends the messages - # in the order of the request received time. - def drain_commit_status_queue(self): - while (True): - try: - # Blocking get - commit_status = self._global_message_queue.get() - - if not commit_status: - break - - # Queue entry is (received time, commit_status) - commit_status = commit_status[1] - - # Handling an exception as it crashes the draining thread - try: - self._git_repository.post_commit_status(commit_status) - - for subscriber in self._raw_subscribers: - subscriber.post_commit_status(commit_status) - except Exception as e: - logging.error(f'Failed to update GitCommit Status: {e}') - - except Exception as e: - logging.error(f'Unexpected exception in the message queue draining thread: {e}') - - -if __name__ == "__main__": - git_ops_connector = GitopsConnector() diff --git a/src/gitops_event_handler.py b/src/gitops_event_handler.py deleted file mode 100644 index 2239580..0000000 --- a/src/gitops_event_handler.py +++ /dev/null @@ -1,67 +0,0 @@ -# Copyright (c) Microsoft Corporation. -# Licensed under the MIT License. - -from flask import Flask, request -import logging -from timeloop import Timeloop -from datetime import timedelta -import atexit -import time -from threading import Thread -from gitops_connector import GitopsConnector - -# Time in seconds between background PR cleanup jobs -PR_CLEANUP_INTERVAL = 1 * 30 -DISABLE_POLLING_PR_TASK = False - -logging.basicConfig(level=logging.DEBUG) - -application = Flask(__name__) - -gitops_connector = GitopsConnector() - - -@application.route("/gitopsphase", methods=['POST']) -def gitopsphase(): - # Use per process timer to stash the time we got the request - req_time = time.monotonic_ns() - - payload = request.get_json() - - logging.debug(f'GitOps phase: {payload}') - - gitops_connector.process_gitops_phase(payload, req_time) - - return f'GitOps phase: {payload}', 200 - - -# Periodic PR cleanup task -cleanup_task = Timeloop() - - -@cleanup_task.job(interval=timedelta(seconds=PR_CLEANUP_INTERVAL)) -def pr_polling_thread_worker(): - logging.info("Starting periodic PR cleanup") - gitops_connector.notify_abandoned_pr_tasks() - logging.info(f'Finished PR cleanup, sleeping for {PR_CLEANUP_INTERVAL} seconds...') - - -# Git status queue drain task -def init_commit_status_thread(): - logging.info("Starting commit status thread") - status_thread = Thread(target=gitops_connector.drain_commit_status_queue) - status_thread.start() - - -def interrupt(): - if not DISABLE_POLLING_PR_TASK: - cleanup_task.stop() - - -if not DISABLE_POLLING_PR_TASK: - cleanup_task.start() - init_commit_status_thread() - atexit.register(interrupt) - -if __name__ == "__main__": - application.run(host='0.0.0.0') diff --git a/src/operators/argo_gitops_operator.py b/src/operators/argo_gitops_operator.py deleted file mode 100644 index 45d1482..0000000 --- a/src/operators/argo_gitops_operator.py +++ /dev/null @@ -1,68 +0,0 @@ -# Copyright (c) Microsoft Corporation. -# Licensed under the MIT License. - -from operators.gitops_operator import GitopsOperatorInterface -from operators.git_commit_status import GitCommitStatus - - -class ArgoGitopsOperator(GitopsOperatorInterface): - - def extract_commit_statuses(self, phase_data): - commit_statuses = [] - - commit_id = self.get_commit_id(phase_data) - phase_status, sync_status, health_status = self._get_statuses(phase_data) - - phase_status = self._new_git_commit_status( - commit_id=commit_id, - status_name='Phase', - state=phase_status, - message=phase_data['phase'] + ": " + phase_data['message']) - commit_statuses.append(phase_status) - - (health_summary, sync_summary) = self._get_deployment_status_summary(phase_data['resources']) - - sync_status = self._new_git_commit_status( - commit_id=commit_id, - status_name='Sync', - state=sync_status, - message=sync_summary) - commit_statuses.append(sync_status) - - health_status = self._new_git_commit_status( - commit_id=commit_id, - status_name='Health', - state=health_status, - message=health_summary) - commit_statuses.append(health_status) - - return commit_statuses - - def is_finished(self, phase_data): - phase_status, _, health_status = self._get_statuses(phase_data) - - is_finished = \ - phase_status != 'Inconclusive' \ - and phase_status != 'Running' \ - and health_status != 'Progressing' - - is_successful = phase_status == 'Succeeded' and health_status == 'Healthy' - - return is_finished, is_successful - - def get_commit_id(self, phase_data) -> str: - return phase_data['commitid'] - - def _get_statuses(self, phase_data): - return phase_data['phase'], phase_data['sync_status'], phase_data['health'] - - def _new_git_commit_status(self, commit_id, status_name, state, message: str): - return GitCommitStatus(commit_id=commit_id, - status_name=status_name, - state=state, - message=message, - callback_url=self.callback_url, - gitops_operator='ArgoCD') - - def is_supported_message(self, phase_data) -> bool: - return True diff --git a/src/operators/flux_gitops_operator.py b/src/operators/flux_gitops_operator.py deleted file mode 100644 index 2b77c84..0000000 --- a/src/operators/flux_gitops_operator.py +++ /dev/null @@ -1,207 +0,0 @@ -# Copyright (c) Microsoft Corporation. -# Licensed under the MIT License. - -from collections import defaultdict -import logging -from operators.gitops_operator import GitopsOperatorInterface -from operators.git_commit_status import GitCommitStatus - -KUSTOMIZATION_PHASE = "Kustomization" -PROGRESSING_STATE = "Progressing" -HEALTH_CHECK_FAILED_STATE = "HealthCheckFailed" - - -class FluxGitopsOperator(GitopsOperatorInterface): - - def extract_commit_statuses(self, phase_data): - commit_statuses = [] - - commit_id = self.get_commit_id(phase_data) - - reason_state = phase_data['reason'] - reason_message = self._map_reason_to_description( - reason_state, - phase_data['message']) - kind = self._get_message_kind(phase_data) - - # Generic status message regardless of kind. - status = self._new_git_commit_status( - commit_id=commit_id, - status_name='Status', - state=reason_state, - message=reason_message, - kind=kind) - commit_statuses.append(status) - - # For Kustomization we have more detailed data to parse in addition to status. - if self._get_message_kind(phase_data) == KUSTOMIZATION_PHASE: - if phase_data['reason'] == PROGRESSING_STATE: - self._add_progression_summary(phase_data, commit_id, commit_statuses, kind) - # For Progressive state adding a generic message again so the overall Status will be "pending" - # (Bug in AzDO) - status = self._new_git_commit_status( - commit_id=commit_id, - status_name='Status', - state=reason_state, - message=reason_message, - kind=kind) - commit_statuses.append(status) - elif phase_data['reason'] == HEALTH_CHECK_FAILED_STATE: - self._add_health_check_summary(phase_data, commit_id, commit_statuses, reason_message, kind) - - return commit_statuses - - def _add_progression_summary(self, phase_data, commit_id, commit_statuses, kind): - progression_summary = self._parse_kustomization_progression_summary(phase_data) - if progression_summary: - for (resource_name, status_msg) in progression_summary.items(): - status = self._new_git_commit_status( - commit_id=commit_id, - status_name=resource_name, - # As far as the Kustomize controller is concerned, these are finished - # before reconciliation starts. We don't want this to affect the overall - # status, so map to the relevant N/A status in the Git repo provider. - state="NotApplicable", - message=status_msg, - kind=kind) - commit_statuses.append(status) - - def _add_health_check_summary(self, phase_data, commit_id, commit_statuses, reason_message, kind): - health_check_summary = self._parse_health_check_summary(phase_data) - if health_check_summary: - for resource_name in health_check_summary: - status = self._new_git_commit_status( - commit_id=commit_id, - status_name=resource_name, - state=HEALTH_CHECK_FAILED_STATE, - message=reason_message, - kind=kind) - commit_statuses.append(status) - - def _parse_health_check_summary(self, phase_data): - raw_message = phase_data['message'] - resources = [] - resources_array_start = raw_message.index("[") - resources_array_end = raw_message.index("]") - if resources_array_start > 0 and resources_array_end > 0 and resources_array_end > resources_array_start: - resources_string = raw_message[resources_array_start + 1: resources_array_end - 1] - if resources_string: - resources = [r.strip() for r in resources_string.split(", ")] - - if not resources: - resources.append(raw_message) - return resources - - def _new_git_commit_status(self, commit_id, status_name, state, message, kind): - return GitCommitStatus( - commit_id=commit_id, - status_name=status_name, - state=state, - message=message, - callback_url=self.callback_url, - gitops_operator='Flux', - genre=kind) - - def is_finished(self, phase_data): - status = phase_data['reason'] - kind = self._get_message_kind(phase_data) - - is_finished = kind == "Kustomization" and status != 'Progressing' - - is_successful = status == 'ReconciliationSucceeded' - - return is_finished, is_successful - - def get_commit_id(self, phase_data) -> str: - if self._get_message_kind(phase_data) == "Kustomization": - revision = phase_data['metadata']['revision'] - elif self._get_message_kind(phase_data) == 'GitRepository': - # 'Fetched revision: user/blah/githash' - revision = phase_data['message'] - revisionArray = revision.split('/') - commit_id = revisionArray[-1] - - return commit_id - - def is_supported_message(self, phase_data) -> bool: - kind = self._get_message_kind(phase_data) - logging.debug(f'Kind: {kind}') - - return (kind == 'Kustomization' or kind == 'GitRepository') - - def _get_message_kind(self, phase_data) -> str: - return phase_data['involvedObject']['kind'] - - def _map_reason_to_description(self, reason, original_message): - # Explicitly handle all statuses so we make sure we don't silently miss any. - reason_description_map = { - "ReconciliationSucceeded": original_message, - "ReconciliationFailed": original_message, - "Progressing": "Reconcilation underway.", - "DependencyNotReady": original_message, - "PruneFailed": original_message, - "ArtifactFailed": original_message, - "BuildFailed": original_message, - "HealthCheckFailed": "Health Check Failed", - "ValidationFailed": "Manifests validation failed.", - "info": original_message, - "error": original_message - } - return reason_description_map[reason] - - # Build and return an array of progression summaries. - # For example, ["service: 6 configured"] - def _parse_kustomization_progression_summary(self, phase_data): - if phase_data['reason'] != "Progressing": - return [] - - # The message contains kubectl output of newline separated - # resources and states. May contain a trailing newline. - raw_message = phase_data['message'] - entries = raw_message.rstrip().split("\n") - - if not entries or len(entries) == 0: - return - - # Iterate on the entries and build our map. - # Raw entry example: - # deployment.apps/abc configured - # deployment.apps/def configured - status_map = defaultdict(lambda: defaultdict(int)) - warning_count = 0 - status_arr = {} - try: - for entry in entries: - # Split into resource and status - if entry.startswith("Warning"): - warning_count += 1 - continue - - entry_tuple = entry.split(" ") - if len(entry_tuple) != 2: - raise RuntimeError("Parsing error") - (resource, status) = entry_tuple - - # Disregard the resource name - (resource_type, _, _) = resource.partition("/") - status_map[resource_type][status] += 1 - - # Build the status string array - for (resource_name, statuses) in status_map.items(): - # service: - summary = "" - first = True - for (status_name, status_count) in statuses.items(): - if not first: - summary += ", " - first = False - # E.g. "5 configured" - summary += f'{status_count} {status_name}' - status_arr[resource_name] = summary - - if warning_count > 0: - status_arr['warnings'] = f'Warnings: {warning_count}' - except RuntimeError: - status_arr['Info'] = raw_message - - return status_arr diff --git a/src/operators/git_commit_status.py b/src/operators/git_commit_status.py deleted file mode 100644 index bb08066..0000000 --- a/src/operators/git_commit_status.py +++ /dev/null @@ -1,19 +0,0 @@ -# Copyright (c) Microsoft Corporation. -# Licensed under the MIT License. - -from dataclasses import dataclass - - -@dataclass -class GitCommitStatus: - commit_id: str - status_name: str - state: str - message: str - callback_url: str - gitops_operator: str - genre: str - - def __lt__(self, other): - # Status messages need to come last. - return self.genre != "Status" diff --git a/src/operators/gitops_operator.py b/src/operators/gitops_operator.py deleted file mode 100644 index 1554d46..0000000 --- a/src/operators/gitops_operator.py +++ /dev/null @@ -1,27 +0,0 @@ -# Copyright (c) Microsoft Corporation. -# Licensed under the MIT License. - -import utils -from abc import ABC, abstractmethod - - -class GitopsOperatorInterface(ABC): - - def __init__(self): - self.callback_url = utils.getenv("GITOPS_APP_URL") - - @abstractmethod - def extract_commit_statuses(self, phase_data): - pass - - @abstractmethod - def is_finished(self, phase_data) -> bool: - pass - - @abstractmethod - def get_commit_id(self, phase_data) -> str: - pass - - @abstractmethod - def is_supported_message(self, phase_data) -> bool: - pass diff --git a/src/operators/gitops_operator_factory.py b/src/operators/gitops_operator_factory.py deleted file mode 100644 index f7d114f..0000000 --- a/src/operators/gitops_operator_factory.py +++ /dev/null @@ -1,24 +0,0 @@ -# Copyright (c) Microsoft Corporation. -# Licensed under the MIT License. - -import utils -from operators.argo_gitops_operator import ArgoGitopsOperator -from operators.flux_gitops_operator import FluxGitopsOperator -from operators.gitops_operator import GitopsOperatorInterface - -FLUX_TYPE = "FLUX" -ARGOCD_TYPE = "ARGOCD" - - -class GitopsOperatorFactory: - - @staticmethod - def new_gitops_operator() -> GitopsOperatorInterface: - gitops_operator_type = utils.getenv("GITOPS_OPERATOR_TYPE", FLUX_TYPE) - - if gitops_operator_type == FLUX_TYPE: - return FluxGitopsOperator() - elif gitops_operator_type == ARGOCD_TYPE: - return ArgoGitopsOperator() - else: - raise NotImplementedError(f'The GitOps operator {gitops_operator_type} is not supported') diff --git a/src/orchestrators/azdo_cicd_orchestrator.py b/src/orchestrators/azdo_cicd_orchestrator.py deleted file mode 100644 index f3662e8..0000000 --- a/src/orchestrators/azdo_cicd_orchestrator.py +++ /dev/null @@ -1,122 +0,0 @@ -# Copyright (c) Microsoft Corporation. -# Licensed under the MIT License. - -import logging -import requests -from datetime import datetime, timedelta -import dateutil.parser -from orchestrators.cicd_orchestrator import CicdOrchestratorInterface -from repositories.git_repository import GitRepositoryInterface -from clients.azdo_client import AzdoClient - -# Callback task timeout in minutes. PRs abandoned before this time will not be processed. -MAX_TASK_TIMEOUT = 72 * 60 -TASK_CUTOFF_DURATION = timedelta(minutes=MAX_TASK_TIMEOUT) - - -class AzdoCicdOrchestrator(CicdOrchestratorInterface): - - def __init__(self, git_repository: GitRepositoryInterface): - super().__init__(git_repository) - self.azdo_client = AzdoClient() - self.headers = self.azdo_client.get_rest_api_headers() - - def notify_on_deployment_completion(self, commit_id, is_successful): - pr_num = self.git_repository.get_pr_num(commit_id) - if pr_num: - self._update_pr_task(is_successful, pr_num) - - # Update the Azure Pipeline task waiting for the PR to complete. - # is_alive: If true, the PR is active and absence of task data is an error. - def _update_pr_task(self, is_successful, pr_num, is_alive=True): - pr_task = self._get_pr_task_data(pr_num, is_alive) - if not pr_task: - if is_alive: - logging.error(f'PR {pr_num} has no metadata! Cannot complete task callback.') - return False - logging.info(f'PR {pr_num}: Rollout {is_successful}, attempting task completion callback...') - - if is_successful: - state = 'succeeded' - else: - state = 'failed' - - # The build task may have been cancelled, timed out, etc. - # Working with the plan in this state can cause 500 errors. - # Finish gracefully so ArgoCD doesn't keep calling us. - if self._plan_already_completed(pr_task): - return False - - planurl = pr_task['planurl'] - projectid = pr_task['projectid'] - planid = pr_task['planid'] - url = f'{planurl}{projectid}/_apis/distributedtask/hubs/build/plans/{planid}/events?api-version=2.0-preview.1' - data = { - 'name': "TaskCompleted", - 'taskId': pr_task['taskid'], - 'jobid': pr_task['jobid'], - 'result': state - } - response = requests.post(url=url, headers=self.headers, json=data) - logging.debug(f'Update PR task response content{response.content}') - # Throw appropriate exception if request failed - response.raise_for_status() - - logging.info(f'PR {pr_num}: Successfully completed task {pr_task["taskid"]}') - return True - - def _get_pr_task_data(self, pr_num, is_alive=True): - return self.git_repository.get_pr_metadata(pr_num) - - # Given a PR task, check if it's parent plan has already completed. - # Note: Completed does not necessarily mean it succeeded. - def _plan_already_completed(self, pr_task): - planurl = pr_task['planurl'] - projectid = pr_task['projectid'] - planid = pr_task['planid'] - url = f'{planurl}{projectid}/_apis/distributedtask/hubs/build/plans/{planid}' - - response = requests.get(url=url, headers=self.headers) - # Throw appropriate exception if request failed - response.raise_for_status() - - plan_info = response.json() - return plan_info['state'] == 'completed' - - def notify_abandoned_pr_tasks(self): - update_count = 0 - prs = self.git_repository.get_prs('abandoned') - - if prs: - for pr in prs: - if not self._should_update_abandoned_pr(pr): - continue - - pr_num = pr['pullRequestId'] - if not self._update_abandoned_pr(pr_num, pr_data=pr): - update_count += 1 - logging.debug(f'Updated abandoned PR {pr_num}') - - if update_count > 0: - logging.info(f'Processed {update_count} abandoned PRs via query') - - def _should_update_abandoned_pr(self, pr_data): - closed_date = pr_data.get('closedDate') - if not closed_date: - return True - - # Azure DevOps returns a ISO 8601 formatted datetime string. - closed_datetime = dateutil.parser.isoparse(closed_date) - - # Azure DevOps returns a timezone, so make now() relative to that. - now = datetime.now(closed_datetime.tzinfo) - - return now - TASK_CUTOFF_DURATION <= closed_datetime - - # Returns False if the PR is no longer alive and we notified the task. - def _update_abandoned_pr(self, pr_num, pr_data): - pr_status = pr_data['status'] - if (pr_status == 'abandoned'): - # update_pr_task returns True if the task was updated. - return not self._update_pr_task(False, str(pr_num), is_alive=False) - return True diff --git a/src/orchestrators/cicd_orchestrator.py b/src/orchestrators/cicd_orchestrator.py deleted file mode 100644 index d530cc6..0000000 --- a/src/orchestrators/cicd_orchestrator.py +++ /dev/null @@ -1,19 +0,0 @@ -# Copyright (c) Microsoft Corporation. -# Licensed under the MIT License. - -from abc import ABC, abstractmethod -from repositories.git_repository import GitRepositoryInterface - - -class CicdOrchestratorInterface(ABC): - - def __init__(self, git_repository: GitRepositoryInterface): - self.git_repository = git_repository - - @abstractmethod - def notify_on_deployment_completion(self, commit_id, is_successful): - pass - - @abstractmethod - def notify_abandoned_pr_tasks(self): - pass diff --git a/src/orchestrators/cicd_orchestrator_factory.py b/src/orchestrators/cicd_orchestrator_factory.py deleted file mode 100644 index 21b3808..0000000 --- a/src/orchestrators/cicd_orchestrator_factory.py +++ /dev/null @@ -1,26 +0,0 @@ -# Copyright (c) Microsoft Corporation. -# Licensed under the MIT License. - -import utils -from orchestrators.cicd_orchestrator import CicdOrchestratorInterface -from repositories.git_repository import GitRepositoryInterface -from orchestrators.azdo_cicd_orchestrator import AzdoCicdOrchestrator -from orchestrators.github_cicd_orchestrator import GitHubCicdOrchestrator - - -GITHUB_TYPE = "GITHUB" -AZDO_TYPE = "AZDO" - - -class CicdOrchestratorFactory: - - @staticmethod - def new_cicd_orchestrator(git_repository: GitRepositoryInterface) -> CicdOrchestratorInterface: - cicd_orchestrator_type = utils.getenv("CICD_ORCHESTRATOR_TYPE", AZDO_TYPE) - - if cicd_orchestrator_type == AZDO_TYPE: - return AzdoCicdOrchestrator(git_repository) - elif cicd_orchestrator_type == GITHUB_TYPE: - return GitHubCicdOrchestrator(git_repository) - else: - raise NotImplementedError(f'The CI/CD orchestrator {cicd_orchestrator_type} is not supported') diff --git a/src/orchestrators/github_cicd_orchestrator.py b/src/orchestrators/github_cicd_orchestrator.py deleted file mode 100644 index bc03c70..0000000 --- a/src/orchestrators/github_cicd_orchestrator.py +++ /dev/null @@ -1,43 +0,0 @@ -# Copyright (c) Microsoft Corporation. -# Licensed under the MIT License. - -import logging -import utils -import requests -from orchestrators.cicd_orchestrator import CicdOrchestratorInterface -from repositories.git_repository import GitRepositoryInterface -from clients.github_client import GitHubClient - - -class GitHubCicdOrchestrator(CicdOrchestratorInterface): - - def __init__(self, git_repository: GitRepositoryInterface): - super().__init__(git_repository) - self.gitops_repo_name = utils.getenv("GITHUB_GITOPS_REPO_NAME") # cloud-native-ops - self.github_client = GitHubClient() - self.headers = self.github_client.get_rest_api_headers() - self.rest_api_url = self.github_client.get_rest_api_url() - - def notify_on_deployment_completion(self, commit_id, is_successful): - if is_successful: - source_commit_id, run_id = self._get_source_commit_id_run_id(commit_id) - self._send_repo_dispatch_event(source_commit_id, run_id) - - def notify_abandoned_pr_tasks(self): - pass - - def _get_source_commit_id_run_id(self, manifest_commitid): - commitMessage = self.git_repository.get_commit_message(manifest_commitid) - commitMessageArray = commitMessage.split('/', 5) - runid = commitMessageArray[2] - commitid = commitMessageArray[3] - logging.info(f'CommitId {commitid}') - return commitid, runid - - def _send_repo_dispatch_event(self, commmit_id, run_id): - url = f'{self.rest_api_url}/{self.gitops_repo_name}/dispatches' - event_type = 'sync-success' - data = {'event_type': event_type, 'client_payload': {'sha': commmit_id, 'runid': run_id}} - response = requests.post(url=url, headers=self.headers, json=data) - # Throw appropriate exception if request failed - response.raise_for_status() diff --git a/src/repositories/azdo_git_repository.py b/src/repositories/azdo_git_repository.py deleted file mode 100644 index 9f8647f..0000000 --- a/src/repositories/azdo_git_repository.py +++ /dev/null @@ -1,131 +0,0 @@ -# Copyright (c) Microsoft Corporation. -# Licensed under the MIT License. - -import os -import json -import requests -import utils -from clients.azdo_client import AzdoClient -from repositories.git_repository import GitRepositoryInterface - - -PR_METADATA_KEY = "callback-task-id" - - -class AzdoGitRepository(GitRepositoryInterface): - - def __init__(self): - self.gitops_repo_name = utils.getenv("AZDO_GITOPS_REPO_NAME") - self.pr_repo_name = os.getenv("AZDO_PR_REPO_NAME", self.gitops_repo_name) - self.azdo_client = AzdoClient() - self.repository_api = f'{self.azdo_client.get_rest_api_url()}/_apis/git/repositories/{self.gitops_repo_name}' - self.pr_repository_api = f'{self.azdo_client.get_rest_api_url()}/_apis/git/repositories/{self.pr_repo_name}' - self.headers = self.azdo_client.get_rest_api_headers() - - def post_commit_status(self, commit_status): - url = f'{self.repository_api}/commits/{commit_status.commit_id}/statuses?api-version=6.0' - - azdo_status = self._map_to_azdo_status(commit_status.state) - - # Context and targetUrl must be unique for multiple statuses to appear, - # otherwise the previous context/targetUrl message will be replaced. - data = { - 'state': azdo_status, - 'description': commit_status.status_name + ": " + commit_status.message, - 'targetUrl': commit_status.callback_url + "?noop=" + commit_status.status_name, - # Shows up as "genre/name" underneath the message and status. - 'context': { - 'name': commit_status.status_name, - 'genre': commit_status.genre - } - } - response = requests.post(url=url, headers=self.headers, json=data) - - # Throw appropriate exception if request failed - response.raise_for_status() - - def get_pr_metadata(self, pr_num): - # https://docs.microsoft.com/en-us/rest/api/azure/devops/git/pull%20request%20properties/list?view=azure-devops-rest-6.0 - url = f'{self.pr_repository_api}/pullRequests/{pr_num}/properties?api-version=6.0-preview' - - response = requests.get(url=url, headers=self.headers) - # Throw appropriate exception if request failed - response.raise_for_status() - - # Navigate the properties response structure - result = response.json() - if (result['count'] > 0): - properties = result['value'] - entry = properties.get(PR_METADATA_KEY) - if entry: - # At this point, we have the original JSON string we stored. - return json.loads(entry['$value']) - return None - - # Returns an array of PR dictionaries with an optional status filter - # pr_status values: https://docs.microsoft.com/en-us/rest/api/azure/devops/git/pull%20requests/get%20pull%20requests?view=azure-devops-rest-6.0#pullrequeststatus - def get_prs(self, pr_status): - pr_status_param = '' - if pr_status: - pr_status_param = f'searchCriteria.status={pr_status}&' - url = f'{self.pr_repository_api}/pullRequests?{pr_status_param}api-version=6.0' - response = requests.get(url=url, headers=self.headers) - # Throw appropriate exception if request failed - response.raise_for_status() - - pr_response = json.loads(response.content) - if pr_response['count'] == 0: - return None - - return pr_response['value'] - - def _map_to_azdo_status(self, status): - status_map = { - "Succeeded": "succeeded", - "Failed": "failed", - "Error": "error", - "Inconclusive": "pending", - "Running": "pending", - "OutOfSync": "pending", - "Synced": "succeeded", - "Unknown": "notApplicable", - "Progressing": "pending", - "Degraded": "error", - "Healthy": "succeeded", - "Missing": "failed", - - "Suspended": "error", - "ReconciliationSucceeded": "succeeded", - "ReconciliationFailed": "failed", - "DependencyNotReady": "error", - "PruneFailed": "failed", - "ArtifactFailed": "failed", - "BuildFailed": "failed", - "HealthCheckFailed": "failed", - "ValidationFailed": "failed", - "NotApplicable": "notApplicable", - "info": "pending", - "error": "failed" - } - return status_map[status] - - def get_commit_message(self, commit_id): - url = f'{self.repository_api}/commits/{commit_id}?api-version=6.0' - - response = requests.get(url=url, headers=self.headers) - # Throw appropriate exception if request failed - response.raise_for_status() - - commit = response.json() - comment = commit['comment'] - - return comment - - def get_pr_num(self, commit_id) -> str: - comment = self.get_commit_message(commit_id) - MERGED_PR = "Merged PR " - pr_num = None - if MERGED_PR in comment: - merged_pr_index = comment.index(MERGED_PR) - pr_num = comment[merged_pr_index + len(MERGED_PR): comment.index(":", merged_pr_index)] - return pr_num diff --git a/src/repositories/git_repository.py b/src/repositories/git_repository.py deleted file mode 100644 index 57f8984..0000000 --- a/src/repositories/git_repository.py +++ /dev/null @@ -1,27 +0,0 @@ -# Copyright (c) Microsoft Corporation. -# Licensed under the MIT License. - -from abc import ABC, abstractmethod - - -class GitRepositoryInterface(ABC): - - @abstractmethod - def post_commit_status(self, commit_status): - pass - - @abstractmethod - def get_pr_num(self, commit_id) -> str: - pass - - @abstractmethod - def get_pr_metadata(self, commit_id): - pass - - @abstractmethod - def get_prs(self, pr_status): - pass - - @abstractmethod - def get_commit_message(self, commit_id): - pass diff --git a/src/repositories/git_repository_factory.py b/src/repositories/git_repository_factory.py deleted file mode 100644 index e0615fd..0000000 --- a/src/repositories/git_repository_factory.py +++ /dev/null @@ -1,25 +0,0 @@ -# Copyright (c) Microsoft Corporation. -# Licensed under the MIT License. - -import os -from repositories.git_repository import GitRepositoryInterface -from repositories.azdo_git_repository import AzdoGitRepository -from repositories.github_git_repository import GitHubGitRepository - - -AZDO_TYPE = "AZDO" -GITHUB_TYPE = "GITHUB" - - -class GitRepositoryFactory: - - @staticmethod - def new_git_repository() -> GitRepositoryInterface: - git_repository_type = os.getenv("GIT_REPOSITORY_TYPE", AZDO_TYPE) - - if git_repository_type == AZDO_TYPE: - return AzdoGitRepository() - elif git_repository_type == GITHUB_TYPE: - return GitHubGitRepository() - else: - raise NotImplementedError(f'The Git repository {git_repository_type} is not supported') diff --git a/src/repositories/github_git_repository.py b/src/repositories/github_git_repository.py deleted file mode 100644 index 703ad55..0000000 --- a/src/repositories/github_git_repository.py +++ /dev/null @@ -1,86 +0,0 @@ -# Copyright (c) Microsoft Corporation. -# Licensed under the MIT License. - -import requests -import utils -import logging -from clients.github_client import GitHubClient -from repositories.git_repository import GitRepositoryInterface - - -class GitHubGitRepository(GitRepositoryInterface): - - MAX_DESCR_LENGTH = 140 - - def __init__(self): - self.gitops_repo_name = utils.getenv("GITHUB_GITOPS_MANIFEST_REPO_NAME") # gitops-manifests - self.github_client = GitHubClient() - self.headers = self.github_client.get_rest_api_headers() - self.rest_api_url = self.github_client.get_rest_api_url() - - def post_commit_status(self, commit_status): - url = f'{self.rest_api_url}/{self.gitops_repo_name}/statuses/{commit_status.commit_id}' - - github_state = self._map_to_github_state(commit_status.state) - message = commit_status.message - if len(message) > self.MAX_DESCR_LENGTH: - message = message[:self.MAX_DESCR_LENGTH] - - data = {'state': github_state, 'description': message, 'context': commit_status.status_name} - logging.info(f'Url {url}: Headers {self.headers}: Data {data}') - response = requests.post(url=url, headers=self.headers, json=data) - # Throw appropriate exception if request failed - response.raise_for_status() - - def _map_to_github_state(self, reason): - state_map = { - "Suspended": "error", - "ReconciliationSucceeded": "success", - "ReconciliationFailed": "failure", - "Progressing": "pending", - "DependencyNotReady": "error", - "PruneFailed": "failure", - "ArtifactFailed": "failure", - "BuildFailed": "failure", - "HealthCheckFailed": "failure", - "ValidationFailed": "failure", - "NotApplicable": "success", - "info": "pending", - "error": "failure", - - "Succeeded": "success", - "Failed": "failure", - "Error": "error", - "Inconclusive": "pending", - "Running": "pending", - "OutOfSync": "pending", - "Synced": "success", - "Unknown": "success", - "Progressing": "pending", - "Degraded": "error", - "Healthy": "success", - "Missing": "failure" - - } - return state_map[reason] - - def get_commit_message(self, commit_id): - url = f'{self.rest_api_url}/{self.gitops_repo_name}/commits/{commit_id}' - - response = requests.get(url=url, headers=self.headers) - # Throw appropriate exception if request failed - response.raise_for_status() - - responseJSON = response.json() - commitMessage = responseJSON['commit']['message'] - - return commitMessage - - def get_pr_num(self, commit_id) -> str: - pass - - def get_pr_metadata(self, commit_id): - pass - - def get_prs(self, pr_status): - pass diff --git a/src/repositories/raw_subscriber.py b/src/repositories/raw_subscriber.py deleted file mode 100644 index c0f0e16..0000000 --- a/src/repositories/raw_subscriber.py +++ /dev/null @@ -1,72 +0,0 @@ - -# Copyright (c) Microsoft Corporation. -# Licensed under the MIT License. - -import dataclasses -import json -import logging -import os -import os.path -from urllib.parse import urlparse -import requests - -SUBSCRIBERS_DIR = '/subscribers' - - -# An endpoint that handles unprocessed JSON forwarded from notifications. -class RawSubscriber: - def __init__(self, url_endpoint): - self._url_endpoint = url_endpoint - - def post_commit_status(self, commit_status): - json_data = dataclasses.asdict(commit_status) - logging.debug("Sending raw json to subscriber: " + json.dumps(json_data)) - response = requests.post(url=self._url_endpoint, json=json_data) - response.raise_for_status() - - -class RawSubscriberFactory: - @staticmethod - def new_raw_subscribers() -> list[RawSubscriber]: - logging.debug("Adding configured subscribers...") - subscribers = RawSubscriberFactory._read_subscribers() - logging.debug(f'{len(subscribers)} subscribers added.') - - return subscribers - - @staticmethod - def _read_subscribers(): - subscribers = [] - - try: - subscriber_files = os.listdir(SUBSCRIBERS_DIR) - except FileNotFoundError: - logging.error("Subscriber config not found. Defaulting to no subscribers.") - return subscribers - if not subscriber_files: - return subscribers - - for subscriber_file in subscriber_files: - subscriber_file = os.path.join(SUBSCRIBERS_DIR, subscriber_file) - if not os.path.isfile(subscriber_file): - continue - - try: - with open(subscriber_file, 'r') as subscriber_fh: - url = subscriber_fh.readline() - - try: - urlparse(url) - except ValueError: - logging.error(f"URL is invalid, subscriber has not been added: {url}") - continue - - subscriber = RawSubscriber(url) - - subscribers.append(subscriber) - logging.info(f"Added subscriber {subscriber_file} with endpoint {url}") - except OSError: - logging.error(f"Error opening subscriber config at {subscriber_file}") - continue - - return subscribers diff --git a/src/requirements.txt b/src/requirements.txt deleted file mode 100644 index 78c71fd..0000000 --- a/src/requirements.txt +++ /dev/null @@ -1,5 +0,0 @@ -Flask==1.1.1 -gunicorn==20.0.4 -requests -timeloop -python-dateutil \ No newline at end of file diff --git a/src/utils.py b/src/utils.py deleted file mode 100644 index d0d3602..0000000 --- a/src/utils.py +++ /dev/null @@ -1,13 +0,0 @@ -# Copyright (c) Microsoft Corporation. -# Licensed under the MIT License. - -import os - - -def getenv(key, default=None): - env_value = os.getenv(key, default) - - if not env_value: - raise IndentationError(f'The env variable {key} is not initialized') - - return env_value From a0c93b587f846a3ed433855dde61866a57c70144 Mon Sep 17 00:00:00 2001 From: Eugene Date: Thu, 29 Jul 2021 16:19:53 -0700 Subject: [PATCH 02/17] index --- index.yaml | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 index.yaml diff --git a/index.yaml b/index.yaml new file mode 100644 index 0000000..000b1c1 --- /dev/null +++ b/index.yaml @@ -0,0 +1,3 @@ +apiVersion: v1 +entries: {} +generated: "2021-07-29T16:19:36.495409-07:00" From 04b3e6878cff8c76e719c0c516c3999e744d9f3c Mon Sep 17 00:00:00 2001 From: Git Date: Thu, 29 Jul 2021 23:27:52 +0000 Subject: [PATCH 03/17] add a new chart --- gitops-connector-1.0.1-89.tgz | Bin 0 -> 1597 bytes index.yaml | 15 +++++++++++++-- 2 files changed, 13 insertions(+), 2 deletions(-) create mode 100644 gitops-connector-1.0.1-89.tgz diff --git a/gitops-connector-1.0.1-89.tgz b/gitops-connector-1.0.1-89.tgz new file mode 100644 index 0000000000000000000000000000000000000000..a381d1a244250261b142c7e7fdd8aa21492b2edb GIT binary patch literal 1597 zcmV-D2EzFtiwG0|00000|0w_~VMtOiV@ORlOnEsqVl!4SWK%V1T2nbTPgYhoO;>Dc zVQyr3R8em|NM&qo0PI@dZ`#Nc&$Ffc52LgXt@H)#gh0R6-AOc|33p9w5fZ8Qf;MIY zR&1}cyHL>_|NF^nS|r9efYmJ!px$!&qZqoF0tc+6&w?IAQUcaZuku16Qp>^ z#X95gxQ?X`9Q?GV%cXS zgIW{JI7OV$sCg{1hT-F4W5@Sz`=51C(6p%O4>ILF zrhvVXPi&7f-~<@DNT&X4%A@U#bT}j4gFU`NzT#qzMu;O_0g%`An&m3X5f{C|u-`R}o8G|ae;E$G zm|Y#7pMm11sZH?+j!a5s_6P$4QD+2!C}fQzsNaQEsL-`oC;(@@v-6?RKfCPS4Emjc z(O*}SEEgrpWW7S)MQ>o3H$%hhzDQd!#bpf3^`$j+Omiqw;F>zZjG13OY!&M&0ME}g zupaY?H#5?!Fw?MQ?C< z`|)Ub7%y)>e$OG0RoKkwEcE7auX|w2@m_VVd!M>DgYO1j-~e(93d71xS$%#YbJjUQ z%b{u0*FQyRGLyGUev)dnnvyOS$oE+zt{CSrS6HKDh!g3cd+e}a5Cm&UJ{Xygt)QP` z@yW<^&=dfM9nl@mbP=~EpHoYfEe5b8Hqpcs%0QgV8s)11EMWx_v*37UEwVW~ClEoR z#n#0Bj>-38p%>Z*Xe{<16zt6sa7!hUdK-^{aJN5E;_9hJfjKPhf8co^KV&+Rx{W5^DadACsZx9;9@1UZ-yXV?kAtnL>wjjT0N-mzVysvtxOak0qG z%UZrU<|6S;n#b(GFB0_`pJYAp0~iy4)b%+pMU`*|4$5kloR`ulS;5Fwm|eowww@0v zK$HZ}8m?Kv{Hi=r60GHg-I zUu0f5MP_1Jqo9E1)NxGW*jA8SoUdrk;(nh{&Wen1!nvPXI(JK(=9rnT#X@<04o=dt zH+4S=se>>h&eX+MWa`P3rzWK^xWQ->@re$N;)rm?0)3V(6`!WGqsyF}%&&#>0t2H@ znO)zx{gb5P{x>|R8+Zv?`Tl#FfB$Kxo``q&h1kobBA-)Nd*c#WvQMzNC z+TQp)8Y`Y=(%C4dc(I6{iwz$=O>q*tyLQ*VPAcP{&TI?6J^`$X|C7S+KiX>RWFPT5A0`>%uz~>;xcH$G&k4TSDDuV_-ag{_|KRNmIiUYq ziU`Dao)`>^g~$eC%3ts_B^*a%l6Q;4ggYGW(?d}T@!#)u&ab+4ceFVjtKwg6=HtJq vYVCdeZ$t9G-VA@;DSiYTznIl`4RSAg*~?z`vT^x400960PVMaJ05SjokisTd literal 0 HcmV?d00001 diff --git a/index.yaml b/index.yaml index 000b1c1..0e86cb1 100644 --- a/index.yaml +++ b/index.yaml @@ -1,3 +1,14 @@ apiVersion: v1 -entries: {} -generated: "2021-07-29T16:19:36.495409-07:00" +entries: + gitops-connector: + - apiVersion: v2 + appVersion: 1.0.1-89 + created: "2021-07-29T23:27:52.648244595Z" + description: A Helm chart for GitOps connector + digest: 8a9bd3ac6414345bdf7ec16354787d4d5df2c6caad8a0a3ec02535ee44630056 + name: gitops-connector + type: application + urls: + - https://azure.github.io/gitops-connector/gitops-connector-1.0.1-89.tgz + version: 1.0.1-89 +generated: "2021-07-29T23:27:52.647701477Z" From b4d81427542bfbc008d687bd48fb4ecaa67e1205 Mon Sep 17 00:00:00 2001 From: Eugene Date: Thu, 29 Jul 2021 16:40:44 -0700 Subject: [PATCH 04/17] 100 --- gitops-connector-1.0.0.tgz | Bin 0 -> 1593 bytes index.yaml | 14 ++++++++++++-- 2 files changed, 12 insertions(+), 2 deletions(-) create mode 100644 gitops-connector-1.0.0.tgz diff --git a/gitops-connector-1.0.0.tgz b/gitops-connector-1.0.0.tgz new file mode 100644 index 0000000000000000000000000000000000000000..568b706757390f5b1a7f9ade2cd3b3f629a83ac5 GIT binary patch literal 1593 zcmV-92FCdxiwG0|00000|0w_~VMtOiV@ORlOnEsqVl!4SWK%V1T2nbTPgYhoO;>Dc zVQyr3R8em|NM&qo0PI@bZ`w!@&$Ffc52LgXt#p7*_^7PAlW0N{?wZ&lPNd!o+L#Sk zvAxcEp`tnd_mkJgpKC)J3fDX4rOkfLZ)SI9e%@tbG2;0(lejK68KI4{DWa^tK#qO1 zEs&G;b#>j^lePS>=LXRBIJ!a%{6Fra!YL$B$Cpk_Y4(&)rZ>M z;Jgn#xa)ns?f=eEUe4|d3#Xf}kZV0)pB4LKP0}0CcuGVz*p|ILFrhwhC zM=Y25zzF!*9Ro#Q;g1{b8W@q@BqM!QdIP~sMTIG2p4w>G#6R|cA#t2Q{VuFRg|6jN0yrC-osYEP*=7I681@WpxTz*l zI!cs@dbz%ffuZR)BTetWNLw+>Wem&pr8V_*eZ;fihC0HenO{9@c?Bl8eWI>M1Aw}*O-lgD*wkJaT9^R#O zBo*R)Vv9b^*&&`$g^17$pfdlx-xzj+P8(iqxZ_F1%Q`k}6T%nnz8KfVz_`5qc(OW- zm$x6k=MadBZ02+pdh@t9J+S3?uX@*mPyHL?yMY&IfY^eerHcjfJiifFjPsZ)Y)~@ziL}u@w*6ob1ZxSt8GR3%K|jU(tI=0M zkpO&b^X_n_gP1w}oLZ`EF@P1Zi6*8{24ZK{C|?C&1uKx42*)#PkMr%h3w$VCBQaL*8S5?du}Lv|k$K@1 zk%?)IoC4}I+t!I~nL%=~zoLa7_j`mgzsLxujCrZ0a~HK~j+yCNE~V$^;3TbjQ&*Ib zItX)O&m4S3X0AwiYElY=6O7goo2t+#jtEyQ&}Y$7@o7psy3EPR{8~6KFfjU*+4r5> zzey_Yf5U^ig_oeU@4xMC?*6yaRhozU-(5&H>~k+D5JZdchWI8-VjEl!N9oRI)N&{1 z(OCXElg>st#mi;%Vyt=SX@-;7-M72`b5a@qbZ(jW^$B2I{GTeF{QHmGQ4aCH3n__i zzVjP|cYH~gy_OT+o`obUMOkaRmb?aPea)o)dhtQRGfAynV!rU*PQ=*`WSbiU|03 z9v=+LCC>(Y%HQxbBMe7ll6Q;aggYD`(nC=S@jvYM&ae7)XS_Wf>*8N-<>S94D~I2I r?nLrG;0%A@$$tbKznInc4e}rdImkf{vUT|<00960EG^I;05SjoIG!Q( literal 0 HcmV?d00001 diff --git a/index.yaml b/index.yaml index 0e86cb1..2bccf60 100644 --- a/index.yaml +++ b/index.yaml @@ -3,7 +3,7 @@ entries: gitops-connector: - apiVersion: v2 appVersion: 1.0.1-89 - created: "2021-07-29T23:27:52.648244595Z" + created: "2021-07-29T16:40:34.50602-07:00" description: A Helm chart for GitOps connector digest: 8a9bd3ac6414345bdf7ec16354787d4d5df2c6caad8a0a3ec02535ee44630056 name: gitops-connector @@ -11,4 +11,14 @@ entries: urls: - https://azure.github.io/gitops-connector/gitops-connector-1.0.1-89.tgz version: 1.0.1-89 -generated: "2021-07-29T23:27:52.647701477Z" + - apiVersion: v2 + appVersion: 1.0.0 + created: "2021-07-29T16:40:34.505535-07:00" + description: A Helm chart for GitOps connector + digest: 6f48603dc3a95dacdf2ee620d23ee65c6e6a3b1b88d11456bba90ef4a18a0acf + name: gitops-connector + type: application + urls: + - https://azure.github.io/gitops-connector/gitops-connector-1.0.0.tgz + version: 1.0.0 +generated: "2021-07-29T16:40:34.504778-07:00" From f79b742b630b58208195d1539150742a55db2664 Mon Sep 17 00:00:00 2001 From: Git Date: Thu, 29 Jul 2021 23:59:37 +0000 Subject: [PATCH 05/17] add a new chart --- gitops-connector-1.0.1-90.tgz | Bin 0 -> 1595 bytes index.yaml | 16 +++++++++++++--- 2 files changed, 13 insertions(+), 3 deletions(-) create mode 100644 gitops-connector-1.0.1-90.tgz diff --git a/gitops-connector-1.0.1-90.tgz b/gitops-connector-1.0.1-90.tgz new file mode 100644 index 0000000000000000000000000000000000000000..1ec8334fc38a8adb6a8ee006fb7699ee27282579 GIT binary patch literal 1595 zcmV-B2E_RviwG0|00000|0w_~VMtOiV@ORlOnEsqVl!4SWK%V1T2nbTPgYhoO;>Dc zVQyr3R8em|NM&qo0PI@dZ`#Nc&$A`|hf&&xR{8=qfzYpYcM?r#!d(+v#EH~06b*dxBh2wfOF-X+sI8*9{@ zVxLjO2#tm(JZoqkE)MoQ?{@fE1qpo{lQ6pkyM`e7piXlG8lBuyTLp=vB*{`@+WQ;Va}?57=kL`B;+l1~i@$kqx%xGawJ(&+davd5Q;kftbxpvG~1pgaFaDpQpUH7gwQM#D36IjJLE-FA4B*+|6}8{@ly7kU7(1_icqRo44Yq|PQDv|>%G zzPT5ro0+^`Vo$2q>r%Q{AkXugam6@~dxZ^32KPuC-DBGim>}3o@WJSN*bL?==AVqd z3W@~aW1CNhD;>nl>F3l|Wt#!48k=Zg3S~fcW{>h+09LR9io4)=Wj)e4yCxvsMDwGG z?HxDY%cWWvH_(KiK}gu0C*W2>1obxNf$+3HQR1knL5?{r?tkFL5I}EJB_S1!oFj-N>xFK65?{1U6<8- zd!38GHt9ZQ4|WlV&)6hui67800SHZ>vr<$E_h6u`WP!hwM#-9vY>nC_-P+FcK?R7C z;Mu@5YdXIwOBDOSeVU{c&05=3S?b3%mO{(!CAhM(ORez&8w&SGl+}C2dJTPSQp{eY zUbsZ0Vp<|^0ri<}>%_LqAi3CI(ZY}CJwlmZ>MxQeK zzH|F0QN{gl=%`zG30nL9+sVKGoOb2Y!~O3rC>!><=MxB`MR-Ge6DF|@u7{&^=QC=# zlk#y_1~CVqVaSQq~%h2MX4UB9_ZTxpS z`S|a)5A}a1RMqy^a<#vfe;%$S8KPFv0Tg=iniQ`IzS$^pCm7y7;>G{q?Ht*l{#uF% z_;(&>hUJoH1HR-hc$yK0Bc9~lqL%aywL^L+QX&3_{oeUizu}CxCu3dw%k6ypw`D~+ t#Q!cR|Le{0*PZ-F!10S&W8WYTbf5zr=s;VizXJdO|NmO=Le&5=0077LBuoGR literal 0 HcmV?d00001 diff --git a/index.yaml b/index.yaml index 2bccf60..c0df3f5 100644 --- a/index.yaml +++ b/index.yaml @@ -1,9 +1,19 @@ apiVersion: v1 entries: gitops-connector: + - apiVersion: v2 + appVersion: 1.0.1-90 + created: "2021-07-29T23:59:37.752460651Z" + description: A Helm chart for GitOps connector + digest: 57f5b8f35867f44ddc3f83bd1a080a70ed7c68c8fae1f3401023199385a6672b + name: gitops-connector + type: application + urls: + - https://azure.github.io/gitops-connector/gitops-connector-1.0.1-90.tgz + version: 1.0.1-90 - apiVersion: v2 appVersion: 1.0.1-89 - created: "2021-07-29T16:40:34.50602-07:00" + created: "2021-07-29T23:59:37.752098031Z" description: A Helm chart for GitOps connector digest: 8a9bd3ac6414345bdf7ec16354787d4d5df2c6caad8a0a3ec02535ee44630056 name: gitops-connector @@ -13,7 +23,7 @@ entries: version: 1.0.1-89 - apiVersion: v2 appVersion: 1.0.0 - created: "2021-07-29T16:40:34.505535-07:00" + created: "2021-07-29T23:59:37.751752312Z" description: A Helm chart for GitOps connector digest: 6f48603dc3a95dacdf2ee620d23ee65c6e6a3b1b88d11456bba90ef4a18a0acf name: gitops-connector @@ -21,4 +31,4 @@ entries: urls: - https://azure.github.io/gitops-connector/gitops-connector-1.0.0.tgz version: 1.0.0 -generated: "2021-07-29T16:40:34.504778-07:00" +generated: "2021-07-29T23:59:37.751210882Z" From c078331dab9379ee79efeaa965e248c0953d80b9 Mon Sep 17 00:00:00 2001 From: Git Date: Fri, 30 Jul 2021 00:05:23 +0000 Subject: [PATCH 06/17] add a new chart --- gitops-connector-1.0.1-91.tgz | Bin 0 -> 1594 bytes index.yaml | 18 ++++++++++++++---- 2 files changed, 14 insertions(+), 4 deletions(-) create mode 100644 gitops-connector-1.0.1-91.tgz diff --git a/gitops-connector-1.0.1-91.tgz b/gitops-connector-1.0.1-91.tgz new file mode 100644 index 0000000000000000000000000000000000000000..7889da9341cfa95e96ab0397ce3359d2dd2ce0ea GIT binary patch literal 1594 zcmV-A2F3XwiwG0|00000|0w_~VMtOiV@ORlOnEsqVl!4SWK%V1T2nbTPgYhoO;>Dc zVQyr3R8em|NM&qo0PI@dbK1BQ&$DOpKkTG^XlK5Foj~Z>(sGy%$C? z3V32$jwI;N9RK@`W#gZ+Aq|D=9sANoT4_JK+FzC!+no5UW)aWB7ALfEHbIov=g4&q zHbttcs;AAS_*Yfc{J-k4c6y*SwSY;})RO~MYc^Xa2cT{YK?O}2NAy5_wXD2yKM5h< zzQdH+#M5DRtRUZy|J3SgU90_HQ%0Cs)b_a;?Z72=T(AN+fd@k2!sdq0Aod`|LoU`K z?^p_-`&b9$`;Kj)U@v7>khE)S{P(C3|1;!FG23VYSQYz#L@19zRzx82_a%FF3}VdM1h74qx{%y@A=mZZD^L!?CHfMYWbTY8v#XM;rAQk8aPqjB%DlF-axQY(_zB7uQwVFv5+$%jO&3}qvP-=h~bF! zIA+z3+jTWK6J0w#X*OP-KnwBDvFkgCW7Zg9-yw4sd#`N=s^eeNPEMP-_;0t`r~CNd z24(8Mraao-NQX1xJ=o(bK%taAZ<4vqu;Zh&m%0h(gvlg8E%pg$h%Pg#vKaJ3Aj5{jXL1-}|*;C+Lj+#hNFcl)J29!!ap*>FLXHUGxT*w;zv| z&UktI@q3&=R$(*VS(we^Ue{sE@m_VVd!M>DgYO1j=mF#!6xhmDS?xcOI_r4Qk~OXR z`d*Z7X7YN;J*if!Dd}Q?e4jPqig6zI3Tu=M;gJry#|{gaAlOUt!N`1U1@jb(Pe!JL zrT{SPi0N>pi?}uUoZ6~vGk|4d6D>@k49LmsQN9bn5>`NQ7aXswMLK8K1SFbhaWt{L zA9&u!58278Dxc+h#PezZ zOOWzvy*g&-kb@cZ3_AgsmHom_Bdd+H@7S(VRS=?txL9P@Wi{Vi z=OVF9x{uj`T_oZ&HpyDz2XssTQq$+G6jj0<7$_@Q;xDC9vZ5nfp>|2Pw)K2a0iq;$ z)-cVA&acW6#XfMCCMiX;(l%9=`f-h=)UrDXuB_}*YrMdQ(mfJo&CX!8h74O2^B1WX zE|IC2mMB_4bLu!IacnC{F3wjpXYssGC}+ivaKgEt+B$bjo9;0)Q;UW2{2X}FayE58 z2`NXI5ohY+D>C(D!c&V<7~Fu{M0}z{qsS5NSZJSRTgBd#HguVhll8T5U7%p}DYNT4 zw|^2<-2aA-x`CIVmG8f;{QJ*oTRq<2|89e_VV`?GfgoC>H^et#5?kYXI7)YnQ`;M# zN4(-`CY_CPf)|VEx!Ca0(-bGMyK8g(>!>pR>CCq9>l47L_&+K9{-dq7w0-<Z`}9zxLj3o;o%5@1-5qUC#;W*NoB8-}s%mQ= s|J$JauQ$VAcZweY$1i5}U4z`yp7yk-J#C!+4gdiE|7>M5&;T+301&4p!T Date: Fri, 30 Jul 2021 00:12:24 +0000 Subject: [PATCH 07/17] add a new chart --- gitops-connector-1.0.1-93.tgz | Bin 0 -> 1598 bytes index.yaml | 20 +++++++++++++++----- 2 files changed, 15 insertions(+), 5 deletions(-) create mode 100644 gitops-connector-1.0.1-93.tgz diff --git a/gitops-connector-1.0.1-93.tgz b/gitops-connector-1.0.1-93.tgz new file mode 100644 index 0000000000000000000000000000000000000000..f8bab37ca984461f25f48228b9b9b59df2392e94 GIT binary patch literal 1598 zcmV-E2Eq9siwG0|00000|0w_~VMtOiV@ORlOnEsqVl!4SWK%V1T2nbTPgYhoO;>Dc zVQyr3R8em|NM&qo0PI@dZ`#Nc&$A`|hf&&xR{8=qA<(aNcM?r#!d(+vghcASppDsp z72|bw7b=?Le?NI`{BvzcL*aVIyd><-?tEr;etGS&&56gV7I9r{aYE~76GVA!fu_#U zwn$Y~wbg8jzpAQc|EdkGb)+>lpGj+MflKU6!SdY%9tedCn;Ra3$b%FYO|cGH z$5Qyh!#W_(b8HLwdnxmrqp%M_tWJ) zrhwg%M{Jif-~GirpEaXfG1^cG)D)v zN!2&^qGTVF)l2S4)oN8q77OHgtR7X2^Qc$YpkxS-bkIF^n9l_MUXlk!=3&d9r&v5P zG95GpfMG{W2P>zDTa(X;t%^1SST#1`!URg6oYWr0y8x_U`4lz4(aLJ5b9#+WqJI`g z6WKdzzL!fqH$FgPaRvclcOHXV36a#>hzEkx{zS=CPYepoL2>^BFZ%c)Jy}-e(|nJ3 zQ4U}QQeLfhi&Ksv%_y^OuI%sJyu}DIFvFfFo)1bu z6a>!(rdiYZm02R+2kz4(g=p5=rp!`5uCbI_b}zw|mR)F#7uZm`N35*b8LZckVT)q^ zBK3kLG8K~&MGI)o9LFS%ZTZQ?`HB`Sn)e9hEZ-4MIQJ4;XD(=yJ!WcZxm2E?eNS4= zCaxwS;Rti$%%=E?%v_o9#G(X-sn2a9KGC6`=LmMpwa>DxB5z6>y2!}!`f9MwS1^2( z+4r5>KZ#22e*;I|!keJA?|)C*nfu>XTWcKde|JIYu+O|X0Y6%#H^etV65HTte%0Pct0H?!L|SucOlVr*qrFuTKE$;{PP~{YP7EX@~gV z1r7W=s*WL(AMei00030|LyyAqX04h09|?~y8r+H literal 0 HcmV?d00001 diff --git a/index.yaml b/index.yaml index df8568b..a4f663a 100644 --- a/index.yaml +++ b/index.yaml @@ -1,9 +1,19 @@ apiVersion: v1 entries: gitops-connector: + - apiVersion: v2 + appVersion: 1.0.1-93 + created: "2021-07-30T00:12:24.436235321Z" + description: A Helm chart for GitOps connector + digest: 2d2110accd27b00ee4eb5795b71beababbe9f3b707ec2b835ad4370de3e2ed7b + name: gitops-connector + type: application + urls: + - https://azure.github.io/gitops-connector/gitops-connector-1.0.1-93.tgz + version: 1.0.1-93 - apiVersion: v2 appVersion: 1.0.1-91 - created: "2021-07-30T00:05:23.556495976Z" + created: "2021-07-30T00:12:24.4359131Z" description: A Helm chart for GitOps connector digest: f908260a2755c57961e102bbff6b272d4032eae3740428be4424dbf3f0232110 name: gitops-connector @@ -13,7 +23,7 @@ entries: version: 1.0.1-91 - apiVersion: v2 appVersion: 1.0.1-90 - created: "2021-07-30T00:05:23.556220062Z" + created: "2021-07-30T00:12:24.43545547Z" description: A Helm chart for GitOps connector digest: 57f5b8f35867f44ddc3f83bd1a080a70ed7c68c8fae1f3401023199385a6672b name: gitops-connector @@ -23,7 +33,7 @@ entries: version: 1.0.1-90 - apiVersion: v2 appVersion: 1.0.1-89 - created: "2021-07-30T00:05:23.555921747Z" + created: "2021-07-30T00:12:24.435125049Z" description: A Helm chart for GitOps connector digest: 8a9bd3ac6414345bdf7ec16354787d4d5df2c6caad8a0a3ec02535ee44630056 name: gitops-connector @@ -33,7 +43,7 @@ entries: version: 1.0.1-89 - apiVersion: v2 appVersion: 1.0.0 - created: "2021-07-30T00:05:23.555621533Z" + created: "2021-07-30T00:12:24.434759225Z" description: A Helm chart for GitOps connector digest: 6f48603dc3a95dacdf2ee620d23ee65c6e6a3b1b88d11456bba90ef4a18a0acf name: gitops-connector @@ -41,4 +51,4 @@ entries: urls: - https://azure.github.io/gitops-connector/gitops-connector-1.0.0.tgz version: 1.0.0 -generated: "2021-07-30T00:05:23.555141309Z" +generated: "2021-07-30T00:12:24.43420919Z" From 218cf5184f4365bed5656a8355d237174a9dadd6 Mon Sep 17 00:00:00 2001 From: Git Date: Fri, 30 Jul 2021 00:24:57 +0000 Subject: [PATCH 08/17] add a new chart --- gitops-connector-1.0.1-94.tgz | Bin 0 -> 1598 bytes index.yaml | 22 ++++++++++++++++------ 2 files changed, 16 insertions(+), 6 deletions(-) create mode 100644 gitops-connector-1.0.1-94.tgz diff --git a/gitops-connector-1.0.1-94.tgz b/gitops-connector-1.0.1-94.tgz new file mode 100644 index 0000000000000000000000000000000000000000..3e9a589670e5ade3efbeefe2884a046e13c7b416 GIT binary patch literal 1598 zcmV-E2Eq9siwG0|00000|0w_~VMtOiV@ORlOnEsqVl!4SWK%V1T2nbTPgYhoO;>Dc zVQyr3R8em|NM&qo0PI>{Z`#Nf&$A`I!%^CYR=R)<1bVG|uS64?aJPvqLLzlv(8Nr@ zs_{580~O8k-B%tP{~a6BP}uHrUJ_=`%=w)&=by)(*qnH*Y7y7P7ALfRK1Gz*mT2aj z?21%XRoktW_^YaF_OIH|+9z5|^O>5>rgoxgtyWt-0d;2xN@&hFq9^LBWo4E7MF@HJ zJ*Lbit`3Waf;=z!snyh)R{eKN8DnNq+v8%i3s=~gf#tgiJQ50*Ha9#5kq0R*nqeKX zj-~LWhjl=n=hznV_fi%)Nr$$^KaXTY9Ro$*;QzPA4RE5oi8-0Bya9iuro)tTPp{V!WiR0E@7NP?LMeNxvAAk0XXlUUyO{w`Bm?BIOqur?Ir|TG2eolz;k@>kXgA}=Ac$a`HJDw2n zdw7?W5m$!yu`cEyqlbJ&86rYcfQsz*erwnA`qC@opyFNIOEp(ER%c0sqc_k2(S zq9Ay-FwKU}ugntpKJbtxDMYi;Hf5Ijd5xvivIhySwCqA_yugOiJz{0e?r^h)3|kcQ z7pWI4k*S!JC|W>s?l>lKY|BqB&NsAV(Y!|}XZenB%DI==I&(pr>@ibQtCjNn?0eFB zHgPox2}f8EXFkK%WbVp@Cl)0z%zSPW@u?2=JV&r&u6>qm6?s$A&_za$*H?pezJlSS z%%Shx{z_DG{~I{!4&DT9eE)ma$=v_8J8I{6|GN)LhkfSF3HZ?>y&=90lGqm4!(qB( zoZ9Z>BIFfsWs=z_BY3q6Ul$u5dYa=nb`Nc?za5pvKV8@setiPi6#vcK_a7bgtbL6C zeNaJki<93XyrWCH^tGJy_AF?!5{*k${3vfrf-27uonXGXi8-`2e?2OT|G0;GT@Kh7 z|7T~}`0uoi^?xr^*7jF2wZD>mJzR-1M5Uwy$o1kCC0gS@vr*(uFueVWm;Zvd3*>G(P>t0;zupYK?i3#ZM{mq(hX#41BOU2TN7_0482|wP|8TJ0O8_ze0J%FJaR2}S literal 0 HcmV?d00001 diff --git a/index.yaml b/index.yaml index a4f663a..ad04f86 100644 --- a/index.yaml +++ b/index.yaml @@ -1,9 +1,19 @@ apiVersion: v1 entries: gitops-connector: + - apiVersion: v2 + appVersion: 1.0.1-94 + created: "2021-07-30T00:24:57.281988826Z" + description: A Helm chart for GitOps connector + digest: 7fea9b9ac149cdabad30f7dc7d3770a85da81837a0ba50d178c1ce0ec2653844 + name: gitops-connector + type: application + urls: + - https://azure.github.io/gitops-connector/gitops-connector-1.0.1-94.tgz + version: 1.0.1-94 - apiVersion: v2 appVersion: 1.0.1-93 - created: "2021-07-30T00:12:24.436235321Z" + created: "2021-07-30T00:24:57.281713722Z" description: A Helm chart for GitOps connector digest: 2d2110accd27b00ee4eb5795b71beababbe9f3b707ec2b835ad4370de3e2ed7b name: gitops-connector @@ -13,7 +23,7 @@ entries: version: 1.0.1-93 - apiVersion: v2 appVersion: 1.0.1-91 - created: "2021-07-30T00:12:24.4359131Z" + created: "2021-07-30T00:24:57.281407318Z" description: A Helm chart for GitOps connector digest: f908260a2755c57961e102bbff6b272d4032eae3740428be4424dbf3f0232110 name: gitops-connector @@ -23,7 +33,7 @@ entries: version: 1.0.1-91 - apiVersion: v2 appVersion: 1.0.1-90 - created: "2021-07-30T00:12:24.43545547Z" + created: "2021-07-30T00:24:57.281127614Z" description: A Helm chart for GitOps connector digest: 57f5b8f35867f44ddc3f83bd1a080a70ed7c68c8fae1f3401023199385a6672b name: gitops-connector @@ -33,7 +43,7 @@ entries: version: 1.0.1-90 - apiVersion: v2 appVersion: 1.0.1-89 - created: "2021-07-30T00:12:24.435125049Z" + created: "2021-07-30T00:24:57.280846811Z" description: A Helm chart for GitOps connector digest: 8a9bd3ac6414345bdf7ec16354787d4d5df2c6caad8a0a3ec02535ee44630056 name: gitops-connector @@ -43,7 +53,7 @@ entries: version: 1.0.1-89 - apiVersion: v2 appVersion: 1.0.0 - created: "2021-07-30T00:12:24.434759225Z" + created: "2021-07-30T00:24:57.280488606Z" description: A Helm chart for GitOps connector digest: 6f48603dc3a95dacdf2ee620d23ee65c6e6a3b1b88d11456bba90ef4a18a0acf name: gitops-connector @@ -51,4 +61,4 @@ entries: urls: - https://azure.github.io/gitops-connector/gitops-connector-1.0.0.tgz version: 1.0.0 -generated: "2021-07-30T00:12:24.43420919Z" +generated: "2021-07-30T00:24:57.279992899Z" From 36e069a6362f48b7cedf9ca8acad6e1f1707f578 Mon Sep 17 00:00:00 2001 From: Git Date: Sat, 31 Jul 2021 02:31:42 +0000 Subject: [PATCH 09/17] add a new chart --- gitops-connector-1.0.1-97.tgz | Bin 0 -> 1599 bytes index.yaml | 24 +++++++++++++++++------- 2 files changed, 17 insertions(+), 7 deletions(-) create mode 100644 gitops-connector-1.0.1-97.tgz diff --git a/gitops-connector-1.0.1-97.tgz b/gitops-connector-1.0.1-97.tgz new file mode 100644 index 0000000000000000000000000000000000000000..2359d330025db975836202421592018029b36a70 GIT binary patch literal 1599 zcmV-F2Eh3riwG0|00000|0w_~VMtOiV@ORlOnEsqVl!4SWK%V1T2nbTPgYhoO;>Dc zVQyr3R8em|NM&qo0PI@dZ`#Nc&$A`|hf&&xR{8=qfzYpYcM?r#!d(+vghcASppDsp z72|bw7b=?Le?NI`{BvzcL*aVIyd><-?tEr;etGS&&56gV7I9r{aYE~76GVA!fu_#U zwn$Y~^|aX(e^ph@{#6^=>5J5#WHH-QI2;lk#I#~|_`#YI!B zL)NhrzVNUP$nzZALjGRLJSS=2*7)yHF8=4pnPIlo1h6jt+l^*6{@YsX5dXU%dy2;R zI*8bbMQb*xqi-{c>$&(9oC7pYgsVkdj%*iGlTfb12la!hC}W%Vu}7HA30(|C&?}aG zHZrI+!HiSH2@QwGB6S!Z&JT7x@3#M02L*i_ks!tRy9P+bph+_W1|8p0M+b!@B$=Io z4!@Xvd)6AxL1ji;Nb9;mVfv7X0fygC{W2oH)RVX*LTq*!(y|eS7(LcNF-VFMk zfzjVok}M6y!ep~T-bHUf@GQ9Js1`HDge*V zRj?lbKNTAnjyr#z8^>aW|KBi#;~(kpx^uOO()n~9!^+PIQ9d$1H)fC`cLeVeaAn66 zB7P6=k}~4T@IKbX>}T|luP8%AXbMn~{oZd3J4R>pFE%{!xYDH!8;nWeOHW^p>!LTf zy#08*a>mQskKf}2vf`TZ&fIJk_ofb8jQ6T@-TTzN8GJYJT=|!4kYg)WWxfA|>TKdc zE7qjyn|o2RkICvK_oQmIsw9gA@;p|LD#m%#D{N3Qghx8)9y`ou0)H>b10(aW<TSdW!D)Y@WU40y1?Hf*|A7~M{E(h3tMX~S zN4zKpumUNs*1N?i$B<@}SvObqcW&Nd1R0oN&#)JOY1uFAG}78g`;OfzRR$qUh|6Vq zU0U<)buJRyB>R{>*hL~fWs|feen7_rAT@o)N?|43gMreLCH_(vC2KmeHEI`hYdg;e zB_IldX9Lr$>HNwpk?#ZdX_7)TYi(0zsUO!^N-evW;7ZFbw8jf;DBUAg*6a+{Ysj!g zF@KSI!4jE@Nr|EbG-r-u634dujkjHW8obP|tG&JLcMF*;bJ^B@JC<CHKF9qi*3%(AxLEt#;=A_q44x4)?#ipmf-0-kg9REz%p}n;?m8a6KHR zJI1N)j?Y70@m408jWU9l%kXuv;i0D)j$?P<=K9xBY5dc Date: Thu, 9 Sep 2021 21:32:08 +0000 Subject: [PATCH 10/17] add a new chart --- gitops-connector-1.0.1-98.tgz | Bin 0 -> 1718 bytes index.yaml | 26 ++++++++++++++++++-------- 2 files changed, 18 insertions(+), 8 deletions(-) create mode 100644 gitops-connector-1.0.1-98.tgz diff --git a/gitops-connector-1.0.1-98.tgz b/gitops-connector-1.0.1-98.tgz new file mode 100644 index 0000000000000000000000000000000000000000..b8dd6077eba72862e48b508fce14c1caac47d426 GIT binary patch literal 1718 zcmV;n21)rJiwG0|00000|0w_~VMtOiV@ORlOnEsqVl!4SWK%V1T2nbTPgYhoO;>Dc zVQyr3R8em|NM&qo0PI>{Z`wc-&$Fd`hf&gpRyx2Y1aj8hNi?BJ?wZ&lBvS7s+L#5b z*j{IMp`w)Ue)8J*@7jV544u1wOgI`>4|!vYOPkMbpYzSA*hfkssxvXUY&Wi`qUHtzEdnjtf>0CNLrtE^Ti34B`k z@`0uBxsP=~zVFx;3f59)1x>s5#{Zub@_&Y$DQ53l0M_KcrnOJ=`QJHd@AH2fV!LRJ zZ^Mk8ShQ}F2Kq6jxKYSoF>-*$sdTl7$C2$}Y7)wII8)D5MH$yPUw6fl3uaw z^Pxel31*xkPH5CT7Nx`Raj~)M`}h5?Iw=9Oh5jo)4i~|_~n?42Q z@(EMG-q0tu#~E+}40}VM=sW!L&bS3ml;dP1)0JZgW@pO^J))->nA#)ddZ>59P^%b~fSlLWELT~LxV#=b_IsvrcReur-yR3w%$^R51yKAlwJ9FLkx9wS9%4XY zp%4VJa9|uk{UKx_g|6jN0XV-tzj!qI=U2VELBBgN`kQK!9YcvSS+CG{c|9=9yGO(9 zy-Hj0bjui)>q~3un&zW8{WjDQ9+vsl!&b4b01>@EI=U)i|8M(?tXQ4Nb zd((g|$9vPgz5dd>8~ifx0{xR)P#9Kj%KG?;%-JM@RzuUKZyrTy9-FsI9!a%YO-UaX z$oE+zJ~1w0uCT$8AtKU2PuO9>APClyTo^DPTR}g?;>v*OpeX|1Phx9gf5#7B%cWjuAE2?=gHW(H zOTev^NY2}MOhm=MP~z&TMu9mz-2a8=eLTu`R-N+MapHNQ3cw1a{IuRKPC16`K$&+7 z$NtvcTaF+HGvW+80hrbON~V#uM#?+3Yg844s30zv*?C#Z-;cRSe3RxeJMfD{ea0tQ zPy7bP1R!;N&P&lrxB~}eHA~{9G)vYnvNdLxu(hq%g9;EO$+LlL)-b;+PZW9JE?rWJ zX030kJoWpCrPQ-KNv^E!Qg6J%htf3?W6kbhy@d>06!TY^7fz9xnARvLpgDCMlQ^~& z6c^_^nzOjyCzP`yBb;#VrRj_6$|uPwp1KVX-AhiIhkJz=LH7F55-}ue7E@|wm5Yqo>-i@Ctoap zlW)j%pbkI5_J-KwaF$*$T7TDfdasd+``<87-{DQ*+V}sbo!tFzyVE?`-~VnyvT2`t za|S^)OK*tp!Xmc8^>9?~7^k*3zKF((w{q!flvBK1MxP59K6;trBzJf1uKziy%zrww zE&TQZurB{k3g7>9)J}7s|J#s~>=rw}L3+oRblGb;>FrravQosQCVo`YlIR>pbd33W z60>V>{&`ZB{|SeBTMby7|EKxye>$D^{`}vHRMGy!+}VGae?5GdREWb022kMQhe|vr zpv@F{V+sm=ZOe_N6K*Sq1@z2YPA_>Eb8*C6+@m%Z#|FYhk@2><~9 M|EspJcK|d10F!N8U;qFB literal 0 HcmV?d00001 diff --git a/index.yaml b/index.yaml index 7231aec..e4281d8 100644 --- a/index.yaml +++ b/index.yaml @@ -1,9 +1,19 @@ apiVersion: v1 entries: gitops-connector: + - apiVersion: v2 + appVersion: 1.0.1-98 + created: "2021-09-09T21:32:08.251672021Z" + description: A Helm chart for GitOps connector + digest: 26effd72a6d615b7d0ac63612cf12a852ca0257074ede29134a993b80b81e124 + name: gitops-connector + type: application + urls: + - https://azure.github.io/gitops-connector/gitops-connector-1.0.1-98.tgz + version: 1.0.1-98 - apiVersion: v2 appVersion: 1.0.1-97 - created: "2021-07-31T02:31:42.055133466Z" + created: "2021-09-09T21:32:08.251051517Z" description: A Helm chart for GitOps connector digest: b58c85cc65e2c0fb971ead9212830b3271fc03cdf8d31686cc5fa8cefc50f150 name: gitops-connector @@ -13,7 +23,7 @@ entries: version: 1.0.1-97 - apiVersion: v2 appVersion: 1.0.1-94 - created: "2021-07-31T02:31:42.054720464Z" + created: "2021-09-09T21:32:08.250509913Z" description: A Helm chart for GitOps connector digest: 7fea9b9ac149cdabad30f7dc7d3770a85da81837a0ba50d178c1ce0ec2653844 name: gitops-connector @@ -23,7 +33,7 @@ entries: version: 1.0.1-94 - apiVersion: v2 appVersion: 1.0.1-93 - created: "2021-07-31T02:31:42.054256361Z" + created: "2021-09-09T21:32:08.249789807Z" description: A Helm chart for GitOps connector digest: 2d2110accd27b00ee4eb5795b71beababbe9f3b707ec2b835ad4370de3e2ed7b name: gitops-connector @@ -33,7 +43,7 @@ entries: version: 1.0.1-93 - apiVersion: v2 appVersion: 1.0.1-91 - created: "2021-07-31T02:31:42.053827959Z" + created: "2021-09-09T21:32:08.249125602Z" description: A Helm chart for GitOps connector digest: f908260a2755c57961e102bbff6b272d4032eae3740428be4424dbf3f0232110 name: gitops-connector @@ -43,7 +53,7 @@ entries: version: 1.0.1-91 - apiVersion: v2 appVersion: 1.0.1-90 - created: "2021-07-31T02:31:42.053142755Z" + created: "2021-09-09T21:32:08.248758299Z" description: A Helm chart for GitOps connector digest: 57f5b8f35867f44ddc3f83bd1a080a70ed7c68c8fae1f3401023199385a6672b name: gitops-connector @@ -53,7 +63,7 @@ entries: version: 1.0.1-90 - apiVersion: v2 appVersion: 1.0.1-89 - created: "2021-07-31T02:31:42.052564251Z" + created: "2021-09-09T21:32:08.248364096Z" description: A Helm chart for GitOps connector digest: 8a9bd3ac6414345bdf7ec16354787d4d5df2c6caad8a0a3ec02535ee44630056 name: gitops-connector @@ -63,7 +73,7 @@ entries: version: 1.0.1-89 - apiVersion: v2 appVersion: 1.0.0 - created: "2021-07-31T02:31:42.052147949Z" + created: "2021-09-09T21:32:08.247969293Z" description: A Helm chart for GitOps connector digest: 6f48603dc3a95dacdf2ee620d23ee65c6e6a3b1b88d11456bba90ef4a18a0acf name: gitops-connector @@ -71,4 +81,4 @@ entries: urls: - https://azure.github.io/gitops-connector/gitops-connector-1.0.0.tgz version: 1.0.0 -generated: "2021-07-31T02:31:42.051606846Z" +generated: "2021-09-09T21:32:08.247437089Z" From 706552326c550bc373cc93a4297b53427b7c739e Mon Sep 17 00:00:00 2001 From: Git Date: Tue, 22 Feb 2022 23:50:59 +0000 Subject: [PATCH 11/17] add a new chart --- gitops-connector-1.0.1-115.tgz | Bin 0 -> 1716 bytes index.yaml | 28 +++++++++++++++++++--------- 2 files changed, 19 insertions(+), 9 deletions(-) create mode 100644 gitops-connector-1.0.1-115.tgz diff --git a/gitops-connector-1.0.1-115.tgz b/gitops-connector-1.0.1-115.tgz new file mode 100644 index 0000000000000000000000000000000000000000..bc7c2147eb06b23c902204d9a931eb3c07e8c2ea GIT binary patch literal 1716 zcmV;l221%LiwG0|00000|0w_~VMtOiV@ORlOnEsqVl!4SWK%V1T2nbTPgYhoO;>Dc zVQyr3R8em|NM&qo0PI>@Z`#Th&a3ni zR&0+mGf+{=f8X-h_&PSENnv+y)=R?N*0+||Zf*xc|L#37`3$i+J3 zBTM0PAM1d8-?1$eoTbc)s&?&d zgq>KlZj%Q3KBc%(NMEsXfX3-;wTQ=&?O|#X%60gtepD4@Z1X<$39~t&^MOcu#j?+a z2DK)baf&#h(ePN54#UUA!LIM$^}pz#pzlKxmYCqw5ULn7X>P!v<2&l;ppcX%vpdk? z-)7&qzdG+h7w)@X?t1?fC@-gvg@e<>*T}O+nDOF#tVuZrL)1m&fMYWbWCU#b7?jIL zOaXgCpV%H}zzHzy4S}L>@V{H*1~^fUla)+Yjv?5o=`i8k*BcFoSjd?W#`VCh(ev;p zh~a2yGhV7SJ9Ra9D7w}>X*Hy%IB^0m+r(qaar%?c3^jPda~+0&P!`!Dfp*Ek34FDv1Y&!Iwr^ty$Mg7o$`GiL!cr?Nm*WrfTS`$2+I(T2@|1wgj z{~Wu%gE(f5A@&_Icd_?cI#^x*HSM(7%GLi)TWjv?|28DU|1{;v_J%r~5pQIVuaU2~ zn4=-$NLK*lw612k%4)^M)!?DuGmYD;fzki^F!*ZrbXY8a;^(PN@eqzoN@n&D0}AVe z;E#oVaRl}IkcAYcmP-ZT?CR|N!RVh|_HGCL?!f48s!7&`5@oVkq3_~qV3@ZLhS__O zwqkS37?zt$YwDWjgJ^ym>Ii#f{`7EEoT~sV7B#R(fS=2q3rF2Q&W$6nBlzzjf)hN_ zhnw#8CPo*#bpoq6CsYND>r3*{6yw#5<#n_Y1224qBM=o+a-^rTCJv}n+5WH z)`&aCdCV0yXc;0R9rTDD7A%6`EXjQV^RX4oQ!H)_m=2l(z_25x!<{bT*5pg-sItQV zR>UUSm_iwdlR2aO6o3`1K;rK|@y=Rgb9PT4;`@_$G_k+qFJH^0UKk&sv3LfdU~iUy zTPczB+jvdH#6MHw>Zw72Ic)C#$MZfOWhbk;e0H7qx=;mR1ybIvw~JGbA-hoK-9p>n zx_iqJ$99dXf)EwNV!LRP*$@fUP`lM4I^7)b_rYCdOfHBQIb3xxMmIWtMWvV2kz1(rD)dr zrpi;lj#x@PyOZR~>Mr%h3w$U&BQe(O4%S=9uthO{k$K@3nTctQf&!XT$1#axTS0Mg zzM(mb=Y2vsD>A|f=YHzw-2Hr-V`iq7OJ%VLB55_7x|xPlAk2s}b@4TsdNSpyO(_g+ zu-Zg?qC=y&B0RA`pJhkI(Uf*{nUjadmKKd4~)*=^_|{Jq~iWJ4AeJx6S(&M|7j<8|J&{~)&2eNHYA(&xff>; zM6>jU_%^n&OZOQAtl)@p8N*s9beLAujQn-XCcW-5to|yP)$psK8)xX^YtWV z*WUd7q$>Xt4)wYkur~isPxJZTY47|0R-}sdALe@hVgB{-VNxLuD;Pk5iytcSo`5z} ztrEqL6Bf#jsq8Y9O}!fafXUI9ijC@xz2W9PZ0QQ40Cr?{&|w zdv$mCb~@JOzuL;@e@kti?DKyclK=5;_~TyjBk=f*S$)?a_p+D0>}4-+E`J690RR80 KBaqhsGynk5A$!>X literal 0 HcmV?d00001 diff --git a/index.yaml b/index.yaml index e4281d8..a8b4c2d 100644 --- a/index.yaml +++ b/index.yaml @@ -1,9 +1,19 @@ apiVersion: v1 entries: gitops-connector: + - apiVersion: v2 + appVersion: 1.0.1-115 + created: "2022-02-22T23:50:59.851327478Z" + description: A Helm chart for GitOps connector + digest: 8d319429ba0b2fa3fc6511aa493b88358bd12a1ddb055dc3afab7a802067834b + name: gitops-connector + type: application + urls: + - https://azure.github.io/gitops-connector/gitops-connector-1.0.1-115.tgz + version: 1.0.1-115 - apiVersion: v2 appVersion: 1.0.1-98 - created: "2021-09-09T21:32:08.251672021Z" + created: "2022-02-22T23:50:59.854310478Z" description: A Helm chart for GitOps connector digest: 26effd72a6d615b7d0ac63612cf12a852ca0257074ede29134a993b80b81e124 name: gitops-connector @@ -13,7 +23,7 @@ entries: version: 1.0.1-98 - apiVersion: v2 appVersion: 1.0.1-97 - created: "2021-09-09T21:32:08.251051517Z" + created: "2022-02-22T23:50:59.853972778Z" description: A Helm chart for GitOps connector digest: b58c85cc65e2c0fb971ead9212830b3271fc03cdf8d31686cc5fa8cefc50f150 name: gitops-connector @@ -23,7 +33,7 @@ entries: version: 1.0.1-97 - apiVersion: v2 appVersion: 1.0.1-94 - created: "2021-09-09T21:32:08.250509913Z" + created: "2022-02-22T23:50:59.853643878Z" description: A Helm chart for GitOps connector digest: 7fea9b9ac149cdabad30f7dc7d3770a85da81837a0ba50d178c1ce0ec2653844 name: gitops-connector @@ -33,7 +43,7 @@ entries: version: 1.0.1-94 - apiVersion: v2 appVersion: 1.0.1-93 - created: "2021-09-09T21:32:08.249789807Z" + created: "2022-02-22T23:50:59.852721978Z" description: A Helm chart for GitOps connector digest: 2d2110accd27b00ee4eb5795b71beababbe9f3b707ec2b835ad4370de3e2ed7b name: gitops-connector @@ -43,7 +53,7 @@ entries: version: 1.0.1-93 - apiVersion: v2 appVersion: 1.0.1-91 - created: "2021-09-09T21:32:08.249125602Z" + created: "2022-02-22T23:50:59.852395878Z" description: A Helm chart for GitOps connector digest: f908260a2755c57961e102bbff6b272d4032eae3740428be4424dbf3f0232110 name: gitops-connector @@ -53,7 +63,7 @@ entries: version: 1.0.1-91 - apiVersion: v2 appVersion: 1.0.1-90 - created: "2021-09-09T21:32:08.248758299Z" + created: "2022-02-22T23:50:59.852035178Z" description: A Helm chart for GitOps connector digest: 57f5b8f35867f44ddc3f83bd1a080a70ed7c68c8fae1f3401023199385a6672b name: gitops-connector @@ -63,7 +73,7 @@ entries: version: 1.0.1-90 - apiVersion: v2 appVersion: 1.0.1-89 - created: "2021-09-09T21:32:08.248364096Z" + created: "2022-02-22T23:50:59.851668178Z" description: A Helm chart for GitOps connector digest: 8a9bd3ac6414345bdf7ec16354787d4d5df2c6caad8a0a3ec02535ee44630056 name: gitops-connector @@ -73,7 +83,7 @@ entries: version: 1.0.1-89 - apiVersion: v2 appVersion: 1.0.0 - created: "2021-09-09T21:32:08.247969293Z" + created: "2022-02-22T23:50:59.850993078Z" description: A Helm chart for GitOps connector digest: 6f48603dc3a95dacdf2ee620d23ee65c6e6a3b1b88d11456bba90ef4a18a0acf name: gitops-connector @@ -81,4 +91,4 @@ entries: urls: - https://azure.github.io/gitops-connector/gitops-connector-1.0.0.tgz version: 1.0.0 -generated: "2021-09-09T21:32:08.247437089Z" +generated: "2022-02-22T23:50:59.844529977Z" From a56eb08be319d21f59f6c9475cf175bc7459792d Mon Sep 17 00:00:00 2001 From: Eugene Fedorenko Date: Tue, 22 Feb 2022 23:55:07 +0000 Subject: [PATCH 12/17] releasee --- ...ctor-1.0.1-115.tgz => gitops-connector-1.1.0.tgz | Bin index.yaml | 6 +++--- 2 files changed, 3 insertions(+), 3 deletions(-) rename gitops-connector-1.0.1-115.tgz => gitops-connector-1.1.0.tgz (100%) diff --git a/gitops-connector-1.0.1-115.tgz b/gitops-connector-1.1.0.tgz similarity index 100% rename from gitops-connector-1.0.1-115.tgz rename to gitops-connector-1.1.0.tgz diff --git a/index.yaml b/index.yaml index a8b4c2d..73016df 100644 --- a/index.yaml +++ b/index.yaml @@ -2,15 +2,15 @@ apiVersion: v1 entries: gitops-connector: - apiVersion: v2 - appVersion: 1.0.1-115 + appVersion: 1.1.0 created: "2022-02-22T23:50:59.851327478Z" description: A Helm chart for GitOps connector digest: 8d319429ba0b2fa3fc6511aa493b88358bd12a1ddb055dc3afab7a802067834b name: gitops-connector type: application urls: - - https://azure.github.io/gitops-connector/gitops-connector-1.0.1-115.tgz - version: 1.0.1-115 + - https://azure.github.io/gitops-connector/gitops-connector-1.1.0.tgz + version: 1.1.0 - apiVersion: v2 appVersion: 1.0.1-98 created: "2022-02-22T23:50:59.854310478Z" From ab5fa618965097697ba19ea56ec808af7f19cc5d Mon Sep 17 00:00:00 2001 From: Git Date: Wed, 23 Feb 2022 00:00:21 +0000 Subject: [PATCH 13/17] add a new chart --- gitops-connector-1.0.1-115.tgz | Bin 0 -> 1717 bytes index.yaml | 34 +++++++++++++++++++++------------ 2 files changed, 22 insertions(+), 12 deletions(-) create mode 100644 gitops-connector-1.0.1-115.tgz diff --git a/gitops-connector-1.0.1-115.tgz b/gitops-connector-1.0.1-115.tgz new file mode 100644 index 0000000000000000000000000000000000000000..062d79cad239e6165f3df243e4c7a00dd576e366 GIT binary patch literal 1717 zcmV;m21@xKiwG0|00000|0w_~VMtOiV@ORlOnEsqVl!4SWK%V1T2nbTPgYhoO;>Dc zVQyr3R8em|NM&qo0PI>@Z`#Th&a3ni zR&0+mGf+{=f8X-h_&PSENnv+y)=R?N*0+||B=z#J2f39ocnsC;SdWs6T-M2xHWnn z{sb``Ep5h2wPvTT1`kEonkTJ>6cr~<;ANY5OgT<}5}Kg~Pk64w)ASKj4|B}wA`I#l zaU0A+4rZA9)F#yCbFl${M2}5}-t!bW(Ws~&IxwH`XatW&*y1|ekXvhlhf@ddtNdR^ z3iY33*LM)dtTDvCL*_2_UP}k7>%XS8o2^{^@0@BU`})5P$?!i-d9uBs4rjz0+2d>E zD=y|}h&a*}06DFzS+25Lad9* zIwAODp=EGSa_7QP_m6YqNbCsydx+o! zkM!ZDd%cO##crLzD$WU20kWVq=8z(92=7yHWsfI9`~lvlbtJ^#Lt=~B&)Fg0QH6-m z44^Xqeb^Xwg3jn)Z1}_zqLX!OI3|TJefn}-7gvMJyH7`}V7$Eh^fN&q<5rpIEX?L{ zZyK=Wc(1!RSD$;ggP#UoV1IH83d_n(Ssy=&BdJ!aDd}c` ze4jPqj&UAyg$-JUh)4%LVuuBbAUI2MU%-591@jb(8v~|;rT{SPi0N>ri?}uUk~*sF zFn|@Yi8iKC2I6GSC_e>Y1uKyF`%k>H7TKKL6Nvc!Bpyxd@A%8ta;X=_2WTvwK`7Xp zCE!*{B>gsC6EX46l(>3oP+$(5`~UI0k4M?bsxF^hC%!IJ0a$^QckAuqlw-&)lzF$% z_P6fdas)Y;5og#5z^v{UGL5V?Qr@v$qpBc81#!8|?#o*KcFaZMn>3HvfnOx*Gd{_B z;ukO`0IBP9UWz*54jh!#EQy!WELp?I)|g$w*0x>`DnOJZ&jzkp!~Ci|QRIQUbV(_i zwZ5tH)UP9!QqS%rxw5)Tz3~DcO3z4)HM@iL7BXy6%wJ?)xJ71STBD$V=G1Xa;@DPD zT%2!c&f+p z#O&Iezn@g)f5M?&R|D4Of4iN}|IX>Y|8GUAX#ZiZ_aEk84<9BK;;@1N6u9`I67LCU zGezDQ!@DOu{};TQAqVvTlp+eLwpa|yrKkpC%MW;-5{{!a2^l|3xWnPTJQSsn|NUO~ z{JK|nhi|82UH+@BeEzr8W^14S+mQT^cf%j|iXVZ;Z_Mhu2Dz8L>}4-|d2{(Q00960 LV5-?J05kvqLTz8F literal 0 HcmV?d00001 diff --git a/index.yaml b/index.yaml index 73016df..39a6316 100644 --- a/index.yaml +++ b/index.yaml @@ -2,18 +2,28 @@ apiVersion: v1 entries: gitops-connector: - apiVersion: v2 - appVersion: 1.1.0 - created: "2022-02-22T23:50:59.851327478Z" + appVersion: 1.0.1-115 + created: "2022-02-23T00:00:21.806013727Z" + description: A Helm chart for GitOps connector + digest: 012ec3bbad6ee7a67cfe55f366c2e18acc9cc0bef09840ad2877ca9a2a1ea183 + name: gitops-connector + type: application + urls: + - https://azure.github.io/gitops-connector/gitops-connector-1.0.1-115.tgz + version: 1.0.1-115 + - apiVersion: v2 + appVersion: 1.0.1-115 + created: "2022-02-23T00:00:21.807731507Z" description: A Helm chart for GitOps connector digest: 8d319429ba0b2fa3fc6511aa493b88358bd12a1ddb055dc3afab7a802067834b name: gitops-connector type: application urls: - https://azure.github.io/gitops-connector/gitops-connector-1.1.0.tgz - version: 1.1.0 + version: 1.0.1-115 - apiVersion: v2 appVersion: 1.0.1-98 - created: "2022-02-22T23:50:59.854310478Z" + created: "2022-02-23T00:00:21.807525909Z" description: A Helm chart for GitOps connector digest: 26effd72a6d615b7d0ac63612cf12a852ca0257074ede29134a993b80b81e124 name: gitops-connector @@ -23,7 +33,7 @@ entries: version: 1.0.1-98 - apiVersion: v2 appVersion: 1.0.1-97 - created: "2022-02-22T23:50:59.853972778Z" + created: "2022-02-23T00:00:21.807308212Z" description: A Helm chart for GitOps connector digest: b58c85cc65e2c0fb971ead9212830b3271fc03cdf8d31686cc5fa8cefc50f150 name: gitops-connector @@ -33,7 +43,7 @@ entries: version: 1.0.1-97 - apiVersion: v2 appVersion: 1.0.1-94 - created: "2022-02-22T23:50:59.853643878Z" + created: "2022-02-23T00:00:21.807095314Z" description: A Helm chart for GitOps connector digest: 7fea9b9ac149cdabad30f7dc7d3770a85da81837a0ba50d178c1ce0ec2653844 name: gitops-connector @@ -43,7 +53,7 @@ entries: version: 1.0.1-94 - apiVersion: v2 appVersion: 1.0.1-93 - created: "2022-02-22T23:50:59.852721978Z" + created: "2022-02-23T00:00:21.806894717Z" description: A Helm chart for GitOps connector digest: 2d2110accd27b00ee4eb5795b71beababbe9f3b707ec2b835ad4370de3e2ed7b name: gitops-connector @@ -53,7 +63,7 @@ entries: version: 1.0.1-93 - apiVersion: v2 appVersion: 1.0.1-91 - created: "2022-02-22T23:50:59.852395878Z" + created: "2022-02-23T00:00:21.806690619Z" description: A Helm chart for GitOps connector digest: f908260a2755c57961e102bbff6b272d4032eae3740428be4424dbf3f0232110 name: gitops-connector @@ -63,7 +73,7 @@ entries: version: 1.0.1-91 - apiVersion: v2 appVersion: 1.0.1-90 - created: "2022-02-22T23:50:59.852035178Z" + created: "2022-02-23T00:00:21.806474821Z" description: A Helm chart for GitOps connector digest: 57f5b8f35867f44ddc3f83bd1a080a70ed7c68c8fae1f3401023199385a6672b name: gitops-connector @@ -73,7 +83,7 @@ entries: version: 1.0.1-90 - apiVersion: v2 appVersion: 1.0.1-89 - created: "2022-02-22T23:50:59.851668178Z" + created: "2022-02-23T00:00:21.806248324Z" description: A Helm chart for GitOps connector digest: 8a9bd3ac6414345bdf7ec16354787d4d5df2c6caad8a0a3ec02535ee44630056 name: gitops-connector @@ -83,7 +93,7 @@ entries: version: 1.0.1-89 - apiVersion: v2 appVersion: 1.0.0 - created: "2022-02-22T23:50:59.850993078Z" + created: "2022-02-23T00:00:21.80575823Z" description: A Helm chart for GitOps connector digest: 6f48603dc3a95dacdf2ee620d23ee65c6e6a3b1b88d11456bba90ef4a18a0acf name: gitops-connector @@ -91,4 +101,4 @@ entries: urls: - https://azure.github.io/gitops-connector/gitops-connector-1.0.0.tgz version: 1.0.0 -generated: "2022-02-22T23:50:59.844529977Z" +generated: "2022-02-23T00:00:21.805352134Z" From d9adf9ea518d32abc7476eb00e89328bd50ea72b Mon Sep 17 00:00:00 2001 From: Git Date: Fri, 11 Nov 2022 01:40:58 +0000 Subject: [PATCH 14/17] add a new chart --- gitops-connector-1.2.0.tgz | Bin 0 -> 1774 bytes index.yaml | 32 +++++++++++++++++++++----------- 2 files changed, 21 insertions(+), 11 deletions(-) create mode 100644 gitops-connector-1.2.0.tgz diff --git a/gitops-connector-1.2.0.tgz b/gitops-connector-1.2.0.tgz new file mode 100644 index 0000000000000000000000000000000000000000..816c15208befa54bba7cef041112f3d9f54c6730 GIT binary patch literal 1774 zcmVDc zVQyr3R8em|NM&qo0PI>@Z|X=A&aZw%#jwbfsm}FeP9wM$!-#RfSgtK1$FEO ztk`a+yG;(m@ZVQ%8{aWx!hp^$^^(xH`l?))k2VvF6OYvl;=0)2gf_0Gi1PXzIrhn} zM3!Z_({78uvMlHS%1uQ+QQECmtJQ4F=gkvYX}8ZiCm`<(L528?BYGl#T36nD02}gOX*JvV{J&_nj`_b2u^cqPk73eI z4O+KI1O4t(+$f~5SUE(KRmK{`<;Zd|)d}S)T*{ZSBuy;d#~xu8Cv-j(NiP}Jm8nr< ziW#Sf6B-RqMCs5xTpa9r-c$cx1quCblCZ=Cr-m@apiXlG8l5~*TLp=vH0j-8V3s#} zZ@-bQ^V{?No2I|K-v9QU{rm6Vzg%SEArH3DoYmG7E#rYV3 z^aV6gE|Cqk#W;{LF#jc}qA!>Nc1@31E@!|AFzlK@(L4NepgjU7(wAf8Bu>{L{k za_*^(hD{7)PYL5{;O*!Uc~iu2w6qy7Rhk!dxh~fgRcW@`jZ##c*n#sc;xg$=`jgNM zHF(8y6<+-pOkK<|tBc5}8^mca1KF5i?oo?Si_gUd01`b-6?$(zvZGN^QdD3b;n4^l zkFmj3cq9X3icR0f8GtS^F)(b4zys>rH~<)o4x+&jVG5c>8ic7}Tdx28&^h%ZNumC8 z?07cfm^Do7*<|iu_p@}cy8bIlr_;&R|BH^&KGy$zNQVC@(yQf~DqInFY)u}JCpnlS z6LF+U0Oi!KW;oJn#m(Jt)bHuq;BKh(pGU)Iy{E!r0TjRa7R4r<>6FYY69Wp1g5Z#a zo^b~CZy^gQOf8oZz}4N=^+@Yq-S!5FBZh zu#M5hj-9|N&IwfkvY-#F#OZN3skS%g2J-(rfiO%$ee8=XtgwL`u0(j=B#(t4Zl*fjo~j z;*N10bA>HhhKNWTyZo;x0j!8k zv@wM;5Ib|m`cnW_umXv{1I0UQk^5BiSGtg09GK&yY+r?mSe~+Ec0%m?eE>a z>k;H&Mx5aw0JFM3$TYInl=6=K8dU`$Du~Nvc3;-=-7%LE-=ulW0sK;;KI4lRR6vW&`u9@+d8o=BPcHR zJDRh2-XoN=A|sq~?xl{--O;BxW@c)+lopF1l2)^+YiLLX!i?CygCB_RmMKqdN?~w< z)jHx+6&l4A;fV$MTy|6(O=(B3b8@o37VZlSjK36zvGQ*5X>4)o`a7{Wb0@x704LAL zv7rusfaRLl<#3rku)e-@%`Uk zB%AiRmuC>fTImh(AS_~ATn|U(j&W+alj~@$crll*MmfdHW%P>y%|mZKPIC9q?)smT z%KWD@%fO#60Gsl^r4-)($erdf|MwwlvRgd)Ez&!_q|08*mEN9(Br8Q+YT`pREs6Rt zq7%$FlbAz$^T(5_{7*R4=W4*l{69a>=l{j|vH$Nys%ZaduJ@njUk{%q72>pl0Tj6S zsTA)CNG(O~1jA3Sc>Xu|X@+c2|FITPNQA{=ST0315L^C$H=l4Etx2fzX~G>&kL95# zh5YaLy4MfAx?}E6$EN(3+xh%&%gXWhzk8AV4|u~L_=+Ea$8XH)hX#3+qa5WZN7=dj QHvj Date: Mon, 9 Jan 2023 20:04:50 +0000 Subject: [PATCH 15/17] add a new chart --- gitops-connector-1.2.0.tgz | Bin 1774 -> 1774 bytes index.yaml | 26 +++++++++++++------------- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/gitops-connector-1.2.0.tgz b/gitops-connector-1.2.0.tgz index 816c15208befa54bba7cef041112f3d9f54c6730..b458884d4cf6ea468307c789c94fa98ecae33bd8 100644 GIT binary patch delta 1734 zcmV;%208ie4ekw)JbztN;!GCyI#vFMQ~F-KQ?)=q1UFTC!K;kAt0n_DTkZ|jCJm%a z(y_aP!!Z2!t#m@Z2{Ir~>`)a9dk^X$AWx9jK4#*tiaHe2l@khg}QM1MTS5j~PWtSf8WZz9Mw zzhcTv;wUg}NXT`gkM(M!DoX}tIyGG`hB|PAEgN({MqorJT$@~V8ARbDImpHeWTQ&r zGZ!m>T-P#nodOd2ZjhkF_@@Ri#h^wr11cRqQcD4eBs6KAfp3;O zd~3dvj{W87?p4*EU+%tqWB>m9x3BHV#W}k$SmW$%aDV+Ez~6Y!Iep3Dd*qlS%y@o2 z0wA4&D#|6Yz%m&JG6Lp3`&INAQ^1bl64T)fI01$o11NfffA-Y};6yr&S29I91%GE< zfeGiXQma`+N7jTeuK3;#ACWsj42Me_(b9UOU6reHwXW0~XU$q6Do!ll`6h9gbejAm zG(!bm@PAB!7w;KU2XoA-A~LEvv1?367G{{c)Fjm8GqC}Hgilj}?yHBaa8#5O1(-{C zID$tbtaAk(NMD~|!?SP-phFA{3|k`bfO;180s5o;a4<=X|MhyS)ymZWc7LmJeyIPukQD!`OE0ElC~!%fkvYCc zu4H4548)Nl0Tffaif&8G71y_eVXv#H{o8@sdm0X&w5|g4IZ*uSnG_pvqERw64GbtK z3W7uCdd3M$u0GGFyS3|XTdDHC=dYysV+f-9gCyJF7%?f?jw*yt{4^^%E zE`M$L2A47{GndrV(X^pxfE(%v`epX?U{std0nFzWFh_u2S34I@I{&#+Ps9%YzhMZ+ zf26~Q&iy7v=R0-`D?cYx`N;e}m_dph1O80FEqXj5;!p5rQb$YX zY!>&X0lOOSedpo!bGJYEY2Z1kS8PFU*=keP$4_X^CK0q;nlyd$C`xkHtX;*CRH;;? zWV1l7%W6@_xQe*K1}#HGq=lZb#r#F!pH*;Yz+9~R^Aw9)1ExS-f`}FdJ8i`E$$wqq zs8xpnEQw9HF@e$-D|N=|QvjB*e2KmTMLR2@&FMY9i0@D0(M0}^zI-hfN^X3B#^MF{Bq3 zc{kVgckbTR2r@83&afANY2EK+8h>eP3VFwFjVgl>7R1FOy)SL~_Lxh7Z<0J_4}K|7 zpYloC6Tg5l0TjAEr25<^@}dOn*#j6ckYN zEK4Jnsr$vndP6f7&AWthmS=<$&fUb(nLGL<$4pHv7Sep~N78aOaSaWLK$sHCv++Ig zoFe6kO$iLPzgk0lqChRbA~-QepNo!)qABUCcK`*zp=oRsE2otirScmY_K|7Z2w`yaV|cF6x-$cpS1Pkw{+j(;xc(${i@w`T## zN)VTd_)tzu!aj`X81wZcX5ZfY{iH1aV-EGP8n8D1&(E{@-)50D+=fH2?qr delta 1734 zcmV;%208ie4ekw)Jbznn>PQmKv!(opQqDZgkruFlkgTPBU=k+DZW4QdoK^M(b?gSL z*lwr0O%B8G-&bxM-!WvufX*)UlF+yMs$7?kHWP~zkJSv~y4c`^Hm;_K^7%@bK^x6eB#Any!8g@5>rBYGl#T36nD02}gOX*JvV{J&_nj`_b2u^cqPk73eI z4O+KI1O4t(+DqPB!vLsC`-p3wc7AJH*6iF``)|IJI zV~QE4h!YwOPekd^JX{>?dfrq2UIhvLZj!LX1gC~D#h^}e0~(z?QCkIxq%`T>VPKXw zdT+mxuJhaT{hOx0yx#xzo&Edo-@jc*4YtKNkTEd-C8(k=m;!c9k612ezzHzynn2Mz{Bxi^0w>a!WF=FjFA(fh zRG4z^sf~tB3}jCU<7(jT=n;8S#Bj8<8820u7j?NV*A-Q1w%UzSRGip>^DW{s=}Y>P z&(RA3(A z(Fh)ovB6b%Bm-lLP2a{DfG#mHFl>v!1M1s202qu8qQMYh3YtY4gsEU#uK)eeIrSq+ zq5gC1csAmgHB9W;WbR=1vvjb!{wqqS)5+EUi+_&NKGy$zNQVC@(yQf~DqInFY)u}J zCpnlS6LF+U0Oi!KW;oJn#m(Jt)bHuq;BKh(pGU)Iy{E!r0TjRa7R4r<>6FYY69Wp1 zg5Z#ao^b~CZy^gQOf8oZz}4N=^+@Yq-S!5>7C#g3i8D$WU20kWVE=8z)Sgr8Gz%N|dJ_$&OJ){&5duZb;sKW9hzjw(ci zW&o}8-`A~SC+M{P&6ZC*Av;;ehGV7hOMjn!Ij)<#;qB8eXRBbmefs6k1VI^*%0y>j zHjjJTfL)LGq5F9EYi}_8)4&T1KgEk2T_saUFAoEn0?%NE^Lin+1y?IIHB&fO*&m<|!7p222G-f|wSDI~~N0>3@Cd zsC9<{tcXptF@-V^J9EbRQvg=50*Su^#XD<}&DlMHi0@D0(Zv3azkDs1YGHhcCgK@{ zg56mHZl$E8-^Obq+Wjjfj+z=2n8W7&FFfz#adxt*%V*b#?*>%>Rv^o}^?q@dW5_Nn z^KPN-@7=xY5#(S-oZ%nlRR6vW&`u9@Rxs(=*Ad*(IscUFR1;UKjzJni# z@0KY~ZAxKqg4H_WQxzJ;72$~m`doHY98GCQuXA#;zZUKb42-`Nhq3Z*@o8*v>iRpe zICCeySO6!_$g!age}Lth*nj14nLe=U{PgX0q9A*xy|sqj-TzhG|Av9OgExU2-~XRq zVq07fN9B%jYPpl^XsviLm##)R#mi;%ivi6; zZ$3_P_t5V8pOeb`r!&jIpDzHL^1r1N-v7v*<}v^GA#1W*JozosJAb~U%U;Ws-kyad zD@9yt;zKnpiTW_26U;Z0m_vK>$CIl3PdL=)YQV<)KR?gs|Hb*S|L;YrX#Z)h_n+op z51%F#;U0Ek*7G!%wex{x|q(hHOy(u@+HCgvDZ5E=4sETmFDIpKu(l zNvQH^!W~YJ<)J8r{6Fvay4MfAx?}E6$EN(3+xh%&%gXWhzk8AV4|u~L_=+Ea$8XH) chX#3+qa5WZN7=djHvj Date: Mon, 10 Jul 2023 23:33:05 +0000 Subject: [PATCH 16/17] add a new chart --- gitops-connector-1.2.1.tgz | Bin 0 -> 1772 bytes index.yaml | 34 ++++++++++++++++++++++------------ 2 files changed, 22 insertions(+), 12 deletions(-) create mode 100644 gitops-connector-1.2.1.tgz diff --git a/gitops-connector-1.2.1.tgz b/gitops-connector-1.2.1.tgz new file mode 100644 index 0000000000000000000000000000000000000000..dd117a506fdc1f7a160fd5fd46c8a575a9af5e39 GIT binary patch literal 1772 zcmVDc zVQyr3R8em|NM&qo0PI>@bJ|K0_Oq(|AG+-Ga8k8^gfVuhY9EM=ZO(};7I12v7iug9 z(0b6wGb0j0`0ra93EdGmCQ#X>Uu@>qU$^@5F=Av1>hO|DZ5x|{vdYyMF;SkO2|3!9 zsH&>gYc=^-Rn_!gwW_H{TCH||rfJn$T{}{>TCJ`gfx0yW1>$mn*pd2fU1{Tf6G4vk z88dECTZd^?L5>rC)XLSerVKDQndJyM)POroCSZCo0z=B+))I!pAq*eIMiZ<g zbFdD`afoFi?<{4SRI_hC{J%;j|EGw!m~XWJtjT}vtXfOw|3&rukpH_7Yl24j!B5(; z$;uY3pzkijl}rlDl|3|CW~@nVfh-%dHf2JGOZ8G!l#wMm*rD7Kl+AiF=@rwu8W_wR zV=fpHlm){hSvm{{X9pXO^Vs>MgMz*fs9$2dQ+=3nu+35f1{*yxqJu(Xn%a$?XO`2y z{I{V0X_>?}E=lWOUp`jZ`CqnqgJ<~fmv2wnnR$0ZB=|e`IioK=e2;8vh`GqlhX9mQ zFl4zz1c=22&>?X5*{h<@m;ts24z+B-K~Uh>9somM;jgao0D>x~(Mql>r{L|>bQlZa z=#>hgCL&|Xh3r>R5p)kP#2l_f<7?obho;NcLP zLWc+1HOF}15}W{N(*XvKi3~hoF2No^Z?qc>`UqptELx#l2V&Xow|(c-?lyRe8v~KA1v^>;e24gPZqw0>mHS&$y0=9DImuX?Id~I2BYq8KX<2^Kz&%hUKPa|+kB{}^z zTocgl8%8I3Y*1qMoBQ8**1^N%WKow-u9M#liU2G@=6CDe;>^d8T$tzGOxxeNdsib! z!3;RVUH~R_zmaJqt;yvbyEUo^LQoJFi{!qf<=bN}IlhVWm_7I7%gQWS!^qZ{y@IXnydD&QSdly%xMmIWEAm8^2kz4)E77d=O_8U5 z9kI;y>|T;9se7e2-r&RBGa_T#jox|-IW`#Yg=r|#(E95XSsSSa(k7fH+6*fli70%1ytJHhwVweyt6HpMVZywz1;>4Z!d=7#>p$UO9 z`~b@yU|Yat{J^5~j&x<-UP0F|9^gwy8o?TXovTIJCS7C zr(T|c7i+mU#9hCLZE!stlshh%Wsk0dwerPWyc(qxFBZWs1`G$ix;V<+eY@*_P73p% zO)V3@zW}Vu|1&M~{zt9X4*96CsIWFk5j$>IQ@F~II0lG1q>j=#gCP6 zk4I`5vPT&Hc)_!Oz#mgYK>z1TL_QIgi(#>l)j)3f0k19QDu93RR Date: Mon, 29 Jan 2024 17:10:29 -0800 Subject: [PATCH 17/17] SI remediation --- gitops-connector-1.2.0.tgz | Bin 1774 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 gitops-connector-1.2.0.tgz diff --git a/gitops-connector-1.2.0.tgz b/gitops-connector-1.2.0.tgz deleted file mode 100644 index b458884d4cf6ea468307c789c94fa98ecae33bd8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1774 zcmVDc zVQyr3R8em|NM&qo0PI>_Q{qe(_BvJmhg14qyi>J6Km<2cd%>%Wx~nDwI9u)w)g}$3 zOwzHtgTpZV_pNk7z6m%oP_xUqQTppV=j41mbQqhQxU8ZR$H6)$w01c`lviiSwvM(X zvMkH3W>fr?WjXs-Zq((Ydh_hOEw}6E&Bl>jZ#G-)BapX-phP^z5j~PWtSf8WZz9Mw zzhcTv;wUg}NXT`gkM(M!DoX}tIyGG`hB|PAEgN({MqorJT$@~V8ARbDImpHeWTQ&r zGZ!m>T-P#n{pIQIRn?wf?!J6u|Ni^8ukFdjIlC}eDqCm?O-1em(*q zoq{ULC9=RW83!@~<~{pW^chpYj^Ps1;S4wdh8+VadV_!V)d%22I*nH{MLGq4XI+5_ z=dMz#Swu(HgfOo7-VPs;J3$PGOB>PBdZS&Ht8%rj)Ej5bS|KVffw%?QwMX*sv$u0GGFyS3|XTdDHC=dYysV+f-9gCyJF7%?f?jw*yt{4^^%EE^YY+ zmoh9fm(0$`BEn0<_A1 zpEiaaqf>j=8$R)v?4%tVj1|H!eEP+>u5Sl7kAIykgYo9^ub&BmA|jQF&fIJk_oe~6 z8t;AQ;r4U4Klo|jIjUD|L2lVQexguzZQW14TP4q0Q+%zKHKn;?YF@j=p>?7D{e>fX3n(1cIGu3~s5U zpx;JoLfZYA5?e_O3d})s{}-P1@F+c5*5%Xd#CL--085a?-Fmk;i!r1Z7I`<<_IK{y z)d(^$L(Z@lfN97R1FOy)SL~_Lxh7Z<0J_4}K|7pYloC6Tg5l z0TjAEr25<^@}dOiXGN6j1XlOCy%4`^Ck2 zLo*i5yM%I9o(hJOe-03U7$}K@r>FdN?e1j8oGYUxjPMi@9Vq$|zne!e0!iE_(HFoV)vW*Z-W9 z=0Ba9I{tV8SeO52_1ya(xqWuX|6Rz6>=sXcgY=Fr>C)G7g|}w`$x0BHiuh1YOTs>k z=os_$Bxc{<{QaaX|6>mIu^O;8|Ig2}`QL6G`u|R(jP@UAdjE0u_3&|AA&yHJK#q$a zOVJ*m)KcV(G5qm@XMck~rpN;2A1e_BL|80_#X?jAvE>K6dW7R}O-z-KWA1Q#C=Yqb z<$tf+xw`LGZDV^n*5$w4%;tYnZXAC9yA#R&fH(MoulNyo^v0~ZZ;%H$$UzQrkgdyq Q0{{U3{|tCtdjK>50DKx^W&i*H