Compare commits

..

19 Commits

Author SHA1 Message Date
Jeff McCune
13665fab55 core: define generic command core type for all kinds of tasks
Previously the Command core type was only useful for Validators and was
a bit hacky in that Holos appends the directory to the end of the
argument vector.

This patch changes the Command type to represent a generic command for
use as a Generator, Transformer, or Validator.  The type is extended to
support the semantics of reading output from a file, directory, or
standard output pipe.

Go templates are used to fill in Holos managed data values, for example
the temporary directory associated with the pipeline task.  The TaskData
structu represents these values passed into the template engine.
2025-03-03 17:07:56 -08:00
Jeff McCune
5a2571a745 docs: make generate for docs preview 2025-02-27 15:47:20 -08:00
Jeff McCune
bfd8b20b6a fixup: don't store a key with a trailing / in the artifact map 2025-02-27 15:29:27 -08:00
Jeff McCune
07cd8737b0 artifact: write multiple files if path ends in a /
To properly support the kubectl-slice use case the Artifact map needs to
write multiple files out to the filesystem.  This needs to be dynamic in
the sense holos and the end user don't know what files the kubectl-slice
transformer is producing.

As a hack, which may actually turn out to be "good enough" this patch
makes the Slice transformer behave like so:

1. Execute kubectl-slice outputting to an empty temp directory.
2. Holos saves all files in this directory into the artifact map.
3. At the end of the Artifact pipeline, if the final artifact produced
   ends in a /, then all keys in the artifact map having the prefix are
   written to the output directory.

This should be sufficient for the use case, but we'll need to consider
how this transformer and apporach works when subsequent transformers are
used in the pipeline.  I haven't thought deeply about it, but it should
ideally work pretty well if the tools involved truly only care about
directories and not the files within the directory.
2025-02-27 14:37:44 -08:00
Jeff McCune
ff5bdab948 transformer: wire up Slice transformer type
Copied from kustomize, spike for spiarh.

Result: head to artifact.go next.

could not run: could not save deploy/slice/components/slice: open deploy/slice/components/slice: is a directory at internal/artifact/artifact.go:71
could not run: could not render component: could not run command:
        holos '--log-level' 'debug' '--log-format' 'console' 'render' 'component' '--inject' 'outputBaseDir=slice' '--inject' 'holos_component_name=slice' '--inject' 'holos_component_path=components/slice' '--inject' 'holos_component_labels={"holos.run/component.name":"slice"}' '--inject' 'holos_component_annotations={"app.holos.run/description":"slice transformer"}' './components/slice'
        exit status 1 at cli/render/render.go:171

Relevant debug logs:

running command: kubectl 'kustomize' '/var/folders/22/zt67pphj6h1fgknqfy23ppl80000gn/T/holos.kustomize4273326823'
tmp: removed
running command: kubectl-slice '-f' '/var/folders/22/zt67pphj6h1fgknqfy23ppl80000gn/T/holos.slice2683550041/slice.gen.yaml' '-o' '/var/folders/22/zt67pphj6h1fgknqfy23ppl8000
0gn/T/holos.slice2683550041/slice'
storing: /var/folders/22/zt67pphj6h1fgknqfy23ppl80000gn/T/holos.slice2683550041/slice/deployment-httpbin.yaml
storing: /var/folders/22/zt67pphj6h1fgknqfy23ppl80000gn/T/holos.slice2683550041/slice/service-httpbin.yaml
tmp: removed
2025-02-27 12:56:01 -08:00
Jeff McCune
40093956d3 tools: add kubectl-slice 2025-02-27 09:22:13 -08:00
Jeff McCune
8e690b43ee ci: fix golangci-lint
Without this patch there are unexpected lint errors in version 1.60
where 1.61.0 passes locally on my machine.

This patch updates to:

    golangci-lint has version 1.64.5 built with go1.24.0 from 0a603e49 on 2025-02-13T21:19:55Z
2025-02-20 09:28:35 -08:00
Jeff McCune
a4ceb1cdb2 ci: update test cases with make bump
Previously using make bump to bump a version did not also update all of
the test cases and documentation to reflect the new version.  This patch
updates the make bump tasks call HOLOS_UPDATE_SCRIPTS=1 scripts/test to
keep the test cases and documentation in sync with the new version.
2025-02-20 09:14:37 -08:00
Jeff McCune
ddb5c0e07b ci: fix make lint failures resulting from version bumps
Without this patch lint fails with error:

    SA1019: testscript.RunMain is deprecated: use [Main]

This patch uses testscript.Main instead.
2025-02-20 09:07:47 -08:00
Jeff McCune
a14d3ba0f4 ci: fix make test failures resulting from version bumps
Previously the tests fail because they were not updated to use the new
version string in holos, or the new topo sort behavior in cue 0.12.0.

This patch updates the test cases using:

    HOLOS_UPDATE_SCRIPTS=1 scripts/test

Result: make test passes
2025-02-20 08:37:01 -08:00
Jeff McCune
f7e0470c48 version 0.104.0 with cue 0.12.0 2025-02-06 14:37:50 -08:00
Jeff McCune
d5c7b82684 go mod tidy 2025-02-06 14:33:14 -08:00
Jeff McCune
7d0392e596 update to cue 0.12.0
Most relevant for us: lots of fixes to the evaluator, enables the embed
and toposort experiments.
2025-02-06 14:31:39 -08:00
Gary Larizza
410b882d1d Merge pull request #403 from holos-run/gl/hello-holos-testscript
docs: Update Hello Holos tutorial to use testscript
2025-01-22 14:43:47 -08:00
Gary Larizza
e2648202dc Merge pull request #404 from holos-run/gl/kustomize-testscript
docs: Update Kustomize tutorial to use testscript
2025-01-22 14:43:33 -08:00
Jeff McCune
44c2fe220a test: fix helm capabilities test
Helm was upgraded in GitHub Actions resulting in an accidental failure
of the test case.
2025-01-17 12:33:28 -08:00
Jeff McCune
fe1ae2fa80 docs: migrate from an ApplicationSet blog post 2025-01-17 12:22:56 -08:00
Gary Larizza
8fbee1cbd9 docs: Update Kustomize tutorial to use testscript
PROBLEM:

The "Kustomize" tutorial has hardcoded code blocks and hasn't been
updated to use the automated testscript workflow.

SOLUTION:

Create a test for the Kustomize tutorial.
Create a testscript for the Kustomize test.
Update the Kustomize MDX file to load in data from the testscript directory.

OUTCOME:

The code content in the Kustomize tutorial now comes directly from the
testscript workflow.
2025-01-16 14:24:24 -08:00
Gary Larizza
982db2cccc docs: Update Hello Holos tutorial to use testscript
PROBLEM:

The "Hello Holos" tutorial has hardcoded code blocks and hasn't been
updated to use the automated testscript workflow.

SOLUTION:

* Create a test for the Hello Holos tutorial.
* Create a testscript for the Hello Holos test.
* Update the Hello Holos MDX file to load in data from the testscript directory.

OUTCOME:

The code content in the Hello Holos tutorial now comes directly from the
testscript workflow.
2025-01-16 10:12:17 -08:00
185 changed files with 3738 additions and 1825 deletions

View File

@@ -27,4 +27,4 @@ jobs:
- name: golangci-lint
uses: golangci/golangci-lint-action@v6
with:
version: v1.60
version: v1.64.5

1
.gitignore vendored
View File

@@ -12,3 +12,4 @@ tmp/
/holos-k3d/
/holos-infra/
node_modules/
.tmp/

View File

@@ -32,17 +32,20 @@ bump: bumppatch
.PHONY: bumppatch
bumppatch: ## Bump the patch version.
scripts/bump patch
HOLOS_UPDATE_SCRIPTS=1 scripts/test
.PHONY: bumpminor
bumpminor: ## Bump the minor version.
scripts/bump minor
scripts/bump patch 0
HOLOS_UPDATE_SCRIPTS=1 scripts/test
.PHONY: bumpmajor
bumpmajor: ## Bump the major version.
scripts/bump major
scripts/bump minor 0
scripts/bump patch 0
HOLOS_UPDATE_SCRIPTS=1 scripts/test
.PHONY: show-version
show-version: ## Print the full version.
@@ -75,6 +78,12 @@ build: ## Build holos executable.
@echo "GOPATH=${GOPATH}"
go build -trimpath -o bin/$(BIN_NAME) -ldflags $(LD_FLAGS) $(REPO_PATH)/cmd/$(BIN_NAME)
.PHONY: debug
debug: ## Build debug executable.
@echo "building ${BIN_NAME}-debug ${VERSION}"
@echo "GOPATH=${GOPATH}"
go build -o bin/$(BIN_NAME)-debug $(REPO_PATH)/cmd/$(BIN_NAME)
linux: ## Build holos executable for tilt.
@echo "building ${BIN_NAME}.linux ${VERSION}"
@echo "GOPATH=${GOPATH}"

View File

