From 421993892ced3f9a03dc79ec0376a80037ced228 Mon Sep 17 00:00:00 2001 From: Zack Steinkamp Date: Tue, 26 Mar 2024 15:23:08 -0700 Subject: [PATCH] try to build images in workflow --- .github/workflows/build-images.yml | 74 ++++++++++++++++++++++++++++++ Dockerfile.nginx | 6 +++ bin/gen-config | 68 ++++++++++++++------------- 3 files changed, 116 insertions(+), 32 deletions(-) create mode 100644 .github/workflows/build-images.yml create mode 100644 Dockerfile.nginx diff --git a/.github/workflows/build-images.yml b/.github/workflows/build-images.yml new file mode 100644 index 0000000..3ed6499 --- /dev/null +++ b/.github/workflows/build-images.yml @@ -0,0 +1,74 @@ +# +name: Create and publish a Docker image + +# Configures this workflow to run every time a change is pushed to the branch called `main`. +on: + push: + branches: + - 'main' + tags: + - 'v*' + +# Defines two custom environment variables for the workflow. These are used for +# the Container registry domain, and a name for the Docker image that this +# workflow builds. +env: + REGISTRY: ghcr.io + IMAGE_BASE: photodirs + +# There is a single job in this workflow. It's configured to run on the latest +# available version of Ubuntu. +jobs: + build-and-push-image: + runs-on: ubuntu-latest + # Sets the permissions granted to the `GITHUB_TOKEN` for the actions in this job. + permissions: + contents: read + packages: write + # + steps: + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + # Uses the `docker/login-action` action to log in to the Container + # registry registry using the account and password that will publish the + # packages. Once published, the packages are scoped to the account + # defined here. + - name: Log in to the Container registry + uses: docker/login-action@v3 + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + # Generate the default config (port 3333, admin=true) + - run: bin/gen-config + + # This step uses + # [docker/metadata-action](https://github.com/docker/metadata-action#about) + # to extract tags and labels that will be applied to the specified image. + # The `id` "meta" allows the output of this step to be referenced in a + # subsequent step. The `images` value provides the base name for the tags + # and labels. + - name: Extract metadata (tags, labels) for Docker + id: meta + uses: docker/metadata-action@9ec57ed1fcdbf14dcef7dfbe97b2010124a938b7 + with: + images: ${{ env.REGISTRY }}/${{ env.IMAGE_BASE }}-nginx + # This step uses the `docker/build-push-action` action to build the + # image, based on your repository's `Dockerfile`. If the build succeeds, + # it pushes the image to GitHub Packages. + # It uses the `context` parameter to define the build's context as the + # set of files located in the specified path. For more information, see + # "[Usage](https://github.com/docker/build-push-action#usage)" in the + # README of the `docker/build-push-action` repository. + # It uses the `tags` and `labels` parameters to tag and label the image + # with the output from the "meta" step. + - name: Build and push Docker image + uses: docker/build-push-action@5 + with: + file: ./Dockerfile.nginx + platforms: linux/amd64,linux/arm64 + push: true + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} diff --git a/Dockerfile.nginx b/Dockerfile.nginx new file mode 100644 index 0000000..25d9446 --- /dev/null +++ b/Dockerfile.nginx @@ -0,0 +1,6 @@ +# vim:syn=dockerfile +FROM nginx:1 + +COPY nginx.conf /etc/nginx/nginx.conf +COPY nginx-photodirs-common.conf /etc/nginx/nginx-photodirs-common.conf + diff --git a/bin/gen-config b/bin/gen-config index 0adb68d..bf49876 100755 --- a/bin/gen-config +++ b/bin/gen-config @@ -26,42 +26,46 @@ export PHOTODIRS_NFS_HOST=${PHOTODIRS_NFS_HOST:=truenas.lan} export PHOTODIRS_NFS_PATH=${PHOTODIRS_NFS_PATH:=/mnt/data-pool/shared/photos} export PHOTODIRS_ORIG_DIR=${PHOTODIRS_ORIG_DIR:=/mnt/shared/photos} -echo -echo '==================================================================' -echo 'Photodirs setup...' -echo '==================================================================' -echo -read -r -p "Web port? [${PHOTODIRS_WEB_PORT}] " PHOTODIRS_WEB_PORT_INPUT -PHOTODIRS_WEB_PORT=${PHOTODIRS_WEB_PORT_INPUT:=${PHOTODIRS_WEB_PORT}} +# interactive setup if interactive terminal +if [ -n $PS1 ] +then + echo + echo '==================================================================' + echo 'Photodirs setup...' + echo '==================================================================' + echo + read -r -p "Web port? [${PHOTODIRS_WEB_PORT}] " PHOTODIRS_WEB_PORT_INPUT + PHOTODIRS_WEB_PORT=${PHOTODIRS_WEB_PORT_INPUT:=${PHOTODIRS_WEB_PORT}} -read -r -p "Run Admin? [${PHOTODIRS_ENABLE_ADMIN}] " PHOTODIRS_ENABLE_ADMIN_INPUT -PHOTODIRS_ENABLE_ADMIN=${PHOTODIRS_ENABLE_ADMIN_INPUT:=${PHOTODIRS_ENABLE_ADMIN}} + read -r -p "Run Admin? [${PHOTODIRS_ENABLE_ADMIN}] " PHOTODIRS_ENABLE_ADMIN_INPUT + PHOTODIRS_ENABLE_ADMIN=${PHOTODIRS_ENABLE_ADMIN_INPUT:=${PHOTODIRS_ENABLE_ADMIN}} -if [ "true" == "$PHOTODIRS_ENABLE_ADMIN" ] -then - read -r -p "Admin port? [$PHOTODIRS_ADMIN_PORT] " PHOTODIRS_ADMIN_PORT_INPUT - PHOTODIRS_ADMIN_PORT=${PHOTODIRS_ADMIN_PORT_INPUT:=${PHOTODIRS_ADMIN_PORT}} -fi + if [ "true" == "$PHOTODIRS_ENABLE_ADMIN" ] + then + read -r -p "Admin port? [$PHOTODIRS_ADMIN_PORT] " PHOTODIRS_ADMIN_PORT_INPUT + PHOTODIRS_ADMIN_PORT=${PHOTODIRS_ADMIN_PORT_INPUT:=${PHOTODIRS_ADMIN_PORT}} + fi -read -r -p "Mount type (bind | nfs)? [$PHOTODIRS_MOUNT_TYPE] " PHOTODIRS_MOUNT_TYPE_INPUT -PHOTODIRS_MOUNT_TYPE=${PHOTODIRS_MOUNT_TYPE_INPUT:=${PHOTODIRS_MOUNT_TYPE}} + read -r -p "Mount type (bind | nfs)? [$PHOTODIRS_MOUNT_TYPE] " PHOTODIRS_MOUNT_TYPE_INPUT + PHOTODIRS_MOUNT_TYPE=${PHOTODIRS_MOUNT_TYPE_INPUT:=${PHOTODIRS_MOUNT_TYPE}} -if [ "nfs" == "$PHOTODIRS_MOUNT_TYPE" ] -then - # nfs mount - read -r -p "NFS Host? [$PHOTODIRS_NFS_HOST] " PHOTODIRS_NFS_HOST_INPUT - PHOTODIRS_NFS_HOST=${PHOTODIRS_NFS_HOST_INPUT:=${PHOTODIRS_NFS_HOST}} - read -r -p "NFS Path? [$PHOTODIRS_NFS_PATH] " PHOTODIRS_NFS_PATH_INPUT - PHOTODIRS_NFS_PATH=${PHOTODIRS_NFS_PATH_INPUT:=${PHOTODIRS_NFS_PATH}} -elif [ "bind" == "$PHOTODIRS_MOUNT_TYPE" ] -then - # bind mount - read -r -p "Originals Directory? [$PHOTODIRS_ORIG_DIR] " PHOTODIRS_ORIG_DIR_INPUT - PHOTODIRS_ORIG_DIR=${PHOTODIRS_ORIG_DIR_INPUT:=${PHOTODIRS_ORIG_DIR}} -else - # error - echo 'Unsupported mount type. :(' - exit 1 + if [ "nfs" == "$PHOTODIRS_MOUNT_TYPE" ] + then + # nfs mount + read -r -p "NFS Host? [$PHOTODIRS_NFS_HOST] " PHOTODIRS_NFS_HOST_INPUT + PHOTODIRS_NFS_HOST=${PHOTODIRS_NFS_HOST_INPUT:=${PHOTODIRS_NFS_HOST}} + read -r -p "NFS Path? [$PHOTODIRS_NFS_PATH] " PHOTODIRS_NFS_PATH_INPUT + PHOTODIRS_NFS_PATH=${PHOTODIRS_NFS_PATH_INPUT:=${PHOTODIRS_NFS_PATH}} + elif [ "bind" == "$PHOTODIRS_MOUNT_TYPE" ] + then + # bind mount + read -r -p "Originals Directory? [$PHOTODIRS_ORIG_DIR] " PHOTODIRS_ORIG_DIR_INPUT + PHOTODIRS_ORIG_DIR=${PHOTODIRS_ORIG_DIR_INPUT:=${PHOTODIRS_ORIG_DIR}} + else + # error + echo 'Unsupported mount type. :(' + exit 1 + fi fi cat << EOF > docker-compose.yml