浏览代码

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

Dan Helfman 2 年之前
父节点
当前提交
31a2ac914a
共有 5 个文件被更改,包括 51 次插入7 次删除
  1. 2 0
      NEWS
  2. 3 3
      docs/Dockerfile
  3. 36 0
      docs/how-to/develop-on-borgmatic.md
  4. 6 0
      scripts/run-end-to-end-dev-tests
  5. 4 4
      tests/end-to-end/docker-compose.yaml

+ 2 - 0
NEWS

@@ -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

+ 3 - 3
docs/Dockerfile

@@ -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

+ 36 - 0
docs/how-to/develop-on-borgmatic.md

@@ -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.

+ 6 - 0
scripts/run-end-to-end-dev-tests

@@ -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

+ 4 - 4
tests/end-to-end/docker-compose.yaml

@@ -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: