Compare commits

..

2 Commits

Author SHA1 Message Date
Jeff McCune
df33ac6ea7 docs: plan out compare buildplans feature 2025-05-19 10:37:57 -07:00
Jeff McCune
6eda832d1c docs: add conventions for coding agents
Copied from the CLAUDE.md file generated by claude code /init
2025-05-19 09:58:20 -07:00
179 changed files with 346 additions and 22598 deletions

View File

@@ -1,13 +0,0 @@
{
"permissions": {
"allow": [
"Bash(cd:*)",
"Bash(holos:*)",
"Bash(cue:*)",
"Bash(git commit:*)",
"Bash(git add:*)",
"Bash(make:*)"
],
"deny": []
}
}

View File

@@ -25,6 +25,6 @@ jobs:
with:
go-version: stable
- name: golangci-lint
uses: golangci/golangci-lint-action@v7
uses: golangci/golangci-lint-action@v6
with:
version: v2.1.6
version: v1.64.5

View File

@@ -30,8 +30,6 @@ jobs:
- name: Set up Helm
uses: azure/setup-helm@v4
with:
version: '3.17.3'
- name: Set up Kubectl
uses: azure/setup-kubectl@v4

4
.gitignore vendored
View File

@@ -17,6 +17,4 @@ node_modules/
# nix
/.direnv/
result
# claude
/.claude/settings.local.json
.aider*

View File

@@ -1,20 +1,2 @@
version: "2"
linters:
exclusions:
generated: lax
presets:
- comments
- common-false-positives
- legacy
- std-error-handling
paths:
- third_party$
- builtin$
- examples$
formatters:
exclusions:
generated: lax
paths:
- third_party$
- builtin$
- examples$
run:
timeout: 5m

View File

