Automate image building and add some images
This commit is contained in:
parent
6e63b4b4ab
commit
7add07006b
3
.gitmodules
vendored
3
.gitmodules
vendored
@ -1,3 +0,0 @@
|
|||||||
[submodule "go-import-redirector/go-import-redirector"]
|
|
||||||
path = go-import-redirector/go-import-redirector
|
|
||||||
url = https://github.com/rsc/go-import-redirector
|
|
11
.woodpecker.yml
Normal file
11
.woodpecker.yml
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
platform: linux/amd64
|
||||||
|
steps:
|
||||||
|
build:
|
||||||
|
image: gitea.elara.ws/elara6331/builder
|
||||||
|
environment:
|
||||||
|
- REGISTRY=gitea.elara.ws
|
||||||
|
- REGISTRY_USERNAME=Elara6331
|
||||||
|
secrets: [ registry_password ]
|
||||||
|
commands:
|
||||||
|
- registry-login
|
||||||
|
- ./build.sh
|
53
build.sh
Executable file
53
build.sh
Executable file
@ -0,0 +1,53 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# info prints an informational message
|
||||||
|
info() {
|
||||||
|
echo $'\x1b[32m[INFO]\x1b[0m' "$@"
|
||||||
|
}
|
||||||
|
|
||||||
|
# error prints an error message and exits with exit code 1
|
||||||
|
error() {
|
||||||
|
echo $'\x1b[31;1m[ERR]\x1b[0m' "$@"
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
# Check if the required environment variables are set
|
||||||
|
if [ -z "${CI_PREV_COMMIT_SHA}" ] || [ -z "${CI_COMMIT_SHA}" ]; then
|
||||||
|
error "CI_PREV_COMMIT_SHA and CI_COMMIT_SHA environment variables must be set."
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Get the list of changed files between the previous commit and the current commit
|
||||||
|
changed_files=$(git diff --name-only "${CI_PREV_COMMIT_SHA}" "${CI_COMMIT_SHA}")
|
||||||
|
|
||||||
|
# Declare an associative array to store unique changed directories
|
||||||
|
declare -A changed_directories
|
||||||
|
|
||||||
|
# Iterate over changed files and extract the directories
|
||||||
|
for file in $changed_files; do
|
||||||
|
directory=$(dirname "$file")
|
||||||
|
# We don't want to execute this script recursively, so skip the current directory if it shows up
|
||||||
|
if [[ "$directory" != "." ]]; then
|
||||||
|
changed_directories["$directory"]=1
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
if [[ "${#changed_directories[@]}" == 0 ]]; then
|
||||||
|
info "Nothing to do. Exiting..."
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Iterate over changed directories and execute build.sh if it exists
|
||||||
|
for dir in "${!changed_directories[@]}"; do
|
||||||
|
build_script="${dir}/build.sh"
|
||||||
|
if [ -f "${build_script}" ]; then
|
||||||
|
info "Entering ${dir}..."
|
||||||
|
pushd "${dir}" >/dev/null || error "pushd failed"
|
||||||
|
info "Executing ${build_script}..."
|
||||||
|
# ./build.sh || error "${build_script} failed"
|
||||||
|
info "Finished executing ${build_script}"
|
||||||
|
popd >/dev/null || error "popd failed"
|
||||||
|
info "Exited ${dir}"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
info "Done!"
|
7
builder/Dockerfile
Normal file
7
builder/Dockerfile
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
FROM alpine:edge
|
||||||
|
RUN apk add --no-cache go git gcc bash abuild
|
||||||
|
RUN apk add --no-cache ko --repository=https://dl-cdn.alpinelinux.org/alpine/edge/testing
|
||||||
|
RUN apk add --no-cache --allow-untrusted apko --repository=https://packages.wolfi.dev/os
|
||||||
|
RUN wget -O /usr/bin/lure https://api.minio.elara.ws/adl/lure/lure-amd64 && chmod +x /usr/bin/lure
|
||||||
|
COPY lure.toml /root/.config/lure/lure.toml
|
||||||
|
COPY login.sh /bin/registry-login
|
3
builder/README.md
Normal file
3
builder/README.md
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
# builder
|
||||||
|
|
||||||
|
This is the image used to build the other images. It includes [ko](https://ko.build/), [apko](https://github.com/chainguard-dev/apko), [lure](https://lure.elara.ws), and [abuild](https://wiki.alpinelinux.org/wiki/Abuild_and_Helpers).
|
11
builder/login.sh
Executable file
11
builder/login.sh
Executable file
@ -0,0 +1,11 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Check if the required environment variables are set
|
||||||
|
if [ -z "${REGISTRY}" ] || [ -z "${REGISTRY_USERNAME}" ] || [ -z "${REGISTRY_PASSWORD}" ]; then
|
||||||
|
echo "The REGISTRY, REGISTRY_USERNAME, and REGISTRY_PASSWORD environment variables must be set."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Log in to the registry using ko. This should generate a config.json with the authentication info.
|
||||||
|
echo "Logging in to ${REGISTRY}..."
|
||||||
|
ko login "${REGISTRY}" -u "${REGISTRY_USERNAME}" --password-stdin <<<"${REGISTRY_PASSWORD}" || exit 2
|
10
builder/lure.toml
Normal file
10
builder/lure.toml
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
rootCmd = 'sudo'
|
||||||
|
pagerStyle = 'native'
|
||||||
|
ignorePkgUpdates = []
|
||||||
|
|
||||||
|
[[repo]]
|
||||||
|
name = 'default'
|
||||||
|
url = 'https://github.com/Elara6331/lure-repo.git'
|
||||||
|
|
||||||
|
[unsafe]
|
||||||
|
allowRunAsRoot = true
|
7
builder/update-builder.sh
Executable file
7
builder/update-builder.sh
Executable file
@ -0,0 +1,7 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
docker build . -t gitea.elara.ws/elara6331/builder:latest --no-cache
|
||||||
|
docker login gitea.elara.ws
|
||||||
|
docker push gitea.elara.ws/elara6331/builder:latest
|
@ -1,7 +1,17 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
# Clone go-import-redirector and enter its directory
|
||||||
|
git clone https://github.com/rsc/go-import-redirector
|
||||||
pushd go-import-redirector
|
pushd go-import-redirector
|
||||||
KO_DOCKER_REPO=gitea.elara.ws/elara6331 ko build -B \
|
|
||||||
|
# Build and publish the image
|
||||||
|
KO_DOCKER_REPO=gitea.elara.ws/elara6331 \
|
||||||
|
KO_DEFAULTBASEIMAGE=gitea.elara.ws/elara6331/static \
|
||||||
|
ko build -B \
|
||||||
--platform=linux/amd64,linux/arm64,linux/riscv64 \
|
--platform=linux/amd64,linux/arm64,linux/riscv64 \
|
||||||
--sbom=none
|
--sbom=none
|
||||||
|
|
||||||
|
# Leave the go-import-redirector directory
|
||||||
popd
|
popd
|
||||||
|
@ -1 +0,0 @@
|
|||||||
Subproject commit 4b5c2b9050dfbdc8830f5220e610adb0d75c539f
|
|
@ -1,3 +0,0 @@
|
|||||||
FROM alpine:edge
|
|
||||||
RUN apk add --no-cache go
|
|
||||||
CMD go
|
|
27
golang/apko.yaml
Normal file
27
golang/apko.yaml
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
contents:
|
||||||
|
keyring:
|
||||||
|
- ./pkgs/keyring.rsa.pub
|
||||||
|
repositories:
|
||||||
|
- https://dl-cdn.alpinelinux.org/alpine/edge/main
|
||||||
|
- ./pkgs
|
||||||
|
packages:
|
||||||
|
- alpine-base
|
||||||
|
- go-bin
|
||||||
|
|
||||||
|
accounts:
|
||||||
|
groups:
|
||||||
|
- groupname: nonroot
|
||||||
|
gid: 65532
|
||||||
|
users:
|
||||||
|
- username: nonroot
|
||||||
|
uid: 65532
|
||||||
|
gid: 65532
|
||||||
|
run-as: 65532
|
||||||
|
|
||||||
|
entrypoint:
|
||||||
|
command: go
|
||||||
|
|
||||||
|
archs:
|
||||||
|
- amd64
|
||||||
|
- arm64
|
||||||
|
- riscv64
|
@ -1,10 +1,23 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
if [[ $# == 0 ]]; then
|
set -e
|
||||||
echo "Usage: $0 <arch>"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
docker login gitea.elara.ws
|
lure_cmd="lure --interactive=false build -p default/go-bin"
|
||||||
docker build . -t "gitea.elara.ws/elara6331/golang:$1" --no-cache
|
LURE_ARCH="amd64" $lure_cmd
|
||||||
docker push "gitea.elara.ws/elara6331/golang:$1"
|
LURE_ARCH="arm64" $lure_cmd
|
||||||
|
LURE_ARCH="riscv64" $lure_cmd
|
||||||
|
|
||||||
|
mkdir -p pkgs/{x86_64,aarch64,riscv64}
|
||||||
|
file=(*_x86_64.apk) && mv "$file" "pkgs/x86_64/$(sed -e 's/_x86_64//g' -e 's/_/-/g' <<<$file)"
|
||||||
|
file=(*_aarch64.apk) && mv "$file" "pkgs/aarch64/$(sed -e 's/_aarch64//g' -e 's/_/-/g' <<<$file)"
|
||||||
|
file=(*_riscv64.apk) && mv "$file" "pkgs/riscv64/$(sed -e 's/_riscv64//g' -e 's/_/-/g' <<<$file)"
|
||||||
|
|
||||||
|
abuild-keygen -na
|
||||||
|
cp ~/.abuild/*.rsa.pub pkgs/keyring.rsa.pub
|
||||||
|
|
||||||
|
for arch in pkgs/*/; do
|
||||||
|
apk index "$arch"/*.apk > "$arch/APKINDEX.tar.gz"
|
||||||
|
abuild-sign "$arch/APKINDEX.tar.gz"
|
||||||
|
done
|
||||||
|
|
||||||
|
apko publish --sbom=false apko.yaml gitea.elara.ws/elara6331/golang:latest
|
||||||
|
@ -1,11 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
tag="$1"
|
|
||||||
tag="${tag:=latest}"
|
|
||||||
|
|
||||||
docker login gitea.elara.ws
|
|
||||||
docker manifest create "gitea.elara.ws/elara6331/golang:$tag" \
|
|
||||||
--amend gitea.elara.ws/elara6331/golang:amd64 \
|
|
||||||
--amend gitea.elara.ws/elara6331/golang:arm64 \
|
|
||||||
--amend gitea.elara.ws/elara6331/golang:riscv64
|
|
||||||
docker manifest push "gitea.elara.ws/elara6331/golang:$tag"
|
|
5
static/README.md
Normal file
5
static/README.md
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
# static
|
||||||
|
|
||||||
|
The [static image](https://gitea.elara.ws/Elara6331/-/packages/container/static/latest) is a basic image with just enough iles to run static binaries. It's meant to be used as a base image and is useless outside of that.
|
||||||
|
|
||||||
|
This image will only run static binaries (i.e. Go binaries with `CGO_ENABLED=0`) as it doesn't include musl or glibc
|
23
static/apko.yaml
Normal file
23
static/apko.yaml
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
contents:
|
||||||
|
repositories:
|
||||||
|
- https://dl-cdn.alpinelinux.org/alpine/edge/main
|
||||||
|
packages:
|
||||||
|
- alpine-baselayout-data
|
||||||
|
- alpine-release
|
||||||
|
- ca-certificates-bundle
|
||||||
|
- tzdata
|
||||||
|
|
||||||
|
accounts:
|
||||||
|
groups:
|
||||||
|
- groupname: nonroot
|
||||||
|
gid: 65532
|
||||||
|
users:
|
||||||
|
- username: nonroot
|
||||||
|
uid: 65532
|
||||||
|
gid: 65532
|
||||||
|
run-as: 65532
|
||||||
|
|
||||||
|
archs:
|
||||||
|
- amd64
|
||||||
|
- arm64
|
||||||
|
- riscv64
|
3
static/build.sh
Executable file
3
static/build.sh
Executable file
@ -0,0 +1,3 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
set -e
|
||||||
|
apko publish --sbom=false apko.yaml gitea.elra.ws/elara6331/static:latest
|
@ -1,7 +1,11 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
pushd cmd
|
pushd cmd
|
||||||
KO_DOCKER_REPO=gitea.elara.ws/elara6331 ko build -B \
|
KO_DOCKER_REPO=gitea.elara.ws/elara6331 \
|
||||||
|
KO_DEFAULTBASEIMAGE=gitea.elara.ws/elara6331/static \
|
||||||
|
ko build -B \
|
||||||
--platform=linux/amd64,linux/arm64,linux/riscv64 \
|
--platform=linux/amd64,linux/arm64,linux/riscv64 \
|
||||||
--sbom=none
|
--sbom=none
|
||||||
popd
|
popd
|
||||||
|
Loading…
Reference in New Issue
Block a user