Skip to content

Commit 02848c6

Browse files
committed
Add attic token service
1 parent eb2950a commit 02848c6

File tree

15 files changed

+402
-146
lines changed

15 files changed

+402
-146
lines changed

.github/workflows/demo.yaml

+4
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,10 @@ jobs:
3232
ACTOR=${ACTOR,,}
3333
source tools/scripts/oci_helpers.sh
3434
crane auth login -u "$ACTOR" --password-stdin <<< "$TOKEN" "ghcr.io"
35+
readarray -t images <<< "$(find result/images -maxdepth 1 -mindepth 1 -type d)"
36+
for image in "${images[@]}"; do
37+
crane push "$image" "$BASE_URL/netserv/$(basename image):latest"
38+
done
3539
readarray -t charts <<< "$(find result/charts -maxdepth 1 -mindepth 1 -type d)"
3640
for chart in "${charts[@]}"; do
3741
crane push "$chart" "$BASE_URL/charts/$(get_chart_name "$chart"):$(get_chart_version "$chart")"

cue.mod/pkg/pythoner6.dev/c8s/c8s.cue

+14
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,15 @@ ChartsDef=#Charts: {
5656
}
5757
}
5858

59+
ImagesDef=#Images: {
60+
#in: string
61+
for name, digest in yaml.Unmarshal(#in) & {[_]: string} {
62+
(name): {
63+
"digest": digest
64+
}
65+
}
66+
}
67+
5968
#Namespace: corev1.#Namespace & {
6069
#name: string
6170
metadata: name: #name
@@ -137,6 +146,7 @@ ChartsDef=#Charts: {
137146
#defaultResourceNamespace: #Namespace
138147
#repo: string
139148
#charts: string
149+
#images: string
140150
#chartsRepo: helmrepository.#HelmRepository
141151

142152
let chartsRepo = #chartsRepo & {metadata: namespace: #defaultKustomizationNamespace.metadata.name}
@@ -146,6 +156,10 @@ ChartsDef=#Charts: {
146156
#repo: chartsRepo
147157
}
148158

159+
#Images: ImagesDef & {
160+
#in: #images
161+
}
162+
149163
kustomizations: #Kustomizations & {
150164
#appName: this.#appName
151165
#defaultKustomizationNamespace: this.#defaultKustomizationNamespace

flake.nix

+14-4
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
kubeVersion = "v1.29.0";
1515

1616
cue = import ./tools/cue.nix {inherit pkgs kubeVersion;};
17+
oci = import ./tools/oci.nix {inherit pkgs;};
1718
utils = import ./tools/utils.nix {inherit pkgs;};
1819