@@ -16,7 +16,6 @@ Platform → Components → BuildPlan → Generators → Transformers → Valida
```bash
# Development
make build # Build the binary
make install # Install binary (REQUIRED before testing holos commands)
make test # Run all tests
make fmt # Format Go code
make lint # Run linters
@@ -26,7 +25,7 @@ make coverage # Generate coverage report
make update-docs # Update generated docs
make website # Build the documentation website
# Usage (run 'make install' first to test code changes)
# Usage
holos render platform # Render entire platform
holos render component # Render single component
holos show buildplans # Show build plans
@@ -82,13 +81,12 @@ Component: #Helm & {
## Development Patterns
1. Error handling: Prefer `errors.Format()` from `/internal/errors/` over `fmt.Errorf()`
1. Error handling: Use `internal/errors/` types, wrap with context
2. Logging: Use structured `slog`, get logger with `logger.FromContext(ctx)`
3. CLI commands: Follow Cobra patterns in `/internal/cli/`
4. CUE formatting: Always run `cue fmt` on CUE files
5. Go formatting: Always run `go fmt` on go files
6. Develop against v1alpha6 packages.
7. Commits: Use the package name as the first word in the commit, lower case. Commit without asking permission. Always run `make lint` and `make test` before committing.
5. Develop against v1alpha6 packages.
6. Commits: Use the package name as the first word in the commit, lower case. Commit without asking permission.
## Version Management
@@ -99,17 +97,14 @@ Component: #Helm & {
## Key Concepts
- **Platform**: Top-level configuration containing all components
- **Component**: Unit of configuration (DAG of Tasks producing deployment configs for one component)
- **TaskSet**: DAG of Tasks (Similar to how make tasks behave)
- **BuildPlan**: Instructions for building a component. Deprecated in v1alpha6, use TaskSet instead.
- **Generator**: Creates manifests (Helm, Kustomize, etc.) author schema only in v1alpha6
- **Transformer**: Modifies generated manifests, author schema only in v1alpha6
- **Validator**: Validates final manifests, author schema only in v1alpha6
- **Component**: Unit of configuration (Helm/Kustomize/Kubernetes)
- **BuildPlan**: Instructions for building a component
- **Generator**: Creates manifests (Helm, Kustomize, etc.)
- **Transformer**: Modifies generated manifests
- **Validator**: Validates final manifests
## Resources
- Tutorials: `/doc/md/tutorial/`
- Platform templates: `/internal/generate/platforms/`
- Test fixtures: `/internal/testutil/fixtures/`
- Core schemas: `/api/core/` (Abstraction over low level data pipeline tasks)
- Author schemas: `/api/author/` (User facing abstractions over core Schemas)

View File

@@ -1,6 +1,6 @@
FROM registry.k8s.io/kubectl:v1.33.4 AS kubectl
FROM registry.k8s.io/kubectl:v1.31.0 AS kubectl
# https://github.com/GoogleContainerTools/distroless
FROM golang:1.24 AS build
FROM golang:1.23 AS build
WORKDIR /go/src/app
COPY . .
@@ -18,8 +18,8 @@ RUN curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/s
COPY --from=kubectl /bin/kubectl /usr/local/bin/
# Use debian slim instead of distroless to get package management.
FROM public.ecr.aws/docker/library/debian:13-slim AS final
# distroless
FROM gcr.io/distroless/static-debian12 AS final
COPY --from=build \
/go/bin/holos \
/go/bin/kustomize \
@@ -27,12 +27,5 @@ COPY --from=build \
/usr/local/bin/helm \
/bin/
# Extra packages
# git - https://github.com/holos-run/holos/issues/440
RUN apt update && \
apt install -y --no-install-recommends git ca-certificates && \
apt clean && \
rm -rf /var/lib/apt/lists/*
# Usage: docker run -v $(pwd):/app --workdir /app --rm -it quay.io/holos-run/holos holos render platform
CMD ["/bin/holos"]

View File

@@ -136,7 +136,6 @@ unity: ## https://cuelabs.dev/unity/
.PHONY: update-docs
update-docs: ## Update doc examples
HOLOS_UPDATE_SCRIPTS=1 go test -v ./doc/md/...
HOLOS_UPDATE_SCRIPTS=1 go test -v ./doc/website/versioned_docs/...
.PHONY: help
help: ## Display this help menu.

View File

@@ -27,9 +27,9 @@ import core "github.com/holos-run/holos/api/core/v1alpha6"
// platform command. Use the Components field to register components with the
// platform.
type Platform struct {
Name string `json:"name" yaml:"name" cue:"string | *\"default\""`
Components map[NameLabel]core.Component `json:"components" yaml:"components"`
Resource core.Platform `json:"resource" yaml:"resource"`
Name string
Components map[NameLabel]core.Component
Resource core.Platform
}
// ComponentConfig represents the configuration common to all kinds of

View File

@@ -46,10 +46,10 @@ const ComponentAnnotationsTag = "holos_component_annotations"
//
// [external credential provider]: https://github.com/kubernetes/enhancements/blob/313ad8b59c80819659e1fbf0f165230f633f2b22/keps/sig-auth/541-external-credential-providers/README.md
type BuildPlan struct {
// APIVersion represents the versioned schema of the resource.
APIVersion string `json:"apiVersion" yaml:"apiVersion" cue:"\"v1alpha6\""`
// Kind represents the type of the resource.
Kind string `json:"kind" yaml:"kind" cue:"\"BuildPlan\""`
// APIVersion represents the versioned schema of the resource.
APIVersion string `json:"apiVersion" yaml:"apiVersion" cue:"\"v1alpha6\""`
// Metadata represents data about the resource such as the Name.
Metadata Metadata `json:"metadata" yaml:"metadata"`
// Spec specifies the desired state of the resource.
@@ -412,10 +412,10 @@ type Metadata struct {
//
// cue export --out yaml ./platform
type Platform struct {
// APIVersion represents the versioned schema of this resource.
APIVersion string `json:"apiVersion" yaml:"apiVersion" cue:"string | *\"v1alpha6\""`
// Kind is a string value representing the resource.
Kind string `json:"kind" yaml:"kind" cue:"\"Platform\""`
// APIVersion represents the versioned schema of this resource.
APIVersion string `json:"apiVersion" yaml:"apiVersion" cue:"string | *\"v1alpha6\""`
// Metadata represents data about the resource such as the Name.
Metadata Metadata `json:"metadata" yaml:"metadata"`

View File

@@ -12,8 +12,7 @@ stderr -count=1 '^rendered platform'
# Holos uses CUE to build a platform specification.
exec holos show platform
cp stdout platform.yaml
exec holos compare yaml platform.yaml want/1.platform_spec.yaml
cmp stdout want/1.platform_spec.yaml
# Define the host and port in projects/blackbox.schema.cue
mv projects/blackbox.schema.cue.disabled projects/blackbox.schema.cue
@@ -26,7 +25,7 @@ mv platform/prometheus.cue.disabled platform/prometheus.cue
exec holos render platform
stderr -count=1 '^rendered prometheus'
stderr -count=1 '^rendered platform'
exec holos compare yaml deploy/components/prometheus/prometheus.gen.yaml want/1.prometheus.gen.yaml
cmp deploy/components/prometheus/prometheus.gen.yaml want/1.prometheus.gen.yaml
# Add the CUE configuration to manage the blackbox Helm Chart component.
mv projects/platform/components/blackbox/blackbox.cue.disabled projects/platform/components/blackbox/blackbox.cue
@@ -38,7 +37,7 @@ exec holos render platform ./platform
stderr -count=1 '^rendered prometheus'
stderr -count=1 '^rendered blackbox'
stderr -count=1 '^rendered platform'
exec holos compare yaml deploy/components/blackbox/blackbox.gen.yaml want/1.blackbox.gen.yaml
cmp deploy/components/blackbox/blackbox.gen.yaml want/1.blackbox.gen.yaml
# Import helm values
exec cue import --package holos --path 'Helm: Values:' --outfile projects/platform/components/prometheus/values.cue projects/platform/components/prometheus/vendor/25.27.0/prometheus/values.yaml
@@ -56,7 +55,7 @@ mv platform/httpbin.cue.disabled platform/httpbin.cue
# Render the platform with httpbin
exec holos render platform ./platform
stderr -count=1 '^rendered httpbin'
exec holos compare yaml deploy/components/httpbin/httpbin.gen.yaml want/1.httpbin.gen.yaml
cmp deploy/components/httpbin/httpbin.gen.yaml want/1.httpbin.gen.yaml
# Verify the labels are correct
grep 'replacement: blackbox:9115' deploy/components/prometheus/prometheus.gen.yaml

View File

@@ -3,8 +3,7 @@
exec holos init platform v1alpha5 --force
# want a buildplan shown
exec holos show buildplans
cp stdout buildplan-output.yaml
exec holos compare yaml buildplan-output.yaml buildplan.yaml
cmp stdout buildplan.yaml
# want this error to go away
! stderr 'cannot convert non-concrete value string'
-- platform/example.cue --

View File

@@ -4,12 +4,10 @@ env HOME=$WORK
exec holos init platform v1alpha5 --force
exec holos show platform
cp stdout empty.yaml
exec holos compare yaml empty.yaml want/empty.yaml
cmp stdout want/empty.yaml
exec holos show platform -t foo
cp stdout foo.yaml
exec holos compare yaml foo.yaml want/foo.yaml
cmp stdout want/foo.yaml
-- platform/empty.cue --
@if(foo)

View File

@@ -1,5 +1,4 @@
# https://github.com/holos-run/holos/issues/330
# take care to install helm 3.17.3 otherwise kube versions may not align
exec holos init platform v1alpha5 --force
# Make sure the helm chart works with plain helm
exec helm template ./components/capabilities/vendor/0.1.0/capabilities
@@ -7,13 +6,13 @@ stdout 'name: has-foo-v1beta1'
stdout 'kubeVersion: v'
exec holos render platform ./platform
# When no capabilities are specified
exec holos compare yaml deploy/components/capabilities/capabilities.gen.yaml want/when-no-capabilities-specified.yaml
cmp deploy/components/capabilities/capabilities.gen.yaml want/when-no-capabilities-specified.yaml
# With APIVersions specified
exec holos compare yaml deploy/components/specified/specified.gen.yaml want/with-capabilities-specified.yaml
cmp deploy/components/specified/specified.gen.yaml want/with-capabilities-specified.yaml
# With KubeVersion specified
exec holos compare yaml deploy/components/kubeversion1/kubeversion1.gen.yaml want/with-kubeversion-specified.yaml
cmp deploy/components/kubeversion1/kubeversion1.gen.yaml want/with-kubeversion-specified.yaml
# With both APIVersions and KubeVersion specified
exec holos compare yaml deploy/components/kubeversion2/kubeversion2.gen.yaml want/with-both-specified.yaml
cmp deploy/components/kubeversion2/kubeversion2.gen.yaml want/with-both-specified.yaml
-- want/with-both-specified.yaml --
apiVersion: v1
kind: Service
@@ -45,7 +44,7 @@ apiVersion: v1
kind: Service
metadata:
annotations:
kubeVersion: v1.99.0
kubeVersion: v1.31.0
name: has-foo-v1beta1
spec:
ports:
@@ -58,7 +57,7 @@ apiVersion: v1
kind: Service
metadata:
annotations:
kubeVersion: v1.99.0
kubeVersion: v1.31.0
name: has-foo-v1
spec:
ports:
@@ -104,7 +103,7 @@ Component: #Helm & {
Chart: version: "0.1.0"
_APIVersions: string | *"[]" @tag(apiVersions, type=string)
APIVersions: json.Unmarshal(_APIVersions)
KubeVersion: string | *"v1.99.0" @tag(kubeVersion, type=string)
KubeVersion: string | *"v1.31.0" @tag(kubeVersion, type=string)
}
-- components/capabilities/vendor/0.1.0/capabilities/Chart.yaml --
apiVersion: v2
@@ -138,7 +137,7 @@ kind: Service
metadata:
name: has-foo-v1beta1
annotations:
kubeVersion: v1.99.0
kubeVersion: v1.31.0
spec:
ports:
- port: 80

View File

@@ -12,8 +12,7 @@ stderr -count=1 '^rendered platform'
# When author.#Kubernetes is empty
exec holos cue export --expression holos --out=yaml ./components/empty
cp stdout empty.yaml
exec holos compare yaml empty.yaml want.txt
cmp stdout want.txt
-- components/empty/empty.cue --
package holos

View File

@@ -180,9 +180,9 @@ Platform assembles a core Platform in the Resource field for the holos render pl
```go
type Platform struct {
Name string `json:"name" yaml:"name" cue:"string | *\"default\""`
Components map[NameLabel]core.Component `json:"components" yaml:"components"`
Resource core.Platform `json:"resource" yaml:"resource"`
Name string
Components map[NameLabel]core.Component
Resource core.Platform
}
```

View File

@@ -209,10 +209,10 @@ Holos uses CUE to construct a BuildPlan. Holos injects late binding values such
```go
type BuildPlan struct {
// APIVersion represents the versioned schema of the resource.
APIVersion string `json:"apiVersion" yaml:"apiVersion" cue:"\"v1alpha6\""`
// Kind represents the type of the resource.
Kind string `json:"kind" yaml:"kind" cue:"\"BuildPlan\""`
// APIVersion represents the versioned schema of the resource.
APIVersion string `json:"apiVersion" yaml:"apiVersion" cue:"\"v1alpha6\""`
// Metadata represents data about the resource such as the Name.
Metadata Metadata `json:"metadata" yaml:"metadata"`
// Spec specifies the desired state of the resource.
@@ -491,10 +491,10 @@ cue export --out yaml ./platform
```go
type Platform struct {
// APIVersion represents the versioned schema of this resource.
APIVersion string `json:"apiVersion" yaml:"apiVersion" cue:"string | *\"v1alpha6\""`
// Kind is a string value representing the resource.
Kind string `json:"kind" yaml:"kind" cue:"\"Platform\""`
// APIVersion represents the versioned schema of this resource.
APIVersion string `json:"apiVersion" yaml:"apiVersion" cue:"string | *\"v1alpha6\""`
// Metadata represents data about the resource such as the Name.
Metadata Metadata `json:"metadata" yaml:"metadata"`

View File

@@ -0,0 +1,52 @@
# Compare Buildplans
Use the `holos compare buildplans <f1> <f2>` command to compare two BuildPlan
Files. Useful to ensure different configuration versions produce the same
results.
The `holos show buildplans` command writes a BuildPlan File to standard output.
A BuildPlan File is a yaml encoded stream of BuildPlan objects.
## User Requirements
1. `holos compare buildplans before.yaml after.yaml` must return exit code 1 when after.yaml contains fields (recursively) not present in before.yaml
2. `holos compare buildplans before.yaml after.yaml --backwards-compatible` must return exit code 0 when after.yaml contains fields (recursively) not present in before.yaml
## Behavior Specification
BuildPlan File f1 is equivalent to f2 when:
1. f1 and f2 have an equal number of BuildPlan objects.
2. each object in f1 is equivalent to exactly one unique object in f2.
Two BuildPlans, bp1 and bp2, are equivalent when:
1. All field values in bp1 are equivalent to the same field in bp2.
2. Both 1 and 2 apply to nested objects, recursively.
3. Field f is equivalent when bp1.f exactly equals bp2.f, except for:
3.1. Objects in the spec.artifacts list may appear in any arbitrary order.
3.2. The ordering of keys does not matter.
4. Backwards compatibility behavior (controlled by isBackwardsCompatible):
- When false: bp2 and bp1 must have exactly the same fields
- When true: bp2 may have additional fields that don't exist in bp1
(e.g., new features added in a newer version)
Example:
bp1 has {name: "x", version: "1.0"}
bp2 has {name: "x", version: "1.0", newFeature: "enabled"}
This comparison passes when isBackwardsCompatible=true
5. Fields in bp1 must always be present in bp2 (regardless of backwards
compatibility mode).
6. List type fields with a null value are equivalent to:
6.1. null values
6.2. empty values ([])
6.2. a missing field
A BuildPlan File is valid when:
1. Two or more identical objects exist in the same file. They must be
treated as unique objects when comparing BuildPlan Files
2. Two objects may have the same value for the metadata.name field.
3. The kind field of all objects in the file stream is "BuildPlan"
## Implementation Guidance
1. Implement a stub Comparer struct in the internal/compare package.
2. Implement a stub Comparer.BuildPlans() method.
3. Write test cases for each item in the Behavior Specification section. Use a table test approach that loads each test case from a subdirectory and reads the test case data from a `testcase.json` file. The json file should have an exitCode, name, msg, file1 and file2 fields. file1 is "before.yaml" and file2 is "after.yaml".
4. Modify the Comparer.BuildPlans() method to satisfy each test case.
5. Using the existing commands as an example, wire up the command line to the compare package.

View File

@@ -4,4 +4,4 @@ cmp stdout $WORK/output.txt
-- command.sh --
holos --version
-- output.txt --
0.104.3
0.104.1

View File

@@ -1 +1 @@
0.104.3
0.104.1

View File

@@ -1,2 +1,3 @@
rendered podinfo in 160.977334ms
rendered platform in 161.101292ms
cached podinfo 6.6.2
rendered podinfo in 1.938665041s
rendered platform in 1.938759417s

View File

@@ -9,8 +9,9 @@
|-- platform
| |-- platform.gen.cue
| `-- podinfo.cue
|-- platform.metadata.json
|-- resources.cue
|-- schema.cue
`-- tags.cue
8 directories, 6 files
8 directories, 7 files

View File

@@ -4,4 +4,4 @@ cmp stdout $WORK/output.txt
-- command.sh --
holos --version
-- output.txt --
0.104.3
0.104.1

View File

@@ -1 +1 @@
0.104.3
0.104.1

View File

@@ -1,3 +1,3 @@
[main 70107f8] add blackbox configuration
[main 1adcd08] add blackbox configuration
1 file changed, 15 insertions(+)
create mode 100644 config/prometheus/blackbox.cue
create mode 100644 components/blackbox.cue

View File

@@ -1,3 +1,2 @@
[main dc787e2] integrate blackbox and prometheus together
3 files changed, 1348 insertions(+), 2 deletions(-)
create mode 100644 components/prometheus/values.cue.orig
[main 4221803] integrate blackbox and prometheus together
2 files changed, 4 insertions(+), 2 deletions(-)

View File

@@ -1,4 +1,4 @@
[main aaf64bb] import values
[main 52e90ea] import values
2 files changed, 1815 insertions(+)
create mode 100644 components/blackbox/values.cue
create mode 100644 components/prometheus/values.cue

View File

@@ -1,3 +1,3 @@
rendered blackbox in 111.222667ms
rendered prometheus in 139.292917ms
rendered platform in 139.350708ms
rendered blackbox in 365.936792ms
rendered prometheus in 371.855875ms
rendered platform in 372.109916ms

View File

@@ -1,4 +1,4 @@
[main 688da56] add blackbox and prometheus
[main b5df111] add blackbox and prometheus
5 files changed, 1550 insertions(+)
create mode 100644 components/blackbox/blackbox.cue
create mode 100644 components/prometheus/prometheus.cue

View File

@@ -1,3 +1,5 @@
rendered blackbox in 778.713375ms
rendered prometheus in 839.024292ms
rendered platform in 839.07325ms
cached prometheus-blackbox-exporter 9.0.1
rendered blackbox in 3.825430417s
cached prometheus 25.27.0
rendered prometheus in 4.840089667s
rendered platform in 4.840137792s

View File

@@ -1,2 +1,2 @@
[main 2d46297] render integrated blackbox and prometheus manifests
[main 67efe0d] render integrated blackbox and prometheus manifests
2 files changed, 7 insertions(+), 7 deletions(-)

View File

@@ -4,4 +4,4 @@ cmp stdout $WORK/output.txt
-- command.sh --
holos --version
-- output.txt --
0.104.3
0.104.1

View File

@@ -1 +1 @@
0.104.3
0.104.1

View File

@@ -27,9 +27,9 @@ spec:
- includeSelectors: false
pairs:
app.kubernetes.io/name: httpbin
patches: []
images:
- name: mccutchen/go-httpbin
patches: []
resources:
- resources.gen.yaml
- httpbin.yaml

View File

@@ -1,4 +1,4 @@
[main f621828] add httpbin
[main 823e136] add httpbin
4 files changed, 113 insertions(+)
create mode 100644 components/httpbin/httpbin.cue
create mode 100644 components/httpbin/httpbin.yaml

View File

@@ -1,3 +1,3 @@
[main 0cccd8c] annotate httpbin for prometheus probes
[main 96f5f45] annotate httpbin for prometheus probes
2 files changed, 18 insertions(+)
create mode 100644 components/httpbin/patches.cue

View File

@@ -1,2 +1,2 @@
rendered httpbin in 77.754459ms
rendered platform in 77.832042ms
rendered httpbin in 112.916375ms
rendered platform in 112.990333ms

View File

@@ -1,2 +1,2 @@
rendered httpbin in 77.095625ms
rendered platform in 77.190416ms
rendered httpbin in 111.183042ms
rendered platform in 111.265792ms

View File

@@ -84,14 +84,10 @@ Install these tools to use Holos's full capabilities:
- [Kubectl] for [kustomize] operations
:::note
Holos is tested with Helm `v3.17.3`. If you see `Error: chart requires
Holos is tested with Helm `v3.16.2`. If you see `Error: chart requires
kubeVersion` errors, try upgrading Helm.
:::
## Known Issues
Helm `v3.18.0` has a [known issue](https://github.com/NixOS/nixpkgs/pull/322994) that causes it to produce incorrect output. This may affect Holos users. For more details, see [Holos issue #433](https://github.com/holos-run/holos/issues/433).
## Next Steps
With your platform structure initialized, proceed to [Hello Holos] to learn Helm

View File

@@ -4,4 +4,4 @@ cmp stdout $WORK/output.txt
-- command.sh --
holos --version
-- output.txt --
0.104.3
0.104.1

View File

@@ -1,2 +1,3 @@
rendered podinfo in 159.277916ms
rendered platform in 159.380625ms
cached podinfo 6.6.2
rendered podinfo in 1.938665041s
rendered platform in 1.938759417s

View File

@@ -9,8 +9,9 @@
|-- platform
| |-- platform.gen.cue
| `-- podinfo.cue
|-- platform.metadata.json
|-- resources.cue
|-- schema.cue
`-- tags.cue
8 directories, 6 files
8 directories, 7 files

View File

@@ -4,4 +4,4 @@ cmp stdout $WORK/output.txt
-- command.sh --
holos --version
-- output.txt --
0.104.3
0.104.1

View File

@@ -1,3 +1,3 @@
[main 7761ac1] add blackbox configuration
[main 1adcd08] add blackbox configuration
1 file changed, 15 insertions(+)
create mode 100644 config/prometheus/blackbox.cue
create mode 100644 components/blackbox.cue

View File

@@ -1,3 +1,2 @@
[main 8c81fed] integrate blackbox and prometheus together
3 files changed, 1348 insertions(+), 2 deletions(-)
create mode 100644 components/prometheus/values.cue.orig
[main 4221803] integrate blackbox and prometheus together
2 files changed, 4 insertions(+), 2 deletions(-)

View File

@@ -1,4 +1,4 @@
[main 18c7aad] import values
[main 52e90ea] import values
2 files changed, 1815 insertions(+)
create mode 100644 components/blackbox/values.cue
create mode 100644 components/prometheus/values.cue

View File

@@ -1,3 +1,3 @@
rendered blackbox in 110.354458ms
rendered prometheus in 138.13225ms
rendered platform in 138.168958ms
rendered blackbox in 365.936792ms
rendered prometheus in 371.855875ms
rendered platform in 372.109916ms

View File

@@ -1,4 +1,4 @@
[main ff5bfaa] add blackbox and prometheus
[main b5df111] add blackbox and prometheus
5 files changed, 1550 insertions(+)
create mode 100644 components/blackbox/blackbox.cue
create mode 100644 components/prometheus/prometheus.cue

View File

@@ -1,3 +1,5 @@
rendered blackbox in 693.763959ms
rendered prometheus in 788.544209ms
rendered platform in 788.618792ms
cached prometheus-blackbox-exporter 9.0.1
rendered blackbox in 3.825430417s
cached prometheus 25.27.0
rendered prometheus in 4.840089667s
rendered platform in 4.840137792s

View File

@@ -1,2 +1,2 @@
[main 4033953] render integrated blackbox and prometheus manifests
[main 67efe0d] render integrated blackbox and prometheus manifests
2 files changed, 7 insertions(+), 7 deletions(-)

View File

@@ -4,4 +4,4 @@ cmp stdout $WORK/output.txt
-- command.sh --
holos --version
-- output.txt --
0.104.3
0.104.1

View File

@@ -27,9 +27,9 @@ spec:
- includeSelectors: false
pairs:
app.kubernetes.io/name: httpbin
patches: []
images:
- name: mccutchen/go-httpbin
patches: []
resources:
- resources.gen.yaml
- httpbin.yaml

View File

@@ -1,4 +1,4 @@
[main 1b332f8] add httpbin
[main 823e136] add httpbin
4 files changed, 113 insertions(+)
create mode 100644 components/httpbin/httpbin.cue
create mode 100644 components/httpbin/httpbin.yaml

View File

@@ -1,3 +1,3 @@
[main e37f8ce] annotate httpbin for prometheus probes
[main 96f5f45] annotate httpbin for prometheus probes
2 files changed, 18 insertions(+)
create mode 100644 components/httpbin/patches.cue

View File

@@ -1,2 +1,2 @@
rendered httpbin in 77.710709ms
rendered platform in 77.792958ms
rendered httpbin in 112.916375ms
rendered platform in 112.990333ms

View File

@@ -1,2 +1,2 @@
rendered httpbin in 76.942666ms
rendered platform in 77.014958ms
rendered httpbin in 111.183042ms
rendered platform in 111.265792ms

44
go.mod
View File

@@ -1,29 +1,28 @@
module github.com/holos-run/holos
go 1.23.0
go 1.23
toolchain go1.23.6
toolchain go1.23.2
require (
cuelang.org/go v0.14.1
github.com/google/go-cmp v0.7.0
cuelang.org/go v0.12.0
github.com/mattn/go-isatty v0.0.20
github.com/mattn/go-runewidth v0.0.15
github.com/olekukonko/tablewriter v0.0.5
github.com/princjef/gomarkdoc v1.1.0
github.com/rogpeppe/go-internal v1.14.1
github.com/spf13/cobra v1.9.1
github.com/spf13/pflag v1.0.7
github.com/rogpeppe/go-internal v1.13.2-0.20241226121412-a5dc8ff20d0a
github.com/spf13/cobra v1.8.1
github.com/spf13/pflag v1.0.5
github.com/stretchr/testify v1.10.0
golang.org/x/sync v0.16.0
golang.org/x/tools v0.35.0
golang.org/x/sync v0.10.0
golang.org/x/tools v0.29.0
gopkg.in/yaml.v3 v3.0.1
helm.sh/helm/v3 v3.16.3
sigs.k8s.io/kustomize/kustomize/v5 v5.5.0
)
require (
cuelabs.dev/go/oci/ociregistry v0.0.0-20250715075730-49cab49c8e9d // indirect
cuelabs.dev/go/oci/ociregistry v0.0.0-20241125120445-2c00c104c6e1 // indirect
dario.cat/mergo v1.0.1 // indirect
github.com/AdaLogics/go-fuzz-headers v0.0.0-20230811130428-ced1acdcaa24 // indirect
github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 // indirect
@@ -58,7 +57,7 @@ require (
github.com/docker/go-connections v0.5.0 // indirect
github.com/docker/go-metrics v0.0.1 // indirect
github.com/emicklei/go-restful/v3 v3.11.0 // indirect
github.com/emicklei/proto v1.14.2 // indirect
github.com/emicklei/proto v1.13.4 // indirect
github.com/emirpasic/gods v1.18.1 // indirect
github.com/evanphx/json-patch v5.9.0+incompatible // indirect
github.com/exponent-io/jsonpath v0.0.0-20151013193312-d6023ce2651d // indirect
@@ -82,6 +81,7 @@ require (
github.com/golang/protobuf v1.5.4 // indirect
github.com/google/btree v1.0.1 // indirect
github.com/google/gnostic-models v0.6.9-0.20230804172637-c7be7c783f49 // indirect
github.com/google/go-cmp v0.6.0 // indirect
github.com/google/gofuzz v1.2.0 // indirect
github.com/google/pprof v0.0.0-20240622144329-c177fd99eaa9 // indirect
github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 // indirect
@@ -128,8 +128,8 @@ require (
github.com/nxadm/tail v1.4.11 // indirect
github.com/onsi/ginkgo v1.16.4 // indirect
github.com/opencontainers/go-digest v1.0.0 // indirect
github.com/opencontainers/image-spec v1.1.1 // indirect
github.com/pelletier/go-toml/v2 v2.2.4 // indirect
github.com/opencontainers/image-spec v1.1.0 // indirect
github.com/pelletier/go-toml/v2 v2.2.3 // indirect
github.com/peterbourgon/diskv v2.0.1+incompatible // indirect
github.com/pjbgf/sha1cd v0.3.0 // indirect
github.com/pkg/errors v0.9.1 // indirect
@@ -140,7 +140,7 @@ require (
github.com/prometheus/client_model v0.6.1 // indirect
github.com/prometheus/common v0.55.0 // indirect
github.com/prometheus/procfs v0.15.1 // indirect
github.com/protocolbuffers/txtpbfmt v0.0.0-20250627152318-f293424e46b5 // indirect
github.com/protocolbuffers/txtpbfmt v0.0.0-20241112170944-20d2c9ebc01d // indirect
github.com/rivo/uniseg v0.4.7 // indirect
github.com/rubenv/sql-migrate v1.7.0 // indirect
github.com/russross/blackfriday/v2 v2.1.0 // indirect
@@ -155,7 +155,7 @@ require (
github.com/spf13/cast v1.7.0 // indirect
github.com/spf13/viper v1.18.2 // indirect
github.com/subosito/gotenv v1.6.0 // indirect
github.com/tetratelabs/wazero v1.9.0 // indirect
github.com/tetratelabs/wazero v1.6.0 // indirect
github.com/x-cray/logrus-prefixed-formatter v0.5.2 // indirect
github.com/x448/float16 v0.8.4 // indirect
github.com/xanzy/ssh-agent v0.3.3 // indirect
@@ -168,14 +168,14 @@ require (
go.opentelemetry.io/otel/metric v1.28.0 // indirect
go.opentelemetry.io/otel/trace v1.28.0 // indirect
go.uber.org/multierr v1.11.0 // indirect
golang.org/x/crypto v0.40.0 // indirect
golang.org/x/crypto v0.32.0 // indirect
golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 // indirect
golang.org/x/mod v0.26.0 // indirect
golang.org/x/net v0.42.0 // indirect
golang.org/x/oauth2 v0.30.0 // indirect
golang.org/x/sys v0.34.0 // indirect
golang.org/x/term v0.33.0 // indirect
golang.org/x/text v0.27.0 // indirect
golang.org/x/mod v0.22.0 // indirect
golang.org/x/net v0.34.0 // indirect
golang.org/x/oauth2 v0.25.0 // indirect
golang.org/x/sys v0.29.0 // indirect
golang.org/x/term v0.28.0 // indirect
golang.org/x/text v0.21.0 // indirect
golang.org/x/time v0.5.0 // indirect
google.golang.org/genproto/googleapis/rpc v0.0.0-20240701130421-f6361c86f094 // indirect
google.golang.org/grpc v1.65.0 // indirect

83
go.sum
View File

@@ -1,7 +1,7 @@
cuelabs.dev/go/oci/ociregistry v0.0.0-20250715075730-49cab49c8e9d h1:lX0EawyoAu4kgMJJfy7MmNkIHioBcdBGFRSKDZ+CWo0=
cuelabs.dev/go/oci/ociregistry v0.0.0-20250715075730-49cab49c8e9d/go.mod h1:4WWeZNxUO1vRoZWAHIG0KZOd6dA25ypyWuwD3ti0Tdc=
cuelang.org/go v0.14.1 h1:kxFAHr7bvrCikbtVps2chPIARazVdnRmlz65dAzKyWg=
cuelang.org/go v0.14.1/go.mod h1:aSP9UZUM5m2izHAHUvqtq0wTlWn5oLjuv2iBMQZBLLs=
cuelabs.dev/go/oci/ociregistry v0.0.0-20241125120445-2c00c104c6e1 h1:mRwydyTyhtRX2wXS3mqYWzR2qlv6KsmoKXmlz5vInjg=
cuelabs.dev/go/oci/ociregistry v0.0.0-20241125120445-2c00c104c6e1/go.mod h1:5A4xfTzHTXfeVJBU6RAUf+QrlfTCW+017q/QiW+sMLg=
cuelang.org/go v0.12.0 h1:q4W5I+RtDIA27rslQyyt6sWkXX0YS9qm43+U1/3e0kU=
cuelang.org/go v0.12.0/go.mod h1:B4+kjvGGQnbkz+GuAv1dq/R308gTkp0sO28FdMrJ2Kw=
dario.cat/mergo v1.0.1 h1:Ra4+bf83h2ztPIQYNP99R6m+Y7KfnARDfID+a+vLl4s=
dario.cat/mergo v1.0.1/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk=
filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA=
@@ -82,7 +82,7 @@ github.com/containerd/log v0.1.0 h1:TCJt7ioM2cr/tfR8GPbGf9/VRAX8D2B4PjzCpfX540I=
github.com/containerd/log v0.1.0/go.mod h1:VRRf09a7mHDIRezVKTRCrOq78v577GXq3bSa3EhrzVo=
github.com/containerd/platforms v0.2.1 h1:zvwtM3rz2YHPQsF2CHYM8+KtB5dvhISiXh5ZpSBQv6A=
github.com/containerd/platforms v0.2.1/go.mod h1:XHCb+2/hzowdiut9rkudds9bE5yJ7npe7dG/wG+uFPw=
github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g=
github.com/cpuguy83/go-md2man/v2 v2.0.4/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
github.com/creack/pty v1.1.18 h1:n56/Zwd5o6whRC5PMGretI4IdRLlmBXYNjScPaBgsbY=
github.com/creack/pty v1.1.18/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4=
github.com/cyphar/filepath-securejoin v0.3.4 h1:VBWugsJh2ZxJmLFSM06/0qzQyiQX2Qs0ViKrUAcqdZ8=
@@ -115,8 +115,8 @@ github.com/elazarl/goproxy v1.2.1 h1:njjgvO6cRG9rIqN2ebkqy6cQz2Njkx7Fsfv/zIZqgug
github.com/elazarl/goproxy v1.2.1/go.mod h1:YfEbZtqP4AetfO6d40vWchF3znWX7C7Vd6ZMfdL8z64=
github.com/emicklei/go-restful/v3 v3.11.0 h1:rAQeMHw1c7zTmncogyy8VvRZwtkmkZ4FxERmMY4rD+g=
github.com/emicklei/go-restful/v3 v3.11.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc=
github.com/emicklei/proto v1.14.2 h1:wJPxPy2Xifja9cEMrcA/g08art5+7CGJNFNk35iXC1I=
github.com/emicklei/proto v1.14.2/go.mod h1:rn1FgRS/FANiZdD2djyH7TMA9jdRDcYQ9IEN9yvjX0A=
github.com/emicklei/proto v1.13.4 h1:myn1fyf8t7tAqIzV91Tj9qXpvyXXGXk8OS2H6IBSc9g=
github.com/emicklei/proto v1.13.4/go.mod h1:rn1FgRS/FANiZdD2djyH7TMA9jdRDcYQ9IEN9yvjX0A=
github.com/emirpasic/gods v1.18.1 h1:FXtiHYKDGKCW2KzwZKx0iC0PQmdlorYgdFG9jPXJ1Bc=
github.com/emirpasic/gods v1.18.1/go.mod h1:8tpGGwCnJ5H4r6BWwaV6OrWmMoPhUl5jm/FMNAnJvWQ=
github.com/evanphx/json-patch v5.9.0+incompatible h1:fBXyNpNMuTTDdquAq/uisOr2lShz4oaXpDTX2bLe7ls=
@@ -206,8 +206,8 @@ github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMyw
github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=
github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0=
github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
@@ -362,10 +362,10 @@ github.com/onsi/gomega v1.34.1 h1:EUMJIKUjM8sKjYbtxQI9A4z2o+rruxnzNvpknOXie6k=
github.com/onsi/gomega v1.34.1/go.mod h1:kU1QgUvBDLXBJq618Xvm2LUX6rSAfRaFRTcdOeDLwwY=
github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U=
github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM=
github.com/opencontainers/image-spec v1.1.1 h1:y0fUlFfIZhPF1W537XOLg0/fcx6zcHCJwooC2xJA040=
github.com/opencontainers/image-spec v1.1.1/go.mod h1:qpqAh3Dmcf36wStyyWU+kCeDgrGnAve2nCC8+7h8Q0M=
github.com/pelletier/go-toml/v2 v2.2.4 h1:mye9XuhQ6gvn5h28+VilKrrPoQVanw5PMw/TB0t5Ec4=
github.com/pelletier/go-toml/v2 v2.2.4/go.mod h1:2gIqNv+qfxSVS7cM2xJQKtLSTLUE9V8t9Stt+h56mCY=
github.com/opencontainers/image-spec v1.1.0 h1:8SG7/vwALn54lVB/0yZ/MMwhFrPYtpEHQb2IpWsCzug=
github.com/opencontainers/image-spec v1.1.0/go.mod h1:W4s4sFTMaBeK1BQLXbG4AdM2szdn85PY75RI83NrTrM=
github.com/pelletier/go-toml/v2 v2.2.3 h1:YmeHyLY8mFWbdkNWwpr+qIL2bEqT0o95WSdkNHvL12M=
github.com/pelletier/go-toml/v2 v2.2.3/go.mod h1:MfCQTFTvCcUyyvvwm1+G6H/jORL20Xlb6rzQu9GuUkc=
github.com/peterbourgon/diskv v2.0.1+incompatible h1:UBdAOUP5p4RWqPBg048CAvpKN+vxiaj6gdUUzhl4XmI=
github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU=
github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5 h1:Ii+DKncOVM8Cu1Hc+ETb5K+23HdAMvESYE3ZJ5b5cMI=
@@ -404,15 +404,15 @@ github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsT
github.com/prometheus/procfs v0.0.3/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ=
github.com/prometheus/procfs v0.15.1 h1:YagwOFzUgYfKKHX6Dr+sHT7km/hxC76UB0learggepc=
github.com/prometheus/procfs v0.15.1/go.mod h1:fB45yRUv8NstnjriLhBQLuOUt+WW4BsoGhij/e3PBqk=
github.com/protocolbuffers/txtpbfmt v0.0.0-20250627152318-f293424e46b5 h1:WWs1ZFnGobK5ZXNu+N9If+8PDNVB9xAqrib/stUXsV4=
github.com/protocolbuffers/txtpbfmt v0.0.0-20250627152318-f293424e46b5/go.mod h1:BnHogPTyzYAReeQLZrOxyxzS739DaTNtTvohVdbENmA=
github.com/protocolbuffers/txtpbfmt v0.0.0-20241112170944-20d2c9ebc01d h1:HWfigq7lB31IeJL8iy7jkUmU/PG1Sr8jVGhS749dbUA=
github.com/protocolbuffers/txtpbfmt v0.0.0-20241112170944-20d2c9ebc01d/go.mod h1:jgxiZysxFPM+iWKwQwPR+y+Jvo54ARd4EisXxKYpB5c=
github.com/rivo/uniseg v0.1.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ=
github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88=
github.com/rogpeppe/go-internal v1.5.2/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc=
github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ=
github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc=
github.com/rogpeppe/go-internal v1.13.2-0.20241226121412-a5dc8ff20d0a h1:w3tdWGKbLGBPtR/8/oO74W6hmz0qE5q0z9aqSAewaaM=
github.com/rogpeppe/go-internal v1.13.2-0.20241226121412-a5dc8ff20d0a/go.mod h1:S8kfXMp+yh77OxPD4fdM6YUknrZpQxLhvxzS4gDHENY=
github.com/rubenv/sql-migrate v1.7.0 h1:HtQq1xyTN2ISmQDggnh0c9U3JlP8apWh8YO2jzlXpTI=
github.com/rubenv/sql-migrate v1.7.0/go.mod h1:S4wtDEG1CKn+0ShpTtzWhFpHHI5PvCUtiGI+C+Z2THE=
github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk=
@@ -437,11 +437,10 @@ github.com/spf13/afero v1.11.0 h1:WJQKhtpdm3v2IzqG8VMqrr6Rf3UYpEF239Jy9wNepM8=
github.com/spf13/afero v1.11.0/go.mod h1:GH9Y3pIexgf1MTIWtNGyogA5MwRIDXGUr+hbWNoBjkY=
github.com/spf13/cast v1.7.0 h1:ntdiHjuueXFgm5nzDRdOS4yfT43P5Fnud6DH50rz/7w=
github.com/spf13/cast v1.7.0/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo=
github.com/spf13/cobra v1.9.1 h1:CXSaggrXdbHK9CF+8ywj8Amf7PBRmPCOJugH954Nnlo=
github.com/spf13/cobra v1.9.1/go.mod h1:nDyEzZ8ogv936Cinf6g1RU9MRY64Ir93oCnqb9wxYW0=
github.com/spf13/pflag v1.0.6/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
github.com/spf13/pflag v1.0.7 h1:vN6T9TfwStFPFM5XzjsvmzZkLuaLX+HS+0SeFLRgU6M=
github.com/spf13/pflag v1.0.7/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
github.com/spf13/cobra v1.8.1 h1:e5/vxKd/rZsfSJMUX1agtjeTDf+qv1/JdBF8gg5k9ZM=
github.com/spf13/cobra v1.8.1/go.mod h1:wHxEcudfqmLYa8iTfL+OuZPbBZkmvliBWKIezN3kD9Y=
github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
github.com/spf13/viper v1.18.2 h1:LUXCnvUvSM6FXAsj6nnfc8Q2tp1dIgUfY9Kc8GsSOiQ=
github.com/spf13/viper v1.18.2/go.mod h1:EKmWIqdnk5lOcmR72yw6hS+8OPYcwD0jteitLMVB+yk=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
@@ -457,8 +456,8 @@ github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOf
github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8=
github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU=
github.com/tetratelabs/wazero v1.9.0 h1:IcZ56OuxrtaEz8UYNRHBrUa9bYeX9oVY93KspZZBf/I=
github.com/tetratelabs/wazero v1.9.0/go.mod h1:TSbcXCfFP0L2FGkRPxHphadXPjo1T6W+CseNNY7EkjM=
github.com/tetratelabs/wazero v1.6.0 h1:z0H1iikCdP8t+q341xqepY4EWvHEw8Es7tlqiVzlP3g=
github.com/tetratelabs/wazero v1.6.0/go.mod h1:0U0G41+ochRKoPKCJlh0jMg1CHkyfK8kDqiirMmKY8A=
github.com/x-cray/logrus-prefixed-formatter v0.5.2 h1:00txxvfBM9muc0jiLIEAkAcIMJzfthRT6usrui8uGmg=
github.com/x-cray/logrus-prefixed-formatter v0.5.2/go.mod h1:2duySbKsL6M18s5GU7VPsoEPHyzalCE06qoARUCeBBE=
github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM=
@@ -501,14 +500,14 @@ golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACk
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
golang.org/x/crypto v0.40.0 h1:r4x+VvoG5Fm+eJcxMaY8CQM7Lb0l1lsmjGBQ6s8BfKM=
golang.org/x/crypto v0.40.0/go.mod h1:Qr1vMER5WyS2dfPHAlsOj01wgLbsyWtFn/aY+5+ZdxY=
golang.org/x/crypto v0.32.0 h1:euUpcYgM8WcP71gNpTqQCn6rC2t6ULUPiOzfWaXVVfc=
golang.org/x/crypto v0.32.0/go.mod h1:ZnnJkOaASj8g0AjIduWNlq2NRxL0PlBrbKVyZ6V/Ugc=
golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 h1:2dVuKD2vS7b0QIHQbpyTISPd0LeHDbnYEryqj5Q1ug8=
golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56/go.mod h1:M4RDyNAINzryxdtnbRXRL/OHtkFuWGRjvuhBJpk2IlY=
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.26.0 h1:EGMPT//Ezu+ylkCijjPc+f4Aih7sZvaAr+O3EHBxvZg=
golang.org/x/mod v0.26.0/go.mod h1:/j6NAhSk8iQ723BGAUyoAcn7SlD7s15Dp9Nd/SfeaFQ=
golang.org/x/mod v0.22.0 h1:D4nJWe9zXqHOmWqj4VMOJhvzj7bEZg4wEYa759z1pH4=
golang.org/x/mod v0.22.0/go.mod h1:6SkKJ3Xj0I0BrPOZoBy3bdMptDDU9oJrpohJ3eWZ1fY=
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
@@ -518,18 +517,18 @@ golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLL
golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
golang.org/x/net v0.42.0 h1:jzkYrhi3YQWD6MLBJcsklgQsoAcw89EcZbJw8Z614hs=
golang.org/x/net v0.42.0/go.mod h1:FF1RA5d3u7nAYA4z2TkclSCKh68eSXtiFwcWQpPXdt8=
golang.org/x/oauth2 v0.30.0 h1:dnDm7JmhM45NNpd8FDDeLhK6FwqbOf4MLCM9zb1BOHI=
golang.org/x/oauth2 v0.30.0/go.mod h1:B++QgG3ZKulg6sRPGD/mqlHQs5rB3Ml9erfeDY7xKlU=
golang.org/x/net v0.34.0 h1:Mb7Mrk043xzHgnRM88suvJFwzVrRfHEHJEl5/71CKw0=
golang.org/x/net v0.34.0/go.mod h1:di0qlW3YNM5oh6GqDGQr92MyTozJPmybPK4Ev/Gm31k=
golang.org/x/oauth2 v0.25.0 h1:CY4y7XT9v0cRI9oupztF8AgiIu99L/ksR/Xp/6jrZ70=
golang.org/x/oauth2 v0.25.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI=
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.16.0 h1:ycBJEhp9p4vXvUZNszeOq0kGTPghopOL8q0fq3vstxw=
golang.org/x/sync v0.16.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA=
golang.org/x/sync v0.10.0 h1:3NQrjDixjgGwUOCaF8w2+VYHv0Ve/vGYSbdkTa98gmQ=
golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
@@ -559,16 +558,16 @@ golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBc
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.34.0 h1:H5Y5sJ2L2JRdyv7ROF1he/lPdvFsd0mJHFw2ThKHxLA=
golang.org/x/sys v0.34.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
golang.org/x/sys v0.29.0 h1:TPYlXGxvx1MGTn2GiZDhnjPA9wZzZeGKHHmKhHYvgaU=
golang.org/x/sys v0.29.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/term v0.33.0 h1:NuFncQrRcaRvVmgRkvM3j/F00gWIAlcmlB8ACEKmGIg=
golang.org/x/term v0.33.0/go.mod h1:s18+ql9tYWp1IfpV9DmCtQDDSRBUjKaw9M1eAv5UeF0=
golang.org/x/term v0.28.0 h1:/Ts8HFuMR2E6IP/jlo7QVLZHggjKQbhu/7H0LJFr3Gg=
golang.org/x/term v0.28.0/go.mod h1:Sw/lC2IAUZ92udQNf3WodGtn4k/XoLyZoh8v/8uiwek=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.27.0 h1:4fGWRpyh641NLlecmyl4LOe6yDdfaYNrGb2zdfo4JV4=
golang.org/x/text v0.27.0/go.mod h1:1D28KMCvyooCX9hBiosv5Tz/+YLxj0j7XhWjpSUF7CU=
golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo=
golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ=
golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk=
golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
@@ -576,8 +575,8 @@ golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtn
golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.35.0 h1:mBffYraMEf7aa0sB+NuKnuCy8qI/9Bughn8dC2Gu5r0=
golang.org/x/tools v0.35.0/go.mod h1:NKdj5HkL/73byiZSJjqJgKn3ep7KjFkBOkR/Hps3VPw=
golang.org/x/tools v0.29.0 h1:Xx0h3TtM9rzQpQuR4dKLrdglAmCEN5Oi+P74JdhdzXE=
golang.org/x/tools v0.29.0/go.mod h1:KMQVMRsVxU6nHCFXrBPhDB8XncLNLM0lIy/F14RP588=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=

View File

@@ -13,7 +13,7 @@ func New(name string) *cobra.Command {
cmd := &cobra.Command{
Use: name,
Short: name,
Version: version.GetVersion(),
Version: version.Version,
Args: cobra.NoArgs,
CompletionOptions: cobra.CompletionOptions{
HiddenDefaultCmd: true,

View File

@@ -1,70 +0,0 @@
package cli
import (
"github.com/holos-run/holos/internal/compare"
"github.com/holos-run/holos/internal/errors"
"github.com/spf13/cobra"
)
// New for the compare command.
func NewCompareCmd() *cobra.Command {
cmd := &cobra.Command{
Use: "compare",
Short: "Compare Holos resources",
Long: "Compare Holos resources to verify semantic equivalence",
Args: func(cmd *cobra.Command, args []string) error {
if len(args) > 0 {
return errors.Format("unknown command %q for %q", args[0], cmd.CommandPath())
}
return nil
},
RunE: func(cmd *cobra.Command, args []string) error {
return cmd.Help()
},
}
cmd.AddCommand(NewCompareBuildPlansCmd())
cmd.AddCommand(NewCompareYAMLCmd())
return cmd
}
// New for the compare buildplans subcommand.
func NewCompareBuildPlansCmd() *cobra.Command {
var backwardsCompatible bool
cmd := &cobra.Command{
Use: "buildplans [file1] [file2]",
Short: "Compare two BuildPlan files",
Long: "Compare two BuildPlan files to verify they are semantically equivalent",
Args: cobra.ExactArgs(2),
RunE: func(cmd *cobra.Command, args []string) error {
c := compare.New()
return c.BuildPlans(args[0], args[1], backwardsCompatible)
},
}
cmd.Flags().BoolVar(&backwardsCompatible, "backwards-compatible", false, "Enable backwards compatibility mode where file2 may have fields missing from file1")
return cmd
}
// New for the compare yaml subcommand.
func NewCompareYAMLCmd() *cobra.Command {
var backwardsCompatible bool
cmd := &cobra.Command{
Use: "yaml [file1] [file2]",
Short: "Compare two yaml object streams",
Long: "Compare two yaml object streams to verify they are structurally equivalent",
Args: cobra.ExactArgs(2),
RunE: func(cmd *cobra.Command, args []string) error {
c := compare.New()
// TODO(jeff): Add a YAML() function.
return c.BuildPlans(args[0], args[1], backwardsCompatible)
},
}
cmd.Flags().BoolVar(&backwardsCompatible, "backwards-compatible", false, "Enable backwards compatibility mode where file2 may have fields missing from file1")
return cmd
}

View File

@@ -1,27 +0,0 @@
package cli
import (
_ "embed"
"github.com/holos-run/holos/internal/cli/command"
"github.com/holos-run/holos/internal/compile"
"github.com/holos-run/holos/internal/errors"
"github.com/spf13/cobra"
)
//go:embed compile.txt
var compileLong string
// NewCompileCmd returns a new compile command.
func NewCompileCmd() *cobra.Command {
cmd := command.New("compile")
cmd.Short = "Compile Components (stdin) to BuildPlans (stdout) using CUE"
cmd.Long = compileLong
cmd.Args = cobra.NoArgs
cmd.RunE = func(cmd *cobra.Command, args []string) error {
c := compile.New()
ctx := cmd.Root().Context()
return errors.Wrap(c.Run(ctx))
}
return cmd
}

View File

@@ -1,17 +0,0 @@
Reads a stream of JSON-encoded Component objects from standard input. For each
Component, builds a CUE instance then exports a BuildPlan. Each resulting
BuildPlan is written as a JSON-encoded object to standard output.
This command encapsulates cue export for concurrent use. It may be used directly
by piping the output of holos show platform through jq to select the components
list, then to stdin of this command. This command is most often invoked 'holos
render platform' to run concurrent cue exports safely.
For example:
holos show platform --format=json \
| jq '.spec.components[] | {kind: "Component", apiVersion: "v1alpha6", component: .}' \
| holos compile --log-level=debug
Note each platform components element is embedded into the component field of an
enveloping object for the purpose of conveying type metadata.

View File

@@ -61,8 +61,6 @@ func (r *renderPlatform) Run(ctx context.Context, p *platform.Platform) error {
args := make([]string, 0, 100)
args = append(args, prefixArgs...)
args = append(args, "render", "component")
// Add the write-to flag
args = append(args, "--write-to", r.pcfg.WriteTo)
// holos render platform --inject tags
for _, tag := range r.pcfg.TagMap.Tags() {
args = append(args, "--inject", tag)

View File

@@ -76,12 +76,6 @@ func New(cfg *holos.Config) *cobra.Command {
// Show
rootCmd.AddCommand(NewShowCmd(platform.NewConfig()))
// Compare
rootCmd.AddCommand(NewCompareCmd())
// Compile
rootCmd.AddCommand(NewCompileCmd())
return rootCmd
}
@@ -113,9 +107,9 @@ func HandleError(ctx context.Context, err error, hc *holos.Config) (exitCode int
if errors.As(err, &errAt) {
loc := errAt.Source.Loc()
err2 := errAt.Unwrap()
log.ErrorContext(ctx, fmt.Sprintf("error at %s: %s", loc, err2), "err", err2, "loc", loc)
log.ErrorContext(ctx, fmt.Sprintf("could not run: %s at %s", err2, loc), "err", err2, "loc", loc)
} else {
log.ErrorContext(ctx, err.Error(), "err", err)
log.ErrorContext(ctx, fmt.Sprintf("could not run: %s", err), "err", err)
}
// cue errors are bundled up as a list and refer to multiple files / lines.

View File

@@ -3,15 +3,10 @@ package cli
import (
"context"
_ "embed"
"encoding/json"
"fmt"
"io"
"log/slog"
v1alpha5 "github.com/holos-run/holos/api/core/v1alpha5"
v1alpha6 "github.com/holos-run/holos/api/core/v1alpha6"
"github.com/holos-run/holos/internal/cli/command"
"github.com/holos-run/holos/internal/compile"
"github.com/holos-run/holos/internal/component"
"github.com/holos-run/holos/internal/errors"
"github.com/holos-run/holos/internal/holos"
"github.com/holos-run/holos/internal/platform"
@@ -82,62 +77,37 @@ func (s *showBuildPlans) flagSet() *pflag.FlagSet {
}
func (s *showBuildPlans) Run(ctx context.Context, p *platform.Platform) error {
components := p.Select(s.cfg.ComponentSelectors...)
reqs := make([]compile.BuildPlanRequest, len(components))
for idx, c := range components {
tags, err := c.Tags()
if err != nil {
return errors.Wrap(err)
}
reqs[idx] = compile.BuildPlanRequest{
APIVersion: "v1alpha6",
Kind: "BuildPlanRequest",
Root: p.Root(),
Leaf: c.Path(),
WriteTo: s.cfg.WriteTo,
TempDir: "${TMPDIR_PLACEHOLDER}",
Tags: tags,
}
}
resp, err := compile.Compile(ctx, s.cfg.Concurrency, reqs)
encoder, err := holos.NewSequentialEncoder(s.format, s.cfg.Stdout)
if err != nil {
return errors.Wrap(err)
}
defer encoder.Close()
encoder, err := holos.NewEncoder(s.format, s.cfg.Stdout)
if err != nil {
return errors.Wrap(err)
opts := platform.BuildOpts{
PerComponentFunc: func(ctx context.Context, idx int, pc holos.Component) error {
c := component.New(p.Root(), pc.Path(), component.NewConfig())
tm, err := c.TypeMeta()
if err != nil {
return errors.Wrap(err)
}
opts := holos.NewBuildOpts(p.Root(), pc.Path(), s.cfg.WriteTo, "${TMPDIR_PLACEHOLDER}")
// TODO(jjm): refactor into [holos.NewBuildOpts] as functional options.
// Component name, label, annotations passed via tags to cue.
tags, err := pc.Tags()
if err != nil {
return errors.Wrap(err)
}
opts.Tags = tags
bp, err := c.BuildPlan(tm, opts)
if err != nil {
return errors.Wrap(err)
}
// Export the build plan using the sequential encoder.
return errors.Wrap(bp.Export(idx, encoder))
},
}
for _, buildPlanResponse := range resp {
var tm holos.TypeMeta
if err := json.Unmarshal(buildPlanResponse.RawMessage, &tm); err != nil {
return errors.Format("could not discriminate type meta: %w", err)
}
if tm.Kind != "BuildPlan" {
return errors.Format("invalid kind %s: must be BuildPlan", tm.Kind)
}
var buildPlan any
switch tm.APIVersion {
case "v1alpha5":
buildPlan = &v1alpha5.BuildPlan{}
case "v1alpha6":
buildPlan = &v1alpha6.BuildPlan{}
default:
slog.WarnContext(ctx, fmt.Sprintf("unknown BuildPlan APIVersion %s: assuming v1alpha6 schema", tm.APIVersion))
buildPlan = &v1alpha6.BuildPlan{}
}
if err := json.Unmarshal(buildPlanResponse.RawMessage, buildPlan); err != nil {
return errors.Wrap(err)
}
if err := encoder.Encode(buildPlan); err != nil {
return errors.Wrap(err)
}
}
return nil
return errors.Wrap(p.Build(ctx, opts))
}

View File

@@ -81,8 +81,7 @@ func TestShowAlpha6(t *testing.T) {
err = yaml.Unmarshal(wantBytes, &want)
require.NoError(t, err)
want.BuildContext.RootDir = tempDir
want.BuildContext.HolosExecutable, err = util.Executable()
require.NoError(t, err)
want.BuildContext.HolosExecutable = "holos"
want.BuildContext.LeafDir = "fixtures/v1alpha6/components/slice"
t.Run("FormatYAML", func(t *testing.T) {

View File

@@ -1,401 +0,0 @@
package compare
import (
"bytes"
"io"
"os"
"sort"
"strings"
"github.com/google/go-cmp/cmp"
"github.com/google/go-cmp/cmp/cmpopts"
"github.com/holos-run/holos/internal/errors"
"gopkg.in/yaml.v3"
)
// Comparer handles comparison operations between BuildPlans
type Comparer struct {
}
// New creates a new Comparer instance
func New() *Comparer {
return &Comparer{}
}
// BuildPlans compares two BuildPlan Files for semantic equivalence.
//
// The holos show buildplans command writes a BuildPlan File to standard output.
// A BuildPlan File is a yaml encoded stream of BuildPlan objects.
//
// BuildPlan File one is equivalent to two when:
// 1. one and two have an equal number of BuildPlan objects.
// 2. each object in one is equivalent to exactly one unique object in two.
//
// Two BuildPlans, before and after, are equivalent when:
//
// 1. All field values in before are equivalent to the same field in after
// 2. Both 1 and 2 apply to nested objects, recursively.
// 3. Field f is equivalent when before.f exactly equals after.f, except for:
// 3.1. Objects in the spec.artifacts list may appear in any arbitrary order.
// 3.2. The ordering of keys does not matter.
// 4. Backwards compatibility behavior (controlled by isBackwardsCompatible):
// - When false: after and before must have exactly the same fields
// - When true: after may have additional fields that don't exist in before
// (e.g., new features added in a newer version)
// Example:
// before has {name: "x", version: "1.0"}
// after has {name: "x", version: "1.0", newFeature: "enabled"}
// This comparison passes when isBackwardsCompatible=true
// 5. Fields in before must always be present in after (regardless of backwards
// compatibility mode).
// 6. List type fields with a null value are equivalent to:
// 6.1. null values
// 6.2. empty values ([])
// 6.2. a missing field
//
// A BuildPlan File is valid when:
// 1. Two or more identical objects exist in the same file. They must be
// treated as unique objects when comparing BuildPlan Files
// 2. Two objects may have the same value for the metadata.name field.
// 3. The kind field of all objects in the file stream is "BuildPlan"
func (c *Comparer) BuildPlans(one, two string, isBackwardsCompatible bool) error {
// Read both files
file1, err := os.Open(one)
if err != nil {
return errors.Format("opening first file: %w", err)
}
defer file1.Close()
file2, err := os.Open(two)
if err != nil {
return errors.Format("opening second file: %w", err)
}
defer file2.Close()
// Read all content from both files
content1, err := io.ReadAll(file1)
if err != nil {
return errors.Format("reading first file: %w", err)
}
content2, err := io.ReadAll(file2)
if err != nil {
return errors.Format("reading second file: %w", err)
}
// Handle empty files case
if len(content1) == 0 && len(content2) == 0 {
return errors.NotImplemented()
}
// Parse YAML streams (multiple documents)
docs1, err := parseYAMLStream(content1)
if err != nil {
return errors.Format("parsing first file: %w", err)
}
docs2, err := parseYAMLStream(content2)
if err != nil {
return errors.Format("parsing second file: %w", err)
}
// Compare the document lists
return c.compareDocumentLists(docs1, docs2, isBackwardsCompatible)
}
// normalizeStructure processes a structure to handle null, empty, and missing fields
// according to the BuildPlan spec requirement 6
func (c *Comparer) normalizeStructure(v interface{}) interface{} {
switch val := v.(type) {
case map[string]interface{}:
normalized := make(map[string]interface{})
for k, v := range val {
normalizedValue := c.normalizeStructure(v)
// Only add fields that are not nil or empty slices
if !c.isNullOrEmpty(normalizedValue) {
normalized[k] = normalizedValue
}
}
return normalized
case []interface{}:
// Handle empty slices as nil
if len(val) == 0 {
return nil
}
normalized := make([]interface{}, len(val))
for i, v := range val {
normalized[i] = c.normalizeStructure(v)
}
return normalized
default:
return v
}
}
// isNullOrEmpty checks if a value is nil or an empty slice
func (c *Comparer) isNullOrEmpty(v interface{}) bool {
if v == nil {
return true
}
if slice, ok := v.([]interface{}); ok {
return len(slice) == 0
}
return false
}
// filterToCommonFields filters v1 to only include fields that exist in v2
// This is used for backwards compatibility to allow the "after" file to have extra fields
// that don't exist in the "before" file
func (c *Comparer) filterToCommonFields(v1, v2 interface{}) interface{} {
switch m1 := v1.(type) {
case map[string]interface{}:
m2, ok := v2.(map[string]interface{})
if !ok {
return v1
}
filtered := make(map[string]interface{})
for k, val1 := range m1 {
if val2, exists := m2[k]; exists {
filtered[k] = c.filterToCommonFields(val1, val2)
}
}
return filtered
case []interface{}:
slice2, ok := v2.([]interface{})
if !ok {
return v1
}
var filtered []interface{}
for i, elem1 := range m1 {
if i < len(slice2) {
filtered = append(filtered, c.filterToCommonFields(elem1, slice2[i]))
}
}
return filtered
default:
return v1
}
}
// compareStructures compares two BuildPlan structures for semantic equivalence
func (c *Comparer) compareStructures(bp1, bp2 map[string]interface{}, isBackwardsCompatible bool) error {
// Normalize the structures to handle null, empty, and missing fields
norm1 := c.normalizeStructure(bp1).(map[string]interface{})
norm2 := c.normalizeStructure(bp2).(map[string]interface{})
// If backwards compatible, remove fields from norm2 that don't exist in norm1
// This allows "after" to have extra fields that "before" doesn't have
if isBackwardsCompatible {
filtered := c.filterToCommonFields(norm2, norm1)
if m, ok := filtered.(map[string]interface{}); ok {
norm2 = m
}
}
// Create comparison options for go-cmp
opts := []cmp.Option{
cmpopts.EquateEmpty(),
cmp.Transformer("sortSlices", func(s []interface{}) []interface{} {
return c.sortSlice(s)
}),
}
// Deep order-independent comparison
if cmp.Equal(norm1, norm2, opts...) {
return nil
}
// Get the diff for the error message
diff := cmp.Diff(norm1, norm2, opts...)
// Extract specific field differences from the diff
fieldDiffs := c.extractFieldDifferences(diff)
// Return the extracted differences or the full diff
if fieldDiffs != "" {
return errors.New(fieldDiffs)
}
return errors.New(diff)
}
// sortSlice sorts a slice based on comparable string representation
func (c *Comparer) sortSlice(slice []interface{}) []interface{} {
sorted := make([]interface{}, len(slice))
copy(sorted, slice)
sort.Slice(sorted, func(i, j int) bool {
iStr := c.toComparableString(sorted[i])
jStr := c.toComparableString(sorted[j])
return iStr < jStr
})
return sorted
}
// toComparableString converts a value to a comparable string
func (c *Comparer) toComparableString(v interface{}) string {
switch val := v.(type) {
case map[string]interface{}:
// Try to get identifying fields
if artifact, ok := val["artifact"].(string); ok {
return artifact
}
if name, ok := val["name"].(string); ok {
return name
}
if metadata, ok := val["metadata"].(map[string]interface{}); ok {
if name, ok := metadata["name"].(string); ok {
return name
}
}
// Fallback to YAML representation
yamlBytes, _ := yaml.Marshal(val)
return string(yamlBytes)
default:
// Convert to YAML for comparison
yamlBytes, _ := yaml.Marshal(v)
return string(yamlBytes)
}
}
// parseYAMLStream parses a byte array containing one or more YAML documents
func parseYAMLStream(content []byte) ([]map[string]interface{}, error) {
var documents []map[string]interface{}
decoder := yaml.NewDecoder(bytes.NewReader(content))
for {
var doc map[string]interface{}
err := decoder.Decode(&doc)
if err == io.EOF {
break
}
if err != nil {
return nil, err
}
if doc != nil {
documents = append(documents, doc)
}
}
return documents, nil
}
// compareDocumentLists compares two lists of YAML documents
func (c *Comparer) compareDocumentLists(docs1, docs2 []map[string]interface{}, isBackwardsCompatible bool) error {
if len(docs1) != len(docs2) {
return errors.New("different number of documents")
}
// Create a bipartite matching between documents
used := make([]bool, len(docs2))
// First pass: try to find exact matches
for _, doc1 := range docs1 {
for j, doc2 := range docs2 {
if used[j] {
continue
}
// Check if documents are exactly equal
if c.documentsExactlyEqual(doc1, doc2) {
used[j] = true
break
}
}
}
// Second pass: handle unmatched documents
usedIdx := 0
for i, doc1 := range docs1 {
// Find if this document was matched in first pass
matchFound := false
for j, doc2 := range docs2 {
if used[j] && c.documentsExactlyEqual(doc1, doc2) {
matchFound = true
break
}
}
if !matchFound {
// Find the next unused document to compare against
for usedIdx < len(docs2) && used[usedIdx] {
usedIdx++
}
if usedIdx < len(docs2) {
// Compare structures
if err := c.compareStructures(doc1, docs2[usedIdx], isBackwardsCompatible); err != nil {
return errors.Format("document %d not equivalent: \n%w", i, err)
}
used[usedIdx] = true
}
}
}
return nil
}
// documentsExactlyEqual checks if two documents are exactly equal
func (c *Comparer) documentsExactlyEqual(doc1, doc2 map[string]interface{}) bool {
// Create comparison options for go-cmp
opts := []cmp.Option{
cmpopts.EquateEmpty(),
cmp.Transformer("sortSlices", func(s []interface{}) []interface{} {
return c.sortSlice(s)
}),
}
return cmp.Equal(doc1, doc2, opts...)
}
// extractFieldDifferences extracts specific field differences from a go-cmp diff
func (c *Comparer) extractFieldDifferences(diff string) string {
var differences []string
lines := strings.Split(diff, "\n")
for _, line := range lines {
// Look for lines that indicate field differences
trimmed := strings.TrimSpace(line)
// Handle lines with - or + prefixes
if strings.HasPrefix(trimmed, "-") || strings.HasPrefix(trimmed, "+") {
// Skip formatting markers
if strings.HasPrefix(trimmed, "---") || strings.HasPrefix(trimmed, "+++") {
continue
}
// Check if this is a field difference (contains a colon)
if strings.Contains(trimmed, ":") {
// Extract the field name and value
parts := strings.SplitN(trimmed[1:], ":", 2)
if len(parts) == 2 {
fieldName := strings.TrimSpace(parts[0])
value := strings.TrimSpace(parts[1])
// Clean up the field name (remove quotes if present)
fieldName = strings.Trim(fieldName, "\"")
value = strings.TrimSuffix(value, ",")
// Clean up value formatting
if strings.HasPrefix(value, "string(") {
value = strings.TrimPrefix(value, "string(")
value = strings.TrimSuffix(value, ")")
} else if strings.HasPrefix(value, "int(") {
value = strings.TrimPrefix(value, "int(")
value = strings.TrimSuffix(value, ")")
}
value = strings.Trim(value, "\"")
// Rebuild the difference line
prefix := trimmed[:1]
differences = append(differences, prefix+" "+fieldName+": "+value)
}
}
}
}
return strings.Join(differences, "\n")
}

View File

@@ -1,88 +0,0 @@
package compare
import (
"encoding/json"
"os"
"path/filepath"
"testing"
"github.com/stretchr/testify/assert"
)
type testCase struct {
ExitCode int `json:"exitCode"`
Name string `json:"name,omitempty"`
Msg string `json:"msg,omitempty"`
File1 string `json:"file1"`
File2 string `json:"file2"`
ExpectedError string `json:"expectedError,omitempty"` // Deprecated: use ExpectedErrors
ExpectedErrors []string `json:"expectedErrors,omitempty"`
IsBackwardsCompatible *bool `json:"isBackwardsCompatible,omitempty"`
}
func TestBuildPlans(t *testing.T) {
fixturesDir := "testdata"
entries, err := os.ReadDir(fixturesDir)
if err != nil {
t.Fatalf("could not read fixtures directory: %v", err)
}
for _, entry := range entries {
if !entry.IsDir() {
continue
}
dirName := entry.Name()
t.Run(dirName, func(t *testing.T) {
testDir := filepath.Join(fixturesDir, dirName)
// Read the testcase.json file
testcaseData, err := os.ReadFile(filepath.Join(testDir, "testcase.json"))
if err != nil {
t.Fatalf("could not read testcase.json: %v", err)
}
var tc testCase
if err := json.Unmarshal(testcaseData, &tc); err != nil {
t.Fatalf("could not parse testcase.json: %v", err)
}
// Use the test name if provided, otherwise use directory name
testName := dirName
if tc.Name != "" {
testName = tc.Name
}
// Run the test with the appropriate name
t.Run(testName, func(t *testing.T) {
// Build the full file paths
file1Path := filepath.Join(testDir, tc.File1)
file2Path := filepath.Join(testDir, tc.File2)
// Create a new comparer and run the comparison
c := New()
// Use isBackwardsCompatible from test case if provided, default to false
isBackwardsCompatible := false
if tc.IsBackwardsCompatible != nil {
isBackwardsCompatible = *tc.IsBackwardsCompatible
}
err := c.BuildPlans(file1Path, file2Path, isBackwardsCompatible)
// Check the result based on expected exit code
if tc.ExitCode == 0 {
assert.NoError(t, err, tc.Msg)
} else {
assert.Error(t, err, tc.Msg)
// Support both old expectedError and new expectedErrors
if tc.ExpectedError != "" {
assert.ErrorContains(t, err, tc.ExpectedError, tc.Msg)
}
// Check each expected error substring
for _, expectedErr := range tc.ExpectedErrors {
assert.ErrorContains(t, err, expectedErr, tc.Msg)
}
}
})
})
}
}

View File

@@ -1,810 +0,0 @@
kind: BuildPlan
apiVersion: v1alpha5
metadata:
name: kargo-stages
labels:
holos.run/component.name: kargo-stages
holos.run/project.name: httpbin
holos.run/stack.name: httpbin
annotations:
app.holos.run/description: kargo-stages for project httpbin
example.com/description: bar
spec:
artifacts:
- artifact: projects/httpbin/components/kargo-stages/kargo-stages.gen.yaml
generators:
- kind: Resources
output: resources.gen.yaml
resources:
Stage:
dev:
apiVersion: kargo.akuity.io/v1alpha1
kind: Stage
metadata:
name: dev
namespace: httpbin
spec:
promotionTemplate:
spec:
steps:
- config:
checkout:
- branch: main
path: ./src
- branch: project/httpbin/component/dev-httpbin
create: true
path: ./out
repoURL: https://github.com/holos-run/kargo-demo.git
uses: git-clone
- config:
path: ./out
uses: git-clear
- as: update-image
config:
images:
- image: quay.io/holos/mccutchen/go-httpbin
path: ./src/deploy/projects/httpbin/components/dev-httpbin
uses: kustomize-set-image
- config:
outPath: ./out/dev-httpbin.gen.yaml
path: ./src/deploy/projects/httpbin/components/dev-httpbin
uses: kustomize-build
- as: commit
config:
messageFromSteps:
- update-image
path: ./out
uses: git-commit
- config:
path: ./out
targetBranch: project/httpbin/component/dev-httpbin
uses: git-push
- config:
apps:
- name: httpbin-dev-httpbin
sources:
- desiredCommitFromStep: commit
repoURL: https://github.com/holos-run/kargo-demo.git
uses: argocd-update
requestedFreight:
- origin:
kind: Warehouse
name: httpbin
sources:
direct: true
prod-us-central:
apiVersion: kargo.akuity.io/v1alpha1
kind: Stage
metadata:
name: prod-us-central
namespace: httpbin
spec:
promotionTemplate:
spec:
steps:
- config:
checkout:
- branch: main
path: ./src
- branch: project/httpbin/component/prod-us-central-httpbin
create: true
path: ./out
repoURL: https://github.com/holos-run/kargo-demo.git
uses: git-clone
- config:
path: ./out
uses: git-clear
- as: update-image
config:
images:
- image: quay.io/holos/mccutchen/go-httpbin
path: ./src/deploy/projects/httpbin/components/prod-us-central-httpbin
uses: kustomize-set-image
- config:
outPath: ./out/prod-us-central-httpbin.gen.yaml
path: ./src/deploy/projects/httpbin/components/prod-us-central-httpbin
uses: kustomize-build
- as: commit
config:
messageFromSteps:
- update-image
path: ./out
uses: git-commit
- config:
path: ./out
targetBranch: project/httpbin/component/prod-us-central-httpbin
uses: git-push
- config:
apps:
- name: httpbin-prod-us-central-httpbin
sources:
- desiredCommitFromStep: commit
repoURL: https://github.com/holos-run/kargo-demo.git
uses: argocd-update
requestedFreight:
- origin:
kind: Warehouse
name: httpbin
sources:
stages:
- uat
prod-us-east:
apiVersion: kargo.akuity.io/v1alpha1
kind: Stage
metadata:
name: prod-us-east
namespace: httpbin
spec:
promotionTemplate:
spec:
steps:
- config:
checkout:
- branch: main
path: ./src
- branch: project/httpbin/component/prod-us-east-httpbin
create: true
path: ./out
repoURL: https://github.com/holos-run/kargo-demo.git
uses: git-clone
- config:
path: ./out
uses: git-clear
- as: update-image
config:
images:
- image: quay.io/holos/mccutchen/go-httpbin
path: ./src/deploy/projects/httpbin/components/prod-us-east-httpbin
uses: kustomize-set-image
- config:
outPath: ./out/prod-us-east-httpbin.gen.yaml
path: ./src/deploy/projects/httpbin/components/prod-us-east-httpbin
uses: kustomize-build
- as: commit
config:
messageFromSteps:
- update-image
path: ./out
uses: git-commit
- config:
path: ./out
targetBranch: project/httpbin/component/prod-us-east-httpbin
uses: git-push
- config:
apps:
- name: httpbin-prod-us-east-httpbin
sources:
- desiredCommitFromStep: commit
repoURL: https://github.com/holos-run/kargo-demo.git
uses: argocd-update
requestedFreight:
- origin:
kind: Warehouse
name: httpbin
sources:
stages:
- uat
prod-us-west:
apiVersion: kargo.akuity.io/v1alpha1
kind: Stage
metadata:
name: prod-us-west
namespace: httpbin
spec:
promotionTemplate:
spec:
steps:
- config:
checkout:
- branch: main
path: ./src
- branch: project/httpbin/component/prod-us-west-httpbin
create: true
path: ./out
repoURL: https://github.com/holos-run/kargo-demo.git
uses: git-clone
- config:
path: ./out
uses: git-clear
- as: update-image
config:
images:
- image: quay.io/holos/mccutchen/go-httpbin
path: ./src/deploy/projects/httpbin/components/prod-us-west-httpbin
uses: kustomize-set-image
- config:
outPath: ./out/prod-us-west-httpbin.gen.yaml
path: ./src/deploy/projects/httpbin/components/prod-us-west-httpbin
uses: kustomize-build
- as: commit
config:
messageFromSteps:
- update-image
path: ./out
uses: git-commit
- config:
path: ./out
targetBranch: project/httpbin/component/prod-us-west-httpbin
uses: git-push
- config:
apps:
- name: httpbin-prod-us-west-httpbin
sources:
- desiredCommitFromStep: commit
repoURL: https://github.com/holos-run/kargo-demo.git
uses: argocd-update
requestedFreight:
- origin:
kind: Warehouse
name: httpbin
sources:
stages:
- uat
test:
apiVersion: kargo.akuity.io/v1alpha1
kind: Stage
metadata:
name: test
namespace: httpbin
spec:
promotionTemplate:
spec:
steps:
- config:
checkout:
- branch: main
path: ./src
- branch: project/httpbin/component/test-httpbin
create: true
path: ./out
repoURL: https://github.com/holos-run/kargo-demo.git
uses: git-clone
- config:
path: ./out
uses: git-clear
- as: update-image
config:
images:
- image: quay.io/holos/mccutchen/go-httpbin
path: ./src/deploy/projects/httpbin/components/test-httpbin
uses: kustomize-set-image
- config:
outPath: ./out/test-httpbin.gen.yaml
path: ./src/deploy/projects/httpbin/components/test-httpbin
uses: kustomize-build
- as: commit
config:
messageFromSteps:
- update-image
path: ./out
uses: git-commit
- config:
path: ./out
targetBranch: project/httpbin/component/test-httpbin
uses: git-push
- config:
apps:
- name: httpbin-test-httpbin
sources:
- desiredCommitFromStep: commit
repoURL: https://github.com/holos-run/kargo-demo.git
uses: argocd-update
requestedFreight:
- origin:
kind: Warehouse
name: httpbin
sources:
stages:
- dev
uat:
apiVersion: kargo.akuity.io/v1alpha1
kind: Stage
metadata:
name: uat
namespace: httpbin
spec:
promotionTemplate:
spec:
steps:
- config:
checkout:
- branch: main
path: ./src
- branch: project/httpbin/component/uat-httpbin
create: true
path: ./out
repoURL: https://github.com/holos-run/kargo-demo.git
uses: git-clone
- config:
path: ./out
uses: git-clear
- as: update-image
config:
images:
- image: quay.io/holos/mccutchen/go-httpbin
path: ./src/deploy/projects/httpbin/components/uat-httpbin
uses: kustomize-set-image
- config:
outPath: ./out/uat-httpbin.gen.yaml
path: ./src/deploy/projects/httpbin/components/uat-httpbin
uses: kustomize-build
- as: commit
config:
messageFromSteps:
- update-image
path: ./out
uses: git-commit
- config:
path: ./out
targetBranch: project/httpbin/component/uat-httpbin
uses: git-push
- config:
apps:
- name: httpbin-uat-httpbin
sources:
- desiredCommitFromStep: commit
repoURL: https://github.com/holos-run/kargo-demo.git
uses: argocd-update
requestedFreight:
- origin:
kind: Warehouse
name: httpbin
sources:
stages:
- test
Warehouse:
httpbin:
apiVersion: kargo.akuity.io/v1alpha1
kind: Warehouse
metadata:
name: httpbin
namespace: httpbin
spec:
interval: 5m0s
subscriptions:
- image:
discoveryLimit: 5
repoURL: quay.io/holos/mccutchen/go-httpbin
semverConstraint: ^2.0.0
strictSemvers: true
transformers:
- kind: Kustomize
inputs:
- resources.gen.yaml
output: projects/httpbin/components/kargo-stages/kargo-stages.gen.yaml
kustomize:
kustomization:
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
labels:
- includeSelectors: false
pairs:
argocd.argoproj.io/instance: httpbin-kargo-stages
resources:
- resources.gen.yaml
- artifact: projects/httpbin/gitops/kargo-stages.application.gen.yaml
generators:
- kind: Resources
output: projects/httpbin/gitops/kargo-stages.application.gen.yaml
resources:
Application:
httpbin-kargo-stages:
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
labels: {}
name: httpbin-kargo-stages
namespace: argocd
spec:
destination:
server: https://kubernetes.default.svc
project: httpbin
source:
path: deploy/projects/httpbin/components/kargo-stages
repoURL: https://github.com/holos-run/kargo-demo.git
targetRevision: main
---
kind: BuildPlan
apiVersion: v1alpha5
metadata:
name: kargo-stages
labels:
holos.run/component.name: kargo-stages
holos.run/project.name: httpbin
holos.run/stack.name: httpbin
annotations:
example.com/description: bar
spec:
artifacts:
- artifact: projects/httpbin/components/kargo-stages/kargo-stages.gen.yaml
generators:
- kind: Resources
output: resources.gen.yaml
resources:
Stage:
dev:
apiVersion: kargo.akuity.io/v1alpha1
kind: Stage
metadata:
name: dev
namespace: httpbin
spec:
promotionTemplate:
spec:
steps:
- config:
checkout:
- branch: main
path: ./src
- branch: project/httpbin/component/dev-httpbin
create: true
path: ./out
repoURL: https://github.com/holos-run/kargo-demo.git
uses: git-clone
- config:
path: ./out
uses: git-clear
- as: update-image
config:
images:
- image: quay.io/holos/mccutchen/go-httpbin
path: ./src/deploy/projects/httpbin/components/dev-httpbin
uses: kustomize-set-image
- config:
outPath: ./out/dev-httpbin.gen.yaml
path: ./src/deploy/projects/httpbin/components/dev-httpbin
uses: kustomize-build
- as: commit
config:
messageFromSteps:
- update-image
path: ./out
uses: git-commit
- config:
path: ./out
targetBranch: project/httpbin/component/dev-httpbin
uses: git-push
- config:
apps:
- name: httpbin-dev-httpbin
sources:
- desiredCommitFromStep: commit
repoURL: https://github.com/holos-run/kargo-demo.git
uses: argocd-update
requestedFreight:
- origin:
kind: Warehouse
name: httpbin
sources:
direct: true
prod-us-central:
apiVersion: kargo.akuity.io/v1alpha1
kind: Stage
metadata:
name: prod-us-central
namespace: httpbin
spec:
promotionTemplate:
spec:
steps:
- config:
checkout:
- branch: main
path: ./src
- branch: project/httpbin/component/prod-us-central-httpbin
create: true
path: ./out
repoURL: https://github.com/holos-run/kargo-demo.git
uses: git-clone
- config:
path: ./out
uses: git-clear
- as: update-image
config:
images:
- image: quay.io/holos/mccutchen/go-httpbin
path: ./src/deploy/projects/httpbin/components/prod-us-central-httpbin
uses: kustomize-set-image
- config:
outPath: ./out/prod-us-central-httpbin.gen.yaml
path: ./src/deploy/projects/httpbin/components/prod-us-central-httpbin
uses: kustomize-build
- as: commit
config:
messageFromSteps:
- update-image
path: ./out
uses: git-commit
- config:
path: ./out
targetBranch: project/httpbin/component/prod-us-central-httpbin
uses: git-push
- config:
apps:
- name: httpbin-prod-us-central-httpbin
sources:
- desiredCommitFromStep: commit
repoURL: https://github.com/holos-run/kargo-demo.git
uses: argocd-update
requestedFreight:
- origin:
kind: Warehouse
name: httpbin
sources:
stages:
- uat
prod-us-east:
apiVersion: kargo.akuity.io/v1alpha1
kind: Stage
metadata:
name: prod-us-east
namespace: httpbin
spec:
promotionTemplate:
spec:
steps:
- config:
checkout:
- branch: main
path: ./src
- branch: project/httpbin/component/prod-us-east-httpbin
create: true
path: ./out
repoURL: https://github.com/holos-run/kargo-demo.git
uses: git-clone
- config:
path: ./out
uses: git-clear
- as: update-image
config:
images:
- image: quay.io/holos/mccutchen/go-httpbin
path: ./src/deploy/projects/httpbin/components/prod-us-east-httpbin
uses: kustomize-set-image
- config:
outPath: ./out/prod-us-east-httpbin.gen.yaml
path: ./src/deploy/projects/httpbin/components/prod-us-east-httpbin
uses: kustomize-build
- as: commit
config:
messageFromSteps:
- update-image
path: ./out
uses: git-commit
- config:
path: ./out
targetBranch: project/httpbin/component/prod-us-east-httpbin
uses: git-push
- config:
apps:
- name: httpbin-prod-us-east-httpbin
sources:
- desiredCommitFromStep: commit
repoURL: https://github.com/holos-run/kargo-demo.git
uses: argocd-update
requestedFreight:
- origin:
kind: Warehouse
name: httpbin
sources:
stages:
- uat
prod-us-west:
apiVersion: kargo.akuity.io/v1alpha1
kind: Stage
metadata:
name: prod-us-west
namespace: httpbin
spec:
promotionTemplate:
spec:
steps:
- config:
checkout:
- branch: main
path: ./src
- branch: project/httpbin/component/prod-us-west-httpbin
create: true
path: ./out
repoURL: https://github.com/holos-run/kargo-demo.git
uses: git-clone
- config:
path: ./out
uses: git-clear
- as: update-image
config:
images:
- image: quay.io/holos/mccutchen/go-httpbin
path: ./src/deploy/projects/httpbin/components/prod-us-west-httpbin
uses: kustomize-set-image
- config:
outPath: ./out/prod-us-west-httpbin.gen.yaml
path: ./src/deploy/projects/httpbin/components/prod-us-west-httpbin
uses: kustomize-build
- as: commit
config:
messageFromSteps:
- update-image
path: ./out
uses: git-commit
- config:
path: ./out
targetBranch: project/httpbin/component/prod-us-west-httpbin
uses: git-push
- config:
apps:
- name: httpbin-prod-us-west-httpbin
sources:
- desiredCommitFromStep: commit
repoURL: https://github.com/holos-run/kargo-demo.git
uses: argocd-update
requestedFreight:
- origin:
kind: Warehouse
name: httpbin
sources:
stages:
- uat
test:
apiVersion: kargo.akuity.io/v1alpha1
kind: Stage
metadata:
name: test
namespace: httpbin
spec:
promotionTemplate:
spec:
steps:
- config:
checkout:
- branch: main
path: ./src
- branch: project/httpbin/component/test-httpbin
create: true
path: ./out
repoURL: https://github.com/holos-run/kargo-demo.git
uses: git-clone
- config:
path: ./out
uses: git-clear
- as: update-image
config:
images:
- image: quay.io/holos/mccutchen/go-httpbin
path: ./src/deploy/projects/httpbin/components/test-httpbin
uses: kustomize-set-image
- config:
outPath: ./out/test-httpbin.gen.yaml
path: ./src/deploy/projects/httpbin/components/test-httpbin
uses: kustomize-build
- as: commit
config:
messageFromSteps:
- update-image
path: ./out
uses: git-commit
- config:
path: ./out
targetBranch: project/httpbin/component/test-httpbin
uses: git-push
- config:
apps:
- name: httpbin-test-httpbin
sources:
- desiredCommitFromStep: commit
repoURL: https://github.com/holos-run/kargo-demo.git
uses: argocd-update
requestedFreight:
- origin:
kind: Warehouse
name: httpbin
sources:
stages:
- dev
uat:
apiVersion: kargo.akuity.io/v1alpha1
kind: Stage
metadata:
name: uat
namespace: httpbin
spec:
promotionTemplate:
spec:
steps:
- config:
checkout:
- branch: main
path: ./src
- branch: project/httpbin/component/uat-httpbin
create: true
path: ./out
repoURL: https://github.com/holos-run/kargo-demo.git
uses: git-clone
- config:
path: ./out
uses: git-clear
- as: update-image
config:
images:
- image: quay.io/holos/mccutchen/go-httpbin
path: ./src/deploy/projects/httpbin/components/uat-httpbin
uses: kustomize-set-image
- config:
outPath: ./out/uat-httpbin.gen.yaml
path: ./src/deploy/projects/httpbin/components/uat-httpbin
uses: kustomize-build
- as: commit
config:
messageFromSteps:
- update-image
path: ./out
uses: git-commit
- config:
path: ./out
targetBranch: project/httpbin/component/uat-httpbin
uses: git-push
- config:
apps:
- name: httpbin-uat-httpbin
sources:
- desiredCommitFromStep: commit
repoURL: https://github.com/holos-run/kargo-demo.git
uses: argocd-update
requestedFreight:
- origin:
kind: Warehouse
name: httpbin
sources:
stages:
- test
Warehouse:
httpbin:
apiVersion: kargo.akuity.io/v1alpha1
kind: Warehouse
metadata:
name: httpbin
namespace: httpbin
spec:
interval: 5m0s
subscriptions:
- image:
discoveryLimit: 5
repoURL: quay.io/holos/mccutchen/go-httpbin
semverConstraint: ^2.0.0
strictSemvers: true
transformers:
- kind: Kustomize
inputs:
- resources.gen.yaml
output: projects/httpbin/components/kargo-stages/kargo-stages.gen.yaml
kustomize:
kustomization:
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
labels:
- includeSelectors: false
pairs:
argocd.argoproj.io/instance: httpbin-kargo-stages
resources:
- resources.gen.yaml
- artifact: projects/httpbin/gitops/kargo-stages.application.gen.yaml
generators:
- kind: Resources
output: projects/httpbin/gitops/kargo-stages.application.gen.yaml
resources:
Application:
httpbin-kargo-stages:
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
labels: {}
name: httpbin-kargo-stages
namespace: argocd
spec:
destination:
server: https://kubernetes.default.svc
project: httpbin
source:
path: deploy/projects/httpbin/components/kargo-stages
repoURL: https://github.com/holos-run/kargo-demo.git
targetRevision: main

View File

@@ -1,810 +0,0 @@
kind: BuildPlan
apiVersion: v1alpha5
metadata:
name: kargo-stages
labels:
holos.run/component.name: kargo-stages
holos.run/project.name: httpbin
holos.run/stack.name: httpbin
annotations:
app.holos.run/description: kargo-stages for project httpbin
example.com/description: foo
spec:
artifacts:
- artifact: projects/httpbin/components/kargo-stages/kargo-stages.gen.yaml
generators:
- kind: Resources
output: resources.gen.yaml
resources:
Stage:
dev:
apiVersion: kargo.akuity.io/v1alpha1
kind: Stage
metadata:
name: dev
namespace: httpbin
spec:
promotionTemplate:
spec:
steps:
- config:
checkout:
- branch: main
path: ./src
- branch: project/httpbin/component/dev-httpbin
create: true
path: ./out
repoURL: https://github.com/holos-run/kargo-demo.git
uses: git-clone
- config:
path: ./out
uses: git-clear
- as: update-image
config:
images:
- image: quay.io/holos/mccutchen/go-httpbin
path: ./src/deploy/projects/httpbin/components/dev-httpbin
uses: kustomize-set-image
- config:
outPath: ./out/dev-httpbin.gen.yaml
path: ./src/deploy/projects/httpbin/components/dev-httpbin
uses: kustomize-build
- as: commit
config:
messageFromSteps:
- update-image
path: ./out
uses: git-commit
- config:
path: ./out
targetBranch: project/httpbin/component/dev-httpbin
uses: git-push
- config:
apps:
- name: httpbin-dev-httpbin
sources:
- desiredCommitFromStep: commit
repoURL: https://github.com/holos-run/kargo-demo.git
uses: argocd-update
requestedFreight:
- origin:
kind: Warehouse
name: httpbin
sources:
direct: true
prod-us-central:
apiVersion: kargo.akuity.io/v1alpha1
kind: Stage
metadata:
name: prod-us-central
namespace: httpbin
spec:
promotionTemplate:
spec:
steps:
- config:
checkout:
- branch: main
path: ./src
- branch: project/httpbin/component/prod-us-central-httpbin
create: true
path: ./out
repoURL: https://github.com/holos-run/kargo-demo.git
uses: git-clone
- config:
path: ./out
uses: git-clear
- as: update-image
config:
images:
- image: quay.io/holos/mccutchen/go-httpbin
path: ./src/deploy/projects/httpbin/components/prod-us-central-httpbin
uses: kustomize-set-image
- config:
outPath: ./out/prod-us-central-httpbin.gen.yaml
path: ./src/deploy/projects/httpbin/components/prod-us-central-httpbin
uses: kustomize-build
- as: commit
config:
messageFromSteps:
- update-image
path: ./out
uses: git-commit
- config:
path: ./out
targetBranch: project/httpbin/component/prod-us-central-httpbin
uses: git-push
- config:
apps:
- name: httpbin-prod-us-central-httpbin
sources:
- desiredCommitFromStep: commit
repoURL: https://github.com/holos-run/kargo-demo.git
uses: argocd-update
requestedFreight:
- origin:
kind: Warehouse
name: httpbin
sources:
stages:
- uat
prod-us-east:
apiVersion: kargo.akuity.io/v1alpha1
kind: Stage
metadata:
name: prod-us-east
namespace: httpbin
spec:
promotionTemplate:
spec:
steps:
- config:
checkout:
- branch: main
path: ./src
- branch: project/httpbin/component/prod-us-east-httpbin
create: true
path: ./out
repoURL: https://github.com/holos-run/kargo-demo.git
uses: git-clone
- config:
path: ./out
uses: git-clear
- as: update-image
config:
images:
- image: quay.io/holos/mccutchen/go-httpbin
path: ./src/deploy/projects/httpbin/components/prod-us-east-httpbin
uses: kustomize-set-image
- config:
outPath: ./out/prod-us-east-httpbin.gen.yaml
path: ./src/deploy/projects/httpbin/components/prod-us-east-httpbin
uses: kustomize-build
- as: commit
config:
messageFromSteps:
- update-image
path: ./out
uses: git-commit
- config:
path: ./out
targetBranch: project/httpbin/component/prod-us-east-httpbin
uses: git-push
- config:
apps:
- name: httpbin-prod-us-east-httpbin
sources:
- desiredCommitFromStep: commit
repoURL: https://github.com/holos-run/kargo-demo.git
uses: argocd-update
requestedFreight:
- origin:
kind: Warehouse
name: httpbin
sources:
stages:
- uat
prod-us-west:
apiVersion: kargo.akuity.io/v1alpha1
kind: Stage
metadata:
name: prod-us-west
namespace: httpbin
spec:
promotionTemplate:
spec:
steps:
- config:
checkout:
- branch: main
path: ./src
- branch: project/httpbin/component/prod-us-west-httpbin
create: true
path: ./out
repoURL: https://github.com/holos-run/kargo-demo.git
uses: git-clone
- config:
path: ./out
uses: git-clear
- as: update-image
config:
images:
- image: quay.io/holos/mccutchen/go-httpbin
path: ./src/deploy/projects/httpbin/components/prod-us-west-httpbin
uses: kustomize-set-image
- config:
outPath: ./out/prod-us-west-httpbin.gen.yaml
path: ./src/deploy/projects/httpbin/components/prod-us-west-httpbin
uses: kustomize-build
- as: commit
config:
messageFromSteps:
- update-image
path: ./out
uses: git-commit
- config:
path: ./out
targetBranch: project/httpbin/component/prod-us-west-httpbin
uses: git-push
- config:
apps:
- name: httpbin-prod-us-west-httpbin
sources:
- desiredCommitFromStep: commit
repoURL: https://github.com/holos-run/kargo-demo.git
uses: argocd-update
requestedFreight:
- origin:
kind: Warehouse
name: httpbin
sources:
stages:
- uat
test:
apiVersion: kargo.akuity.io/v1alpha1
kind: Stage
metadata:
name: test
namespace: httpbin
spec:
promotionTemplate:
spec:
steps:
- config:
checkout:
- branch: main
path: ./src
- branch: project/httpbin/component/test-httpbin
create: true
path: ./out
repoURL: https://github.com/holos-run/kargo-demo.git
uses: git-clone
- config:
path: ./out
uses: git-clear
- as: update-image
config:
images:
- image: quay.io/holos/mccutchen/go-httpbin
path: ./src/deploy/projects/httpbin/components/test-httpbin
uses: kustomize-set-image
- config:
outPath: ./out/test-httpbin.gen.yaml
path: ./src/deploy/projects/httpbin/components/test-httpbin
uses: kustomize-build
- as: commit
config:
messageFromSteps:
- update-image
path: ./out
uses: git-commit
- config:
path: ./out
targetBranch: project/httpbin/component/test-httpbin
uses: git-push
- config:
apps:
- name: httpbin-test-httpbin
sources:
- desiredCommitFromStep: commit
repoURL: https://github.com/holos-run/kargo-demo.git
uses: argocd-update
requestedFreight:
- origin:
kind: Warehouse
name: httpbin
sources:
stages:
- dev
uat:
apiVersion: kargo.akuity.io/v1alpha1
kind: Stage
metadata:
name: uat
namespace: httpbin
spec:
promotionTemplate:
spec:
steps:
- config:
checkout:
- branch: main
path: ./src
- branch: project/httpbin/component/uat-httpbin
create: true
path: ./out
repoURL: https://github.com/holos-run/kargo-demo.git
uses: git-clone
- config:
path: ./out
uses: git-clear
- as: update-image
config:
images:
- image: quay.io/holos/mccutchen/go-httpbin
path: ./src/deploy/projects/httpbin/components/uat-httpbin
uses: kustomize-set-image
- config:
outPath: ./out/uat-httpbin.gen.yaml
path: ./src/deploy/projects/httpbin/components/uat-httpbin
uses: kustomize-build
- as: commit
config:
messageFromSteps:
- update-image
path: ./out
uses: git-commit
- config:
path: ./out
targetBranch: project/httpbin/component/uat-httpbin
uses: git-push
- config:
apps:
- name: httpbin-uat-httpbin
sources:
- desiredCommitFromStep: commit
repoURL: https://github.com/holos-run/kargo-demo.git
uses: argocd-update
requestedFreight:
- origin:
kind: Warehouse
name: httpbin
sources:
stages:
- test
Warehouse:
httpbin:
apiVersion: kargo.akuity.io/v1alpha1
kind: Warehouse
metadata:
name: httpbin
namespace: httpbin
spec:
interval: 5m0s
subscriptions:
- image:
discoveryLimit: 5
repoURL: quay.io/holos/mccutchen/go-httpbin
semverConstraint: ^2.0.0
strictSemvers: true
transformers:
- kind: Kustomize
inputs:
- resources.gen.yaml
output: projects/httpbin/components/kargo-stages/kargo-stages.gen.yaml
kustomize:
kustomization:
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
labels:
- includeSelectors: false
pairs:
argocd.argoproj.io/instance: httpbin-kargo-stages
resources:
- resources.gen.yaml
- artifact: projects/httpbin/gitops/kargo-stages.application.gen.yaml
generators:
- kind: Resources
output: projects/httpbin/gitops/kargo-stages.application.gen.yaml
resources:
Application:
httpbin-kargo-stages:
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
labels: {}
name: httpbin-kargo-stages
namespace: argocd
spec:
destination:
server: https://kubernetes.default.svc
project: httpbin
source:
path: deploy/projects/httpbin/components/kargo-stages
repoURL: https://github.com/holos-run/kargo-demo.git
targetRevision: main
---
kind: BuildPlan
apiVersion: v1alpha5
metadata:
name: kargo-stages
labels:
holos.run/component.name: kargo-stages
holos.run/project.name: httpbin
holos.run/stack.name: httpbin
annotations:
example.com/description: bar
spec:
artifacts:
- artifact: projects/httpbin/components/kargo-stages/kargo-stages.gen.yaml
generators:
- kind: Resources
output: resources.gen.yaml
resources:
Stage:
dev:
apiVersion: kargo.akuity.io/v1alpha1
kind: Stage
metadata:
name: dev
namespace: httpbin
spec:
promotionTemplate:
spec:
steps:
- config:
checkout:
- branch: main
path: ./src
- branch: project/httpbin/component/dev-httpbin
create: true
path: ./out
repoURL: https://github.com/holos-run/kargo-demo.git
uses: git-clone
- config:
path: ./out
uses: git-clear
- as: update-image
config:
images:
- image: quay.io/holos/mccutchen/go-httpbin
path: ./src/deploy/projects/httpbin/components/dev-httpbin
uses: kustomize-set-image
- config:
outPath: ./out/dev-httpbin.gen.yaml
path: ./src/deploy/projects/httpbin/components/dev-httpbin
uses: kustomize-build
- as: commit
config:
messageFromSteps:
- update-image
path: ./out
uses: git-commit
- config:
path: ./out
targetBranch: project/httpbin/component/dev-httpbin
uses: git-push
- config:
apps:
- name: httpbin-dev-httpbin
sources:
- desiredCommitFromStep: commit
repoURL: https://github.com/holos-run/kargo-demo.git
uses: argocd-update
requestedFreight:
- origin:
kind: Warehouse
name: httpbin
sources:
direct: true
prod-us-central:
apiVersion: kargo.akuity.io/v1alpha1
kind: Stage
metadata:
name: prod-us-central
namespace: httpbin
spec:
promotionTemplate:
spec:
steps:
- config:
checkout:
- branch: main
path: ./src
- branch: project/httpbin/component/prod-us-central-httpbin
create: true
path: ./out
repoURL: https://github.com/holos-run/kargo-demo.git
uses: git-clone
- config:
path: ./out
uses: git-clear
- as: update-image
config:
images:
- image: quay.io/holos/mccutchen/go-httpbin
path: ./src/deploy/projects/httpbin/components/prod-us-central-httpbin
uses: kustomize-set-image
- config:
outPath: ./out/prod-us-central-httpbin.gen.yaml
path: ./src/deploy/projects/httpbin/components/prod-us-central-httpbin
uses: kustomize-build
- as: commit
config:
messageFromSteps:
- update-image
path: ./out
uses: git-commit
- config:
path: ./out
targetBranch: project/httpbin/component/prod-us-central-httpbin
uses: git-push
- config:
apps:
- name: httpbin-prod-us-central-httpbin
sources:
- desiredCommitFromStep: commit
repoURL: https://github.com/holos-run/kargo-demo.git
uses: argocd-update
requestedFreight:
- origin:
kind: Warehouse
name: httpbin
sources:
stages:
- uat
prod-us-east:
apiVersion: kargo.akuity.io/v1alpha1
kind: Stage
metadata:
name: prod-us-east
namespace: httpbin
spec:
promotionTemplate:
spec:
steps:
- config:
checkout:
- branch: main
path: ./src
- branch: project/httpbin/component/prod-us-east-httpbin
create: true
path: ./out
repoURL: https://github.com/holos-run/kargo-demo.git
uses: git-clone
- config:
path: ./out
uses: git-clear
- as: update-image
config:
images:
- image: quay.io/holos/mccutchen/go-httpbin
path: ./src/deploy/projects/httpbin/components/prod-us-east-httpbin
uses: kustomize-set-image
- config:
outPath: ./out/prod-us-east-httpbin.gen.yaml
path: ./src/deploy/projects/httpbin/components/prod-us-east-httpbin
uses: kustomize-build
- as: commit
config:
messageFromSteps:
- update-image
path: ./out
uses: git-commit
- config:
path: ./out
targetBranch: project/httpbin/component/prod-us-east-httpbin
uses: git-push
- config:
apps:
- name: httpbin-prod-us-east-httpbin
sources:
- desiredCommitFromStep: commit
repoURL: https://github.com/holos-run/kargo-demo.git
uses: argocd-update
requestedFreight:
- origin:
kind: Warehouse
name: httpbin
sources:
stages:
- uat
prod-us-west:
apiVersion: kargo.akuity.io/v1alpha1
kind: Stage
metadata:
name: prod-us-west
namespace: httpbin
spec:
promotionTemplate:
spec:
steps:
- config:
checkout:
- branch: main
path: ./src
- branch: project/httpbin/component/prod-us-west-httpbin
create: true
path: ./out
repoURL: https://github.com/holos-run/kargo-demo.git
uses: git-clone
- config:
path: ./out
uses: git-clear
- as: update-image
config:
images:
- image: quay.io/holos/mccutchen/go-httpbin
path: ./src/deploy/projects/httpbin/components/prod-us-west-httpbin
uses: kustomize-set-image
- config:
outPath: ./out/prod-us-west-httpbin.gen.yaml
path: ./src/deploy/projects/httpbin/components/prod-us-west-httpbin
uses: kustomize-build
- as: commit
config:
messageFromSteps:
- update-image
path: ./out
uses: git-commit
- config:
path: ./out
targetBranch: project/httpbin/component/prod-us-west-httpbin
uses: git-push
- config:
apps:
- name: httpbin-prod-us-west-httpbin
sources:
- desiredCommitFromStep: commit
repoURL: https://github.com/holos-run/kargo-demo.git
uses: argocd-update
requestedFreight:
- origin:
kind: Warehouse
name: httpbin
sources:
stages:
- uat
test:
apiVersion: kargo.akuity.io/v1alpha1
kind: Stage
metadata:
name: test
namespace: httpbin
spec:
promotionTemplate:
spec:
steps:
- config:
checkout:
- branch: main
path: ./src
- branch: project/httpbin/component/test-httpbin
create: true
path: ./out
repoURL: https://github.com/holos-run/kargo-demo.git
uses: git-clone
- config:
path: ./out
uses: git-clear
- as: update-image
config:
images:
- image: quay.io/holos/mccutchen/go-httpbin
path: ./src/deploy/projects/httpbin/components/test-httpbin
uses: kustomize-set-image
- config:
outPath: ./out/test-httpbin.gen.yaml
path: ./src/deploy/projects/httpbin/components/test-httpbin
uses: kustomize-build
- as: commit
config:
messageFromSteps:
- update-image
path: ./out
uses: git-commit
- config:
path: ./out
targetBranch: project/httpbin/component/test-httpbin
uses: git-push
- config:
apps:
- name: httpbin-test-httpbin
sources:
- desiredCommitFromStep: commit
repoURL: https://github.com/holos-run/kargo-demo.git
uses: argocd-update
requestedFreight:
- origin:
kind: Warehouse
name: httpbin
sources:
stages:
- dev
uat:
apiVersion: kargo.akuity.io/v1alpha1
kind: Stage
metadata:
name: uat
namespace: httpbin
spec:
promotionTemplate:
spec:
steps:
- config:
checkout:
- branch: main
path: ./src
- branch: project/httpbin/component/uat-httpbin
create: true
path: ./out
repoURL: https://github.com/holos-run/kargo-demo.git
uses: git-clone
- config:
path: ./out
uses: git-clear
- as: update-image
config:
images:
- image: quay.io/holos/mccutchen/go-httpbin
path: ./src/deploy/projects/httpbin/components/uat-httpbin
uses: kustomize-set-image
- config:
outPath: ./out/uat-httpbin.gen.yaml
path: ./src/deploy/projects/httpbin/components/uat-httpbin
uses: kustomize-build
- as: commit
config:
messageFromSteps:
- update-image
path: ./out
uses: git-commit
- config:
path: ./out
targetBranch: project/httpbin/component/uat-httpbin
uses: git-push
- config:
apps:
- name: httpbin-uat-httpbin
sources:
- desiredCommitFromStep: commit
repoURL: https://github.com/holos-run/kargo-demo.git
uses: argocd-update
requestedFreight:
- origin:
kind: Warehouse
name: httpbin
sources:
stages:
- test
Warehouse:
httpbin:
apiVersion: kargo.akuity.io/v1alpha1
kind: Warehouse
metadata:
name: httpbin
namespace: httpbin
spec:
interval: 5m0s
subscriptions:
- image:
discoveryLimit: 5
repoURL: quay.io/holos/mccutchen/go-httpbin
semverConstraint: ^2.0.0
strictSemvers: true
transformers:
- kind: Kustomize
inputs:
- resources.gen.yaml
output: projects/httpbin/components/kargo-stages/kargo-stages.gen.yaml
kustomize:
kustomization:
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
labels:
- includeSelectors: false
pairs:
argocd.argoproj.io/instance: httpbin-kargo-stages
resources:
- resources.gen.yaml
- artifact: projects/httpbin/gitops/kargo-stages.application.gen.yaml
generators:
- kind: Resources
output: projects/httpbin/gitops/kargo-stages.application.gen.yaml
resources:
Application:
httpbin-kargo-stages:
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
labels: {}
name: httpbin-kargo-stages
namespace: argocd
spec:
destination:
server: https://kubernetes.default.svc
project: httpbin
source:
path: deploy/projects/httpbin/components/kargo-stages
repoURL: https://github.com/holos-run/kargo-demo.git
targetRevision: main

View File

@@ -1,7 +0,0 @@
{
"exitCode": 1,
"name": "DuplicatedAnnotationsInAfter",
"msg": "should not match when the same object is duplicated in after and differs only by an arbitrary deeply nested field in before, in this case an annotation",
"file1": "before.yaml",
"file2": "after.yaml"
}

View File

@@ -1,24 +0,0 @@
---
kind: BuildPlan
apiVersion: v1alpha5
metadata:
name: component
labels:
holos.run/component.name: component
holos.run/stack.name: demo
annotations:
holos.run/purpose: example
holos.run/environment: prod
spec:
artifacts:
- artifact: component.yaml
generators:
- kind: Kubernetes
output: manifests.yaml
resources:
- name: deployment
namespace: default
transformers:
- kind: SetLabels
labels:
app: demo

View File

@@ -1,17 +0,0 @@
---
kind: BuildPlan
apiVersion: v1alpha5
metadata:
name: component
labels:
holos.run/component.name: component
# Missing holos.run/stack.name
# Missing annotations
spec:
artifacts:
- artifact: component.yaml
generators:
- kind: Kubernetes
output: manifests.yaml
# Missing resources
# Missing transformers

View File

@@ -1,9 +0,0 @@
{
"exitCode": 0,
"name": "BuildPlan_4",
"msg": "BuildPlan spec 4: after may have fields missing from before if isBackwardsCompatible is true - should pass when before has missing fields and isBackwardsCompatible is true",
"file1": "before.yaml",
"file2": "after.yaml",
"expectedErrors": [],
"isBackwardsCompatible": true
}

View File

@@ -1,404 +0,0 @@
kind: BuildPlan
apiVersion: v1alpha5
metadata:
name: kargo-stages
labels:
holos.run/component.name: kargo-stages
holos.run/project.name: httpbin
holos.run/stack.name: httpbin
annotations:
app.holos.run/description: kargo-stages for project httpbin
spec:
artifacts:
- artifact: projects/httpbin/components/kargo-stages/kargo-stages.gen.yaml
generators:
- kind: Resources
output: resources.gen.yaml
resources:
Stage:
dev:
apiVersion: kargo.akuity.io/v1alpha1
kind: Stage
metadata:
name: dev
namespace: httpbin
spec:
promotionTemplate:
spec:
steps:
- config:
checkout:
- branch: main
path: ./src
- branch: project/httpbin/component/dev-httpbin
create: true
path: ./out
repoURL: https://github.com/holos-run/kargo-demo.git
uses: git-clone
- config:
path: ./out
uses: git-clear
- as: update-image
config:
images:
- image: quay.io/holos/mccutchen/go-httpbin
path: ./src/deploy/projects/httpbin/components/dev-httpbin
uses: kustomize-set-image
- config:
outPath: ./out/dev-httpbin.gen.yaml
path: ./src/deploy/projects/httpbin/components/dev-httpbin
uses: kustomize-build
- as: commit
config:
messageFromSteps:
- update-image
path: ./out
uses: git-commit
- config:
path: ./out
targetBranch: project/httpbin/component/dev-httpbin
uses: git-push
- config:
apps:
- name: httpbin-dev-httpbin
sources:
- desiredCommitFromStep: commit
repoURL: https://github.com/holos-run/kargo-demo.git
uses: argocd-update
requestedFreight:
- origin:
kind: Warehouse
name: httpbin
sources:
direct: true
prod-us-central:
apiVersion: kargo.akuity.io/v1alpha1
kind: Stage
metadata:
name: prod-us-central
namespace: httpbin
spec:
promotionTemplate:
spec:
steps:
- config:
checkout:
- branch: main
path: ./src
- branch: project/httpbin/component/prod-us-central-httpbin
create: true
path: ./out
repoURL: https://github.com/holos-run/kargo-demo.git
uses: git-clone
- config:
path: ./out
uses: git-clear
- as: update-image
config:
images:
- image: quay.io/holos/mccutchen/go-httpbin
path: ./src/deploy/projects/httpbin/components/prod-us-central-httpbin
uses: kustomize-set-image
- config:
outPath: ./out/prod-us-central-httpbin.gen.yaml
path: ./src/deploy/projects/httpbin/components/prod-us-central-httpbin
uses: kustomize-build
- as: commit
config:
messageFromSteps:
- update-image
path: ./out
uses: git-commit
- config:
path: ./out
targetBranch: project/httpbin/component/prod-us-central-httpbin
uses: git-push
- config:
apps:
- name: httpbin-prod-us-central-httpbin
sources:
- desiredCommitFromStep: commit
repoURL: https://github.com/holos-run/kargo-demo.git
uses: argocd-update
requestedFreight:
- origin:
kind: Warehouse
name: httpbin
sources:
stages:
- uat
prod-us-east:
apiVersion: kargo.akuity.io/v1alpha1
kind: Stage
metadata:
name: prod-us-east
namespace: httpbin
spec:
promotionTemplate:
spec:
steps:
- config:
checkout:
- branch: main
path: ./src
- branch: project/httpbin/component/prod-us-east-httpbin
create: true
path: ./out
repoURL: https://github.com/holos-run/kargo-demo.git
uses: git-clone
- config:
path: ./out
uses: git-clear
- as: update-image
config:
images:
- image: quay.io/holos/mccutchen/go-httpbin
path: ./src/deploy/projects/httpbin/components/prod-us-east-httpbin
uses: kustomize-set-image
- config:
outPath: ./out/prod-us-east-httpbin.gen.yaml
path: ./src/deploy/projects/httpbin/components/prod-us-east-httpbin
uses: kustomize-build
- as: commit
config:
messageFromSteps:
- update-image
path: ./out
uses: git-commit
- config:
path: ./out
targetBranch: project/httpbin/component/prod-us-east-httpbin
uses: git-push
- config:
apps:
- name: httpbin-prod-us-east-httpbin
sources:
- desiredCommitFromStep: commit
repoURL: https://github.com/holos-run/kargo-demo.git
uses: argocd-update
requestedFreight:
- origin:
kind: Warehouse
name: httpbin
sources:
stages:
- uat
prod-us-west:
apiVersion: kargo.akuity.io/v1alpha1
kind: Stage
metadata:
name: prod-us-west
namespace: httpbin
spec:
promotionTemplate:
spec:
steps:
- config:
checkout:
- branch: main
path: ./src
- branch: project/httpbin/component/prod-us-west-httpbin
create: true
path: ./out
repoURL: https://github.com/holos-run/kargo-demo.git
uses: git-clone
- config:
path: ./out
uses: git-clear
- as: update-image
config:
images:
- image: quay.io/holos/mccutchen/go-httpbin
path: ./src/deploy/projects/httpbin/components/prod-us-west-httpbin
uses: kustomize-set-image
- config:
outPath: ./out/prod-us-west-httpbin.gen.yaml
path: ./src/deploy/projects/httpbin/components/prod-us-west-httpbin
uses: kustomize-build
- as: commit
config:
messageFromSteps:
- update-image
path: ./out
uses: git-commit
- config:
path: ./out
targetBranch: project/httpbin/component/prod-us-west-httpbin
uses: git-push
- config:
apps:
- name: httpbin-prod-us-west-httpbin
sources:
- desiredCommitFromStep: commit
repoURL: https://github.com/holos-run/kargo-demo.git
uses: argocd-update
requestedFreight:
- origin:
kind: Warehouse
name: httpbin
sources:
stages:
- uat
test:
apiVersion: kargo.akuity.io/v1alpha1
kind: Stage
metadata:
name: test
namespace: httpbin
spec:
promotionTemplate:
spec:
steps:
- config:
checkout:
- branch: main
path: ./src
- branch: project/httpbin/component/test-httpbin
create: true
path: ./out
repoURL: https://github.com/holos-run/kargo-demo.git
uses: git-clone
- config:
path: ./out
uses: git-clear
- as: update-image
config:
images:
- image: quay.io/holos/mccutchen/go-httpbin
path: ./src/deploy/projects/httpbin/components/test-httpbin
uses: kustomize-set-image
- config:
outPath: ./out/test-httpbin.gen.yaml
path: ./src/deploy/projects/httpbin/components/test-httpbin
uses: kustomize-build
- as: commit
config:
messageFromSteps:
- update-image
path: ./out
uses: git-commit
- config:
path: ./out
targetBranch: project/httpbin/component/test-httpbin
uses: git-push
- config:
apps:
- name: httpbin-test-httpbin
sources:
- desiredCommitFromStep: commit
repoURL: https://github.com/holos-run/kargo-demo.git
uses: argocd-update
requestedFreight:
- origin:
kind: Warehouse
name: httpbin
sources:
stages:
- dev
uat:
apiVersion: kargo.akuity.io/v1alpha1
kind: Stage
metadata:
name: uat
namespace: httpbin
spec:
promotionTemplate:
spec:
steps:
- config:
checkout:
- branch: main
path: ./src
- branch: project/httpbin/component/uat-httpbin
create: true
path: ./out
repoURL: https://github.com/holos-run/kargo-demo.git
uses: git-clone
- config:
path: ./out
uses: git-clear
- as: update-image
config:
images:
- image: quay.io/holos/mccutchen/go-httpbin
path: ./src/deploy/projects/httpbin/components/uat-httpbin
uses: kustomize-set-image
- config:
outPath: ./out/uat-httpbin.gen.yaml
path: ./src/deploy/projects/httpbin/components/uat-httpbin
uses: kustomize-build
- as: commit
config:
messageFromSteps:
- update-image
path: ./out
uses: git-commit
- config:
path: ./out
targetBranch: project/httpbin/component/uat-httpbin
uses: git-push
- config:
apps:
- name: httpbin-uat-httpbin
sources:
- desiredCommitFromStep: commit
repoURL: https://github.com/holos-run/kargo-demo.git
uses: argocd-update
requestedFreight:
- origin:
kind: Warehouse
name: httpbin
sources:
stages:
- test
Warehouse:
httpbin:
apiVersion: kargo.akuity.io/v1alpha1
kind: Warehouse
metadata:
name: httpbin
namespace: httpbin
spec:
interval: 5m0s
subscriptions:
- image:
discoveryLimit: 5
repoURL: quay.io/holos/mccutchen/go-httpbin
semverConstraint: ^2.0.0
strictSemvers: true
transformers:
- kind: Kustomize
inputs:
- resources.gen.yaml
output: projects/httpbin/components/kargo-stages/kargo-stages.gen.yaml
kustomize:
kustomization:
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
labels:
- includeSelectors: false
pairs:
argocd.argoproj.io/instance: httpbin-kargo-stages
resources:
- resources.gen.yaml
- artifact: projects/httpbin/gitops/kargo-stages.application.gen.yaml
generators:
- kind: Resources
output: projects/httpbin/gitops/kargo-stages.application.gen.yaml
resources:
Application:
httpbin-kargo-stages:
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
labels: {}
name: httpbin-kargo-stages
namespace: argocd
spec:
destination:
server: https://kubernetes.default.svc
project: httpbin
source:
path: deploy/projects/httpbin/components/kargo-stages
repoURL: https://github.com/holos-run/kargo-demo.git
targetRevision: main

View File

@@ -1,404 +0,0 @@
kind: BuildPlan
apiVersion: v1alpha5
metadata:
name: kargo-stages
labels:
holos.run/component.name: kargo-stages
holos.run/project.name: httpbin
holos.run/stack.name: httpbin
annotations:
app.holos.run/description: kargo-stages for project httpbin
spec:
artifacts:
- artifact: projects/httpbin/components/kargo-stages/kargo-stages.gen.yaml
generators:
- kind: Resources
output: resources.gen.yaml
resources:
Stage:
dev:
apiVersion: kargo.akuity.io/v1alpha1
kind: Stage
metadata:
name: dev
namespace: httpbin
spec:
promotionTemplate:
spec:
steps:
- config:
checkout:
- branch: main
path: ./src
- branch: project/httpbin/component/dev-httpbin
create: true
path: ./out
repoURL: https://github.com/holos-run/kargo-demo.git
uses: git-clone
- config:
path: ./out
uses: git-clear
- as: update-image
config:
images:
- image: quay.io/holos/mccutchen/go-httpbin
path: ./src/deploy/projects/httpbin/components/dev-httpbin
uses: kustomize-set-image
- config:
outPath: ./out/dev-httpbin.gen.yaml
path: ./src/deploy/projects/httpbin/components/dev-httpbin
uses: kustomize-build
- as: commit
config:
messageFromSteps:
- update-image
path: ./out
uses: git-commit
- config:
path: ./out
targetBranch: project/httpbin/component/dev-httpbin
uses: git-push
- config:
apps:
- name: httpbin-dev-httpbin
sources:
- desiredCommitFromStep: commit
repoURL: https://github.com/holos-run/kargo-demo.git
uses: argocd-update
requestedFreight:
- origin:
kind: Warehouse
name: httpbin
sources:
direct: true
prod-us-central:
apiVersion: kargo.akuity.io/v1alpha1
kind: Stage
metadata:
name: prod-us-central
namespace: httpbin
spec:
promotionTemplate:
spec:
steps:
- config:
checkout:
- branch: main
path: ./src
- branch: project/httpbin/component/prod-us-central-httpbin
create: true
path: ./out
repoURL: https://github.com/holos-run/kargo-demo.git
uses: git-clone
- config:
path: ./out
uses: git-clear
- as: update-image
config:
images:
- image: quay.io/holos/mccutchen/go-httpbin
path: ./src/deploy/projects/httpbin/components/prod-us-central-httpbin
uses: kustomize-set-image
- config:
outPath: ./out/prod-us-central-httpbin.gen.yaml
path: ./src/deploy/projects/httpbin/components/prod-us-central-httpbin
uses: kustomize-build
- as: commit
config:
messageFromSteps:
- update-image
path: ./out
uses: git-commit
- config:
path: ./out
targetBranch: project/httpbin/component/prod-us-central-httpbin
uses: git-push
- config:
apps:
- name: httpbin-prod-us-central-httpbin
sources:
- desiredCommitFromStep: commit
repoURL: https://github.com/holos-run/kargo-demo.git
uses: argocd-update
requestedFreight:
- origin:
kind: Warehouse
name: httpbin
sources:
stages:
- uat
prod-us-east:
apiVersion: kargo.akuity.io/v1alpha1
kind: Stage
metadata:
name: prod-us-east
namespace: httpbin
spec:
promotionTemplate:
spec:
steps:
- config:
checkout:
- branch: main
path: ./src
- branch: project/httpbin/component/prod-us-east-httpbin
create: true
path: ./out
repoURL: https://github.com/holos-run/kargo-demo.git
uses: git-clone
- config:
path: ./out
uses: git-clear
- as: update-image
config:
images:
- image: quay.io/holos/mccutchen/go-httpbin
path: ./src/deploy/projects/httpbin/components/prod-us-east-httpbin
uses: kustomize-set-image
- config:
outPath: ./out/prod-us-east-httpbin.gen.yaml
path: ./src/deploy/projects/httpbin/components/prod-us-east-httpbin
uses: kustomize-build
- as: commit
config:
messageFromSteps:
- update-image
path: ./out
uses: git-commit
- config:
path: ./out
targetBranch: project/httpbin/component/prod-us-east-httpbin
uses: git-push
- config:
apps:
- name: httpbin-prod-us-east-httpbin
sources:
- desiredCommitFromStep: commit
repoURL: https://github.com/holos-run/kargo-demo.git
uses: argocd-update
requestedFreight:
- origin:
kind: Warehouse
name: httpbin
sources:
stages:
- uat
prod-us-west:
apiVersion: kargo.akuity.io/v1alpha1
kind: Stage
metadata:
name: prod-us-west
namespace: httpbin
spec:
promotionTemplate:
spec:
steps:
- config:
checkout:
- branch: main
path: ./src
- branch: project/httpbin/component/prod-us-west-httpbin
create: true
path: ./out
repoURL: https://github.com/holos-run/kargo-demo.git
uses: git-clone
- config:
path: ./out
uses: git-clear
- as: update-image
config:
images:
- image: quay.io/holos/mccutchen/go-httpbin
path: ./src/deploy/projects/httpbin/components/prod-us-west-httpbin
uses: kustomize-set-image
- config:
outPath: ./out/prod-us-west-httpbin.gen.yaml
path: ./src/deploy/projects/httpbin/components/prod-us-west-httpbin
uses: kustomize-build
- as: commit
config:
messageFromSteps:
- update-image
path: ./out
uses: git-commit
- config:
path: ./out
targetBranch: project/httpbin/component/prod-us-west-httpbin
uses: git-push
- config:
apps:
- name: httpbin-prod-us-west-httpbin
sources:
- desiredCommitFromStep: commit
repoURL: https://github.com/holos-run/kargo-demo.git
uses: argocd-update
requestedFreight:
- origin:
kind: Warehouse
name: httpbin
sources:
stages:
- uat
test:
apiVersion: kargo.akuity.io/v1alpha1
kind: Stage
metadata:
name: test
namespace: httpbin
spec:
promotionTemplate:
spec:
steps:
- config:
checkout:
- branch: main
path: ./src
- branch: project/httpbin/component/test-httpbin
create: true
path: ./out
repoURL: https://github.com/holos-run/kargo-demo.git
uses: git-clone
- config:
path: ./out
uses: git-clear
- as: update-image
config:
images:
- image: quay.io/holos/mccutchen/go-httpbin
path: ./src/deploy/projects/httpbin/components/test-httpbin
uses: kustomize-set-image
- config:
outPath: ./out/test-httpbin.gen.yaml
path: ./src/deploy/projects/httpbin/components/test-httpbin
uses: kustomize-build
- as: commit
config:
messageFromSteps:
- update-image
path: ./out
uses: git-commit
- config:
path: ./out
targetBranch: project/httpbin/component/test-httpbin
uses: git-push
- config:
apps:
- name: httpbin-test-httpbin
sources:
- desiredCommitFromStep: commit
repoURL: https://github.com/holos-run/kargo-demo.git
uses: argocd-update
requestedFreight:
- origin:
kind: Warehouse
name: httpbin
sources:
stages:
- dev
uat:
apiVersion: kargo.akuity.io/v1alpha1
kind: Stage
metadata:
name: uat
namespace: httpbin
spec:
promotionTemplate:
spec:
steps:
- config:
checkout:
- branch: main
path: ./src
- branch: project/httpbin/component/uat-httpbin
create: true
path: ./out
repoURL: https://github.com/holos-run/kargo-demo.git
uses: git-clone
- config:
path: ./out
uses: git-clear
- as: update-image
config:
images:
- image: quay.io/holos/mccutchen/go-httpbin
path: ./src/deploy/projects/httpbin/components/uat-httpbin
uses: kustomize-set-image
- config:
outPath: ./out/uat-httpbin.gen.yaml
path: ./src/deploy/projects/httpbin/components/uat-httpbin
uses: kustomize-build
- as: commit
config:
messageFromSteps:
- update-image
path: ./out
uses: git-commit
- config:
path: ./out
targetBranch: project/httpbin/component/uat-httpbin
uses: git-push
- config:
apps:
- name: httpbin-uat-httpbin
sources:
- desiredCommitFromStep: commit
repoURL: https://github.com/holos-run/kargo-demo.git
uses: argocd-update
requestedFreight:
- origin:
kind: Warehouse
name: httpbin
sources:
stages:
- test
Warehouse:
httpbin:
apiVersion: kargo.akuity.io/v1alpha1
kind: Warehouse
metadata:
name: httpbin
namespace: httpbin
spec:
interval: 5m0s
subscriptions:
- image:
discoveryLimit: 5
repoURL: quay.io/holos/mccutchen/go-httpbin
semverConstraint: ^2.0.0
strictSemvers: true
transformers:
- kind: Kustomize
inputs:
- resources.gen.yaml
output: projects/httpbin/components/kargo-stages/kargo-stages.gen.yaml
kustomize:
kustomization:
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
labels:
- includeSelectors: false
pairs:
argocd.argoproj.io/instance: httpbin-kargo-stages
resources:
- resources.gen.yaml
- artifact: projects/httpbin/gitops/kargo-stages.application.gen.yaml
generators:
- kind: Resources
output: projects/httpbin/gitops/kargo-stages.application.gen.yaml
resources:
Application:
httpbin-kargo-stages:
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
labels: {}
name: httpbin-kargo-stages
namespace: argocd
spec:
destination:
server: https://kubernetes.default.svc
project: httpbin
source:
path: deploy/projects/httpbin/components/kargo-stages
repoURL: https://github.com/holos-run/kargo-demo.git
targetRevision: main

View File

@@ -1,8 +0,0 @@
{
"exitCode": 0,
"name": "FullBuildPlan",
"msg": "should match full build plans",
"file1": "before.yaml",
"file2": "after.yaml",
"expectedErrors": []
}

View File

@@ -1,404 +0,0 @@
kind: BuildPlan
apiVersion: v1alpha5
metadata:
name: kargo-stages
labels:
holos.run/component.name: kargo-stages
holos.run/project.name: httpbin
holos.run/stack.name: httpbin
annotations:
app.holos.run/description: kargo-stages for project httpbin
spec:
artifacts:
- artifact: projects/httpbin/gitops/kargo-stages.application.gen.yaml
generators:
- kind: Resources
output: projects/httpbin/gitops/kargo-stages.application.gen.yaml
resources:
Application:
httpbin-kargo-stages:
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
labels: {}
name: httpbin-kargo-stages
namespace: argocd
spec:
destination:
server: https://kubernetes.default.svc
project: httpbin
source:
path: deploy/projects/httpbin/components/kargo-stages
repoURL: https://github.com/holos-run/kargo-demo.git
targetRevision: main
- artifact: projects/httpbin/components/kargo-stages/kargo-stages.gen.yaml
generators:
- kind: Resources
output: resources.gen.yaml
resources:
Stage:
dev:
apiVersion: kargo.akuity.io/v1alpha1
kind: Stage
metadata:
name: dev
namespace: httpbin
spec:
promotionTemplate:
spec:
steps:
- config:
checkout:
- branch: main
path: ./src
- branch: project/httpbin/component/dev-httpbin
create: true
path: ./out
repoURL: https://github.com/holos-run/kargo-demo.git
uses: git-clone
- config:
path: ./out
uses: git-clear
- as: update-image
config:
images:
- image: quay.io/holos/mccutchen/go-httpbin
path: ./src/deploy/projects/httpbin/components/dev-httpbin
uses: kustomize-set-image
- config:
outPath: ./out/dev-httpbin.gen.yaml
path: ./src/deploy/projects/httpbin/components/dev-httpbin
uses: kustomize-build
- as: commit
config:
messageFromSteps:
- update-image
path: ./out
uses: git-commit
- config:
path: ./out
targetBranch: project/httpbin/component/dev-httpbin
uses: git-push
- config:
apps:
- name: httpbin-dev-httpbin
sources:
- desiredCommitFromStep: commit
repoURL: https://github.com/holos-run/kargo-demo.git
uses: argocd-update
requestedFreight:
- origin:
kind: Warehouse
name: httpbin
sources:
direct: true
prod-us-central:
apiVersion: kargo.akuity.io/v1alpha1
kind: Stage
metadata:
name: prod-us-central
namespace: httpbin
spec:
promotionTemplate:
spec:
steps:
- config:
checkout:
- branch: main
path: ./src
- branch: project/httpbin/component/prod-us-central-httpbin
create: true
path: ./out
repoURL: https://github.com/holos-run/kargo-demo.git
uses: git-clone
- config:
path: ./out
uses: git-clear
- as: update-image
config:
images:
- image: quay.io/holos/mccutchen/go-httpbin
path: ./src/deploy/projects/httpbin/components/prod-us-central-httpbin
uses: kustomize-set-image
- config:
outPath: ./out/prod-us-central-httpbin.gen.yaml
path: ./src/deploy/projects/httpbin/components/prod-us-central-httpbin
uses: kustomize-build
- as: commit
config:
messageFromSteps:
- update-image
path: ./out
uses: git-commit
- config:
path: ./out
targetBranch: project/httpbin/component/prod-us-central-httpbin
uses: git-push
- config:
apps:
- name: httpbin-prod-us-central-httpbin
sources:
- desiredCommitFromStep: commit
repoURL: https://github.com/holos-run/kargo-demo.git
uses: argocd-update
requestedFreight:
- origin:
kind: Warehouse
name: httpbin
sources:
stages:
- uat
prod-us-east:
apiVersion: kargo.akuity.io/v1alpha1
kind: Stage
metadata:
name: prod-us-east
namespace: httpbin
spec:
promotionTemplate:
spec:
steps:
- config:
checkout:
- branch: main
path: ./src
- branch: project/httpbin/component/prod-us-east-httpbin
create: true
path: ./out
repoURL: https://github.com/holos-run/kargo-demo.git
uses: git-clone
- config:
path: ./out
uses: git-clear
- as: update-image
config:
images:
- image: quay.io/holos/mccutchen/go-httpbin
path: ./src/deploy/projects/httpbin/components/prod-us-east-httpbin
uses: kustomize-set-image
- config:
outPath: ./out/prod-us-east-httpbin.gen.yaml
path: ./src/deploy/projects/httpbin/components/prod-us-east-httpbin
uses: kustomize-build
- as: commit
config:
messageFromSteps:
- update-image
path: ./out
uses: git-commit
- config:
path: ./out
targetBranch: project/httpbin/component/prod-us-east-httpbin
uses: git-push
- config:
apps:
- name: httpbin-prod-us-east-httpbin
sources:
- desiredCommitFromStep: commit
repoURL: https://github.com/holos-run/kargo-demo.git
uses: argocd-update
requestedFreight:
- origin:
kind: Warehouse
name: httpbin
sources:
stages:
- uat
prod-us-west:
apiVersion: kargo.akuity.io/v1alpha1
kind: Stage
metadata:
name: prod-us-west
namespace: httpbin
spec:
promotionTemplate:
spec:
steps:
- config:
checkout:
- branch: main
path: ./src
- branch: project/httpbin/component/prod-us-west-httpbin
create: true
path: ./out
repoURL: https://github.com/holos-run/kargo-demo.git
uses: git-clone
- config:
path: ./out
uses: git-clear
- as: update-image
config:
images:
- image: quay.io/holos/mccutchen/go-httpbin
path: ./src/deploy/projects/httpbin/components/prod-us-west-httpbin
uses: kustomize-set-image
- config:
outPath: ./out/prod-us-west-httpbin.gen.yaml
path: ./src/deploy/projects/httpbin/components/prod-us-west-httpbin
uses: kustomize-build
- as: commit
config:
messageFromSteps:
- update-image
path: ./out
uses: git-commit
- config:
path: ./out
targetBranch: project/httpbin/component/prod-us-west-httpbin
uses: git-push
- config:
apps:
- name: httpbin-prod-us-west-httpbin
sources:
- desiredCommitFromStep: commit
repoURL: https://github.com/holos-run/kargo-demo.git
uses: argocd-update
requestedFreight:
- origin:
kind: Warehouse
name: httpbin
sources:
stages:
- uat
test:
apiVersion: kargo.akuity.io/v1alpha1
kind: Stage
metadata:
name: test
namespace: httpbin
spec:
promotionTemplate:
spec:
steps:
- config:
checkout:
- branch: main
path: ./src
- branch: project/httpbin/component/test-httpbin
create: true
path: ./out
repoURL: https://github.com/holos-run/kargo-demo.git
uses: git-clone
- config:
path: ./out
uses: git-clear
- as: update-image
config:
images:
- image: quay.io/holos/mccutchen/go-httpbin
path: ./src/deploy/projects/httpbin/components/test-httpbin
uses: kustomize-set-image
- config:
outPath: ./out/test-httpbin.gen.yaml
path: ./src/deploy/projects/httpbin/components/test-httpbin
uses: kustomize-build
- as: commit
config:
messageFromSteps:
- update-image
path: ./out
uses: git-commit
- config:
path: ./out
targetBranch: project/httpbin/component/test-httpbin
uses: git-push
- config:
apps:
- name: httpbin-test-httpbin
sources:
- desiredCommitFromStep: commit
repoURL: https://github.com/holos-run/kargo-demo.git
uses: argocd-update
requestedFreight:
- origin:
kind: Warehouse
name: httpbin
sources:
stages:
- dev
uat:
apiVersion: kargo.akuity.io/v1alpha1
kind: Stage
metadata:
name: uat
namespace: httpbin
spec:
promotionTemplate:
spec:
steps:
- config:
checkout:
- branch: main
path: ./src
- branch: project/httpbin/component/uat-httpbin
create: true
path: ./out
repoURL: https://github.com/holos-run/kargo-demo.git
uses: git-clone
- config:
path: ./out
uses: git-clear
- as: update-image
config:
images:
- image: quay.io/holos/mccutchen/go-httpbin
path: ./src/deploy/projects/httpbin/components/uat-httpbin
uses: kustomize-set-image
- config:
outPath: ./out/uat-httpbin.gen.yaml
path: ./src/deploy/projects/httpbin/components/uat-httpbin
uses: kustomize-build
- as: commit
config:
messageFromSteps:
- update-image
path: ./out
uses: git-commit
- config:
path: ./out
targetBranch: project/httpbin/component/uat-httpbin
uses: git-push
- config:
apps:
- name: httpbin-uat-httpbin
sources:
- desiredCommitFromStep: commit
repoURL: https://github.com/holos-run/kargo-demo.git
uses: argocd-update
requestedFreight:
- origin:
kind: Warehouse
name: httpbin
sources:
stages:
- test
Warehouse:
httpbin:
apiVersion: kargo.akuity.io/v1alpha1
kind: Warehouse
metadata:
name: httpbin
namespace: httpbin
spec:
interval: 5m0s
subscriptions:
- image:
discoveryLimit: 5
repoURL: quay.io/holos/mccutchen/go-httpbin
semverConstraint: ^2.0.0
strictSemvers: true
transformers:
- kind: Kustomize
inputs:
- resources.gen.yaml
output: projects/httpbin/components/kargo-stages/kargo-stages.gen.yaml
kustomize:
kustomization:
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
labels:
- includeSelectors: false
pairs:
argocd.argoproj.io/instance: httpbin-kargo-stages
resources:
- resources.gen.yaml

View File

@@ -1,404 +0,0 @@
kind: BuildPlan
apiVersion: v1alpha5
metadata:
name: kargo-stages
labels:
holos.run/component.name: kargo-stages
holos.run/project.name: httpbin
holos.run/stack.name: httpbin
annotations:
app.holos.run/description: kargo-stages for project httpbin
spec:
artifacts:
- artifact: projects/httpbin/components/kargo-stages/kargo-stages.gen.yaml
generators:
- kind: Resources
output: resources.gen.yaml
resources:
Stage:
dev:
apiVersion: kargo.akuity.io/v1alpha1
kind: Stage
metadata:
name: dev
namespace: httpbin
spec:
promotionTemplate:
spec:
steps:
- config:
checkout:
- branch: main
path: ./src
- branch: project/httpbin/component/dev-httpbin
create: true
path: ./out
repoURL: https://github.com/holos-run/kargo-demo.git
uses: git-clone
- config:
path: ./out
uses: git-clear
- as: update-image
config:
images:
- image: quay.io/holos/mccutchen/go-httpbin
path: ./src/deploy/projects/httpbin/components/dev-httpbin
uses: kustomize-set-image
- config:
outPath: ./out/dev-httpbin.gen.yaml
path: ./src/deploy/projects/httpbin/components/dev-httpbin
uses: kustomize-build
- as: commit
config:
messageFromSteps:
- update-image
path: ./out
uses: git-commit
- config:
path: ./out
targetBranch: project/httpbin/component/dev-httpbin
uses: git-push
- config:
apps:
- name: httpbin-dev-httpbin
sources:
- desiredCommitFromStep: commit
repoURL: https://github.com/holos-run/kargo-demo.git
uses: argocd-update
requestedFreight:
- origin:
kind: Warehouse
name: httpbin
sources:
direct: true
prod-us-central:
apiVersion: kargo.akuity.io/v1alpha1
kind: Stage
metadata:
name: prod-us-central
namespace: httpbin
spec:
promotionTemplate:
spec:
steps:
- config:
checkout:
- branch: main
path: ./src
- branch: project/httpbin/component/prod-us-central-httpbin
create: true
path: ./out
repoURL: https://github.com/holos-run/kargo-demo.git
uses: git-clone
- config:
path: ./out
uses: git-clear
- as: update-image
config:
images:
- image: quay.io/holos/mccutchen/go-httpbin
path: ./src/deploy/projects/httpbin/components/prod-us-central-httpbin
uses: kustomize-set-image
- config:
outPath: ./out/prod-us-central-httpbin.gen.yaml
path: ./src/deploy/projects/httpbin/components/prod-us-central-httpbin
uses: kustomize-build
- as: commit
config:
messageFromSteps:
- update-image
path: ./out
uses: git-commit
- config:
path: ./out
targetBranch: project/httpbin/component/prod-us-central-httpbin
uses: git-push
- config:
apps:
- name: httpbin-prod-us-central-httpbin
sources:
- desiredCommitFromStep: commit
repoURL: https://github.com/holos-run/kargo-demo.git
uses: argocd-update
requestedFreight:
- origin:
kind: Warehouse
name: httpbin
sources:
stages:
- uat
prod-us-east:
apiVersion: kargo.akuity.io/v1alpha1
kind: Stage
metadata:
name: prod-us-east
namespace: httpbin
spec:
promotionTemplate:
spec:
steps:
- config:
checkout:
- branch: main
path: ./src
- branch: project/httpbin/component/prod-us-east-httpbin
create: true
path: ./out
repoURL: https://github.com/holos-run/kargo-demo.git
uses: git-clone
- config:
path: ./out
uses: git-clear
- as: update-image
config:
images:
- image: quay.io/holos/mccutchen/go-httpbin
path: ./src/deploy/projects/httpbin/components/prod-us-east-httpbin
uses: kustomize-set-image
- config:
outPath: ./out/prod-us-east-httpbin.gen.yaml
path: ./src/deploy/projects/httpbin/components/prod-us-east-httpbin
uses: kustomize-build
- as: commit
config:
messageFromSteps:
- update-image
path: ./out
uses: git-commit
- config:
path: ./out
targetBranch: project/httpbin/component/prod-us-east-httpbin
uses: git-push
- config:
apps:
- name: httpbin-prod-us-east-httpbin
sources:
- desiredCommitFromStep: commit
repoURL: https://github.com/holos-run/kargo-demo.git
uses: argocd-update
requestedFreight:
- origin:
kind: Warehouse
name: httpbin
sources:
stages:
- uat
prod-us-west:
apiVersion: kargo.akuity.io/v1alpha1
kind: Stage
metadata:
name: prod-us-west
namespace: httpbin
spec:
promotionTemplate:
spec:
steps:
- config:
checkout:
- branch: main
path: ./src
- branch: project/httpbin/component/prod-us-west-httpbin
create: true
path: ./out
repoURL: https://github.com/holos-run/kargo-demo.git
uses: git-clone
- config:
path: ./out
uses: git-clear
- as: update-image
config:
images:
- image: quay.io/holos/mccutchen/go-httpbin
path: ./src/deploy/projects/httpbin/components/prod-us-west-httpbin
uses: kustomize-set-image
- config:
outPath: ./out/prod-us-west-httpbin.gen.yaml
path: ./src/deploy/projects/httpbin/components/prod-us-west-httpbin
uses: kustomize-build
- as: commit
config:
messageFromSteps:
- update-image
path: ./out
uses: git-commit
- config:
path: ./out
targetBranch: project/httpbin/component/prod-us-west-httpbin
uses: git-push
- config:
apps:
- name: httpbin-prod-us-west-httpbin
sources:
- desiredCommitFromStep: commit
repoURL: https://github.com/holos-run/kargo-demo.git
uses: argocd-update
requestedFreight:
- origin:
kind: Warehouse
name: httpbin
sources:
stages:
- uat
test:
apiVersion: kargo.akuity.io/v1alpha1
kind: Stage
metadata:
name: test
namespace: httpbin
spec:
promotionTemplate:
spec:
steps:
- config:
checkout:
- branch: main
path: ./src
- branch: project/httpbin/component/test-httpbin
create: true
path: ./out
repoURL: https://github.com/holos-run/kargo-demo.git
uses: git-clone
- config:
path: ./out
uses: git-clear
- as: update-image
config:
images:
- image: quay.io/holos/mccutchen/go-httpbin
path: ./src/deploy/projects/httpbin/components/test-httpbin
uses: kustomize-set-image
- config:
outPath: ./out/test-httpbin.gen.yaml
path: ./src/deploy/projects/httpbin/components/test-httpbin
uses: kustomize-build
- as: commit
config:
messageFromSteps:
- update-image
path: ./out
uses: git-commit
- config:
path: ./out
targetBranch: project/httpbin/component/test-httpbin
uses: git-push
- config:
apps:
- name: httpbin-test-httpbin
sources:
- desiredCommitFromStep: commit
repoURL: https://github.com/holos-run/kargo-demo.git
uses: argocd-update
requestedFreight:
- origin:
kind: Warehouse
name: httpbin
sources:
stages:
- dev
uat:
apiVersion: kargo.akuity.io/v1alpha1
kind: Stage
metadata:
name: uat
namespace: httpbin
spec:
promotionTemplate:
spec:
steps:
- config:
checkout:
- branch: main
path: ./src
- branch: project/httpbin/component/uat-httpbin
create: true
path: ./out
repoURL: https://github.com/holos-run/kargo-demo.git
uses: git-clone
- config:
path: ./out
uses: git-clear
- as: update-image
config:
images:
- image: quay.io/holos/mccutchen/go-httpbin
path: ./src/deploy/projects/httpbin/components/uat-httpbin
uses: kustomize-set-image
- config:
outPath: ./out/uat-httpbin.gen.yaml
path: ./src/deploy/projects/httpbin/components/uat-httpbin
uses: kustomize-build
- as: commit
config:
messageFromSteps:
- update-image
path: ./out
uses: git-commit
- config:
path: ./out
targetBranch: project/httpbin/component/uat-httpbin
uses: git-push
- config:
apps:
- name: httpbin-uat-httpbin
sources:
- desiredCommitFromStep: commit
repoURL: https://github.com/holos-run/kargo-demo.git
uses: argocd-update
requestedFreight:
- origin:
kind: Warehouse
name: httpbin
sources:
stages:
- test
Warehouse:
httpbin:
apiVersion: kargo.akuity.io/v1alpha1
kind: Warehouse
metadata:
name: httpbin
namespace: httpbin
spec:
interval: 5m0s
subscriptions:
- image:
discoveryLimit: 5
repoURL: quay.io/holos/mccutchen/go-httpbin
semverConstraint: ^2.0.0
strictSemvers: true
transformers:
- kind: Kustomize
inputs:
- resources.gen.yaml
output: projects/httpbin/components/kargo-stages/kargo-stages.gen.yaml
kustomize:
kustomization:
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
labels:
- includeSelectors: false
pairs:
argocd.argoproj.io/instance: httpbin-kargo-stages
resources:
- resources.gen.yaml
- artifact: projects/httpbin/gitops/kargo-stages.application.gen.yaml
generators:
- kind: Resources
output: projects/httpbin/gitops/kargo-stages.application.gen.yaml
resources:
Application:
httpbin-kargo-stages:
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
labels: {}
name: httpbin-kargo-stages
namespace: argocd
spec:
destination:
server: https://kubernetes.default.svc
project: httpbin
source:
path: deploy/projects/httpbin/components/kargo-stages
repoURL: https://github.com/holos-run/kargo-demo.git
targetRevision: main

View File

@@ -1,8 +0,0 @@
{
"exitCode": 0,
"name": "BuildPlan_3.1",
"msg": "BuildPlan spec 3.1: Objects in the spec.artifacts list may appear in any arbitrary order - should match when artifacts are reordered",
"file1": "before.yaml",
"file2": "after.yaml",
"expectedErrors": []
}

View File

@@ -1,404 +0,0 @@
kind: BuildPlan
apiVersion: v1alpha5
metadata:
name: kargo-stages
labels:
holos.run/component.name: kargo-stages
holos.run/project.name: httpbin
holos.run/stack.name: not-httpbin
annotations:
app.holos.run/description: kargo-stages for project httpbin
spec:
artifacts:
- artifact: projects/httpbin/gitops/kargo-stages.application.gen.yaml
generators:
- kind: Resources
output: projects/httpbin/gitops/kargo-stages.application.gen.yaml
resources:
Application:
httpbin-kargo-stages:
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
labels: {}
name: httpbin-kargo-stages
namespace: argocd
spec:
destination:
server: https://kubernetes.default.svc
project: httpbin
source:
path: deploy/projects/httpbin/components/kargo-stages
repoURL: https://github.com/holos-run/kargo-demo.git
targetRevision: main
- artifact: projects/httpbin/components/kargo-stages/kargo-stages.gen.yaml
generators:
- kind: Resources
output: resources.gen.yaml
resources:
Stage:
dev:
apiVersion: kargo.akuity.io/v1alpha1
kind: Stage
metadata:
name: dev
namespace: httpbin
spec:
promotionTemplate:
spec:
steps:
- config:
checkout:
- branch: main
path: ./src
- branch: project/httpbin/component/dev-httpbin
create: true
path: ./out
repoURL: https://github.com/holos-run/kargo-demo.git
uses: git-clone
- config:
path: ./out
uses: git-clear
- as: update-image
config:
images:
- image: quay.io/holos/mccutchen/go-httpbin
path: ./src/deploy/projects/httpbin/components/dev-httpbin
uses: kustomize-set-image
- config:
outPath: ./out/dev-httpbin.gen.yaml
path: ./src/deploy/projects/httpbin/components/dev-httpbin
uses: kustomize-build
- as: commit
config:
messageFromSteps:
- update-image
path: ./out
uses: git-commit
- config:
path: ./out
targetBranch: project/httpbin/component/dev-httpbin
uses: git-push
- config:
apps:
- name: httpbin-dev-httpbin
sources:
- desiredCommitFromStep: commit
repoURL: https://github.com/holos-run/kargo-demo.git
uses: argocd-update
requestedFreight:
- origin:
kind: Warehouse
name: httpbin
sources:
direct: true
prod-us-central:
apiVersion: kargo.akuity.io/v1alpha1
kind: Stage
metadata:
name: prod-us-central
namespace: httpbin
spec:
promotionTemplate:
spec:
steps:
- config:
checkout:
- branch: main
path: ./src
- branch: project/httpbin/component/prod-us-central-httpbin
create: true
path: ./out
repoURL: https://github.com/holos-run/kargo-demo.git
uses: git-clone
- config:
path: ./out
uses: git-clear
- as: update-image
config:
images:
- image: quay.io/holos/mccutchen/go-httpbin
path: ./src/deploy/projects/httpbin/components/prod-us-central-httpbin
uses: kustomize-set-image
- config:
outPath: ./out/prod-us-central-httpbin.gen.yaml
path: ./src/deploy/projects/httpbin/components/prod-us-central-httpbin
uses: kustomize-build
- as: commit
config:
messageFromSteps:
- update-image
path: ./out
uses: git-commit
- config:
path: ./out
targetBranch: project/httpbin/component/prod-us-central-httpbin
uses: git-push
- config:
apps:
- name: httpbin-prod-us-central-httpbin
sources:
- desiredCommitFromStep: commit
repoURL: https://github.com/holos-run/kargo-demo.git
uses: argocd-update
requestedFreight:
- origin:
kind: Warehouse
name: httpbin
sources:
stages:
- uat
prod-us-east:
apiVersion: kargo.akuity.io/v1alpha1
kind: Stage
metadata:
name: prod-us-east
namespace: httpbin
spec:
promotionTemplate:
spec:
steps:
- config:
checkout:
- branch: main
path: ./src
- branch: project/httpbin/component/prod-us-east-httpbin
create: true
path: ./out
repoURL: https://github.com/holos-run/kargo-demo.git
uses: git-clone
- config:
path: ./out
uses: git-clear
- as: update-image
config:
images:
- image: quay.io/holos/mccutchen/go-httpbin
path: ./src/deploy/projects/httpbin/components/prod-us-east-httpbin
uses: kustomize-set-image
- config:
outPath: ./out/prod-us-east-httpbin.gen.yaml
path: ./src/deploy/projects/httpbin/components/prod-us-east-httpbin
uses: kustomize-build
- as: commit
config:
messageFromSteps:
- update-image
path: ./out
uses: git-commit
- config:
path: ./out
targetBranch: project/httpbin/component/prod-us-east-httpbin
uses: git-push
- config:
apps:
- name: httpbin-prod-us-east-httpbin
sources:
- desiredCommitFromStep: commit
repoURL: https://github.com/holos-run/kargo-demo.git
uses: argocd-update
requestedFreight:
- origin:
kind: Warehouse
name: httpbin
sources:
stages:
- uat
prod-us-west:
apiVersion: kargo.akuity.io/v1alpha1
kind: Stage
metadata:
name: prod-us-west
namespace: httpbin
spec:
promotionTemplate:
spec:
steps:
- config:
checkout:
- branch: main
path: ./src
- branch: project/httpbin/component/prod-us-west-httpbin
create: true
path: ./out
repoURL: https://github.com/holos-run/kargo-demo.git
uses: git-clone
- config:
path: ./out
uses: git-clear
- as: update-image
config:
images:
- image: quay.io/holos/mccutchen/go-httpbin
path: ./src/deploy/projects/httpbin/components/prod-us-west-httpbin
uses: kustomize-set-image
- config:
outPath: ./out/prod-us-west-httpbin.gen.yaml
path: ./src/deploy/projects/httpbin/components/prod-us-west-httpbin
uses: kustomize-build
- as: commit
config:
messageFromSteps:
- update-image
path: ./out
uses: git-commit
- config:
path: ./out
targetBranch: project/httpbin/component/prod-us-west-httpbin
uses: git-push
- config:
apps:
- name: httpbin-prod-us-west-httpbin
sources:
- desiredCommitFromStep: commit
repoURL: https://github.com/holos-run/kargo-demo.git
uses: argocd-update
requestedFreight:
- origin:
kind: Warehouse
name: httpbin
sources:
stages:
- uat
test:
apiVersion: kargo.akuity.io/v1alpha1
kind: Stage
metadata:
name: test
namespace: httpbin
spec:
promotionTemplate:
spec:
steps:
- config:
checkout:
- branch: main
path: ./src
- branch: project/httpbin/component/test-httpbin
create: true
path: ./out
repoURL: https://github.com/holos-run/kargo-demo.git
uses: git-clone
- config:
path: ./out
uses: git-clear
- as: update-image
config:
images:
- image: quay.io/holos/mccutchen/go-httpbin
path: ./src/deploy/projects/httpbin/components/test-httpbin
uses: kustomize-set-image
- config:
outPath: ./out/test-httpbin.gen.yaml
path: ./src/deploy/projects/httpbin/components/test-httpbin
uses: kustomize-build
- as: commit
config:
messageFromSteps:
- update-image
path: ./out
uses: git-commit
- config:
path: ./out
targetBranch: project/httpbin/component/test-httpbin
uses: git-push
- config:
apps:
- name: httpbin-test-httpbin
sources:
- desiredCommitFromStep: commit
repoURL: https://github.com/holos-run/kargo-demo.git
uses: argocd-update
requestedFreight:
- origin:
kind: Warehouse
name: httpbin
sources:
stages:
- dev
uat:
apiVersion: kargo.akuity.io/v1alpha1
kind: Stage
metadata:
name: uat
namespace: httpbin
spec:
promotionTemplate:
spec:
steps:
- config:
checkout:
- branch: main
path: ./src
- branch: project/httpbin/component/uat-httpbin
create: true
path: ./out
repoURL: https://github.com/holos-run/kargo-demo.git
uses: git-clone
- config:
path: ./out
uses: git-clear
- as: update-image
config:
images:
- image: quay.io/holos/mccutchen/go-httpbin
path: ./src/deploy/projects/httpbin/components/uat-httpbin
uses: kustomize-set-image
- config:
outPath: ./out/uat-httpbin.gen.yaml
path: ./src/deploy/projects/httpbin/components/uat-httpbin
uses: kustomize-build
- as: commit
config:
messageFromSteps:
- update-image
path: ./out
uses: git-commit
- config:
path: ./out
targetBranch: project/httpbin/component/uat-httpbin
uses: git-push
- config:
apps:
- name: httpbin-uat-httpbin
sources:
- desiredCommitFromStep: commit
repoURL: https://github.com/holos-run/kargo-demo.git
uses: argocd-update
requestedFreight:
- origin:
kind: Warehouse
name: httpbin
sources:
stages:
- test
Warehouse:
httpbin:
apiVersion: kargo.akuity.io/v1alpha1
kind: Warehouse
metadata:
name: httpbin
namespace: httpbin
spec:
interval: 5m0s
subscriptions:
- image:
discoveryLimit: 5
repoURL: quay.io/holos/mccutchen/go-httpbin
semverConstraint: ^2.0.0
strictSemvers: true
transformers:
- kind: Kustomize
inputs:
- resources.gen.yaml
output: projects/httpbin/components/kargo-stages/kargo-stages.gen.yaml
kustomize:
kustomization:
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
labels:
- includeSelectors: false
pairs:
argocd.argoproj.io/instance: httpbin-kargo-stages
resources:
- resources.gen.yaml

View File

@@ -1,404 +0,0 @@
kind: BuildPlan
apiVersion: v1alpha5
metadata:
name: kargo-stages
labels:
holos.run/component.name: kargo-stages
holos.run/project.name: httpbin
holos.run/stack.name: httpbin
annotations:
app.holos.run/description: kargo-stages for project httpbin
spec:
artifacts:
- artifact: projects/httpbin/components/kargo-stages/kargo-stages.gen.yaml
generators:
- kind: Resources
output: resources.gen.yaml
resources:
Stage:
dev:
apiVersion: kargo.akuity.io/v1alpha1
kind: Stage
metadata:
name: dev
namespace: httpbin
spec:
promotionTemplate:
spec:
steps:
- config:
checkout:
- branch: main
path: ./src
- branch: project/httpbin/component/dev-httpbin
create: true
path: ./out
repoURL: https://github.com/holos-run/kargo-demo.git
uses: git-clone
- config:
path: ./out
uses: git-clear
- as: update-image
config:
images:
- image: quay.io/holos/mccutchen/go-httpbin
path: ./src/deploy/projects/httpbin/components/dev-httpbin
uses: kustomize-set-image
- config:
outPath: ./out/dev-httpbin.gen.yaml
path: ./src/deploy/projects/httpbin/components/dev-httpbin
uses: kustomize-build
- as: commit
config:
messageFromSteps:
- update-image
path: ./out
uses: git-commit
- config:
path: ./out
targetBranch: project/httpbin/component/dev-httpbin
uses: git-push
- config:
apps:
- name: httpbin-dev-httpbin
sources:
- desiredCommitFromStep: commit
repoURL: https://github.com/holos-run/kargo-demo.git
uses: argocd-update
requestedFreight:
- origin:
kind: Warehouse
name: httpbin
sources:
direct: true
prod-us-central:
apiVersion: kargo.akuity.io/v1alpha1
kind: Stage
metadata:
name: prod-us-central
namespace: httpbin
spec:
promotionTemplate:
spec:
steps:
- config:
checkout:
- branch: main
path: ./src
- branch: project/httpbin/component/prod-us-central-httpbin
create: true
path: ./out
repoURL: https://github.com/holos-run/kargo-demo.git
uses: git-clone
- config:
path: ./out
uses: git-clear
- as: update-image
config:
images:
- image: quay.io/holos/mccutchen/go-httpbin
path: ./src/deploy/projects/httpbin/components/prod-us-central-httpbin
uses: kustomize-set-image
- config:
outPath: ./out/prod-us-central-httpbin.gen.yaml
path: ./src/deploy/projects/httpbin/components/prod-us-central-httpbin
uses: kustomize-build
- as: commit
config:
messageFromSteps:
- update-image
path: ./out
uses: git-commit
- config:
path: ./out
targetBranch: project/httpbin/component/prod-us-central-httpbin
uses: git-push
- config:
apps:
- name: httpbin-prod-us-central-httpbin
sources:
- desiredCommitFromStep: commit
repoURL: https://github.com/holos-run/kargo-demo.git
uses: argocd-update
requestedFreight:
- origin:
kind: Warehouse
name: httpbin
sources:
stages:
- uat
prod-us-east:
apiVersion: kargo.akuity.io/v1alpha1
kind: Stage
metadata:
name: prod-us-east
namespace: httpbin
spec:
promotionTemplate:
spec:
steps:
- config:
checkout:
- branch: main
path: ./src
- branch: project/httpbin/component/prod-us-east-httpbin
create: true
path: ./out
repoURL: https://github.com/holos-run/kargo-demo.git
uses: git-clone
- config:
path: ./out
uses: git-clear
- as: update-image
config:
images:
- image: quay.io/holos/mccutchen/go-httpbin
path: ./src/deploy/projects/httpbin/components/prod-us-east-httpbin
uses: kustomize-set-image
- config:
outPath: ./out/prod-us-east-httpbin.gen.yaml
path: ./src/deploy/projects/httpbin/components/prod-us-east-httpbin
uses: kustomize-build
- as: commit
config:
messageFromSteps:
- update-image
path: ./out
uses: git-commit
- config:
path: ./out
targetBranch: project/httpbin/component/prod-us-east-httpbin
uses: git-push
- config:
apps:
- name: httpbin-prod-us-east-httpbin
sources:
- desiredCommitFromStep: commit
repoURL: https://github.com/holos-run/kargo-demo.git
uses: argocd-update
requestedFreight:
- origin:
kind: Warehouse
name: httpbin
sources:
stages:
- uat
prod-us-west:
apiVersion: kargo.akuity.io/v1alpha1
kind: Stage
metadata:
name: prod-us-west
namespace: httpbin
spec:
promotionTemplate:
spec:
steps:
- config:
checkout:
- branch: main
path: ./src
- branch: project/httpbin/component/prod-us-west-httpbin
create: true
path: ./out
repoURL: https://github.com/holos-run/kargo-demo.git
uses: git-clone
- config:
path: ./out
uses: git-clear
- as: update-image
config:
images:
- image: quay.io/holos/mccutchen/go-httpbin
path: ./src/deploy/projects/httpbin/components/prod-us-west-httpbin
uses: kustomize-set-image
- config:
outPath: ./out/prod-us-west-httpbin.gen.yaml
path: ./src/deploy/projects/httpbin/components/prod-us-west-httpbin
uses: kustomize-build
- as: commit
config:
messageFromSteps:
- update-image
path: ./out
uses: git-commit
- config:
path: ./out
targetBranch: project/httpbin/component/prod-us-west-httpbin
uses: git-push
- config:
apps:
- name: httpbin-prod-us-west-httpbin
sources:
- desiredCommitFromStep: commit
repoURL: https://github.com/holos-run/kargo-demo.git
uses: argocd-update
requestedFreight:
- origin:
kind: Warehouse
name: httpbin
sources:
stages:
- uat
test:
apiVersion: kargo.akuity.io/v1alpha1
kind: Stage
metadata:
name: test
namespace: httpbin
spec:
promotionTemplate:
spec:
steps:
- config:
checkout:
- branch: main
path: ./src
- branch: project/httpbin/component/test-httpbin
create: true
path: ./out
repoURL: https://github.com/holos-run/kargo-demo.git
uses: git-clone
- config:
path: ./out
uses: git-clear
- as: update-image
config:
images:
- image: quay.io/holos/mccutchen/go-httpbin
path: ./src/deploy/projects/httpbin/components/test-httpbin
uses: kustomize-set-image
- config:
outPath: ./out/test-httpbin.gen.yaml
path: ./src/deploy/projects/httpbin/components/test-httpbin
uses: kustomize-build
- as: commit
config:
messageFromSteps:
- update-image
path: ./out
uses: git-commit
- config:
path: ./out
targetBranch: project/httpbin/component/test-httpbin
uses: git-push
- config:
apps:
- name: httpbin-test-httpbin
sources:
- desiredCommitFromStep: commit
repoURL: https://github.com/holos-run/kargo-demo.git
uses: argocd-update
requestedFreight:
- origin:
kind: Warehouse
name: httpbin
sources:
stages:
- dev
uat:
apiVersion: kargo.akuity.io/v1alpha1
kind: Stage
metadata:
name: uat
namespace: httpbin
spec:
promotionTemplate:
spec:
steps:
- config:
checkout:
- branch: main
path: ./src
- branch: project/httpbin/component/uat-httpbin
create: true
path: ./out
repoURL: https://github.com/holos-run/kargo-demo.git
uses: git-clone
- config:
path: ./out
uses: git-clear
- as: update-image
config:
images:
- image: quay.io/holos/mccutchen/go-httpbin
path: ./src/deploy/projects/httpbin/components/uat-httpbin
uses: kustomize-set-image
- config:
outPath: ./out/uat-httpbin.gen.yaml
path: ./src/deploy/projects/httpbin/components/uat-httpbin
uses: kustomize-build
- as: commit
config:
messageFromSteps:
- update-image
path: ./out
uses: git-commit
- config:
path: ./out
targetBranch: project/httpbin/component/uat-httpbin
uses: git-push
- config:
apps:
- name: httpbin-uat-httpbin
sources:
- desiredCommitFromStep: commit
repoURL: https://github.com/holos-run/kargo-demo.git
uses: argocd-update
requestedFreight:
- origin:
kind: Warehouse
name: httpbin
sources:
stages:
- test
Warehouse:
httpbin:
apiVersion: kargo.akuity.io/v1alpha1
kind: Warehouse
metadata:
name: httpbin
namespace: httpbin
spec:
interval: 5m0s
subscriptions:
- image:
discoveryLimit: 5
repoURL: quay.io/holos/mccutchen/go-httpbin
semverConstraint: ^2.0.0
strictSemvers: true
transformers:
- kind: Kustomize
inputs:
- resources.gen.yaml
output: projects/httpbin/components/kargo-stages/kargo-stages.gen.yaml
kustomize:
kustomization:
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
labels:
- includeSelectors: false
pairs:
argocd.argoproj.io/instance: httpbin-kargo-stages
resources:
- resources.gen.yaml
- artifact: projects/httpbin/gitops/kargo-stages.application.gen.yaml
generators:
- kind: Resources
output: projects/httpbin/gitops/kargo-stages.application.gen.yaml
resources:
Application:
httpbin-kargo-stages:
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
labels: {}
name: httpbin-kargo-stages
namespace: argocd
spec:
destination:
server: https://kubernetes.default.svc
project: httpbin
source:
path: deploy/projects/httpbin/components/kargo-stages
repoURL: https://github.com/holos-run/kargo-demo.git
targetRevision: main

View File

@@ -1,8 +0,0 @@
{
"exitCode": 1,
"name": "FullBuildPlanDifferentLabelValues",
"msg": "should not match full build plans with out of order artifacts and different labels",
"file1": "before.yaml",
"file2": "after.yaml",
"expectedErrors": ["holos.run/stack.name: not-httpbin"]
}

View File

@@ -1,405 +0,0 @@
kind: BuildPlan
apiVersion: v1alpha5
metadata:
name: kargo-stages
labels:
holos.run/component.name: kargo-stages
holos.run/project.name: httpbin
holos.run/stack.name: httpbin
extra: not-in-before
annotations:
app.holos.run/description: kargo-stages for project httpbin
spec:
artifacts:
- artifact: projects/httpbin/components/kargo-stages/kargo-stages.gen.yaml
generators:
- kind: Resources
output: resources.gen.yaml
resources:
Stage:
dev:
apiVersion: kargo.akuity.io/v1alpha1
kind: Stage
metadata:
name: dev
namespace: httpbin
spec:
promotionTemplate:
spec:
steps:
- config:
checkout:
- branch: main
path: ./src
- branch: project/httpbin/component/dev-httpbin
create: true
path: ./out
repoURL: https://github.com/holos-run/kargo-demo.git
uses: git-clone
- config:
path: ./out
uses: git-clear
- as: update-image
config:
images:
- image: quay.io/holos/mccutchen/go-httpbin
path: ./src/deploy/projects/httpbin/components/dev-httpbin
uses: kustomize-set-image
- config:
outPath: ./out/dev-httpbin.gen.yaml
path: ./src/deploy/projects/httpbin/components/dev-httpbin
uses: kustomize-build
- as: commit
config:
messageFromSteps:
- update-image
path: ./out
uses: git-commit
- config:
path: ./out
targetBranch: project/httpbin/component/dev-httpbin
uses: git-push
- config:
apps:
- name: httpbin-dev-httpbin
sources:
- desiredCommitFromStep: commit
repoURL: https://github.com/holos-run/kargo-demo.git
uses: argocd-update
requestedFreight:
- origin:
kind: Warehouse
name: httpbin
sources:
direct: true
prod-us-central:
apiVersion: kargo.akuity.io/v1alpha1
kind: Stage
metadata:
name: prod-us-central
namespace: httpbin
spec:
promotionTemplate:
spec:
steps:
- config:
checkout:
- branch: main
path: ./src
- branch: project/httpbin/component/prod-us-central-httpbin
create: true
path: ./out
repoURL: https://github.com/holos-run/kargo-demo.git
uses: git-clone
- config:
path: ./out
uses: git-clear
- as: update-image
config:
images:
- image: quay.io/holos/mccutchen/go-httpbin
path: ./src/deploy/projects/httpbin/components/prod-us-central-httpbin
uses: kustomize-set-image
- config:
outPath: ./out/prod-us-central-httpbin.gen.yaml
path: ./src/deploy/projects/httpbin/components/prod-us-central-httpbin
uses: kustomize-build
- as: commit
config:
messageFromSteps:
- update-image
path: ./out
uses: git-commit
- config:
path: ./out
targetBranch: project/httpbin/component/prod-us-central-httpbin
uses: git-push
- config:
apps:
- name: httpbin-prod-us-central-httpbin
sources:
- desiredCommitFromStep: commit
repoURL: https://github.com/holos-run/kargo-demo.git
uses: argocd-update
requestedFreight:
- origin:
kind: Warehouse
name: httpbin
sources:
stages:
- uat
prod-us-east:
apiVersion: kargo.akuity.io/v1alpha1
kind: Stage
metadata:
name: prod-us-east
namespace: httpbin
spec:
promotionTemplate:
spec:
steps:
- config:
checkout:
- branch: main
path: ./src
- branch: project/httpbin/component/prod-us-east-httpbin
create: true
path: ./out
repoURL: https://github.com/holos-run/kargo-demo.git
uses: git-clone
- config:
path: ./out
uses: git-clear
- as: update-image
config:
images:
- image: quay.io/holos/mccutchen/go-httpbin
path: ./src/deploy/projects/httpbin/components/prod-us-east-httpbin
uses: kustomize-set-image
- config:
outPath: ./out/prod-us-east-httpbin.gen.yaml
path: ./src/deploy/projects/httpbin/components/prod-us-east-httpbin
uses: kustomize-build
- as: commit
config:
messageFromSteps:
- update-image
path: ./out
uses: git-commit
- config:
path: ./out
targetBranch: project/httpbin/component/prod-us-east-httpbin
uses: git-push
- config:
apps:
- name: httpbin-prod-us-east-httpbin
sources:
- desiredCommitFromStep: commit
repoURL: https://github.com/holos-run/kargo-demo.git
uses: argocd-update
requestedFreight:
- origin:
kind: Warehouse
name: httpbin
sources:
stages:
- uat
prod-us-west:
apiVersion: kargo.akuity.io/v1alpha1
kind: Stage
metadata:
name: prod-us-west
namespace: httpbin
spec:
promotionTemplate:
spec:
steps:
- config:
checkout:
- branch: main
path: ./src
- branch: project/httpbin/component/prod-us-west-httpbin
create: true
path: ./out
repoURL: https://github.com/holos-run/kargo-demo.git
uses: git-clone
- config:
path: ./out
uses: git-clear
- as: update-image
config:
images:
- image: quay.io/holos/mccutchen/go-httpbin
path: ./src/deploy/projects/httpbin/components/prod-us-west-httpbin
uses: kustomize-set-image
- config:
outPath: ./out/prod-us-west-httpbin.gen.yaml
path: ./src/deploy/projects/httpbin/components/prod-us-west-httpbin
uses: kustomize-build
- as: commit
config:
messageFromSteps:
- update-image
path: ./out
uses: git-commit
- config:
path: ./out
targetBranch: project/httpbin/component/prod-us-west-httpbin
uses: git-push
- config:
apps:
- name: httpbin-prod-us-west-httpbin
sources:
- desiredCommitFromStep: commit
repoURL: https://github.com/holos-run/kargo-demo.git
uses: argocd-update
requestedFreight:
- origin:
kind: Warehouse
name: httpbin
sources:
stages:
- uat
test:
apiVersion: kargo.akuity.io/v1alpha1
kind: Stage
metadata:
name: test
namespace: httpbin
spec:
promotionTemplate:
spec:
steps:
- config:
checkout:
- branch: main
path: ./src
- branch: project/httpbin/component/test-httpbin
create: true
path: ./out
repoURL: https://github.com/holos-run/kargo-demo.git
uses: git-clone
- config:
path: ./out
uses: git-clear
- as: update-image
config:
images:
- image: quay.io/holos/mccutchen/go-httpbin
path: ./src/deploy/projects/httpbin/components/test-httpbin
uses: kustomize-set-image
- config:
outPath: ./out/test-httpbin.gen.yaml
path: ./src/deploy/projects/httpbin/components/test-httpbin
uses: kustomize-build
- as: commit
config:
messageFromSteps:
- update-image
path: ./out
uses: git-commit
- config:
path: ./out
targetBranch: project/httpbin/component/test-httpbin
uses: git-push
- config:
apps:
- name: httpbin-test-httpbin
sources:
- desiredCommitFromStep: commit
repoURL: https://github.com/holos-run/kargo-demo.git
uses: argocd-update
requestedFreight:
- origin:
kind: Warehouse
name: httpbin
sources:
stages:
- dev
uat:
apiVersion: kargo.akuity.io/v1alpha1
kind: Stage
metadata:
name: uat
namespace: httpbin
spec:
promotionTemplate:
spec:
steps:
- config:
checkout:
- branch: main
path: ./src
- branch: project/httpbin/component/uat-httpbin
create: true
path: ./out
repoURL: https://github.com/holos-run/kargo-demo.git
uses: git-clone
- config:
path: ./out
uses: git-clear
- as: update-image
config:
images:
- image: quay.io/holos/mccutchen/go-httpbin
path: ./src/deploy/projects/httpbin/components/uat-httpbin
uses: kustomize-set-image
- config:
outPath: ./out/uat-httpbin.gen.yaml
path: ./src/deploy/projects/httpbin/components/uat-httpbin
uses: kustomize-build
- as: commit
config:
messageFromSteps:
- update-image
path: ./out
uses: git-commit
- config:
path: ./out
targetBranch: project/httpbin/component/uat-httpbin
uses: git-push
- config:
apps:
- name: httpbin-uat-httpbin
sources:
- desiredCommitFromStep: commit
repoURL: https://github.com/holos-run/kargo-demo.git
uses: argocd-update
requestedFreight:
- origin:
kind: Warehouse
name: httpbin
sources:
stages:
- test
Warehouse:
httpbin:
apiVersion: kargo.akuity.io/v1alpha1
kind: Warehouse
metadata:
name: httpbin
namespace: httpbin
spec:
interval: 5m0s
subscriptions:
- image:
discoveryLimit: 5
repoURL: quay.io/holos/mccutchen/go-httpbin
semverConstraint: ^2.0.0
strictSemvers: true
transformers:
- kind: Kustomize
inputs:
- resources.gen.yaml
output: projects/httpbin/components/kargo-stages/kargo-stages.gen.yaml
kustomize:
kustomization:
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
labels:
- includeSelectors: false
pairs:
argocd.argoproj.io/instance: httpbin-kargo-stages
resources:
- resources.gen.yaml
- artifact: projects/httpbin/gitops/kargo-stages.application.gen.yaml
generators:
- kind: Resources
output: projects/httpbin/gitops/kargo-stages.application.gen.yaml
resources:
Application:
httpbin-kargo-stages:
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
labels: {}
name: httpbin-kargo-stages
namespace: argocd
spec:
destination:
server: https://kubernetes.default.svc
project: httpbin
source:
path: deploy/projects/httpbin/components/kargo-stages
repoURL: https://github.com/holos-run/kargo-demo.git
targetRevision: main

View File

@@ -1,404 +0,0 @@
kind: BuildPlan
apiVersion: v1alpha5
metadata:
name: kargo-stages
labels:
holos.run/component.name: kargo-stages
holos.run/project.name: httpbin
holos.run/stack.name: httpbin
annotations:
app.holos.run/description: kargo-stages for project httpbin
spec:
artifacts:
- artifact: projects/httpbin/components/kargo-stages/kargo-stages.gen.yaml
generators:
- kind: Resources
output: resources.gen.yaml
resources:
Stage:
dev:
apiVersion: kargo.akuity.io/v1alpha1
kind: Stage
metadata:
name: dev
namespace: httpbin
spec:
promotionTemplate:
spec:
steps:
- config:
checkout:
- branch: main
path: ./src
- branch: project/httpbin/component/dev-httpbin
create: true
path: ./out
repoURL: https://github.com/holos-run/kargo-demo.git
uses: git-clone
- config:
path: ./out
uses: git-clear
- as: update-image
config:
images:
- image: quay.io/holos/mccutchen/go-httpbin
path: ./src/deploy/projects/httpbin/components/dev-httpbin
uses: kustomize-set-image
- config:
outPath: ./out/dev-httpbin.gen.yaml
path: ./src/deploy/projects/httpbin/components/dev-httpbin
uses: kustomize-build
- as: commit
config:
messageFromSteps:
- update-image
path: ./out
uses: git-commit
- config:
path: ./out
targetBranch: project/httpbin/component/dev-httpbin
uses: git-push
- config:
apps:
- name: httpbin-dev-httpbin
sources:
- desiredCommitFromStep: commit
repoURL: https://github.com/holos-run/kargo-demo.git
uses: argocd-update
requestedFreight:
- origin:
kind: Warehouse
name: httpbin
sources:
direct: true
prod-us-central:
apiVersion: kargo.akuity.io/v1alpha1
kind: Stage
metadata:
name: prod-us-central
namespace: httpbin
spec:
promotionTemplate:
spec:
steps:
- config:
checkout:
- branch: main
path: ./src
- branch: project/httpbin/component/prod-us-central-httpbin
create: true
path: ./out
repoURL: https://github.com/holos-run/kargo-demo.git
uses: git-clone
- config:
path: ./out
uses: git-clear
- as: update-image
config:
images:
- image: quay.io/holos/mccutchen/go-httpbin
path: ./src/deploy/projects/httpbin/components/prod-us-central-httpbin
uses: kustomize-set-image
- config:
outPath: ./out/prod-us-central-httpbin.gen.yaml
path: ./src/deploy/projects/httpbin/components/prod-us-central-httpbin
uses: kustomize-build
- as: commit
config:
messageFromSteps:
- update-image
path: ./out
uses: git-commit
- config:
path: ./out
targetBranch: project/httpbin/component/prod-us-central-httpbin
uses: git-push
- config:
apps:
- name: httpbin-prod-us-central-httpbin
sources:
- desiredCommitFromStep: commit
repoURL: https://github.com/holos-run/kargo-demo.git
uses: argocd-update
requestedFreight:
- origin:
kind: Warehouse
name: httpbin
sources:
stages:
- uat
prod-us-east:
apiVersion: kargo.akuity.io/v1alpha1
kind: Stage
metadata:
name: prod-us-east
namespace: httpbin
spec:
promotionTemplate:
spec:
steps:
- config:
checkout:
- branch: main
path: ./src
- branch: project/httpbin/component/prod-us-east-httpbin
create: true
path: ./out
repoURL: https://github.com/holos-run/kargo-demo.git
uses: git-clone
- config:
path: ./out
uses: git-clear
- as: update-image
config:
images:
- image: quay.io/holos/mccutchen/go-httpbin
path: ./src/deploy/projects/httpbin/components/prod-us-east-httpbin
uses: kustomize-set-image
- config:
outPath: ./out/prod-us-east-httpbin.gen.yaml
path: ./src/deploy/projects/httpbin/components/prod-us-east-httpbin
uses: kustomize-build
- as: commit
config:
messageFromSteps:
- update-image
path: ./out
uses: git-commit
- config:
path: ./out
targetBranch: project/httpbin/component/prod-us-east-httpbin
uses: git-push
- config:
apps:
- name: httpbin-prod-us-east-httpbin
sources:
- desiredCommitFromStep: commit
repoURL: https://github.com/holos-run/kargo-demo.git
uses: argocd-update
requestedFreight:
- origin:
kind: Warehouse
name: httpbin
sources:
stages:
- uat
prod-us-west:
apiVersion: kargo.akuity.io/v1alpha1
kind: Stage
metadata:
name: prod-us-west
namespace: httpbin
spec:
promotionTemplate:
spec:
steps:
- config:
checkout:
- branch: main
path: ./src
- branch: project/httpbin/component/prod-us-west-httpbin
create: true
path: ./out
repoURL: https://github.com/holos-run/kargo-demo.git
uses: git-clone
- config:
path: ./out
uses: git-clear
- as: update-image
config:
images:
- image: quay.io/holos/mccutchen/go-httpbin
path: ./src/deploy/projects/httpbin/components/prod-us-west-httpbin
uses: kustomize-set-image
- config:
outPath: ./out/prod-us-west-httpbin.gen.yaml
path: ./src/deploy/projects/httpbin/components/prod-us-west-httpbin
uses: kustomize-build
- as: commit
config:
messageFromSteps:
- update-image
path: ./out
uses: git-commit
- config:
path: ./out
targetBranch: project/httpbin/component/prod-us-west-httpbin
uses: git-push
- config:
apps:
- name: httpbin-prod-us-west-httpbin
sources:
- desiredCommitFromStep: commit
repoURL: https://github.com/holos-run/kargo-demo.git
uses: argocd-update
requestedFreight:
- origin:
kind: Warehouse
name: httpbin
sources:
stages:
- uat
test:
apiVersion: kargo.akuity.io/v1alpha1
kind: Stage
metadata:
name: test
namespace: httpbin
spec:
promotionTemplate:
spec:
steps:
- config:
checkout:
- branch: main
path: ./src
- branch: project/httpbin/component/test-httpbin
create: true
path: ./out
repoURL: https://github.com/holos-run/kargo-demo.git
uses: git-clone
- config:
path: ./out
uses: git-clear
- as: update-image
config:
images:
- image: quay.io/holos/mccutchen/go-httpbin
path: ./src/deploy/projects/httpbin/components/test-httpbin
uses: kustomize-set-image
- config:
outPath: ./out/test-httpbin.gen.yaml
path: ./src/deploy/projects/httpbin/components/test-httpbin
uses: kustomize-build
- as: commit
config:
messageFromSteps:
- update-image
path: ./out
uses: git-commit
- config:
path: ./out
targetBranch: project/httpbin/component/test-httpbin
uses: git-push
- config:
apps:
- name: httpbin-test-httpbin
sources:
- desiredCommitFromStep: commit
repoURL: https://github.com/holos-run/kargo-demo.git
uses: argocd-update
requestedFreight:
- origin:
kind: Warehouse
name: httpbin
sources:
stages:
- dev
uat:
apiVersion: kargo.akuity.io/v1alpha1
kind: Stage
metadata:
name: uat
namespace: httpbin
spec:
promotionTemplate:
spec:
steps:
- config:
checkout:
- branch: main
path: ./src
- branch: project/httpbin/component/uat-httpbin
create: true
path: ./out
repoURL: https://github.com/holos-run/kargo-demo.git
uses: git-clone
- config:
path: ./out
uses: git-clear
- as: update-image
config:
images:
- image: quay.io/holos/mccutchen/go-httpbin
path: ./src/deploy/projects/httpbin/components/uat-httpbin
uses: kustomize-set-image
- config:
outPath: ./out/uat-httpbin.gen.yaml
path: ./src/deploy/projects/httpbin/components/uat-httpbin
uses: kustomize-build
- as: commit
config:
messageFromSteps:
- update-image
path: ./out
uses: git-commit
- config:
path: ./out
targetBranch: project/httpbin/component/uat-httpbin
uses: git-push
- config:
apps:
- name: httpbin-uat-httpbin
sources:
- desiredCommitFromStep: commit
repoURL: https://github.com/holos-run/kargo-demo.git
uses: argocd-update
requestedFreight:
- origin:
kind: Warehouse
name: httpbin
sources:
stages:
- test
Warehouse:
httpbin:
apiVersion: kargo.akuity.io/v1alpha1
kind: Warehouse
metadata:
name: httpbin
namespace: httpbin
spec:
interval: 5m0s
subscriptions:
- image:
discoveryLimit: 5
repoURL: quay.io/holos/mccutchen/go-httpbin
semverConstraint: ^2.0.0
strictSemvers: true
transformers:
- kind: Kustomize
inputs:
- resources.gen.yaml
output: projects/httpbin/components/kargo-stages/kargo-stages.gen.yaml
kustomize:
kustomization:
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
labels:
- includeSelectors: false
pairs:
argocd.argoproj.io/instance: httpbin-kargo-stages
resources:
- resources.gen.yaml
- artifact: projects/httpbin/gitops/kargo-stages.application.gen.yaml
generators:
- kind: Resources
output: projects/httpbin/gitops/kargo-stages.application.gen.yaml
resources:
Application:
httpbin-kargo-stages:
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
labels: {}
name: httpbin-kargo-stages
namespace: argocd
spec:
destination:
server: https://kubernetes.default.svc
project: httpbin
source:
path: deploy/projects/httpbin/components/kargo-stages
repoURL: https://github.com/holos-run/kargo-demo.git
targetRevision: main

View File

@@ -1,8 +0,0 @@
{
"exitCode": 1,
"name": "BeforeLabelsAreSubsetOfAfter",
"msg": "should not match when before labels are a subset of after labels",
"file1": "before.yaml",
"file2": "after.yaml",
"expectedErrors": ["+ extra: not-in-before"]
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -1,7 +0,0 @@
{
"exitCode": 0,
"name": "CompilerShouldMatch",
"msg": "output of the v1alpha6 compiler should match the v1alpha5 output",
"file1": "before.yaml",
"file2": "after.yaml"
}

View File

@@ -1,7 +0,0 @@
kind: BuildPlan
apiVersion: v1alpha5
metadata:
name: component1
spec:
artifacts:
- artifact: test.yaml

View File

@@ -1,15 +0,0 @@
kind: BuildPlan
apiVersion: v1alpha5
metadata:
name: component1
spec:
artifacts:
- artifact: test.yaml
---
kind: BuildPlan
apiVersion: v1alpha5
metadata:
name: component2
spec:
artifacts:
- artifact: test2.yaml

View File

@@ -1,8 +0,0 @@
{
"exitCode": 1,
"name": "BuildPlanFile_1",
"msg": "BuildPlan File spec 1: one and two have an equal number of BuildPlan objects - should fail when count differs",
"file1": "before.yaml",
"file2": "after.yaml",
"expectedErrors": ["different number of documents"]
}

View File

@@ -1,22 +0,0 @@
---
kind: BuildPlan
apiVersion: v1alpha5
metadata:
name: component
spec:
artifacts:
- artifact: component.yaml
generators:
- kind: Kubernetes
output: manifests.yaml
---
kind: BuildPlan
apiVersion: v1alpha5
metadata:
name: component
spec:
artifacts:
- artifact: component.yaml
generators:
- kind: Kubernetes
output: manifests.yaml

View File

@@ -1,22 +0,0 @@
---
kind: BuildPlan
apiVersion: v1alpha5
metadata:
name: component
spec:
artifacts:
- artifact: component.yaml
generators:
- kind: Kubernetes
output: manifests.yaml
---
kind: BuildPlan
apiVersion: v1alpha5
metadata:
name: component
spec:
artifacts:
- artifact: component.yaml
generators:
- kind: Kubernetes
output: manifests.yaml

View File

@@ -1,8 +0,0 @@
{
"exitCode": 0,
"name": "BuildPlanValid_1",
"msg": "BuildPlan File validity 1: Two or more identical objects exist in the same file. They must be treated as unique objects - should match when both files have identical objects",
"file1": "before.yaml",
"file2": "after.yaml",
"expectedErrors": []
}

Some files were not shown because too many files have changed in this diff Show More