1
Fork 0
ci-images/Justfile
Lucas Schwiderski a6a9fe59ec
feat: Implement repository mirror
The `oci-build-task` seems to be doing more requests to the registry
than local `docker build`, which frequently results in Docker Hub's
rate limits kicking in.

By proxying `docker.io`, this should hopefully be avoided.

A somewhat elaborate setup and a custom build of `oci-build-task` are
needed: https://github.com/concourse/oci-build-task/pull/121.

Fixes: #39.
2024-08-29 11:58:39 +02:00

71 lines
2.6 KiB
Makefile

pipeline_name := 'ci-images'
target := 'main'
# Internal endpoint of the Docker registry, where no authentication is necessary
registry_url := env_var_or_default('REGISTRY_URL', 'docker.io/')
registry_mirror_url := env_var_or_default('REGISTRY_MIRROR_URL', '')
forgejo_api_key := env_var("FORGEJO_API_KEY")
forgejo_url := shell("git remote get-url origin | sed 's|git@\\([^:]*\\):\\(.*\\).git|https://\\1/\\2|' | cut -d'/' -f-3")
repo_owner := shell("git remote get-url origin | sed 's|git@\\([^:]*\\):\\(.*\\).git|https://\\1/\\2|' | cut -d'/' -f4")
repo_name := shell("git remote get-url origin | sed 's|git@\\([^:]*\\):\\(.*\\).git|https://\\1/\\2|' | cut -d'/' -f5-")
pipeline_file := shell('mktemp')
buildkit_config_tmpl := '''
[registry."docker.io"]
mirrors = ["{{registry_mirror_url}}"]
[registry."{{registry_mirror_url}}"]
http = true
'''
buildkit_config := replace(buildkit_config_tmpl, "{{registry_mirror_url}}", registry_mirror_url)
build context dockerfile='' image_target='' *args='':
fly -t {{target}} execute \
--config=./tasks/build-image.yml \
--privileged \
-i repo=. \
-o image=/tmp/build-image \
-v context=repo/images/{{context}} \
-v dockerfile={{dockerfile}} \
-v target={{image_target}} \
-v registry_url={{registry_url}} \
-v 'buildkit_config={{buildkit_config}}' \
{{args}}
make-pipeline file:
jinja2 --strict --outfile="{{file}}" pipelines/build-and-push.yml.j2 pipelines/build-and-push.json
fly -t {{target}} validate-pipeline \
--strict \
--config "{{file}}" \
-v registry_url={{registry_url}} \
-v 'buildkit_config={{buildkit_config}}' \
-v forgejo_api_key={{forgejo_api_key}} \
-v forgejo_url={{forgejo_url}} \
-v repo_owner={{repo_owner}} \
-v repo_name={{repo_name}}
set-pipeline: (make-pipeline pipeline_file)
fly -t {{target}} set-pipeline \
--pipeline {{pipeline_name}} \
--config "{{pipeline_file}}" \
-v registry_url={{registry_url}} \
-v 'buildkit_config={{buildkit_config}}' \
-v forgejo_api_key={{forgejo_api_key}} \
-v forgejo_url={{forgejo_url}} \
-v repo_owner={{repo_owner}} \
-v repo_name={{repo_name}}
validate:
docker run --rm -v ./:/usr/src/app renovate/renovate renovate-config-validator --strict
renovate *args='':
docker run --rm -t \
-v ./:/usr/src/app \
-e LOG_FORMAT=pretty \
-e LOG_LEVEL=debug \
renovate/renovate \
--platform=local \
--github-token-warn=false \
{{args}} \
|& bat