-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdocker.just
More file actions
80 lines (71 loc) · 3.38 KB
/
docker.just
File metadata and controls
80 lines (71 loc) · 3.38 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
# Copyright 2024 - 2025, identinet GmbH. All rights reserved.
# SPDX-License-Identifier: MIT
import './default.just'
import './_manifest.just'
# Build image
[group('ci')]
docker-build: githooks
#!/usr/bin/env nu
let manifest = (open "{{ MANIFEST }}")
let image = $"($manifest.registry.name)/($manifest.name):($manifest.version)"
print -e $"Building image ($image)"
# INFO: ?submodules=1# is required, see https://discourse.nixos.org/t/get-nix-flake-to-include-git-submodule/30324/3
# Due to a bug, TMPDIR must be unset when running nix build inside a nix develop shell https://github.com/NixOS/nix/issues/10753
TMPDIR= nix build '.?submodules=1#'
# Load image locally
[group('ci')]
docker-load: docker-build
#!/usr/bin/env nu
# support pre-built image and streamed
let mimetype = file -L -i result | parse --regex "result: (?P<mimetype>[^;]+)" | $in.0.mimetype
if $mimetype == "application/gzip" { cat ./result } else { ./result } | docker image load
# Run image locally
[group('ci')]
docker-run: docker-load
#!/usr/bin/env nu
let manifest = (open "{{ MANIFEST }}")
let image = $"($manifest.registry.name)/($manifest.name):($manifest.version)"
print -e (["Executing:" docker run -P --name $manifest.name -it --rm $image] | str join " ")
docker run -P --name $manifest.name -it --rm $image
# Run shell image locally
[group('ci')]
docker-run-sh: docker-load
#!/usr/bin/env nu
let manifest = (open "{{ MANIFEST }}")
let image = $"($manifest.registry.name)/($manifest.name):($manifest.version)"
print -e (["Executing:" docker run -P --name $manifest.name -it --rm --entrypoint /bin/sh $image] | str join " ")
docker run -P --name $manifest.name -it --rm --entrypoint /bin/sh $image
# Inspect image
[group('ci')]
docker-inspect: docker-build
#!/usr/bin/env nu
let manifest = (open "{{ MANIFEST }}")
let image = {
RepoTags: [$manifest.version],
Name: $"($manifest.registry.name)/($manifest.name)",
Digest: $"Refer to just docker-inspect-registry after pushing the image",
}
# support pre-built image and streamed
let mimetype = file -L -i result | parse --regex "result: (?P<mimetype>[^;]+)" | $in.0.mimetype
if $mimetype == "application/gzip" { cat ./result } else { ./result } | skopeo inspect --config docker-archive:/dev/stdin | from json | merge $image | table -e -w 120
# Inspect image in registry
[group('ci')]
docker-inspect-registry:
#!/usr/bin/env nu
let manifest = (open "{{ MANIFEST }}")
let image = $"($manifest.registry.name)/($manifest.name)"
print -e (["Executing:" skopeo inspect $"docker://($image):($manifest.version)"] | str join " ")
let data = skopeo inspect $"docker://($image):($manifest.version)" | from json
$data | merge { Image: $"($image):($manifest.version)@($data | get -i Digest)" } | table -e -w 120
# Push image
[group('ci')]
docker-push: docker-build
#!/usr/bin/env nu
let manifest = (open "{{ MANIFEST }}")
let image = $"($manifest.registry.name)/($manifest.name)"
let mimetype = file -L -i result | parse --regex "result: (?P<mimetype>[^;]+)" | $in.0.mimetype
if $mimetype == "application/gzip" { cat ./result } else { ./result } | skopeo copy docker-archive:/dev/stdin $"docker://($image):($manifest.version)"
just docker-inspect-registry
# Build application and pushes image - run `just bump` first
[group('release')]
release: docker-push