github
kind: Composition
apiVersion: apiextensions.crossplane.io/v1
metadata:
name: github
creationTimestamp: null
spec:
compositeTypeRef:
apiVersion: devopstoolkitseries.com/v1alpha1
kind: GitHub
mode: Pipeline
pipeline:
- step: github
functionRef:
name: crossplane-contrib-function-kcl
input:
apiVersion: krm.kcl.dev/v1alpha1
kind: KCLRun
spec:
source: >
oxr = option("params").oxr
_metadata = lambda suffix: str, kind: str -> any {
{
if suffix == "":
name = oxr.spec.id
else:
name = oxr.spec.id + "-" + suffix
annotations = {
"krm.kcl.dev/composition-resource-name" = oxr.spec.id + "-" + kind + "-" + suffix
}
}
}
schema repositoryFile:
_name: str
_file: str
_content: str
_branch: bool = True
apiVersion = "repo.github.upbound.io/v1alpha1"
kind = "RepositoryFile"
metadata = _metadata(_name, "file")
spec = {
forProvider = {
commitAuthor = "Crossplane"
commitEmail = "github-provider@crossplane.io"
commitMessage = "Crossplane rocks [skip ci]"
content = _content
file = _file
repositorySelector.matchControllerRef = True
if _branch:
branch = "init"
}
}
items = [
{
apiVersion = "repo.github.upbound.io/v1alpha1"
kind = "Repository"
metadata = _metadata("", "repo")
spec = {
forProvider = {
name = oxr.spec.id
if oxr.spec.parameters.public:
visibility = "public"
else:
visibility = "private"
hasIssues = True
}
managementPolicies: [
"Create",
"Observe",
"Update",
"LateInitialize",
]
}
}
{
apiVersion = "repo.github.upbound.io/v1alpha1"
kind = "Branch"
metadata = _metadata("init", "branch")
spec.forProvider = {
branch = "init"
repositorySelector.matchControllerRef = True
}
}
{
_body = """\
1. Open https://github.com/${oxr.spec.parameters.repo.user}/${oxr.spec.id}/settings/actions and enable `Read and write permissions`.
2. Open https://github.com/${oxr.spec.parameters.repo.user}/${oxr.spec.id}/settings/secrets/actions and add `PAT_TOKEN` with the GitHub token to `Repository secrets`.
3. Review, modify (optional), merge, enjoy.
"""
if oxr.spec.parameters?.gitops?.enabled:
_body = _body + """\
4. Execute the `gitops` workflow to include the app into the GitOps repository.
"""
apiVersion = "repo.github.upbound.io/v1alpha1"
kind = "PullRequest"
metadata = _metadata("init", "pr")
spec.forProvider = {
baseRef = "main"
headRef = "init"
body = _body
title = "Initial"
maintainerCanModify = True
baseRepositorySelector.matchControllerRef = True
}
}
repositoryFile {
_name = "gitignore"
_file = ".gitignore"
_content = """\
/tmp
"""
_branch = False
}
repositoryFile {
_name = "devbox"
_file = "devbox.json"
_content = """\
{
"$schema": "https://raw.githubusercontent.com/jetify-com/devbox/0.11.1/.schema/devbox.schema.json",
"packages": [
"tmux@3.4"
],
"shell": {
"init_hook": [],
"scripts": {}
}
}
"""
_branch = False
}
repositoryFile {
_name = "readme"
_file = "README.md"
_content = """\
# ${oxr.spec.id}
Silly description
"""
}
repositoryFile {
_name = "app"
_file = "k8s/appclaim.yaml"
_content = """\
apiVersion: devopstoolkitseries.com/v1alpha1
kind: AppClaim
metadata:
name: ${oxr.spec.id}
spec:
id: ${oxr.spec.id}
compositionSelector:
matchLabels:
type: backend
location: local
parameters:
namespace: ${oxr.spec.parameters.app.namespace}
image: ${oxr.spec.parameters.registry}/${oxr.spec.id}
port: 8080
host: ${oxr.spec.parameters.app.host}
"""
}
if oxr.spec.parameters?.db?.enabled:
repositoryFile {
_name = "db"
_file = "k8s/dbclaim.yaml"
_content = """\
---
apiVersion: v1
kind: Secret
metadata:
name: ${oxr.spec.id}-db-password
data:
password: T1QrOXZQcDhMdXhoeFVQWVpLSk1kUG1YM04xTzBTd3YzWG5ZVjI0UFZzcz0=
---
apiVersion: devopstoolkitseries.com/v1alpha1
kind: SQLClaim
metadata:
name: ${oxr.spec.id}-db
spec:
id: ${oxr.spec.id}-db
compositionSelector:
matchLabels:
provider: ${oxr.spec.parameters.db.provider}
db: postgresql
parameters:
version: "${oxr.spec.parameters.db.version}"
size: medium
"""
}
repositoryFile {
_name = "ci"
_file = ".github/workflows/ci.yaml"
_content = """\
name: ci
run-name: ci
on:
push:
branches:
- main
jobs:
build-container-image:
runs-on: ubuntu-latest
env:
TAG: 0.0.$$[[ github.run_number ]]
FORCE_COLOR: 1
steps:
- uses: earthly/actions-setup@v1
with:
version: v0.8.0
- name: Checkout
uses: actions/checkout@v4
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Build and push
run: |
earthly --push +all --tag $TAG
- name: Commit changes
run: |
git config --local user.email "41898282+github-actions[bot]@users.noreply.github.com"
git config --local user.name "github-actions[bot]"
git add .
git commit -m "Release $$[[ env.TAG ]] [skip ci]"
- name: Push changes
uses: ad-m/github-push-action@master
with:
github_token: $$[[ secrets.GITHUB_TOKEN ]]
branch: $$[[ github.ref ]]
""".replace("[[", "{{").replace("]]", "}}")
}
if oxr.spec.parameters?.gitops?.enabled and oxr.spec.parameters?.gitops?.user != "" and oxr.spec.parameters?.gitops?.repo != "":
repositoryFile {
_name = "gitops"
_file = ".github/workflows/gitops.yaml"
_content = """\
name: gitops
run-name: gitops
on: workflow_dispatch
jobs:
manifest:
runs-on: ubuntu-latest
env:
FORCE_COLOR: 1
APP: crossplane-gh-demo
steps:
- name: Checkout
uses: actions/checkout@v4
with:
repository: ${oxr.spec.parameters.gitops.user}/${oxr.spec.parameters.gitops.repo}
token: $$[[ secrets.PAT_TOKEN ]]
- name: Manifest
run: |
cp argocd-app.tmpl apps/${oxr.spec.id}.yaml
yq --inplace ".metadata.name = \\"${oxr.spec.id}\\"" apps/${oxr.spec.id}.yaml
yq --inplace ".spec.source.repoURL = \\"https://github.com/$GITHUB_REPOSITORY\\"" apps/${oxr.spec.id}.yaml
yq --inplace ".spec.destination.namespace = \\"${oxr.spec.parameters.app.namespace}\\"" apps/${oxr.spec.id}.yaml
git config --local user.email "41898282+github-actions[bot]@users.noreply.github.com"
git config --local user.name "github-actions[bot]"
git add .
git commit -m "Added apps/${oxr.spec.id}.yaml [skip ci]"
- name: Push changes
uses: ad-m/github-push-action@master
with:
github_token: $$[[ secrets.PAT_TOKEN ]]
repository: ${oxr.spec.parameters.gitops.user}/${oxr.spec.parameters.gitops.repo}
force: true
""".replace("[[", "{{").replace("]]", "}}")
_branch = False
}
if oxr.spec.parameters?.backstage?.enabled:
repositoryFile {
_name = "backstage-catalog-info"
_file = "catalog-info.yaml"
_content = """\
apiVersion: backstage.io/v1alpha1
kind: Component
metadata:
name: ${oxr.spec.id}
description: Silly description
annotations:
github.com/project-slug: ${oxr.spec.parameters.repo.user}/${oxr.spec.id}
backstage.io/kubernetes-id: dot
backstage.io/kubernetes-namespace: ${oxr.spec.parameters.app.namespace}
backstage.io/kubernetes-label-selector: app.kubernetes.io/name=${oxr.spec.id}
spec:
type: backend
lifecycle: production
owner: ${oxr.spec.parameters.repo.user}/${oxr.spec.id}
system: DevOpsCatalog
"""
}
if oxr.spec.parameters.app.language == "go":
repositoryFile {
_name = "main-go"
_file = "main.go"
_content = """\
package main
import (
"fmt"
"log"
"net/http"
"os"
"github.com/gin-gonic/gin"
)
func main() {
log.Println("Starting server...")
router := gin.New()
router.GET("/", rootHandler)
port := os.Getenv("PORT")
if len(port) == 0 {
port = "8080"
}
router.Run(fmt.Sprintf(":%s", port))
}
func rootHandler(ctx *gin.Context) {
ctx.String(http.StatusOK, "This is a silly demo")
}
"""
}
repositoryFile {
_name = "go-mod"
_file = "go.mod"
_content = """\
module app
go 1.22.0
require github.com/gin-gonic/gin v1.10.0
require (
github.com/bytedance/sonic v1.11.6 // indirect
github.com/bytedance/sonic/loader v0.1.1 // indirect
github.com/cloudwego/base64x v0.1.4 // indirect
github.com/cloudwego/iasm v0.2.0 // indirect
github.com/gabriel-vasile/mimetype v1.4.3 // indirect
github.com/gin-contrib/sse v0.1.0 // indirect
github.com/go-playground/locales v0.14.1 // indirect
github.com/go-playground/universal-translator v0.18.1 // indirect
github.com/go-playground/validator/v10 v10.20.0 // indirect
github.com/goccy/go-json v0.10.2 // indirect
github.com/json-iterator/go v1.1.12 // indirect
github.com/klauspost/cpuid/v2 v2.2.7 // indirect
github.com/leodido/go-urn v1.4.0 // indirect
github.com/mattn/go-isatty v0.0.20 // indirect
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/modern-go/reflect2 v1.0.2 // indirect
github.com/pelletier/go-toml/v2 v2.2.2 // indirect
github.com/twitchyliquid64/golang-asm v0.15.1 // indirect
github.com/ugorji/go/codec v1.2.12 // indirect
golang.org/x/arch v0.8.0 // indirect
golang.org/x/crypto v0.23.0 // indirect
golang.org/x/net v0.25.0 // indirect
golang.org/x/sys v0.20.0 // indirect
golang.org/x/text v0.15.0 // indirect
google.golang.org/protobuf v1.34.1 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
)
"""
}
repositoryFile {
_name = "go-sum"
_file = "go.sum"
_content = """\
github.com/bytedance/sonic v1.11.6 h1:oUp34TzMlL+OY1OUWxHqsdkgC/Zfc85zGqw9siXjrc0=
github.com/bytedance/sonic v1.11.6/go.mod h1:LysEHSvpvDySVdC2f87zGWf6CIKJcAvqab1ZaiQtds4=
github.com/bytedance/sonic/loader v0.1.1 h1:c+e5Pt1k/cy5wMveRDyk2X4B9hF4g7an8N3zCYjJFNM=
github.com/bytedance/sonic/loader v0.1.1/go.mod h1:ncP89zfokxS5LZrJxl5z0UJcsk4M4yY2JpfqGeCtNLU=
github.com/cloudwego/base64x v0.1.4 h1:jwCgWpFanWmN8xoIUHa2rtzmkd5J2plF/dnLS6Xd/0Y=
github.com/cloudwego/base64x v0.1.4/go.mod h1:0zlkT4Wn5C6NdauXdJRhSKRlJvmclQ1hhJgA0rcu/8w=
github.com/cloudwego/iasm v0.2.0 h1:1KNIy1I1H9hNNFEEH3DVnI4UujN+1zjpuk6gwHLTssg=
github.com/cloudwego/iasm v0.2.0/go.mod h1:8rXZaNYT2n95jn+zTI1sDr+IgcD2GVs0nlbbQPiEFhY=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/gabriel-vasile/mimetype v1.4.3 h1:in2uUcidCuFcDKtdcBxlR0rJ1+fsokWf+uqxgUFjbI0=
github.com/gabriel-vasile/mimetype v1.4.3/go.mod h1:d8uq/6HKRL6CGdk+aubisF/M5GcPfT7nKyLpA0lbSSk=
github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE=
github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI=
github.com/gin-gonic/gin v1.10.0 h1:nTuyha1TYqgedzytsKYqna+DfLos46nTv2ygFy86HFU=
github.com/gin-gonic/gin v1.10.0/go.mod h1:4PMNQiOhvDRa013RKVbsiNwoyezlm2rm0uX/T7kzp5Y=
github.com/go-playground/assert/v2 v2.2.0 h1:JvknZsQTYeFEAhQwI4qEt9cyV5ONwRHC+lYKSsYSR8s=
github.com/go-playground/assert/v2 v2.2.0/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4=
github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/oXslEjJA=
github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY=
github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY=
github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY=
github.com/go-playground/validator/v10 v10.20.0 h1:K9ISHbSaI0lyB2eWMPJo+kOS/FBExVwjEviJTixqxL8=
github.com/go-playground/validator/v10 v10.20.0/go.mod h1:dbuPbCMFw/DrkbEynArYaCwl3amGuJotoKCe95atGMM=
github.com/goccy/go-json v0.10.2 h1:CrxCmQqYDkv1z7lO7Wbh2HN93uovUHgrECaO5ZrCXAU=
github.com/goccy/go-json v0.10.2/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I=
github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU=
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg=
github.com/klauspost/cpuid/v2 v2.2.7 h1:ZWSB3igEs+d0qvnxR/ZBzXVmxkgt8DdzP6m9pfuVLDM=
github.com/klauspost/cpuid/v2 v2.2.7/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws=
github.com/knz/go-libedit v1.10.1/go.mod h1:MZTVkCWyz0oBc7JOWP3wNAzd002ZbM/5hgShxwh4x8M=
github.com/leodido/go-urn v1.4.0 h1:WT9HwE9SGECu3lg4d/dIA+jxlljEa1/ffXKmRjqdmIQ=
github.com/leodido/go-urn v1.4.0/go.mod h1:bvxc+MVxLKB4z00jd1z+Dvzr47oO32F/QSNjSBOlFxI=
github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M=
github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
github.com/pelletier/go-toml/v2 v2.2.2 h1:aYUidT7k73Pcl9nb2gScu7NSrKCSHIDE89b3+6Wq+LM=
github.com/pelletier/go-toml/v2 v2.2.2/go.mod h1:1t835xjRzz80PqgE6HHgN2JOsmgYu/h4qDAS4n929Rs=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI=
github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08=
github.com/ugorji/go/codec v1.2.12 h1:9LC83zGrHhuUA9l16C9AHXAqEV/2wBQ4nkvumAE65EE=
github.com/ugorji/go/codec v1.2.12/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg=
golang.org/x/arch v0.0.0-20210923205945-b76863e36670/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8=
golang.org/x/arch v0.8.0 h1:3wRIsP3pM4yUptoR96otTUOXI367OS0+c9eeRi9doIc=
golang.org/x/arch v0.8.0/go.mod h1:FEVrYAQjsQXMVJ1nsMoVVXPZg6p2JE2mx8psSWTDQys=
golang.org/x/crypto v0.23.0 h1:dIJU/v2J8Mdglj/8rJ6UUOM3Zc9zLZxVZwwxMooUSAI=
golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v8=
golang.org/x/net v0.25.0 h1:d/OCCoBEUq33pjydKrGQhw7IlUPI2Oylr+8qLx49kac=
golang.org/x/net v0.25.0/go.mod h1:JkAGAh7GEvH74S6FOH42FLoXpXbE/aqXSrIQjXgsiwM=
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.20.0 h1:Od9JTbYCk261bKm4M/mw7AklTlFYIa0bIp9BgSm1S8Y=
golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/text v0.15.0 h1:h1V/4gjBv8v9cjcR6+AR5+/cIYK5N/WAgiv4xlsEtAk=
golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
google.golang.org/protobuf v1.34.1 h1:9ddQBjfCyZPOHPUiPxpYESBLc+T8P3E+Vo4IbKZgFWg=
google.golang.org/protobuf v1.34.1/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
nullprogram.com/x/optparse v1.0.0/go.mod h1:KdyPE+Igbe0jQUrVfMqDMeJQIJZEuyV7pjYmp6pbG50=
rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4=
"""
}
repositoryFile {
_name = "earthfile"
_file = "Earthfile"
_content = """\
VERSION 0.8
FROM ghcr.io/vfarcic/silly-demo-earthly:0.0.5
ARG --global registry=${oxr.spec.parameters.registry}
ARG --global image=${oxr.spec.id}
WORKDIR /go-workdir
binary:
COPY go.mod go.sum .
COPY *.go .
RUN GOOS=linux GOARCH=amd64 go build -o app
SAVE ARTIFACT app
image:
BUILD +binary
ARG tag='latest'
FROM scratch
EXPOSE 8080
CMD ["app"]
ENV VERSION=$tag
COPY +binary/app /usr/local/bin/app
SAVE IMAGE --push $registry/$image:$tag $registry/$image:latest
manifests:
ARG tag
COPY k8s/appclaim.yaml k8s/appclaim.yaml
RUN yq --inplace ".spec.parameters.image = \\"$registry/$image:$tag\\"" k8s/appclaim.yaml
SAVE ARTIFACT k8s/appclaim.yaml AS LOCAL k8s/appclaim.yaml
all:
ARG tag
WAIT
BUILD +image --tag $tag
END
BUILD +manifests --tag $tag
"""
}
if oxr.spec.parameters.app.language == "js":
repositoryFile {
_name = "main-js"
_file = "main.js"
_content = """\
console.log('Hello World');
"""
}
repositoryFile {
_name = "earthfile"
_file = "Earthfile"
_content = """\
VERSION 0.8
FROM ghcr.io/vfarcic/silly-demo-earthly:0.0.5
ARG --global registry=${oxr.spec.parameters.registry}
ARG --global image=${oxr.spec.id}
image:
ARG tag='latest'
FROM scratch
RUN echo "I haven't used JS for a while so you'll need to find someone else to write this Earthfile for you."
SAVE IMAGE --push $registry/$image:$tag $registry/$image:latest
manifests:
RUN yq --inplace ".spec.parameters.image = \\"$registry/$image:$tag\\"" k8s/appclaim.yaml
all:
ARG tag
WAIT
BUILD +image --tag $tag
END
BUILD +manifests --tag $tag
"""
}
]
- step: automatically-detect-ready-composed-resources
functionRef:
name: crossplane-contrib-function-auto-ready
writeConnectionSecretsToNamespace: crossplane-system