Skip to content

Commit

Permalink
release 3.3-20200524 (#27)
Browse files Browse the repository at this point in the history
* fix heathcheck wget args

* update baseimage to ubuntu:focal and apt-cacher to 3.3

Closes #12 #26

* update circleci config

* release 3.3-20200524

* fix shellcheck issues
  • Loading branch information
sameersbn committed May 24, 2020
1 parent 78e6ca5 commit 6090c34
Show file tree
Hide file tree
Showing 7 changed files with 366 additions and 60 deletions.
350 changes: 304 additions & 46 deletions .circleci/config.yml
Original file line number Diff line number Diff line change
@@ -1,71 +1,329 @@
version: 2
jobs:
build:
working_directory: /workdir
docker:
- image: docker:18.03.0-ce-git
environment:
IMAGE_NAME: "sameersbn/apt-cacher-ng"
version: 2.1

orbs:
shellcheck: circleci/[email protected]
docker: circleci/[email protected]
go: circleci/[email protected]

commands:
docker-build:
description: |
Build and optionally deploy a Docker images
parameters:
dockerfile:
default: Dockerfile
description: 'Name of dockerfile to use, defaults to Dockerfile'
type: string
extra_build_args:
default: ''
description: >
Extra flags to pass to docker build. For examples, see
https://docs.docker.com/engine/reference/commandline/build
type: string
registry:
default: docker.io
description: |
Comma separated list of registry to use, defaults to docker.io
type: string
image:
description: Name of image to build
type: string
tag:
default: $CIRCLE_SHA1
description: 'Image tag, defaults to the value of $CIRCLE_SHA1'
type: string
path:
default: .
description: >
Path to the directory containing your Dockerfile and build context,
defaults to . (working directory)
type: string
cache_from:
default: ''
description: >
Comma-separated list of images, images will first be pulled, then passed
as the --cache-from build argument
https://docs.docker.com/engine/reference/commandline/build/
type: string
no_output_timeout:
default: 10m
description: |
No output timeout for build step
type: string
steps:
- checkout
- when:
condition: <<parameters.cache_from>>
steps:
- run:
name: Build image for <<parameters.registry>>
no_output_timeout: <<parameters.no_output_timeout>>
command: >
echo "<<parameters.cache_from>>" | sed -n 1'p' | tr ',' '\n' |
while read image; do
echo "Pulling ${image}";
docker pull ${image} || true
done
docker_tag_args=""
IFS="," read -ra DOCKER_REGISTRIES \<<< "<< parameters.registry >>"
for registry in "${DOCKER_REGISTRIES[@]}"; do
IFS="," read -ra DOCKER_TAGS \<<< "<< parameters.tag >>"
for tag in "${DOCKER_TAGS[@]}"; do
docker_tag_args="$docker_tag_args -t $registry/<<parameters.image>>:${tag}"
done
done
- setup_remote_docker:
version: 18.03.1-ce
docker build
<<#parameters.extra_build_args>><<parameters.extra_build_args>><</parameters.extra_build_args>>
\
--cache-from <<parameters.cache_from>> \
-f <<parameters.path>>/<<parameters.dockerfile>> \
$docker_tag_args \
<<parameters.path>>
- unless:
condition: <<parameters.cache_from>>
steps:
- run:
name: Building image for <<parameters.registry>>
no_output_timeout: <<parameters.no_output_timeout>>
command: >
docker_tag_args=""
IFS="," read -ra DOCKER_REGISTRIES \<<< "<< parameters.registry >>"
for registry in "${DOCKER_REGISTRIES[@]}"; do
IFS="," read -ra DOCKER_TAGS \<<< "<< parameters.tag >>"
for tag in "${DOCKER_TAGS[@]}"; do
docker_tag_args="$docker_tag_args -t $registry/<<parameters.image>>:${tag}"
done
done
docker build
<<#parameters.extra_build_args>><<parameters.extra_build_args>><</parameters.extra_build_args>>
\
-f <<parameters.path>>/<<parameters.dockerfile>> \
$docker_tag_args \
<<parameters.path>>
docker-save:
description: |
Save one or more images to a tar archive
parameters:
registry:
default: docker.io
description: |
Comma separated list of registry to use, defaults to docker.io
type: string
image:
description: Name of image to build
type: string
tag:
default: $CIRCLE_SHA1
description: 'Image tag, defaults to the value of $CIRCLE_SHA1'
type: string
steps:
- run:
name: Docker info
command: |
docker version
docker info
name: Save image to tar archive
command: >
docker_images=""
IFS="," read -ra DOCKER_REGISTRIES \<<< "<< parameters.registry >>"
- restore_cache:
keys:
- cache-{{ .Branch }}
for registry in "${DOCKER_REGISTRIES[@]}"; do
IFS="," read -ra DOCKER_TAGS \<<< "<< parameters.tag >>"
for tag in "${DOCKER_TAGS[@]}"; do
docker_images="$docker_images $registry/<<parameters.image>>:${tag}"
done
done
mkdir -p ~/docker/
docker save -o ~/docker/docker-images.tar $docker_images
- persist_to_workspace:
root: ~/
paths:
- /cache/layers.tar
- docker

docker-load:
description: |
Load tar archive
steps:
- attach_workspace:
at: ~/
- run:
name: Loading docker cache
command: |
if [[ -f /cache/layers.tar ]]; then
docker load -i /cache/layers.tar
fi
name: Load images from tar archive
command: >
docker load -i ~/docker/docker-images.tar
- run:
name: Build docker image
command: |
docker build --cache-from=${IMAGE_NAME} -t ${IMAGE_NAME} .
docker-publish:
description: |
Build and optionally deploy a Docker images
parameters:
pr:
default: ''
type: string
registry:
default: docker.io
description: |
Comma separated list of registry to use, defaults to docker.io
type: string
image:
description: Name of image to build
type: string
tag:
default: $CIRCLE_SHA1
description: 'Image tag, defaults to the value of $CIRCLE_SHA1'
type: string
steps:
- unless:
condition: <<parameters.pr>>
steps:
- run:
name: Publish image for <<parameters.registry>>
command: >
IFS="," read -ra DOCKER_REGISTRIES \<<< "<< parameters.registry >>"
for registry in "${DOCKER_REGISTRIES[@]}"; do
IFS="," read -ra DOCKER_TAGS \<<< "<< parameters.tag >>"
for tag in "${DOCKER_TAGS[@]}"; do
docker push $registry/<< parameters.image>>:${tag}
done
done
jobs:
build:
executor: docker/machine
steps:
- checkout
- docker-build:
registry: docker.io,quay.io
image: sameersbn/apt-cacher-ng
tag: ${CIRCLE_TAG:-latest}
cache_from: docker.io/sameersbn/apt-cacher-ng:latest
- docker-save:
registry: docker.io,quay.io
image: sameersbn/apt-cacher-ng
tag: ${CIRCLE_TAG:-latest}

test:
executor: docker/machine
steps:
- checkout
- docker-load
- run:
name: Launching container for testing
name: Update tag in docker-compose.yml
command: |
docker network create testnet
docker run --name apt-cacher-ng -d --init --net testnet -p 3142:3142 $IMAGE_NAME
sed -i "s|image: sameersbn/apt-cacher-ng:.*|image: sameersbn/apt-cacher-ng:${CIRCLE_TAG:-latest}|" docker-compose.yml
- run:
name: Launch apt-cacher-ng container
command: docker-compose up -d --quiet-pull
- run:
name: Wait for bootup
command: sleep 15
- run:
name: Container info
command: docker ps
- run:
name: Testing image
name: Test image
command: |
docker run --rm --net testnet appropriate/curl --retry 3 --retry-delay 5 -vLo /dev/null http://apt-cacher-ng:3142/apt-cacher
docker run --network container:$(docker-compose ps -q apt-cacher-ng) \
curlimages/curl --retry 3 --retry-delay 5 -vLo /dev/null http://apt-cacher-ng:3142/apt-cacher
publish-dockerhub:
executor: docker/machine
steps:
- docker-load
- docker/check:
registry: docker.io
docker-username: DOCKER_LOGIN
docker-password: DOCKER_PASSWORD
- docker-publish:
registry: docker.io
image: sameersbn/apt-cacher-ng
tag: ${CIRCLE_TAG:-latest}

publish-quay:
executor: docker/machine
steps:
- docker-load
- docker/check:
registry: quay.io
docker-username: DOCKER_LOGIN
docker-password: DOCKER_PASSWORD
- docker-publish:
registry: quay.io
image: sameersbn/apt-cacher-ng
tag: ${CIRCLE_TAG:-latest}

release:
executor:
name: go/default
tag: '1.14'
steps:
- checkout
- run:
name: Installing github-release tool
command: go get github.com/meterup/github-release
- run:
name: Generate docker build image cache
name: Creating github release
command: |
mkdir -p /cache
docker save -o /cache/layers.tar ${IMAGE_NAME}
- save_cache:
key: cache-{{ .Branch }}-{{ epoch }}
paths:
- /cache/layers.tar
PRE_RELEASE=${CIRCLE_TAG/${CIRCLE_TAG%-rc[0-9]*}/}
github-release delete -u ${CIRCLE_PROJECT_USERNAME} -r ${CIRCLE_PROJECT_REPONAME} -t ${CIRCLE_TAG} 2>/dev/null ||:
./scripts/release-notes.sh ${CIRCLE_TAG} | github-release release ${PRE_RELEASE:+-p} -u ${CIRCLE_PROJECT_USERNAME} -r ${CIRCLE_PROJECT_REPONAME} -t ${CIRCLE_TAG} -d -
for f in $(find /tmp/dist -type f); do github-release upload -u ${CIRCLE_PROJECT_USERNAME} -r ${CIRCLE_PROJECT_REPONAME} -t ${CIRCLE_TAG} -n $(basename ${f}) -f ${f} ; done
workflows:
version: 2
build-and-test:
build-test-and-release:
jobs:
- shellcheck/check:
name: shellcheck
ignore: SC2086,SC2181,SC2124
filters:
tags:
only: /^([0-9]+)(\.[0-9]+)?(\.[0-9]+)?(?:-([0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*))?(?:\+[0-9A-Za-z-]+)?$/
- build:
requires:
- shellcheck
filters:
tags:
only: /^([0-9]+)(\.[0-9]+)?(\.[0-9]+)?(?:-([0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*))?(?:\+[0-9A-Za-z-]+)?$/
- test:
requires:
- build
filters:
tags:
only: /^([0-9]+)(\.[0-9]+)?(\.[0-9]+)?(?:-([0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*))?(?:\+[0-9A-Za-z-]+)?$/
- publish-dockerhub:
context: dockerhub
requires:
- test
filters:
branches:
only: /.*/
only: master
tags:
only: /^([0-9]+)(\.[0-9]+)?(\.[0-9]+)?(?:-([0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*))?(?:\+[0-9A-Za-z-]+)?$/
- publish-quay:
context: quay
requires:
- test
filters:
tags:
only: /.*/
only: /^([0-9]+)(\.[0-9]+)?(\.[0-9]+)?(?:-([0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*))?(?:\+[0-9A-Za-z-]+)?$/
branches:
only: master
- release:
context: github
requires:
- publish-dockerhub
- publish-quay
filters:
tags:
only: /^([0-9]+)(\.[0-9]+)?(\.[0-9]+)?(?:-([0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*))?(?:\+[0-9A-Za-z-]+)?$/
branches:
ignore: /.*/
6 changes: 3 additions & 3 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
FROM ubuntu:bionic-20190612
FROM ubuntu:focal-20200423

LABEL maintainer="[email protected]"

ENV APT_CACHER_NG_VERSION=3.1 \
ENV APT_CACHER_NG_VERSION=3.3 \
APT_CACHER_NG_CACHE_DIR=/var/cache/apt-cacher-ng \
APT_CACHER_NG_LOG_DIR=/var/log/apt-cacher-ng \
APT_CACHER_NG_USER=apt-cacher-ng
Expand All @@ -21,7 +21,7 @@ RUN chmod 755 /sbin/entrypoint.sh
EXPOSE 3142/tcp

HEALTHCHECK --interval=10s --timeout=2s --retries=3 \
CMD wget -q -t1 -o /dev/null http://localhost:3142/acng-report.html || exit 1
CMD wget -q -t1 -O /dev/null http://localhost:3142/acng-report.html || exit 1

ENTRYPOINT ["/sbin/entrypoint.sh"]

Expand Down
Loading

0 comments on commit 6090c34

Please sign in to comment.