1920
versions = builtins.fromJSON (builtins.readFile ./versions.json);
@@ -136,10 +137,16 @@
136137
flux-components.components."flux-components.yaml" = flux-manifests;
137138
cilium.gateway-crds."crds.yaml" = gateway-crds;
138139
};
140+
images = {
141+
attic-token-service = attic-token-service-image;
142+
};
139143
};
140144
ociImages = cue.images {
141145
name = "oci";
142146
inherit charts;
147+
images = {
148+
attic-token-service = attic-token-service-image;
149+
};
143150
src = default;
144151
};
145152
elector = pkgs.buildGoModule {
@@ -229,10 +236,13 @@
229236
};
230237
};
231238
};
232-
attic-token-service-image = pkgs.dockerTools.buildLayeredImage {
233-
name = "attic-token-service-image";
234-
contents = [ attic-token-service ];
235-
config.Cmd = [ "attic-token-service" ];
239+
attic-token-service-image = oci.fromDockerArchive {
240+
name = "attic-token-service-image-oci";
241+
src = pkgs.dockerTools.buildLayeredImage {
242+
name = "attic-token-service-image";
243+
contents = [ attic-token-service ];
244+
config.Cmd = [ "attic-token-service" ];
245+
};
236246
};
237247
};
238248
devShells = {

k8s/attic/attic.cue

+45-3
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ kustomizations: $default: "manifest": {
3232
kind: "ExternalSecret"
3333
spec: {
3434
refreshInterval: "0"
35+
template: data: HS256_SECRET: "{{ .password }}"
3536
dataFrom: [{sourceRef: generatorRef: {
3637
apiVersion: secretGenerator.apiVersion
3738
kind: secretGenerator.kind
@@ -43,9 +44,8 @@ kustomizations: $default: "manifest": {
4344
metadata: name: "attic-server"
4445
data: "gen-config.sh": """
4546
cat <<EOF > /config/server.toml
46-
4747
api-endpoint = "https://attic.home.josephmartin.org/"
48-
token-hs256-secret-base64 = "$(cat /secrets/password)"
48+
token-hs256-secret-base64 = "$(cat /secrets/HS256_SECRET)"
4949
[database]
5050
[chunking]
5151
nar-size-threshold = 65536 # chunk files that are 64 KiB or larger
@@ -159,6 +159,48 @@ kustomizations: $default: "manifest": {
159159
}]
160160
}
161161
}
162+
tokenServiceDeployment="attic-token-service": this=(appsv1.#Deployment & {
163+
metadata: labels: app: this.metadata.name
164+
spec: {
165+
replicas: 1
166+
selector: matchLabels: app: template.metadata.labels.app
167+
template: {
168+
metadata: labels: app: this.metadata.labels.app
169+
spec: {
170+
containers: [{
171+
name: this.metadata.name
172+
image: "ghcr.io/pythoner6/netserv/attic-token-service@\(#Images["attic-token-service"].digest)"
173+
ports: [{ containerPort: 8080 }]
174+
env: [{
175+
name: "OIDC_URL"
176+
value: "https://gitlab.home.josephmartin.org"
177+
},{
178+
name: "AUDIENCE"
179+
value: "https://\(domain)"
180+
},{
181+
name: "LISTEN_PORT"
182+
value: "8080"
183+
},{
184+
name: "LISTEN_ADDRESS"
185+
value: "0.0.0.0"
186+
}]
187+
envFrom: [{ secretRef: name: secret.metadata.name }]
188+
}]
189+
}
190+
}
191+
}
192+
})
193+
tokenService: corev1.#Service & {
194+
metadata: name: "attic-token-service"
195+
spec: {
196+
selector: app: tokenServiceDeployment.spec.template.metadata.labels.app
197+
ports: [{
198+
protocol: "TCP"
199+
port: 80
200+
targetPort: 8080
201+
}]
202+
}
203+
}
162204
cert="attic-cert": this=(certificates.#Certificate & {
163205
spec: {
164206
secretName: this.metadata.name
@@ -196,7 +238,7 @@ kustomizations: $default: "manifest": {
196238
}
197239
}]
198240
backendRefs: [{
199-
name: "attic-token-service"
241+
name: tokenService.metadata.name
200242
port: 80
201243
}]
202244
},{

k8s/common.cue

+2
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ c8s.#Default & {
1717
#defaultResourceNamespace: _ | *#AppNamespace
1818
#repo: "ghcr.io/pythoner6/netserv"
1919
#charts: _ @tag(charts)
20+
#images: _ @tag(images)
2021
#chartsRepo: helmrepository.#HelmRepository & {
2122
metadata: name: "netserv-ghcr"
2223
spec: {
@@ -27,4 +28,5 @@ c8s.#Default & {
2728
}
2829

2930
#Charts: c8s.#Charts
31+
#Images: c8s.#Images
3032
#fluxResources: c8s.#FluxResources

src/attic-token-service/Cargo.lock

+90
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/attic-token-service/Cargo.toml

+1
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ serde = "1.0"
1515
serde_json = "1.0"
1616
chrono = "0.4"
1717
base64 = "0.21"
18+
env_logger = "0.11"
1819

1920
[profile.release]
2021
opt-level = "z"

0 commit comments

Comments
 (0)