@@ -190,11 +190,13 @@ type AuthSource struct {
// 1. [Kustomize] - Patch and transform the output from prior generators or
// transformers. See [Introduction to Kustomize].
// 2. [Join] - Concatenate multiple prior outputs into one output.
// 3. [Slice] - Slice an artifact into multiple artifacts using [kubectl-slice].
//
// [Introduction to Kustomize]: https://kubectl.docs.kubernetes.io/guides/config_management/introduction/
// [kubectl-slice]: https://github.com/patrickdappollonio/kubectl-slice
type Transformer struct {
// Kind represents the kind of transformer. Must be Kustomize, or Join.
Kind string `json:"kind" yaml:"kind" cue:"\"Kustomize\" | \"Join\""`
Kind string `json:"kind" yaml:"kind" cue:"\"Kustomize\" | \"Join\" | \"Slice\""`
// Inputs represents the files to transform. The Output of prior Generators
// and Transformers.
Inputs []FilePath `json:"inputs" yaml:"inputs"`
@@ -254,12 +256,46 @@ type Validator struct {
Command Command `json:"command,omitempty" yaml:"command,omitempty"`
}
// Command represents a command vetting one or more artifacts. Holos appends
// fully qualified input file paths to the end of the args list, then executes
// the command. Inputs are written into a temporary directory prior to
// executing the command and removed afterwards.
// Command represents a generic command for use as a Generator, Transformer, or
// Validator. Holos uses the Go template engine to render the Args field using
// data provided by the TaskData field. For example to fill in the fully
// qualified temporary directory used to provide inputs to the task.
type Command struct {
// DisplayName represents a friendly display name for the command.
DisplayName string `json:"displayName,omitempty" yaml:"displayName,omitempty"`
// Args represents the complete command argument vector as a go template.
Args []string `json:"args,omitempty" yaml:"args,omitempty"`
// OutputRef references the source of the output data.
OutputRef OutputRef `json:"outputRef,omitempty" yaml:"outputRef,omitempty"`
// TaskData populated by Holos for template rendering.
TaskData TaskData `json:"taskData,omitempty" yaml:"taskData,omitempty"`
// TODO(jjm): add command environment variable support similar to args.
}
// TaskData represents data values associated with a pipeline task necessary to
// execute the task. For example, the randomly generated temporary directory
// used to read and write artifact files when executing user defined task
// commands. Values of this struct are intended for the Go template engine.
//
// Holos populates this struct as needed. Holos may treat user provided values
// as an error condition.
type TaskData struct {
// TempDir represents the temp directory holos manages for task artifacts.
TempDir string `json:"tempDir,omitempty" yaml:"tempDir,omitempty"`
}
// OutputRef represents a reference to the data source used as the output of a
// task. For example, a Generator output may be sourced from standard output or
// a file path.
type OutputRef struct {
// Kind represents the kind of output produced.
Kind string `json:"kind,omitempty" yaml:"kind,omitempty" cue:"string | *\"Pipe\" | \"Path\""`
// Pipe represents stdout or stderr. Ignored unless kind is Pipe.
Pipe string `json:"pipe,omitempty" yaml:"pipe,omitempty" cue:"string | *\"stdout\" | \"stderr\""`
// Path represents an artifact path relative to the task temp directory.
// Ignored unless kind is Path.
Path string `json:"path,omitempty" yaml:"path,omitempty"`
// TODO(jjm): support jsonpath or cel references to the output data maybe?
}
// InternalLabel is an arbitrary unique identifier internal to holos itself.

View File

@@ -11,10 +11,11 @@ import (
)
func TestMain(m *testing.M) {
os.Exit(testscript.RunMain(m, map[string]func() int{
"holos": cmd.MakeMain(),
"cue": cue.Main,
}))
holosMain := cmd.MakeMain()
testscript.Main(m, map[string]func(){
"holos": func() { os.Exit(holosMain()) },
"cue": func() { os.Exit(cue.Main()) },
})
}
func TestGuides_v1alpha5(t *testing.T) {

View File

@@ -1,7 +1,9 @@
# https://github.com/holos-run/holos/issues/330
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
cmp stdout want/helm-template.yaml
stdout 'name: has-foo-v1beta1'
stdout 'kubeVersion: v'
exec holos render platform ./platform
# When no capabilities are specified
cmp deploy/components/capabilities/capabilities.gen.yaml want/when-no-capabilities-specified.yaml

View File

@@ -31,7 +31,6 @@ spec:
- kind: Resources
output: resources.gen.yaml
resources: {}
validators: []
transformers:
- kind: Kustomize
inputs:
@@ -39,7 +38,8 @@ spec:
output: components/no-name/no-name.gen.yaml
kustomize:
kustomization:
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- resources.gen.yaml
kind: Kustomization
apiVersion: kustomize.config.k8s.io/v1beta1
validators: []

View File

@@ -36,11 +36,13 @@ Package core contains schemas for a [Platform](<#Platform>) and [BuildPlan](<#Bu
- [type Kustomization](<#Kustomization>)
- [type Kustomize](<#Kustomize>)
- [type Metadata](<#Metadata>)
- [type OutputRef](<#OutputRef>)
- [type Platform](<#Platform>)
- [type PlatformSpec](<#PlatformSpec>)
- [type Repository](<#Repository>)
- [type Resource](<#Resource>)
- [type Resources](<#Resources>)
- [type TaskData](<#TaskData>)
- [type Transformer](<#Transformer>)
- [type Validator](<#Validator>)
- [type ValueFile](<#ValueFile>)
@@ -151,11 +153,18 @@ type Chart struct {
<a name="Command"></a>
## type Command {#Command}
Command represents a command vetting one or more artifacts. Holos appends fully qualified input file paths to the end of the args list, then executes the command. Inputs are written into a temporary directory prior to executing the command and removed afterwards.
Command represents a generic command for use as a Generator, Transformer, or Validator. Holos uses the Go template engine to render the Args field using data provided by the TaskData field. For example to fill in the fully qualified temporary directory used to provide inputs to the task.
```go
type Command struct {
// DisplayName represents a friendly display name for the command.
DisplayName string `json:"displayName,omitempty" yaml:"displayName,omitempty"`
// Args represents the complete command argument vector as a go template.
Args []string `json:"args,omitempty" yaml:"args,omitempty"`
// OutputRef references the source of the output data.
OutputRef OutputRef `json:"outputRef,omitempty" yaml:"outputRef,omitempty"`
// TaskData populated by Holos for template rendering.
TaskData TaskData `json:"taskData,omitempty" yaml:"taskData,omitempty"`
}
```
@@ -387,6 +396,23 @@ type Metadata struct {
}
```
<a name="OutputRef"></a>
## type OutputRef {#OutputRef}
OutputRef represents a reference to the data source used as the output of a task. For example, a Generator output may be sourced from standard output or a file path.
```go
type OutputRef struct {
// Kind represents the kind of output produced.
Kind string `json:"kind,omitempty" yaml:"kind,omitempty" cue:"string | *\"Pipe\" | \"Path\""`
// Pipe represents stdout or stderr. Ignored unless kind is Pipe.
Pipe string `json:"pipe,omitempty" yaml:"pipe,omitempty" cue:"string | *\"stdout\" | \"stderr\""`
// Path represents an artifact path relative to the task temp directory.
// Ignored unless kind is Path.
Path string `json:"path,omitempty" yaml:"path,omitempty"`
}
```
<a name="Platform"></a>
## type Platform {#Platform}
@@ -457,6 +483,20 @@ Resources represents Kubernetes resources. Most commonly used to mix resources i
type Resources map[Kind]map[InternalLabel]Resource
```
<a name="TaskData"></a>
## type TaskData {#TaskData}
TaskData represents data values associated with a pipeline task necessary to execute the task. For example, the randomly generated temporary directory used to read and write artifact files when executing user defined task commands. Values of this struct are intended for the Go template engine.
Holos populates this struct as needed. Holos may treat user provided values as an error condition.
```go
type TaskData struct {
// TempDir represents the temp directory holos manages for task artifacts.
TempDir string `json:"tempDir,omitempty" yaml:"tempDir,omitempty"`
}
```
<a name="Transformer"></a>
## type Transformer {#Transformer}
@@ -464,11 +504,12 @@ Transformer combines multiple inputs from prior [Generator](<#Generator>) or [Tr
1. [Kustomize](<#Kustomize>) \- Patch and transform the output from prior generators or transformers. See [Introduction to Kustomize](<https://kubectl.docs.kubernetes.io/guides/config_management/introduction/>).
2. [Join](<#Join>) \- Concatenate multiple prior outputs into one output.
3. \[Slice\] \- Slice an artifact into multiple artifacts using [kubectl\\\-slice](<https://github.com/patrickdappollonio/kubectl-slice>).
```go
type Transformer struct {
// Kind represents the kind of transformer. Must be Kustomize, or Join.
Kind string `json:"kind" yaml:"kind" cue:"\"Kustomize\" | \"Join\""`
Kind string `json:"kind" yaml:"kind" cue:"\"Kustomize\" | \"Join\" | \"Slice\""`
// Inputs represents the files to transform. The Output of prior Generators
// and Transformers.
Inputs []FilePath `json:"inputs" yaml:"inputs"`

20
doc/md/topics/kargo.mdx Normal file
View File

@@ -0,0 +1,20 @@
---
description: Kargo
slug: kargo
sidebar_position: 110
---
# Kargo
Holos pairs nicely with [Kargo], offering a holistic solution for code
promotion across stages.
Watch this space for a more detailed write up of the integration being
developed.
If you're interested in this topic, please thumbs up the [Kargo
Topic](https://github.com/holos-run/holos/issues/378) issue, or drop into
[Discord] and let us know about your use case.
[Kargo]: https://kargo.io/
[Discord]: https://discord.gg/JgDVbNpye7

View File

@@ -1,2 +0,0 @@
kargo-demo/
.tmp/

View File

@@ -1,17 +0,0 @@
env GH_USER=holos-run
# Remove the directory if it already exists
exec rm -rf kargo-demo
# Clone your fork of the kargo-demo repository
exec bash -c 'bash -euo pipefail command.sh 2>&1'
cmp stdout output.txt
# Get the git commit
cd kargo-demo
exec git rev-parse --verify origin/HEAD
cp stdout $WORK/git.commit
-- command.sh --
git clone https://github.com/${GH_USER}/kargo-demo.git
cd kargo-demo
-- output.txt --
Cloning into 'kargo-demo'...

View File

@@ -1,37 +0,0 @@
env GH_USER=jeffmccune
cd ../script-01-clone/kargo-demo
## Walk the reader from entrypoint to the deployment pipeline
# holos render platform entrypoint
exec bash -c 'cat $(<$WORK/entrypoint.path)'
cp stdout $WORK/entrypoint.txt
exec bash -c 'basename $(<$WORK/entrypoint.path)'
cp stdout $WORK/entrypoint.basename
# platform.stacks location
exec bash -c 'cat $(<$WORK/stacks.path)'
cp stdout $WORK/stacks.txt
exec bash -c 'basename $(<$WORK/stacks.path)'
cp stdout $WORK/stacks.basename
# certmanager.config location
exec bash -c 'cat $(<$WORK/config.path)'
cp stdout $WORK/config.txt
exec bash -c 'basename $(<$WORK/config.path)'
cp stdout $WORK/config.basename
# Cert Manager Component.
exec bash -c 'cat $(<$WORK/component.path)'
cp stdout $WORK/component.txt
# Get the path basename for the docs.
exec bash -c 'basename $(<$WORK/component.path)'
cp stdout $WORK/component.basename
-- config.path --
config/certmanager/certmanager.cue
-- stacks.path --
config/platform/security.cue
-- entrypoint.path --
platform/stacks.cue
-- component.path --
stacks/security/components/cert-manager/cert-manager.cue

View File

@@ -1,56 +0,0 @@
env GH_USER=jeffmccune
env HOME=$WORK/.tmp
cd ../script-01-clone/kargo-demo
chmod 0755 $WORK/update.sh
# Combine the steps separated in the doc.
exec cat $WORK/header.sh $WORK/body.txt $WORK/trailer.sh
stdin stdout
exec bash -xeuo pipefail
cmp config/platform/organization_$GH_USER.cue $WORK/code.want.cue
# Render the platform
exec bash -c 'bash -euo pipefail $WORK/command.sh 2>&1'
stdin stdout
exec $WORK/update.sh $WORK/output.txt
# Get the diff
exec bash -c 'bash -euo pipefail $WORK/diff.sh 2>&1'
stdin stdout
exec $WORK/update.sh $WORK/diff.patch
# Set the author
exec git config --global user.name 'Holos Docs'
exec git config --global user.email 'hello@holos.run'
# Make the commit
exec bash -c 'bash -euo pipefail $WORK/commit.sh 2>&1'
stdin stdout
exec $WORK/update.sh $WORK/commit.txt
-- update.sh --
#! /bin/bash
set -euo pipefail
[[ -s "$1" ]] && [[ -z "${HOLOS_UPDATE_SCRIPTS:-}" ]] && exit 0
cat > "$1"
-- header.sh --
cat <<EOF > config/platform/organization_${GH_USER}.cue
-- body.txt --
@if(${GH_USER})
package platform
organization: repoURL: "https://github.com/${GH_USER}/kargo-demo.git"
-- trailer.sh --
EOF
-- code.want.cue --
@if(jeffmccune)
package platform
organization: repoURL: "https://github.com/jeffmccune/kargo-demo.git"
-- command.sh --
holos render platform -t ${GH_USER}
-- commit.sh --
git add .
git commit -m "Switch to $GH_USER fork"
-- diff.sh --
git diff

View File

@@ -1,2 +0,0 @@
git clone https://github.com/${GH_USER}/kargo-demo.git
cd kargo-demo

View File

@@ -1 +0,0 @@
238fe0403c99eeea4f4fb764a88b780554048414

View File

@@ -1 +0,0 @@
Cloning into 'kargo-demo'...

View File

@@ -1 +0,0 @@
stacks/security/components/cert-manager/cert-manager.cue

View File

@@ -1,21 +0,0 @@
package holos
import "holos.example/config/certmanager"
// Produce a helm chart build plan.
holos: Component.BuildPlan
Component: #Helm & {
Name: "cert-manager"
Namespace: certmanager.config.namespace
Chart: certmanager.config.chart
EnableHooks: true
Values: #Values & {
crds: enabled: true
startupapicheck: enabled: false
// https://github.com/cert-manager/cert-manager/issues/6716
global: leaderElection: namespace: Namespace
}
}

View File

@@ -1 +0,0 @@
config/certmanager/certmanager.cue

View File

@@ -1,30 +0,0 @@
@extern(embed)
package certmanager
import "github.com/holos-run/holos/api/core/v1alpha5:core"
// Unify data from yaml for Kargo integration.
_data: _ @embed(file=cert-manager.yaml)
config: #Config & {
namespace: "cert-manager"
// datafile value must align to the embed file directive above for proper
// configuration of Kargo promotion stages.
datafile: "./config/certmanager/cert-manager.yaml"
chart: {
name: "cert-manager"
version: _data.chart.version
repository: {
name: "jetstack"
url: "https://charts.jetstack.io"
}
}
}
#Config: {
namespace: string
datafile: string
chart: core.#Chart & {
version: =~"^v{0,1}[0-9]+\\.[0-9]+\\.[0-9]+$"
}
}

View File

@@ -1,8 +0,0 @@
package main
import "holos.example/config/platform"
// Register all stack components with the platform spec.
for STACK in platform.stacks {
Platform: Components: STACK.components
}

View File

@@ -1,46 +0,0 @@
package platform
import "holos.example/config/certmanager"
stacks: security: (#StackBuilder & {
(#PromoterBuilder & {parameters: {
name: "cert-manager"
config: {
datafile: certmanager.config.datafile
chart: certmanager.config.chart
}
}}).promoter
// Manage the external-secrets namespace.
stack: namespaces: "external-secrets": _
parameters: {
name: "security"
components: {
namespaces: {
path: "stacks/security/components/namespaces"
annotations: description: "configures namespaces for all stacks"
}
"external-secrets-crds": {
path: "stacks/security/components/external-secrets-crds"
annotations: description: "external secrets custom resource definitions"
}
"external-secrets": {
path: "stacks/security/components/external-secrets"
annotations: description: "external secrets custom resource definitions"
}
"cert-manager": {
path: "stacks/security/components/cert-manager"
annotations: description: "cert-manager operator and custom resource definitions"
parameters: {
kargoProject: "cert-manager"
kargoStage: "main"
}
}
"local-ca": {
path: "stacks/security/components/local-ca"
annotations: description: "localhost mkcert certificate authority"
}
}
}
}).stack

View File

@@ -1,4 +0,0 @@
@if(${GH_USER})
package platform
organization: repoURL: "https://github.com/${GH_USER}/kargo-demo.git"

View File

@@ -1,4 +0,0 @@
@if(jeffmccune)
package platform
organization: repoURL: "https://github.com/jeffmccune/kargo-demo.git"

View File

@@ -1 +0,0 @@
holos render platform -t ${GH_USER}

View File

@@ -1,2 +0,0 @@
git add .
git commit -m "Switch to $GH_USER fork"

View File

@@ -1,3 +0,0 @@
[main b883807] Switch to jeffmccune fork
43 files changed, 70 insertions(+), 66 deletions(-)
create mode 100644 config/platform/organization_jeffmccune.cue

View File

@@ -1,686 +0,0 @@
diff --git a/deploy/components/cert-manager-promoter/cert-manager-promoter.gen.yaml b/deploy/components/cert-manager-promoter/cert-manager-promoter.gen.yaml
index 55a6a49..ab483d5 100644
--- a/deploy/components/cert-manager-promoter/cert-manager-promoter.gen.yaml
+++ b/deploy/components/cert-manager-promoter/cert-manager-promoter.gen.yaml
@@ -28,7 +28,7 @@ spec:
checkout:
- branch: main
path: ./src
- repoURL: https://github.com/holos-run/kargo-demo.git
+ repoURL: https://github.com/jeffmccune/kargo-demo.git
uses: git-clone
- as: update
config:
@@ -51,7 +51,7 @@ spec:
uses: git-push
- as: pull
config:
- repoURL: https://github.com/holos-run/kargo-demo.git
+ repoURL: https://github.com/jeffmccune/kargo-demo.git
sourceBranch: ${{ outputs.push.branch }}
targetBranch: main
uses: git-open-pr
diff --git a/deploy/components/kargo-promoter/kargo-promoter.gen.yaml b/deploy/components/kargo-promoter/kargo-promoter.gen.yaml
index 87e4bfd..a2eb91d 100644
--- a/deploy/components/kargo-promoter/kargo-promoter.gen.yaml
+++ b/deploy/components/kargo-promoter/kargo-promoter.gen.yaml
@@ -28,7 +28,7 @@ spec:
checkout:
- branch: main
path: ./src
- repoURL: https://github.com/holos-run/kargo-demo.git
+ repoURL: https://github.com/jeffmccune/kargo-demo.git
uses: git-clone
- as: update
config:
@@ -51,7 +51,7 @@ spec:
uses: git-push
- as: pull
config:
- repoURL: https://github.com/holos-run/kargo-demo.git
+ repoURL: https://github.com/jeffmccune/kargo-demo.git
sourceBranch: ${{ outputs.push.branch }}
targetBranch: main
uses: git-open-pr
diff --git a/deploy/gitops/app-projects.application.gen.yaml b/deploy/gitops/app-projects.application.gen.yaml
index a98a52e..a58f7fb 100644
--- a/deploy/gitops/app-projects.application.gen.yaml
+++ b/deploy/gitops/app-projects.application.gen.yaml
@@ -10,5 +10,5 @@ spec:
project: argocd
source:
path: deploy/components/app-projects
- repoURL: https://github.com/holos-run/kargo-demo.git
+ repoURL: https://github.com/jeffmccune/kargo-demo.git
targetRevision: main
diff --git a/deploy/gitops/argocd-crds.application.gen.yaml b/deploy/gitops/argocd-crds.application.gen.yaml
index 6aba002..4ce8835 100644
--- a/deploy/gitops/argocd-crds.application.gen.yaml
+++ b/deploy/gitops/argocd-crds.application.gen.yaml
@@ -10,5 +10,5 @@ spec:
project: argocd
source:
path: deploy/components/argocd-crds
- repoURL: https://github.com/holos-run/kargo-demo.git
+ repoURL: https://github.com/jeffmccune/kargo-demo.git
targetRevision: main
diff --git a/deploy/gitops/argocd-secrets.application.gen.yaml b/deploy/gitops/argocd-secrets.application.gen.yaml
index 245fb00..0a5b79d 100644
--- a/deploy/gitops/argocd-secrets.application.gen.yaml
+++ b/deploy/gitops/argocd-secrets.application.gen.yaml
@@ -10,5 +10,5 @@ spec:
project: argocd
source:
path: deploy/components/argocd-secrets
- repoURL: https://github.com/holos-run/kargo-demo.git
+ repoURL: https://github.com/jeffmccune/kargo-demo.git
targetRevision: main
diff --git a/deploy/gitops/argocd.application.gen.yaml b/deploy/gitops/argocd.application.gen.yaml
index 764a55f..6c4cfad 100644
--- a/deploy/gitops/argocd.application.gen.yaml
+++ b/deploy/gitops/argocd.application.gen.yaml
@@ -10,5 +10,5 @@ spec:
project: argocd
source:
path: deploy/components/argocd
- repoURL: https://github.com/holos-run/kargo-demo.git
+ repoURL: https://github.com/jeffmccune/kargo-demo.git
targetRevision: main
diff --git a/deploy/gitops/cert-manager-promoter.application.gen.yaml b/deploy/gitops/cert-manager-promoter.application.gen.yaml
index c28bb66..a98c0ef 100644
--- a/deploy/gitops/cert-manager-promoter.application.gen.yaml
+++ b/deploy/gitops/cert-manager-promoter.application.gen.yaml
@@ -16,5 +16,5 @@ spec:
project: security
source:
path: deploy/components/cert-manager-promoter
- repoURL: https://github.com/holos-run/kargo-demo.git
+ repoURL: https://github.com/jeffmccune/kargo-demo.git
targetRevision: main
diff --git a/deploy/gitops/cert-manager.application.gen.yaml b/deploy/gitops/cert-manager.application.gen.yaml
index 14e15f0..d6a24d3 100644
--- a/deploy/gitops/cert-manager.application.gen.yaml
+++ b/deploy/gitops/cert-manager.application.gen.yaml
@@ -12,5 +12,5 @@ spec:
project: security
source:
path: deploy/components/cert-manager
- repoURL: https://github.com/holos-run/kargo-demo.git
+ repoURL: https://github.com/jeffmccune/kargo-demo.git
targetRevision: main
diff --git a/deploy/gitops/external-secrets-crds.application.gen.yaml b/deploy/gitops/external-secrets-crds.application.gen.yaml
index 5515a52..c86bbf8 100644
--- a/deploy/gitops/external-secrets-crds.application.gen.yaml
+++ b/deploy/gitops/external-secrets-crds.application.gen.yaml
@@ -10,5 +10,5 @@ spec:
project: security
source:
path: deploy/components/external-secrets-crds
- repoURL: https://github.com/holos-run/kargo-demo.git
+ repoURL: https://github.com/jeffmccune/kargo-demo.git
targetRevision: main
diff --git a/deploy/gitops/external-secrets.application.gen.yaml b/deploy/gitops/external-secrets.application.gen.yaml
index b1b2434..a1a90d2 100644
--- a/deploy/gitops/external-secrets.application.gen.yaml
+++ b/deploy/gitops/external-secrets.application.gen.yaml
@@ -10,5 +10,5 @@ spec:
project: security
source:
path: deploy/components/external-secrets
- repoURL: https://github.com/holos-run/kargo-demo.git
+ repoURL: https://github.com/jeffmccune/kargo-demo.git
targetRevision: main
diff --git a/deploy/gitops/gateway-api.application.gen.yaml b/deploy/gitops/gateway-api.application.gen.yaml
index a567685..1209068 100644
--- a/deploy/gitops/gateway-api.application.gen.yaml
+++ b/deploy/gitops/gateway-api.application.gen.yaml
@@ -10,5 +10,5 @@ spec:
project: network
source:
path: deploy/components/gateway-api
- repoURL: https://github.com/holos-run/kargo-demo.git
+ repoURL: https://github.com/jeffmccune/kargo-demo.git
targetRevision: main
diff --git a/deploy/gitops/httproutes.application.gen.yaml b/deploy/gitops/httproutes.application.gen.yaml
index 01e7eea..ba17725 100644
--- a/deploy/gitops/httproutes.application.gen.yaml
+++ b/deploy/gitops/httproutes.application.gen.yaml
@@ -10,5 +10,5 @@ spec:
project: network
source:
path: deploy/components/httproutes
- repoURL: https://github.com/holos-run/kargo-demo.git
+ repoURL: https://github.com/jeffmccune/kargo-demo.git
targetRevision: main
diff --git a/deploy/gitops/istio-base.application.gen.yaml b/deploy/gitops/istio-base.application.gen.yaml
index 344bba2..32d4f4b 100644
--- a/deploy/gitops/istio-base.application.gen.yaml
+++ b/deploy/gitops/istio-base.application.gen.yaml
@@ -10,5 +10,5 @@ spec:
project: network
source:
path: deploy/components/istio-base
- repoURL: https://github.com/holos-run/kargo-demo.git
+ repoURL: https://github.com/jeffmccune/kargo-demo.git
targetRevision: main
diff --git a/deploy/gitops/istio-cni.application.gen.yaml b/deploy/gitops/istio-cni.application.gen.yaml
index 478e7c4..5fdf222 100644
--- a/deploy/gitops/istio-cni.application.gen.yaml
+++ b/deploy/gitops/istio-cni.application.gen.yaml
@@ -10,5 +10,5 @@ spec:
project: network
source:
path: deploy/components/istio-cni
- repoURL: https://github.com/holos-run/kargo-demo.git
+ repoURL: https://github.com/jeffmccune/kargo-demo.git
targetRevision: main
diff --git a/deploy/gitops/istio-gateway.application.gen.yaml b/deploy/gitops/istio-gateway.application.gen.yaml
index 9561e06..0267f9b 100644
--- a/deploy/gitops/istio-gateway.application.gen.yaml
+++ b/deploy/gitops/istio-gateway.application.gen.yaml
@@ -10,5 +10,5 @@ spec:
project: network
source:
path: deploy/components/istio-gateway
- repoURL: https://github.com/holos-run/kargo-demo.git
+ repoURL: https://github.com/jeffmccune/kargo-demo.git
targetRevision: main
diff --git a/deploy/gitops/istio-ztunnel.application.gen.yaml b/deploy/gitops/istio-ztunnel.application.gen.yaml
index a6da24e..ac21566 100644
--- a/deploy/gitops/istio-ztunnel.application.gen.yaml
+++ b/deploy/gitops/istio-ztunnel.application.gen.yaml
@@ -10,5 +10,5 @@ spec:
project: network
source:
path: deploy/components/istio-ztunnel
- repoURL: https://github.com/holos-run/kargo-demo.git
+ repoURL: https://github.com/jeffmccune/kargo-demo.git
targetRevision: main
diff --git a/deploy/gitops/istiod.application.gen.yaml b/deploy/gitops/istiod.application.gen.yaml
index 57d3fdc..a09c8b9 100644
--- a/deploy/gitops/istiod.application.gen.yaml
+++ b/deploy/gitops/istiod.application.gen.yaml
@@ -10,5 +10,5 @@ spec:
project: network
source:
path: deploy/components/istiod
- repoURL: https://github.com/holos-run/kargo-demo.git
+ repoURL: https://github.com/jeffmccune/kargo-demo.git
targetRevision: main
diff --git a/deploy/gitops/kargo-promoter.application.gen.yaml b/deploy/gitops/kargo-promoter.application.gen.yaml
index 079ee37..f6db555 100644
--- a/deploy/gitops/kargo-promoter.application.gen.yaml
+++ b/deploy/gitops/kargo-promoter.application.gen.yaml
@@ -16,5 +16,5 @@ spec:
project: argocd
source:
path: deploy/components/kargo-promoter
- repoURL: https://github.com/holos-run/kargo-demo.git
+ repoURL: https://github.com/jeffmccune/kargo-demo.git
targetRevision: main
diff --git a/deploy/gitops/kargo-secrets.application.gen.yaml b/deploy/gitops/kargo-secrets.application.gen.yaml
index c1d048b..308560d 100644
--- a/deploy/gitops/kargo-secrets.application.gen.yaml
+++ b/deploy/gitops/kargo-secrets.application.gen.yaml
@@ -10,5 +10,5 @@ spec:
project: argocd
source:
path: deploy/components/kargo-secrets
- repoURL: https://github.com/holos-run/kargo-demo.git
+ repoURL: https://github.com/jeffmccune/kargo-demo.git
targetRevision: main
diff --git a/deploy/gitops/kargo.application.gen.yaml b/deploy/gitops/kargo.application.gen.yaml
index 22408e1..04f92fc 100644
--- a/deploy/gitops/kargo.application.gen.yaml
+++ b/deploy/gitops/kargo.application.gen.yaml
@@ -10,5 +10,5 @@ spec:
project: argocd
source:
path: deploy/components/kargo
- repoURL: https://github.com/holos-run/kargo-demo.git
+ repoURL: https://github.com/jeffmccune/kargo-demo.git
targetRevision: main
diff --git a/deploy/gitops/local-ca.application.gen.yaml b/deploy/gitops/local-ca.application.gen.yaml
index 38901f2..16caa18 100644
--- a/deploy/gitops/local-ca.application.gen.yaml
+++ b/deploy/gitops/local-ca.application.gen.yaml
@@ -10,5 +10,5 @@ spec:
project: security
source:
path: deploy/components/local-ca
- repoURL: https://github.com/holos-run/kargo-demo.git
+ repoURL: https://github.com/jeffmccune/kargo-demo.git
targetRevision: main
diff --git a/deploy/gitops/namespaces.application.gen.yaml b/deploy/gitops/namespaces.application.gen.yaml
index e35f41c..2fd01a8 100644
--- a/deploy/gitops/namespaces.application.gen.yaml
+++ b/deploy/gitops/namespaces.application.gen.yaml
@@ -10,5 +10,5 @@ spec:
project: security
source:
path: deploy/components/namespaces
- repoURL: https://github.com/holos-run/kargo-demo.git
+ repoURL: https://github.com/jeffmccune/kargo-demo.git
targetRevision: main
diff --git a/deploy/gitops/rollouts-crds.application.gen.yaml b/deploy/gitops/rollouts-crds.application.gen.yaml
index 221cb50..761a823 100644
--- a/deploy/gitops/rollouts-crds.application.gen.yaml
+++ b/deploy/gitops/rollouts-crds.application.gen.yaml
@@ -10,5 +10,5 @@ spec:
project: argocd
source:
path: deploy/components/rollouts-crds
- repoURL: https://github.com/holos-run/kargo-demo.git
+ repoURL: https://github.com/jeffmccune/kargo-demo.git
targetRevision: main
diff --git a/deploy/gitops/rollouts.application.gen.yaml b/deploy/gitops/rollouts.application.gen.yaml
index f96f85c..d1fc696 100644
--- a/deploy/gitops/rollouts.application.gen.yaml
+++ b/deploy/gitops/rollouts.application.gen.yaml
@@ -10,5 +10,5 @@ spec:
project: argocd
source:
path: deploy/components/rollouts
- repoURL: https://github.com/holos-run/kargo-demo.git
+ repoURL: https://github.com/jeffmccune/kargo-demo.git
targetRevision: main
diff --git a/deploy/projects/httpbin/components/kargo-stages/kargo-stages.gen.yaml b/deploy/projects/httpbin/components/kargo-stages/kargo-stages.gen.yaml
index 815f6a3..bbf1f89 100644
--- a/deploy/projects/httpbin/components/kargo-stages/kargo-stages.gen.yaml
+++ b/deploy/projects/httpbin/components/kargo-stages/kargo-stages.gen.yaml
@@ -16,7 +16,7 @@ spec:
- branch: project/httpbin/component/dev-httpbin
create: true
path: ./out
- repoURL: https://github.com/holos-run/kargo-demo.git
+ repoURL: https://github.com/jeffmccune/kargo-demo.git
uses: git-clone
- config:
path: ./out
@@ -46,7 +46,7 @@ spec:
- name: httpbin-dev-httpbin
sources:
- desiredCommitFromStep: commit
- repoURL: https://github.com/holos-run/kargo-demo.git
+ repoURL: https://github.com/jeffmccune/kargo-demo.git
uses: argocd-update
requestedFreight:
- origin:
@@ -73,7 +73,7 @@ spec:
- branch: project/httpbin/component/prod-us-central-httpbin
create: true
path: ./out
- repoURL: https://github.com/holos-run/kargo-demo.git
+ repoURL: https://github.com/jeffmccune/kargo-demo.git
uses: git-clone
- config:
path: ./out
@@ -103,7 +103,7 @@ spec:
- name: httpbin-prod-us-central-httpbin
sources:
- desiredCommitFromStep: commit
- repoURL: https://github.com/holos-run/kargo-demo.git
+ repoURL: https://github.com/jeffmccune/kargo-demo.git
uses: argocd-update
requestedFreight:
- origin:
@@ -131,7 +131,7 @@ spec:
- branch: project/httpbin/component/prod-us-east-httpbin
create: true
path: ./out
- repoURL: https://github.com/holos-run/kargo-demo.git
+ repoURL: https://github.com/jeffmccune/kargo-demo.git
uses: git-clone
- config:
path: ./out
@@ -161,7 +161,7 @@ spec:
- name: httpbin-prod-us-east-httpbin
sources:
- desiredCommitFromStep: commit
- repoURL: https://github.com/holos-run/kargo-demo.git
+ repoURL: https://github.com/jeffmccune/kargo-demo.git
uses: argocd-update
requestedFreight:
- origin:
@@ -189,7 +189,7 @@ spec:
- branch: project/httpbin/component/prod-us-west-httpbin
create: true
path: ./out
- repoURL: https://github.com/holos-run/kargo-demo.git
+ repoURL: https://github.com/jeffmccune/kargo-demo.git
uses: git-clone
- config:
path: ./out
@@ -219,7 +219,7 @@ spec:
- name: httpbin-prod-us-west-httpbin
sources:
- desiredCommitFromStep: commit
- repoURL: https://github.com/holos-run/kargo-demo.git
+ repoURL: https://github.com/jeffmccune/kargo-demo.git
uses: argocd-update
requestedFreight:
- origin:
@@ -247,7 +247,7 @@ spec:
- branch: project/httpbin/component/test-httpbin
create: true
path: ./out
- repoURL: https://github.com/holos-run/kargo-demo.git
+ repoURL: https://github.com/jeffmccune/kargo-demo.git
uses: git-clone
- config:
path: ./out
@@ -277,7 +277,7 @@ spec:
- name: httpbin-test-httpbin
sources:
- desiredCommitFromStep: commit
- repoURL: https://github.com/holos-run/kargo-demo.git
+ repoURL: https://github.com/jeffmccune/kargo-demo.git
uses: argocd-update
requestedFreight:
- origin:
@@ -305,7 +305,7 @@ spec:
- branch: project/httpbin/component/uat-httpbin
create: true
path: ./out
- repoURL: https://github.com/holos-run/kargo-demo.git
+ repoURL: https://github.com/jeffmccune/kargo-demo.git
uses: git-clone
- config:
path: ./out
@@ -335,7 +335,7 @@ spec:
- name: httpbin-uat-httpbin
sources:
- desiredCommitFromStep: commit
- repoURL: https://github.com/holos-run/kargo-demo.git
+ repoURL: https://github.com/jeffmccune/kargo-demo.git
uses: argocd-update
requestedFreight:
- origin:
diff --git a/deploy/projects/httpbin/gitops/dev-httpbin.application.gen.yaml b/deploy/projects/httpbin/gitops/dev-httpbin.application.gen.yaml
index 03136e0..8b207ff 100644
--- a/deploy/projects/httpbin/gitops/dev-httpbin.application.gen.yaml
+++ b/deploy/projects/httpbin/gitops/dev-httpbin.application.gen.yaml
@@ -14,5 +14,5 @@ spec:
project: httpbin
source:
path: ./
- repoURL: https://github.com/holos-run/kargo-demo.git
+ repoURL: https://github.com/jeffmccune/kargo-demo.git
targetRevision: project/httpbin/component/dev-httpbin
diff --git a/deploy/projects/httpbin/gitops/kargo-project.application.gen.yaml b/deploy/projects/httpbin/gitops/kargo-project.application.gen.yaml
index 9e666a7..07ebce2 100644
--- a/deploy/projects/httpbin/gitops/kargo-project.application.gen.yaml
+++ b/deploy/projects/httpbin/gitops/kargo-project.application.gen.yaml
@@ -10,5 +10,5 @@ spec:
project: httpbin
source:
path: deploy/projects/httpbin/components/kargo-project
- repoURL: https://github.com/holos-run/kargo-demo.git
+ repoURL: https://github.com/jeffmccune/kargo-demo.git
targetRevision: main
diff --git a/deploy/projects/httpbin/gitops/kargo-stages.application.gen.yaml b/deploy/projects/httpbin/gitops/kargo-stages.application.gen.yaml
index df82b81..157a1e0 100644
--- a/deploy/projects/httpbin/gitops/kargo-stages.application.gen.yaml
+++ b/deploy/projects/httpbin/gitops/kargo-stages.application.gen.yaml
@@ -10,5 +10,5 @@ spec:
project: httpbin
source:
path: deploy/projects/httpbin/components/kargo-stages
- repoURL: https://github.com/holos-run/kargo-demo.git
+ repoURL: https://github.com/jeffmccune/kargo-demo.git
targetRevision: main
diff --git a/deploy/projects/httpbin/gitops/prod-us-central-httpbin.application.gen.yaml b/deploy/projects/httpbin/gitops/prod-us-central-httpbin.application.gen.yaml
index d3eb9ee..3e5e8b3 100644
--- a/deploy/projects/httpbin/gitops/prod-us-central-httpbin.application.gen.yaml
+++ b/deploy/projects/httpbin/gitops/prod-us-central-httpbin.application.gen.yaml
@@ -14,5 +14,5 @@ spec:
project: httpbin
source:
path: ./
- repoURL: https://github.com/holos-run/kargo-demo.git
+ repoURL: https://github.com/jeffmccune/kargo-demo.git
targetRevision: project/httpbin/component/prod-us-central-httpbin
diff --git a/deploy/projects/httpbin/gitops/prod-us-east-httpbin.application.gen.yaml b/deploy/projects/httpbin/gitops/prod-us-east-httpbin.application.gen.yaml
index 2d768f4..e43d1f6 100644
--- a/deploy/projects/httpbin/gitops/prod-us-east-httpbin.application.gen.yaml
+++ b/deploy/projects/httpbin/gitops/prod-us-east-httpbin.application.gen.yaml
@@ -14,5 +14,5 @@ spec:
project: httpbin
source:
path: ./
- repoURL: https://github.com/holos-run/kargo-demo.git
+ repoURL: https://github.com/jeffmccune/kargo-demo.git
targetRevision: project/httpbin/component/prod-us-east-httpbin
diff --git a/deploy/projects/httpbin/gitops/prod-us-west-httpbin.application.gen.yaml b/deploy/projects/httpbin/gitops/prod-us-west-httpbin.application.gen.yaml
index 8903303..a7012b0 100644
--- a/deploy/projects/httpbin/gitops/prod-us-west-httpbin.application.gen.yaml
+++ b/deploy/projects/httpbin/gitops/prod-us-west-httpbin.application.gen.yaml
@@ -14,5 +14,5 @@ spec:
project: httpbin
source:
path: ./
- repoURL: https://github.com/holos-run/kargo-demo.git
+ repoURL: https://github.com/jeffmccune/kargo-demo.git
targetRevision: project/httpbin/component/prod-us-west-httpbin
diff --git a/deploy/projects/httpbin/gitops/test-httpbin.application.gen.yaml b/deploy/projects/httpbin/gitops/test-httpbin.application.gen.yaml
index 5426c31..296e3ed 100644
--- a/deploy/projects/httpbin/gitops/test-httpbin.application.gen.yaml
+++ b/deploy/projects/httpbin/gitops/test-httpbin.application.gen.yaml
@@ -14,5 +14,5 @@ spec:
project: httpbin
source:
path: ./
- repoURL: https://github.com/holos-run/kargo-demo.git
+ repoURL: https://github.com/jeffmccune/kargo-demo.git
targetRevision: project/httpbin/component/test-httpbin
diff --git a/deploy/projects/httpbin/gitops/uat-httpbin.application.gen.yaml b/deploy/projects/httpbin/gitops/uat-httpbin.application.gen.yaml
index 717e608..264d1c4 100644
--- a/deploy/projects/httpbin/gitops/uat-httpbin.application.gen.yaml
+++ b/deploy/projects/httpbin/gitops/uat-httpbin.application.gen.yaml
@@ -14,5 +14,5 @@ spec:
project: httpbin
source:
path: ./
- repoURL: https://github.com/holos-run/kargo-demo.git
+ repoURL: https://github.com/jeffmccune/kargo-demo.git
targetRevision: project/httpbin/component/uat-httpbin
diff --git a/deploy/projects/podinfo/components/kargo-stages/kargo-stages.gen.yaml b/deploy/projects/podinfo/components/kargo-stages/kargo-stages.gen.yaml
index 1107e34..2ebbbd1 100644
--- a/deploy/projects/podinfo/components/kargo-stages/kargo-stages.gen.yaml
+++ b/deploy/projects/podinfo/components/kargo-stages/kargo-stages.gen.yaml
@@ -16,7 +16,7 @@ spec:
- branch: project/podinfo/component/dev-podinfo
create: true
path: ./out
- repoURL: https://github.com/holos-run/kargo-demo.git
+ repoURL: https://github.com/jeffmccune/kargo-demo.git
uses: git-clone
- config:
path: ./out
@@ -46,7 +46,7 @@ spec:
- name: podinfo-dev-podinfo
sources:
- desiredCommitFromStep: commit
- repoURL: https://github.com/holos-run/kargo-demo.git
+ repoURL: https://github.com/jeffmccune/kargo-demo.git
uses: argocd-update
requestedFreight:
- origin:
@@ -73,7 +73,7 @@ spec:
- branch: project/podinfo/component/prod-us-central-podinfo
create: true
path: ./out
- repoURL: https://github.com/holos-run/kargo-demo.git
+ repoURL: https://github.com/jeffmccune/kargo-demo.git
uses: git-clone
- config:
path: ./out
@@ -103,7 +103,7 @@ spec:
- name: podinfo-prod-us-central-podinfo
sources:
- desiredCommitFromStep: commit
- repoURL: https://github.com/holos-run/kargo-demo.git
+ repoURL: https://github.com/jeffmccune/kargo-demo.git
uses: argocd-update
requestedFreight:
- origin:
@@ -131,7 +131,7 @@ spec:
- branch: project/podinfo/component/prod-us-east-podinfo
create: true
path: ./out
- repoURL: https://github.com/holos-run/kargo-demo.git
+ repoURL: https://github.com/jeffmccune/kargo-demo.git
uses: git-clone
- config:
path: ./out
@@ -161,7 +161,7 @@ spec:
- name: podinfo-prod-us-east-podinfo
sources:
- desiredCommitFromStep: commit
- repoURL: https://github.com/holos-run/kargo-demo.git
+ repoURL: https://github.com/jeffmccune/kargo-demo.git
uses: argocd-update
requestedFreight:
- origin:
@@ -189,7 +189,7 @@ spec:
- branch: project/podinfo/component/prod-us-west-podinfo
create: true
path: ./out
- repoURL: https://github.com/holos-run/kargo-demo.git
+ repoURL: https://github.com/jeffmccune/kargo-demo.git
uses: git-clone
- config:
path: ./out
@@ -219,7 +219,7 @@ spec:
- name: podinfo-prod-us-west-podinfo
sources:
- desiredCommitFromStep: commit
- repoURL: https://github.com/holos-run/kargo-demo.git
+ repoURL: https://github.com/jeffmccune/kargo-demo.git
uses: argocd-update
requestedFreight:
- origin:
@@ -247,7 +247,7 @@ spec:
- branch: project/podinfo/component/test-podinfo
create: true
path: ./out
- repoURL: https://github.com/holos-run/kargo-demo.git
+ repoURL: https://github.com/jeffmccune/kargo-demo.git
uses: git-clone
- config:
path: ./out
@@ -277,7 +277,7 @@ spec:
- name: podinfo-test-podinfo
sources:
- desiredCommitFromStep: commit
- repoURL: https://github.com/holos-run/kargo-demo.git
+ repoURL: https://github.com/jeffmccune/kargo-demo.git
uses: argocd-update
requestedFreight:
- origin:
@@ -305,7 +305,7 @@ spec:
- branch: project/podinfo/component/uat-podinfo
create: true
path: ./out
- repoURL: https://github.com/holos-run/kargo-demo.git
+ repoURL: https://github.com/jeffmccune/kargo-demo.git
uses: git-clone
- config:
path: ./out
@@ -335,7 +335,7 @@ spec:
- name: podinfo-uat-podinfo
sources:
- desiredCommitFromStep: commit
- repoURL: https://github.com/holos-run/kargo-demo.git
+ repoURL: https://github.com/jeffmccune/kargo-demo.git
uses: argocd-update
requestedFreight:
- origin:
diff --git a/deploy/projects/podinfo/gitops/dev-podinfo.application.gen.yaml b/deploy/projects/podinfo/gitops/dev-podinfo.application.gen.yaml
index 9b3108e..9ac4849 100644
--- a/deploy/projects/podinfo/gitops/dev-podinfo.application.gen.yaml
+++ b/deploy/projects/podinfo/gitops/dev-podinfo.application.gen.yaml
@@ -14,5 +14,5 @@ spec:
project: podinfo
source:
path: ./
- repoURL: https://github.com/holos-run/kargo-demo.git
+ repoURL: https://github.com/jeffmccune/kargo-demo.git
targetRevision: project/podinfo/component/dev-podinfo
diff --git a/deploy/projects/podinfo/gitops/kargo-project.application.gen.yaml b/deploy/projects/podinfo/gitops/kargo-project.application.gen.yaml
index 3878efa..ab934d5 100644
--- a/deploy/projects/podinfo/gitops/kargo-project.application.gen.yaml
+++ b/deploy/projects/podinfo/gitops/kargo-project.application.gen.yaml
@@ -10,5 +10,5 @@ spec:
project: podinfo
source:
path: deploy/projects/podinfo/components/kargo-project
- repoURL: https://github.com/holos-run/kargo-demo.git
+ repoURL: https://github.com/jeffmccune/kargo-demo.git
targetRevision: main
diff --git a/deploy/projects/podinfo/gitops/kargo-stages.application.gen.yaml b/deploy/projects/podinfo/gitops/kargo-stages.application.gen.yaml
index 0d4ade7..1b5eb9f 100644
--- a/deploy/projects/podinfo/gitops/kargo-stages.application.gen.yaml
+++ b/deploy/projects/podinfo/gitops/kargo-stages.application.gen.yaml
@@ -10,5 +10,5 @@ spec:
project: podinfo
source:
path: deploy/projects/podinfo/components/kargo-stages
- repoURL: https://github.com/holos-run/kargo-demo.git
+ repoURL: https://github.com/jeffmccune/kargo-demo.git
targetRevision: main
diff --git a/deploy/projects/podinfo/gitops/prod-us-central-podinfo.application.gen.yaml b/deploy/projects/podinfo/gitops/prod-us-central-podinfo.application.gen.yaml
index 59b3f98..182a3c9 100644
--- a/deploy/projects/podinfo/gitops/prod-us-central-podinfo.application.gen.yaml
+++ b/deploy/projects/podinfo/gitops/prod-us-central-podinfo.application.gen.yaml
@@ -14,5 +14,5 @@ spec:
project: podinfo
source:
path: ./
- repoURL: https://github.com/holos-run/kargo-demo.git
+ repoURL: https://github.com/jeffmccune/kargo-demo.git
targetRevision: project/podinfo/component/prod-us-central-podinfo
diff --git a/deploy/projects/podinfo/gitops/prod-us-east-podinfo.application.gen.yaml b/deploy/projects/podinfo/gitops/prod-us-east-podinfo.application.gen.yaml
index 0165d40..6101a9b 100644
--- a/deploy/projects/podinfo/gitops/prod-us-east-podinfo.application.gen.yaml
+++ b/deploy/projects/podinfo/gitops/prod-us-east-podinfo.application.gen.yaml
@@ -14,5 +14,5 @@ spec:
project: podinfo
source:
path: ./
- repoURL: https://github.com/holos-run/kargo-demo.git
+ repoURL: https://github.com/jeffmccune/kargo-demo.git
targetRevision: project/podinfo/component/prod-us-east-podinfo
diff --git a/deploy/projects/podinfo/gitops/prod-us-west-podinfo.application.gen.yaml b/deploy/projects/podinfo/gitops/prod-us-west-podinfo.application.gen.yaml
index 3422981..88b7409 100644
--- a/deploy/projects/podinfo/gitops/prod-us-west-podinfo.application.gen.yaml
+++ b/deploy/projects/podinfo/gitops/prod-us-west-podinfo.application.gen.yaml
@@ -14,5 +14,5 @@ spec:
project: podinfo
source:
path: ./
- repoURL: https://github.com/holos-run/kargo-demo.git
+ repoURL: https://github.com/jeffmccune/kargo-demo.git
targetRevision: project/podinfo/component/prod-us-west-podinfo
diff --git a/deploy/projects/podinfo/gitops/test-podinfo.application.gen.yaml b/deploy/projects/podinfo/gitops/test-podinfo.application.gen.yaml
index 7ca895f..c3c32a1 100644
--- a/deploy/projects/podinfo/gitops/test-podinfo.application.gen.yaml
+++ b/deploy/projects/podinfo/gitops/test-podinfo.application.gen.yaml
@@ -14,5 +14,5 @@ spec:
project: podinfo
source:
path: ./
- repoURL: https://github.com/holos-run/kargo-demo.git
+ repoURL: https://github.com/jeffmccune/kargo-demo.git
targetRevision: project/podinfo/component/test-podinfo
diff --git a/deploy/projects/podinfo/gitops/uat-podinfo.application.gen.yaml b/deploy/projects/podinfo/gitops/uat-podinfo.application.gen.yaml
index cb28add..63cf194 100644
--- a/deploy/projects/podinfo/gitops/uat-podinfo.application.gen.yaml
+++ b/deploy/projects/podinfo/gitops/uat-podinfo.application.gen.yaml
@@ -14,5 +14,5 @@ spec:
project: podinfo
source:
path: ./
- repoURL: https://github.com/holos-run/kargo-demo.git
+ repoURL: https://github.com/jeffmccune/kargo-demo.git
targetRevision: project/podinfo/component/uat-podinfo

View File

@@ -1 +0,0 @@
cat <<EOF > config/platform/organization_${GH_USER}.cue

View File

@@ -1,47 +0,0 @@
rendered kargo-project for project podinfo in 438.04325ms
rendered kargo-promoter for stack argocd in 440.84075ms
rendered kargo-secrets for stack argocd in 441.76175ms
rendered rollouts for stack argocd in 441.989625ms
rendered kargo-project for project httpbin in 444.166291ms
rendered kargo-stages for project httpbin in 446.7485ms
rendered kargo-stages for project podinfo in 446.739792ms
rendered argocd-secrets for stack argocd in 448.0085ms
rendered app-projects for stack argocd in 449.610209ms
rendered gateway-api for stack network in 597.720375ms
rendered istio-gateway for stack network in 248.44325ms
rendered rollouts-crds for stack argocd in 885.346417ms
rendered namespaces for stack security in 478.418ms
rendered local-ca for stack security in 244.84025ms
rendered argocd-crds for stack argocd in 991.27875ms
rendered external-secrets-crds for stack security in 686.799417ms
rendered istio-cni for stack network in 748.069458ms
rendered istio-ztunnel for stack network in 762.896542ms
rendered test-httpbin for project httpbin in 318.5385ms
rendered cert-manager-promoter for stack security in 481.661833ms
rendered dev-httpbin for project httpbin in 465.202083ms
Pulled: ghcr.io/akuity/kargo-charts/kargo:1.1.1
Digest: sha256:4055c72418db85b85979da2fe12136c0e275709efc2e36a505b158e8234ad443
rendered kargo for stack argocd in 1.396269208s
rendered istiod for stack network in 997.264208ms
rendered external-secrets for stack security in 996.459042ms
rendered uat-httpbin for project httpbin in 517.124875ms
rendered prod-us-central-httpbin for project httpbin in 344.330875ms
rendered prod-us-east-httpbin for project httpbin in 449.991417ms
rendered prod-us-west-httpbin for project httpbin in 411.234333ms
rendered argocd for stack argocd in 1.631300708s
rendered istio-base for stack network in 1.203177s
rendered cert-manager for stack security in 1.127040208s
rendered httproutes for stack network in 1.556993875s
Pulled: ghcr.io/stefanprodan/charts/podinfo:6.7.0
Digest: sha256:104d101017e501c63b3aa71b20d5edd2ca6d5d58cbc57ff8163770110f92b9db
rendered dev-podinfo for project podinfo in 1.010673334s
rendered test-podinfo for project podinfo in 945.39075ms
rendered prod-us-west-podinfo for project podinfo in 897.117125ms
rendered uat-podinfo for project podinfo in 1.022036209s
Pulled: ghcr.io/stefanprodan/charts/podinfo:6.6.2
Digest: sha256:83295d47de6d6ca634ed4b952a7572fc176bcc38854d0c11ca0fa197bc5f1154
rendered prod-us-central-podinfo for project podinfo in 977.250667ms
Pulled: ghcr.io/stefanprodan/charts/podinfo:6.6.1
Digest: sha256:0cc9a8446c95009ef382f5eade883a67c257f77d50f84e78ecef2aac9428d1e5
rendered prod-us-east-podinfo for project podinfo in 1.071360916s
rendered platform in 2.467827834s

View File

@@ -1,8 +0,0 @@
cd ../script-setup/kargo-demo
# Execute the example capture stdout and stderr to one file.
exec bash -c 'bash -euo pipefail $WORK/tree.sh 2>&1'
# Copy standard output to a file to embed in the docs.
cp stdout $WORK/tree.txt
-- tree.sh --
tree -L3 -d platform stacks config

View File

@@ -1,40 +0,0 @@
---
title: Progressive Delivery
description: Learn how to manage progressive delivery pipelines with Holos.
sidebar_position: 110
---
import DocCardList from '@theme/DocCardList';
# Progressive Delivery
Holos pairs nicely with [Kargo], offering a holistic way to manage the
configuration of reusable progressive rollout deployment pipelines for Holos
components.
> Kargo is a next-generation continuous delivery and application lifecycle
> orchestration platform for Kubernetes. It builds upon GitOps principles and
> integrates with existing technologies, like Argo CD, to streamline and automate
> the progressive rollout of changes across the many stages of an application's
> lifecycle. ([ref](https://github.com/akuity/kargo#:~:text=Kargo%20is%20a%20next%2Dgeneration,stages%20of%20an%20application's%20lifecycle.))
Two main use cases are addressed within this topic.
1. **Platform Components**: Platform operators want pull requests automatically
opened when new versions of cluster add-ons are available so they can see
upcoming changes clearly.
2. **Workloads**: Product development teams want a well defined deployment
pipeline to automatically and safely promote new features and bug fixes. For
example, from dev to test to staging, then across multiple production regions
globally.
:::tip
Holos pairs well with Kargo to progressively deploy changes across multiple
clusters. Contact us for personalized [support] for your use case.
:::
---
<DocCardList />
[Kargo]: https://kargo.io/
[support]: ../support.mdx

View File

@@ -1,184 +0,0 @@
---
description: Automatic pull requests for platform components.
sidebar_position: 100
---
import useBaseUrl from '@docusaurus/useBaseUrl';
import ThemedImage from '@theme/ThemedImage';
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
import CodeBlock from '@theme/CodeBlock';
# Platform Components
## Overview
We'll use Holos to configure Kargo to automatically watch for new versions of
the Istio, cert-manager, and external-secrets cluster platform components.
We'll learn how to define a reusable technique to mix-in the deployment pipeline
to any other cluster add-ons, like Kargo and ArgoCD.
<ThemedImage
alt="Pull Request summary for an available cert-manager update"
sources= {{
light: useBaseUrl('/img/kargo/add-on-promoter/kargo-pr-small.light.png'),
dark: useBaseUrl('/img/kargo/add-on-promoter/kargo-pr-small.dark.png'),
}}
/>
<ThemedImage
alt="Pull Request diff for an available cert-manager update"
sources= {{
light: useBaseUrl('/img/kargo/add-on-promoter/diff.light.png'),
dark: useBaseUrl('/img/kargo/add-on-promoter/diff.dark.png'),
}}
/>
## Setup
First, [fork] the [kargo-demo] repository to your personal account. Set your
GitHub user name for use through the rest of this tutorial.
```bash
export GH_USER=<your username>
```
Clone your fork. We'll run the rest of the commands from the root of the
repository.
import SetupCommand from '!!raw-loader!./_platform-components/script-01-clone/command.sh';
import SetupOutput from '!!raw-loader!./_platform-components/script-01-clone/output.txt';
<Tabs groupId="setup">
<TabItem value="command" label="Command">
<CodeBlock language="bash">{SetupCommand}</CodeBlock>
</TabItem>
<TabItem value="output" label="Output">
<CodeBlock language="txt">{SetupOutput}</CodeBlock>
</TabItem>
</Tabs>
## Configuration Tour
Let's review what happens when the `holos render platform` command renders the
Kargo deployment pipeline configuration for `cert-manager`.
import GitHubLink from '@site/src/components/GitHubLink';
import GitCommit from '!!raw-loader!./_platform-components/script-01-clone/git.commit';
import CertManagerEntrypointPath from '!!raw-loader!./_platform-components/script-10-cert-manager/entrypoint.path';
import CertManagerEntrypointBaseName from '!!raw-loader!./_platform-components/script-10-cert-manager/entrypoint.basename';
import CertManagerEntrypointCode from '!!raw-loader!./_platform-components/script-10-cert-manager/entrypoint.txt';
import CertManagerStacksPath from '!!raw-loader!./_platform-components/script-10-cert-manager/stacks.path';
import CertManagerStacksBaseName from '!!raw-loader!./_platform-components/script-10-cert-manager/stacks.basename';
import CertManagerStacksCode from '!!raw-loader!./_platform-components/script-10-cert-manager/stacks.txt';
import CertManagerComponentPath from '!!raw-loader!./_platform-components/script-10-cert-manager/component.path';
import CertManagerComponentBaseName from '!!raw-loader!./_platform-components/script-10-cert-manager/component.basename';
import CertManagerComponentCode from '!!raw-loader!./_platform-components/script-10-cert-manager/component.txt';
import CertManagerConfigPath from '!!raw-loader!./_platform-components/script-10-cert-manager/config.path';
import CertManagerConfigBaseName from '!!raw-loader!./_platform-components/script-10-cert-manager/config.basename';
import CertManagerConfigCode from '!!raw-loader!./_platform-components/script-10-cert-manager/config.txt';
1. <GitHubLink repo="holos-run/kargo-demo" tree={GitCommit} path={CertManagerEntrypointPath}>{CertManagerEntrypointPath}</GitHubLink> is the main entrypoint for the `holos render platform` command. Each platform stack's components are composed into the Platform spec `holos` uses to render each component.
1. <GitHubLink repo="holos-run/kargo-demo" tree={GitCommit} path={`${CertManagerStacksPath}#L32-L39`}>{CertManagerStacksBaseName}</GitHubLink> in the platform config package is where cert-manager is added to the platform as a holos component.
1. <GitHubLink repo="holos-run/kargo-demo" tree={GitCommit} path={CertManagerComponentPath}>{CertManagerComponentBaseName}</GitHubLink> is the component definition. The component imports the certmanager config package to get the chart version.
1. <GitHubLink repo="holos-run/kargo-demo" tree={GitCommit} path={CertManagerConfigPath}>{CertManagerConfigBaseName}</GitHubLink> in the certmanager config package defines configuration imported by multiple components. This file uses the CUE embed feature to load data from a yaml file in the same directory. Kargo promotion steps update the cert manager version in this file.
Cert Manager is managed as a Holos Component wrapping the official helm chart.
See
<Tabs groupId="render-git-url">
<TabItem value="entrypoint" label={CertManagerEntrypointBaseName}>
<CodeBlock language="txt">{CertManagerEntrypointPath}</CodeBlock>
<CodeBlock language="cue">{CertManagerEntrypointCode}</CodeBlock>
</TabItem>
<TabItem value="stacks" label={CertManagerStacksBaseName}>
<CodeBlock language="txt">{CertManagerStacksPath}</CodeBlock>
<CodeBlock language="cue">{CertManagerStacksCode}</CodeBlock>
</TabItem>
<TabItem value="component" label={CertManagerComponentBaseName}>
<CodeBlock language="txt">{CertManagerComponentPath}</CodeBlock>
<CodeBlock language="cue">{CertManagerComponentCode}</CodeBlock>
</TabItem>
<TabItem value="config" label={CertManagerConfigBaseName}>
<CodeBlock language="txt">{CertManagerConfigPath}</CodeBlock>
<CodeBlock language="cue">{CertManagerConfigCode}</CodeBlock>
</TabItem>
</Tabs>
## Holos Version
Ensure you have a current version of `holos` installed. This document was
tested with the following version.
import HolosVersionCommand from '!!raw-loader!./_platform-components/script-20-holos-version/command.sh';
import HolosVersionOutput from '!!raw-loader!./_platform-components/script-20-holos-version/output.txt';
<CodeBlock language="bash">{HolosVersionCommand}</CodeBlock>
<CodeBlock language="txt">{HolosVersionOutput}</CodeBlock>
## Configure Git URL
We need to configure gitops tools like ArgoCD and Kargo to use our fork instead
of the upstream repository when reconciling changes and opening pull requests.
Create the following file to configure your fork url.
import GitURLHeader from '!!raw-loader!./_platform-components/script-30-git-url/header.sh';
import GitURLBody from '!!raw-loader!./_platform-components/script-30-git-url/body.txt';
import GitURLTrailer from '!!raw-loader!./_platform-components/script-30-git-url/trailer.sh';
<CodeBlock language="bash">{GitURLHeader}</CodeBlock>
<CodeBlock language="cue">{GitURLBody}</CodeBlock>
<CodeBlock language="bash">{GitURLTrailer}</CodeBlock>
Then render the platform with your GitHub user name as a cue build tag.
import RenderCommand from '!!raw-loader!./_platform-components/script-30-git-url/command.sh';
import RenderOutput from '!!raw-loader!./_platform-components/script-30-git-url/output.txt';
<Tabs groupId="render-git-url">
<TabItem value="command" label="Command">
<CodeBlock language="bash">{RenderCommand}</CodeBlock>
</TabItem>
<TabItem value="output" label="Output">
<CodeBlock language="txt">{RenderOutput}</CodeBlock>
</TabItem>
</Tabs>
Holos reconfigures the Application resources for all components in the platform
to point to your git url. Take a look at the diff.
import DiffCommand from '!!raw-loader!./_platform-components/script-30-git-url/diff.sh';
import DiffOutput from '!!raw-loader!./_platform-components/script-30-git-url/diff.patch';
<Tabs groupId="git-diff">
<TabItem value="command" label="Command">
<CodeBlock language="bash">{DiffCommand}</CodeBlock>
</TabItem>
<TabItem value="output" label="Output">
<CodeBlock language="diff">{DiffOutput}</CodeBlock>
</TabItem>
</Tabs>
Commit and push the changes.
import CommitCommand from '!!raw-loader!./_platform-components/script-30-git-url/commit.sh';
import CommitOutput from '!!raw-loader!./_platform-components/script-30-git-url/commit.txt';
<Tabs groupId="git-commit">
<TabItem value="command" label="Command">
<CodeBlock language="bash">{CommitCommand}</CodeBlock>
</TabItem>
<TabItem value="output" label="Output">
<CodeBlock language="txt">{CommitOutput}</CodeBlock>
</TabItem>
</Tabs>
<CodeBlock language="bash">git push</CodeBlock>
[kargo-demo]: https://github.com/holos-run/kargo-demo
[fork]: https://github.com/holos-run/kargo-demo/fork
[installed]: ../../tutorial/setup.mdx

View File

@@ -1,38 +0,0 @@
---
description: Progressive delivery for your Workloads.
sidebar_position: 200
---
# Workloads
{/*
Based on my experience with enterprise Kubernetes platforms, "Workloads" or
"Applications" are the two most common terms, with "Workloads" being more
technically precise and common in platform engineering circles.
Here's why:
1. "Workloads" is preferred because:
- It's the term Kubernetes itself uses (Deployments, StatefulSets etc. are "workload" resources)
- It encompasses both services and batch jobs
- It clearly distinguishes from platform infrastructure
- Major cloud providers (AWS, GCP, Azure) use this terminology
2. "Applications" is also common but has some drawbacks:
- Can be ambiguous whether it means a single service or a group of services
- Doesn't naturally include batch jobs or data processing
- More of a business/product term than a technical one
3. Less common terms:
- "Services" - Too specific, excludes jobs/tasks
- "Business Applications" - Too wordy
- "User Applications" - Ambiguous about which users
- "Customer Workloads" - Implies external customers
Looking at your question about "software my internal teams build for our
business", these are classic workloads - the business logic, services, and jobs
that run on top of the platform you provide.
So while both "Workloads" and "Applications" are acceptable, "Workloads" is the
more precise and commonly used technical term in platform engineering contexts.
*/}

View File

@@ -1,8 +1,7 @@
cd ../script-01-clone/kargo-demo
exec bash -c 'bash -euo pipefail $WORK/command.sh 2>&1'
cmp stdout $WORK/output.txt
-- command.sh --
holos --version
-- output.txt --
0.102.3
0.104.1

View File

@@ -0,0 +1,126 @@
# Set $HOME because:
# - Helm uses it for temporary files
# - Git requires it for setting author name/email globally
env HOME=$WORK/.tmp
chmod 0755 $WORK/update.sh
# Configure git author for testscript execution
exec git config --global user.name 'Holos Docs'
exec git config --global user.email 'hello@holos.run'
exec git config --global init.defaultBranch main
# Remove the tutorial directory if it already exists
exec rm -rf holos-tutorial
# Create and change to the tutorial directory, and then initialize the Holos platform
exec bash -c 'bash -euo pipefail $WORK/mkdir-and-init.sh'
cd holos-tutorial
# Create the components directory
exec bash -c 'bash -euo pipefail $WORK/mkdir-components.sh'
# Combine and execute the multiline podinfo component header/body/trailer files
exec cat $WORK/podinfo-component-header.sh ../podinfo-component-body.cue ../eof-trailer.sh
stdin stdout
exec bash -xeuo pipefail
# Combine and execute the multiline platform registration header/body/trailer files
exec cat $WORK/register-podinfo-header.sh ../register-podinfo-body.cue ../eof-trailer.sh
stdin stdout
exec bash -xeuo pipefail
# Render the platform, capture stdout, and use update.sh to gate whether the
# output file should be updated.
#
# NOTE: The [net] condition will test whether external network access is available
[net] exec bash -c 'bash -euo pipefail $WORK/render.sh 2>&1'
[net] stdin stdout
exec $WORK/update.sh $WORK/register-components-output.txt
# Generate and update the tree of the tutorial directory (omitting the cue.mod directory)
exec bash -c 'bash -euo pipefail $WORK/tree.sh'
stdin stdout
exec $WORK/update.sh $WORK/tree.txt
# Split the rendered manifest into two separate files to display separately
exec bash -c 'bash -euo pipefail $WORK/split-rendered-manifest.sh $WORK/holos-tutorial/deploy/components/podinfo/podinfo.gen.yaml $WORK'
# Grep for the Hello Holos message and write the output file
exec bash -c 'bash -euo pipefail $WORK/grep-for-message.sh'
stdin stdout
exec $WORK/update.sh $WORK/grepped-output.txt
# Clean up the tutorial directory and tmp $HOME directory
cd $WORK
exec rm -rf holos-tutorial
exec rm -rf $HOME
-- update.sh --
#! /bin/bash
set -euo pipefail
[[ -s "$1" ]] && [[ -z "${HOLOS_UPDATE_SCRIPTS:-}" ]] && exit 0
cat > "$1"
-- mkdir-and-init.sh --
mkdir holos-tutorial && cd holos-tutorial
holos init platform v1alpha5
-- tree.sh --
tree -L 3 -I cue.mod .
-- mkdir-components.sh --
mkdir -p components/podinfo
-- podinfo-component-header.sh --
cat <<EOF > components/podinfo/podinfo.cue
-- podinfo-component-body.cue --
package holos
// Produce a helm chart build plan.
holos: HelmChart.BuildPlan
HelmChart: #Helm & {
Name: "podinfo"
Chart: {
version: "6.6.2"
repository: {
name: "podinfo"
url: "https://stefanprodan.github.io/podinfo"
}
}
// Holos marshals Values into values.yaml for Helm.
Values: {
// message is a string with a default value. @tag indicates a value may
// be injected from the platform spec component parameters.
ui: {
message: string | *"Hello World" @tag(greeting, type=string)
}
}
}
-- eof-trailer.sh --
EOF
-- register-podinfo-header.sh --
cat <<EOF > platform/podinfo.cue
-- register-podinfo-body.cue --
package holos
Platform: Components: podinfo: {
name: "podinfo"
path: "components/podinfo"
// Inject a value into the component.
parameters: greeting: "Hello Holos!"
}
-- render.sh --
holos render platform
-- register-components-output.txt --
cached podinfo 6.6.2
rendered podinfo in 1.938665041s
rendered platform in 1.938759417s
-- podinfo-rendered-path.sh --
deploy/components/podinfo/podinfo.gen.yaml
-- split-rendered-manifest.sh --
awk 'BEGIN {RS="---"} NR==1 {print > "service.yaml"} NR==2 {print > "deployment.yaml"}' $1
mv service.yaml $2/rendered-service.yaml
mv deployment.yaml $2/rendered-deployment.yaml
-- grep-for-message.sh --
grep -B2 Hello deploy/components/podinfo/podinfo.gen.yaml
-- grepped-output.txt --
env:
- name: PODINFO_UI_MESSAGE
value: Hello Holos!

View File

@@ -0,0 +1 @@
0.104.1

View File

@@ -0,0 +1 @@
grep -B2 Hello deploy/components/podinfo/podinfo.gen.yaml

View File

@@ -0,0 +1,3 @@
env:
- name: PODINFO_UI_MESSAGE
value: Hello Holos!

View File

@@ -0,0 +1,2 @@
mkdir holos-tutorial && cd holos-tutorial
holos init platform v1alpha5

View File

@@ -0,0 +1 @@
mkdir -p components/podinfo

View File

@@ -0,0 +1,23 @@
package holos
// Produce a helm chart build plan.
holos: HelmChart.BuildPlan
HelmChart: #Helm & {
Name: "podinfo"
Chart: {
version: "6.6.2"
repository: {
name: "podinfo"
url: "https://stefanprodan.github.io/podinfo"
}
}
// Holos marshals Values into values.yaml for Helm.
Values: {
// message is a string with a default value. @tag indicates a value may
// be injected from the platform spec component parameters.
ui: {
message: string | *"Hello World" @tag(greeting, type=string)
}
}
}

View File

@@ -0,0 +1 @@
cat <<EOF > components/podinfo/podinfo.cue

View File

@@ -0,0 +1 @@
deploy/components/podinfo/podinfo.gen.yaml

View File

@@ -0,0 +1,2 @@
rendered podinfo in 312.472625ms
rendered platform in 312.557375ms

View File

@@ -0,0 +1,8 @@
package holos
Platform: Components: podinfo: {
name: "podinfo"
path: "components/podinfo"
// Inject a value into the component.
parameters: greeting: "Hello Holos!"
}

View File

@@ -0,0 +1 @@
cat <<EOF > platform/podinfo.cue

View File

@@ -0,0 +1 @@
holos render platform

View File

@@ -0,0 +1,93 @@
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app.kubernetes.io/managed-by: Helm
app.kubernetes.io/name: podinfo
app.kubernetes.io/version: 6.6.2
helm.sh/chart: podinfo-6.6.2
name: podinfo
spec:
replicas: 1
selector:
matchLabels:
app.kubernetes.io/name: podinfo
strategy:
rollingUpdate:
maxUnavailable: 1
type: RollingUpdate
template:
metadata:
annotations:
prometheus.io/port: "9898"
prometheus.io/scrape: "true"
labels:
app.kubernetes.io/name: podinfo
spec:
containers:
- command:
- ./podinfo
- --port=9898
- --cert-path=/data/cert
- --port-metrics=9797
- --grpc-port=9999
- --grpc-service-name=podinfo
- --level=info
- --random-delay=false
- --random-error=false
env:
- name: PODINFO_UI_MESSAGE
value: Hello Holos!
- name: PODINFO_UI_COLOR
value: '#34577c'
image: ghcr.io/stefanprodan/podinfo:6.6.2
imagePullPolicy: IfNotPresent
livenessProbe:
exec:
command:
- podcli
- check
- http
- localhost:9898/healthz
failureThreshold: 3
initialDelaySeconds: 1
periodSeconds: 10
successThreshold: 1
timeoutSeconds: 5
name: podinfo
ports:
- containerPort: 9898
name: http
protocol: TCP
- containerPort: 9797
name: http-metrics
protocol: TCP
- containerPort: 9999
name: grpc
protocol: TCP
readinessProbe:
exec:
command:
- podcli
- check
- http
- localhost:9898/readyz
failureThreshold: 3
initialDelaySeconds: 1
periodSeconds: 10
successThreshold: 1
timeoutSeconds: 5
resources:
limits: null
requests:
cpu: 1m
memory: 16Mi
volumeMounts:
- mountPath: /data
name: data
terminationGracePeriodSeconds: 30
volumes:
- emptyDir: {}
name: data

View File

@@ -0,0 +1,23 @@
apiVersion: v1
kind: Service
metadata:
labels:
app.kubernetes.io/managed-by: Helm
app.kubernetes.io/name: podinfo
app.kubernetes.io/version: 6.6.2
helm.sh/chart: podinfo-6.6.2
name: podinfo
spec:
ports:
- name: http
port: 9898
protocol: TCP
targetPort: http
- name: grpc
port: 9999
protocol: TCP
targetPort: grpc
selector:
app.kubernetes.io/name: podinfo
type: ClusterIP

View File

@@ -0,0 +1,3 @@
awk 'BEGIN {RS="---"} NR==1 {print > "service.yaml"} NR==2 {print > "deployment.yaml"}' $1
mv service.yaml $2/rendered-service.yaml
mv deployment.yaml $2/rendered-deployment.yaml

View File

@@ -0,0 +1 @@
tree -L 3 -I cue.mod .

View File

@@ -0,0 +1,17 @@
.
|-- components
| `-- podinfo
| |-- podinfo.cue
| `-- vendor
|-- deploy
| `-- components
| `-- podinfo
|-- platform
| |-- platform.gen.cue
| `-- podinfo.cue
|-- platform.metadata.json
|-- resources.cue
|-- schema.cue
`-- tags.cue
8 directories, 7 files

View File

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

View File

@@ -1 +1 @@
0.102.5
0.104.1

View File

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

View File

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

View File

@@ -1,4 +1,4 @@
[main 7bc6772] import values
[main 3788921] 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 146.654292ms
rendered prometheus in 178.845292ms
rendered platform in 178.9115ms
rendered blackbox in 129.142708ms
rendered prometheus in 165.260375ms
rendered platform in 165.33ms

View File

@@ -1,4 +1,4 @@
[main d144f24] add blackbox and prometheus
[main 654ae06] 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,3 @@
rendered blackbox in 1.794799666s
rendered prometheus in 1.835097625s
rendered platform in 1.835185792s
rendered blackbox in 1.096663084s
rendered prometheus in 1.151784875s
rendered platform in 1.151839916s

View File

@@ -1,2 +1,2 @@
[main 1399737] render integrated blackbox and prometheus manifests
[main 9bc0126] render integrated blackbox and prometheus manifests
2 files changed, 7 insertions(+), 7 deletions(-)

View File

@@ -0,0 +1,7 @@
exec bash -c 'bash -euo pipefail $WORK/command.sh 2>&1'
cmp stdout $WORK/output.txt
-- command.sh --
holos --version
-- output.txt --
0.104.1

View File

@@ -0,0 +1,226 @@
# Set $HOME because:
# - Helm uses it for temporary files
# - Git requires it for setting author name/email globally
env HOME=$WORK/.tmp
chmod 0755 $WORK/update.sh
# Configure git author for testscript execution
exec git config --global user.name 'Holos Docs'
exec git config --global user.email 'hello@holos.run'
exec git config --global init.defaultBranch main
# Remove the tutorial directory if it already exists
exec rm -rf holos-kustomize-tutorial
# Create and change to the tutorial directory, and then initialize the Holos platform
exec bash -c 'bash -euo pipefail $WORK/mkdir-and-init.sh'
cd holos-kustomize-tutorial
# Initialize git
exec bash -c 'bash -euo pipefail $WORK/git-init.sh'
# Create the component directory
exec bash -c 'bash -euo pipefail $WORK/mkdir-component.sh'
# Combine and execute the multiline httpbin component header/body/trailer files
exec cat $WORK/httpbin-component-header.sh $WORK/httpbin-component-body.cue $WORK/eof-trailer.sh
stdin stdout
exec bash -xeuo pipefail
# Combine and execute the multiline httpbin yaml header/body/trailer files
exec cat $WORK/httpbin-yaml-header.sh $WORK/httpbin-yaml-body.yaml $WORK/eof-trailer.sh
stdin stdout
exec bash -xeuo pipefail
# Combine and execute the multiline registration header/body/trailer files
exec cat $WORK/register-component-header.sh $WORK/register-component-body.cue $WORK/eof-trailer.sh
stdin stdout
exec bash -xeuo pipefail
# Render the platform, capture stdout, and use update.sh to gate whether the
# output file should be updated.
#
# NOTE: The [net] condition will test whether external network access is available
[net] exec bash -c 'bash -euo pipefail $WORK/render.sh 2>&1'
[net] stdin stdout
exec $WORK/update.sh $WORK/register-component-output.txt
# Git commit and capture output
exec bash -c 'bash -euo pipefail $WORK/git-commit-component.sh'
stdin stdout
exec $WORK/update.sh $WORK/git-commit-component-output.txt
# Export Build Plan and capture output
exec bash -c 'bash -euo pipefail $WORK/cue-export.sh'
stdin stdout
exec $WORK/update.sh $WORK/buildplan-output.cue
# Combine and execute the multiline kustomize patch header/body/trailer files
exec cat $WORK/httpbin-patch-header.sh $WORK/httpbin-patch-body.cue $WORK/eof-trailer.sh
stdin stdout
exec bash -xeuo pipefail
# Render the platform and capture output
[net] exec bash -c 'bash -euo pipefail $WORK/render.sh 2>&1'
[net] stdin stdout
exec $WORK/update.sh $WORK/kustomize-patch-render-output.txt
# Git diff and capture output
exec bash -c 'bash -euo pipefail $WORK/git-diff.sh'
stdin stdout
exec $WORK/update.sh $WORK/git.diff
# Git commit and capture output
exec bash -c 'bash -euo pipefail $WORK/git-commit-final.sh'
stdin stdout
exec $WORK/update.sh $WORK/git-commit-final-output.txt
# Clean up the tutorial directory and tmp $HOME directory
cd $WORK
exec rm -rf holos-kustomize-tutorial
exec rm -rf $HOME
-- update.sh --
#! /bin/bash
set -euo pipefail
[[ -s "$1" ]] && [[ -z "${HOLOS_UPDATE_SCRIPTS:-}" ]] && exit 0
cat > "$1"
-- mkdir-and-init.sh --
mkdir holos-kustomize-tutorial
cd holos-kustomize-tutorial
holos init platform v1alpha5
-- git-init.sh --
git init . && git add . && git commit -m initial
-- mkdir-component.sh --
mkdir -p components/httpbin
-- httpbin-component-header.sh --
cat <<EOF > components/httpbin/httpbin.cue
-- httpbin-component-body.cue --
package holos
// Produce a Kustomize BuildPlan for Holos
holos: Kustomize.BuildPlan
// https://github.com/mccutchen/go-httpbin/blob/v2.15.0/kustomize/README.md
Kustomize: #Kustomize & {
KustomizeConfig: {
// Files tells Holos to copy the file from the component path to the
// temporary directory Holos uses for BuildPlan execution.
Files: {
"httpbin.yaml": _
}
CommonLabels: {
"app.kubernetes.io/name": "httpbin"
}
// Kustomization represents a kustomization.yaml file in CUE. Holos
// marshals this field into a `kustomization.yaml` while processing a
// BuildPlan. See
// https://kubectl.docs.kubernetes.io/references/kustomize/kustomization/
Kustomization: {
images: [{name: "mccutchen/go-httpbin"}]
// Use a hidden field to compose patches easily with a struct. Hidden
// fields are not included in exported structures.
_patches: {}
// Convert the hidden struct to a list.
patches: [for x in _patches {x}]
}
}
}
-- eof-trailer.sh --
EOF
-- httpbin-yaml-header.sh --
cat <<EOF > components/httpbin/httpbin.yaml
-- httpbin-yaml-body.yaml --
# https://github.com/mccutchen/go-httpbin/blob/v2.15.0/kustomize/resources.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: httpbin
spec:
template:
spec:
containers:
- name: httpbin
image: mccutchen/go-httpbin
ports:
- name: http
containerPort: 8080
protocol: TCP
livenessProbe:
httpGet:
path: /status/200
port: http
readinessProbe:
httpGet:
path: /status/200
port: http
resources: {}
---
apiVersion: v1
kind: Service
metadata:
name: httpbin
spec:
ports:
- port: 80
targetPort: http
protocol: TCP
name: http
appProtocol: http
-- register-component-header.sh --
cat <<EOF > platform/httpbin.cue
-- register-component-body.cue --
package holos
Platform: Components: {
httpbin: {
name: "httpbin"
path: "components/httpbin"
}
}
-- git-commit-component.sh --
git add . && git commit -m 'add httpbin'
-- cue-export.sh --
holos cue export --expression holos --out=yaml ./components/httpbin
-- httpbin-patch-header.sh --
cat <<EOF > components/httpbin/patches.cue
-- httpbin-patch-body.cue --
package holos
import "encoding/yaml"
// Mix in a Kustomize patch to the configuration.
Kustomize: KustomizeConfig: Kustomization: _patches: {
probe: {
target: kind: "Service"
target: name: "httpbin"
patch: yaml.Marshal([{
op: "add"
path: "/metadata/annotations/prometheus.io~1probe"
value: "true"
}])
}
}
-- httpbin-component-output.txt --
rendered httpbin in 197.030208ms
rendered platform in 197.416416ms
-- render.sh --
holos render platform
-- git-diff.sh --
git diff
-- git.diff --
diff --git a/deploy/components/httpbin/httpbin.gen.yaml b/deploy/components/httpbin/httpbin.gen.yaml
index 298b9a8..a16bd1a 100644
--- a/deploy/components/httpbin/httpbin.gen.yaml
+++ b/deploy/components/httpbin/httpbin.gen.yaml
@@ -1,6 +1,8 @@
apiVersion: v1
kind: Service
metadata:
+ annotations:
+ prometheus.io/probe: "true"
labels:
app.kubernetes.io/name: httpbin
name: httpbin
-- git-commit-final.sh --
git add . && git commit -m 'annotate httpbin for prometheus probes'

View File

@@ -0,0 +1 @@
holos --version

View File

@@ -0,0 +1 @@
0.104.1

View File

@@ -0,0 +1,36 @@
kind: BuildPlan
apiVersion: v1alpha5
metadata:
name: no-name
spec:
artifacts:
- artifact: components/no-name/no-name.gen.yaml
generators:
- kind: Resources
output: resources.gen.yaml
resources: {}
- kind: File
output: httpbin.yaml
file:
source: httpbin.yaml
transformers:
- kind: Kustomize
inputs:
- resources.gen.yaml
- httpbin.yaml
output: components/no-name/no-name.gen.yaml
kustomize:
kustomization:
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
labels:
- includeSelectors: false
pairs:
app.kubernetes.io/name: httpbin
patches: []
images:
- name: mccutchen/go-httpbin
resources:
- resources.gen.yaml
- httpbin.yaml
validators: []

View File

@@ -0,0 +1 @@
holos cue export --expression holos --out=yaml ./components/httpbin

View File

@@ -0,0 +1 @@
EOF

View File

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

View File

@@ -0,0 +1 @@
git add . && git commit -m 'add httpbin'

View File

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

View File

@@ -0,0 +1 @@
git add . && git commit -m 'annotate httpbin for prometheus probes'

View File

@@ -0,0 +1 @@
git init . && git add . && git commit -m initial

View File

@@ -0,0 +1,13 @@
diff --git a/deploy/components/httpbin/httpbin.gen.yaml b/deploy/components/httpbin/httpbin.gen.yaml
index 298b9a8..a16bd1a 100644
--- a/deploy/components/httpbin/httpbin.gen.yaml
+++ b/deploy/components/httpbin/httpbin.gen.yaml
@@ -1,6 +1,8 @@
apiVersion: v1
kind: Service
metadata:
+ annotations:
+ prometheus.io/probe: "true"
labels:
app.kubernetes.io/name: httpbin
name: httpbin

View File

@@ -0,0 +1,30 @@
package holos
// Produce a Kustomize BuildPlan for Holos
holos: Kustomize.BuildPlan
// https://github.com/mccutchen/go-httpbin/blob/v2.15.0/kustomize/README.md
Kustomize: #Kustomize & {
KustomizeConfig: {
// Files tells Holos to copy the file from the component path to the
// temporary directory Holos uses for BuildPlan execution.
Files: {
"httpbin.yaml": _
}
CommonLabels: {
"app.kubernetes.io/name": "httpbin"
}
// Kustomization represents a kustomization.yaml file in CUE. Holos
// marshals this field into a `kustomization.yaml` while processing a
// BuildPlan. See
// https://kubectl.docs.kubernetes.io/references/kustomize/kustomization/
Kustomization: {
images: [{name: "mccutchen/go-httpbin"}]
// Use a hidden field to compose patches easily with a struct. Hidden
// fields are not included in exported structures.
_patches: {}
// Convert the hidden struct to a list.
patches: [for x in _patches {x}]
}
}
}

View File

@@ -0,0 +1 @@
cat <<EOF > components/httpbin/httpbin.cue

View File

@@ -0,0 +1,2 @@
rendered httpbin in 197.030208ms
rendered platform in 197.416416ms

View File

@@ -0,0 +1,16 @@
package holos
import "encoding/yaml"
// Mix in a Kustomize patch to the configuration.
Kustomize: KustomizeConfig: Kustomization: _patches: {
probe: {
target: kind: "Service"
target: name: "httpbin"
patch: yaml.Marshal([{
op: "add"
path: "/metadata/annotations/prometheus.io~1probe"
value: "true"
}])
}
}

View File

@@ -0,0 +1 @@
cat <<EOF > components/httpbin/patches.cue

View File

@@ -0,0 +1,36 @@
# https://github.com/mccutchen/go-httpbin/blob/v2.15.0/kustomize/resources.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: httpbin
spec:
template:
spec:
containers:
- name: httpbin
image: mccutchen/go-httpbin
ports:
- name: http
containerPort: 8080
protocol: TCP
livenessProbe:
httpGet:
path: /status/200
port: http
readinessProbe:
httpGet:
path: /status/200
port: http
resources: {}
---
apiVersion: v1
kind: Service
metadata:
name: httpbin
spec:
ports:
- port: 80
targetPort: http
protocol: TCP
name: http
appProtocol: http

View File

@@ -0,0 +1 @@
cat <<EOF > components/httpbin/httpbin.yaml

View File

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

View File

@@ -0,0 +1,3 @@
mkdir holos-kustomize-tutorial
cd holos-kustomize-tutorial
holos init platform v1alpha5

View File

@@ -0,0 +1 @@
mkdir -p components/httpbin

View File

@@ -0,0 +1,8 @@
package holos
Platform: Components: {
httpbin: {
name: "httpbin"
path: "components/httpbin"
}
}

View File

@@ -0,0 +1 @@
cat <<EOF > platform/httpbin.cue

View File

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

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