Skip to main content

Kargo Custom Resources

Project

apiVersion: kargo.akuity.io/v1alpha1
kind: Project
metadata:
name: kargo-demo-11
spec:
promotionPolicies:
- stage: test
autoPromotionEnabled: true
- stage: uat
autoPromotionEnabled: true
- stage: prod
autoPromotionEnabled: false

Warehouse

apiVersion: kargo.akuity.io/v1alpha1
kind: Warehouse
metadata:
name: kargo-demo
namespace: kargo-demo-11
spec:
subscriptions:
- git:
repoURL: https://github.com/<github-username>/kargo-demo-gitops.git
branch: new-helm
- image:
repoURL: public.ecr.aws/nginx/nginx
semverConstraint: ^1.24.0

Stage

apiVersion: kargo.akuity.io/v1alpha1
kind: Stage
metadata:
name: test
namespace: kargo-demo-11
spec:
requestedFreight:
- origin:
kind: Warehouse
name: kargo-demo
sources:
direct: true
promotionTemplate:
spec:
vars:
- name: gitRepo
value: https://github.com/<github-username>/kargo-demo-gitops.git
- name: targetBranch
value: 11/stage/${{ ctx.stage }}
- name: outPath
value: ./out
steps:
- task:
name: base-promo-process
as: base
- uses: git-push
config:
path: ${{ vars.outPath }}
targetBranch: ${{ vars.targetBranch }}
- uses: argocd-update
config:
apps:
- name: ${{ ctx.project }}-${{ ctx.stage }}
sources:
- repoURL: ${{ vars.gitRepo }}
desiredRevision: ${{ outputs.base.commit }}
verification:
analysisTemplates:
- name: kargo-demo

AnalysisTemplate

apiVersion: argoproj.io/v1alpha1
kind: AnalysisTemplate
metadata:
name: kargo-demo
namespace: kargo-demo-11
spec:
metrics:
- name: test
provider:
job:
metadata:
spec:
backoffLimit: 1
template:
spec:
containers:
- name: test
image: alpine:latest
command:
- sleep
- "20"
restartPolicy: Never

PromotionTask

apiVersion: kargo.akuity.io/v1alpha1
kind: PromotionTask
metadata:
name: base-promo-process
namespace: kargo-demo-11
spec:
vars:
- name: gitRepo
- name: targetBranch
- name: outPath
- name: imageRepo
value: public.ecr.aws/nginx/nginx
steps:
- uses: git-clone
config:
repoURL: ${{ vars.gitRepo }}
checkout:
- commit: ${{ commitFrom(vars.gitRepo).ID }}
path: ./src
- branch: ${{ vars.targetBranch }}
create: true
path: ${{ vars.outPath }}
- uses: git-clear
config:
path: ${{ vars.outPath }}
- uses: yaml-update
as: update-image
config:
path: ./src/charts/kargo-demo/values.yaml
updates:
- key: image.name
value: ${{ vars.imageRepo }}:${{ imageFrom(vars.imageRepo).Tag }}
- uses: helm-template
config:
path: ./src/charts/kargo-demo
releaseName: kargo-demo
valuesFiles:
- ./src/charts/kargo-demo/stages/${{ ctx.stage }}/values.yaml
outPath: ${{ vars.outPath }}
- uses: git-commit
as: commit
config:
path: ${{ vars.outPath }}
messageFromSteps:
- update-image
- uses: compose-output
config:
commit: ${{ task.outputs.commit.commit }}