Add optional support for running end-to-end tests and building documentation with rootless Podman instead of Docker.

This commit is contained in:
Dan Helfman 2023-04-10 14:26:54 -07:00
parent d6ef0df50d
commit 31a2ac914a
5 changed files with 51 additions and 7 deletions

2
NEWS
View file

@ -7,6 +7,8 @@
"match_archives" configuration option for the "transfer", "list", "rlist", and "info" actions. "match_archives" configuration option for the "transfer", "list", "rlist", and "info" actions.
* #668: Fix error when running the "prune" action with both "archive_name_format" and "prefix" * #668: Fix error when running the "prune" action with both "archive_name_format" and "prefix"
options set. options set.
* Add optional support for running end-to-end tests and building documentation with rootless Podman
instead of Docker.
1.7.11 1.7.11
* #479, #588: BREAKING: Automatically use the "archive_name_format" option to filter which archives * #479, #588: BREAKING: Automatically use the "archive_name_format" option to filter which archives

View file

@ -1,4 +1,4 @@
FROM alpine:3.17.1 as borgmatic FROM docker.io/alpine:3.17.1 as borgmatic
COPY . /app COPY . /app
RUN apk add --no-cache py3-pip py3-ruamel.yaml py3-ruamel.yaml.clib RUN apk add --no-cache py3-pip py3-ruamel.yaml py3-ruamel.yaml.clib
@ -8,7 +8,7 @@ RUN borgmatic --help > /command-line.txt \
echo -e "\n--------------------------------------------------------------------------------\n" >> /command-line.txt \ echo -e "\n--------------------------------------------------------------------------------\n" >> /command-line.txt \
&& borgmatic "$action" --help >> /command-line.txt; done && borgmatic "$action" --help >> /command-line.txt; done
FROM node:19.5.0-alpine as html FROM docker.io/node:19.5.0-alpine as html
ARG ENVIRONMENT=production ARG ENVIRONMENT=production
@ -28,7 +28,7 @@ COPY . /source
RUN NODE_ENV=${ENVIRONMENT} npx eleventy --input=/source/docs --output=/output/docs \ RUN NODE_ENV=${ENVIRONMENT} npx eleventy --input=/source/docs --output=/output/docs \
&& mv /output/docs/index.html /output/index.html && mv /output/docs/index.html /output/index.html
FROM nginx:1.22.1-alpine FROM docker.io/nginx:1.22.1-alpine
COPY --from=html /output /usr/share/nginx/html COPY --from=html /output /usr/share/nginx/html
COPY --from=borgmatic /etc/borgmatic/config.yaml /usr/share/nginx/html/docs/reference/config.yaml COPY --from=borgmatic /etc/borgmatic/config.yaml /usr/share/nginx/html/docs/reference/config.yaml

View file

@ -101,6 +101,30 @@ scripts/run-end-to-end-dev-tests
Note that this scripts assumes you have permission to run Docker. If you Note that this scripts assumes you have permission to run Docker. If you
don't, then you may need to run with `sudo`. don't, then you may need to run with `sudo`.
#### Podman
<span class="minilink minilink-addedin">New in version 1.7.12</span>
borgmatic's end-to-end tests optionally support using
[rootless](https://github.com/containers/podman/blob/main/docs/tutorials/rootless_tutorial.md)
[Podman](https://podman.io/) instead of Docker.
Setting up Podman is outside the scope of this documentation, but here are
some key points to double-check:
* Install Podman along with `podman-docker` and your desired networking
support.
* Configure `/etc/subuid` and `/etc/subgid` to map users/groups for the
non-root user who will run tests.
* Create a non-root Podman socket for that user:
```bash
systemctl --user enable --now podman.socket
```
Then you'll be able to run end-to-end tests as per normal, and the test script
will automatically use your non-root Podman socket instead of a Docker socket.
## Code style ## Code style
Start with [PEP 8](https://www.python.org/dev/peps/pep-0008/). But then, apply Start with [PEP 8](https://www.python.org/dev/peps/pep-0008/). But then, apply
@ -149,3 +173,15 @@ http://localhost:8080 to view the documentation with your changes.
To close the documentation server, ctrl-C the script. Note that it does not To close the documentation server, ctrl-C the script. Note that it does not
currently auto-reload, so you'll need to stop it and re-run it for any currently auto-reload, so you'll need to stop it and re-run it for any
additional documentation changes to take effect. additional documentation changes to take effect.
#### Podman
<span class="minilink minilink-addedin">New in version 1.7.12</span>
borgmatic's developer build for documentation optionally supports using
[rootless](https://github.com/containers/podman/blob/main/docs/tutorials/rootless_tutorial.md)
[Podman](https://podman.io/) instead of Docker.
Setting up Podman is outside the scope of this documentation. But once you
install `podman-docker`, then `scripts/dev-docs` should automatically use
Podman instead of Docker.

View file

@ -10,5 +10,11 @@
set -e set -e
USER_PODMAN_SOCKET_PATH=/run/user/$UID/podman/podman.sock
if [ -e "$USER_PODMAN_SOCKET_PATH" ]; then
export DOCKER_HOST="unix://$USER_PODMAN_SOCKET_PATH"
fi
docker-compose --file tests/end-to-end/docker-compose.yaml up --force-recreate \ docker-compose --file tests/end-to-end/docker-compose.yaml up --force-recreate \
--renew-anon-volumes --abort-on-container-exit --renew-anon-volumes --abort-on-container-exit

View file

@ -1,22 +1,22 @@
version: '3' version: '3'
services: services:
postgresql: postgresql:
image: postgres:13.1-alpine image: docker.io/postgres:13.1-alpine
environment: environment:
POSTGRES_PASSWORD: test POSTGRES_PASSWORD: test
POSTGRES_DB: test POSTGRES_DB: test
mysql: mysql:
image: mariadb:10.5 image: docker.io/mariadb:10.5
environment: environment:
MYSQL_ROOT_PASSWORD: test MYSQL_ROOT_PASSWORD: test
MYSQL_DATABASE: test MYSQL_DATABASE: test
mongodb: mongodb:
image: mongo:5.0.5 image: docker.io/mongo:5.0.5
environment: environment:
MONGO_INITDB_ROOT_USERNAME: root MONGO_INITDB_ROOT_USERNAME: root
MONGO_INITDB_ROOT_PASSWORD: test MONGO_INITDB_ROOT_PASSWORD: test
tests: tests:
image: alpine:3.13 image: docker.io/alpine:3.13
environment: environment:
TEST_CONTAINER: true TEST_CONTAINER: true
volumes: volumes: