From b5b6239816aba11fe7d6c2f364d28197e72b2d62 Mon Sep 17 00:00:00 2001 From: David Russell Date: Mon, 23 Sep 2024 14:21:25 +0000 Subject: [PATCH 01/14] Add initial dockerfile --- Dockerfile | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 Dockerfile diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..3e66445 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,6 @@ +FROM python:3.9 +WORKDIR /app +RUN apt-get update && apt-get install libglu1 -y +COPY . /app +RUN curl https://download.agisoft.com/Metashape-2.1.3-cp37.cp38.cp39.cp310.cp311-abi3-linux_x86_64.whl --output Metashape-2.1.3-cp37.cp38.cp39.cp310.cp311-abi3-linux_x86_64.whl +RUN python3 -m pip install Metashape-2.1.3-cp37.cp38.cp39.cp310.cp311-abi3-linux_x86_64.whl From 8297cc1525210ceff6f2e9f50ba221d13e0e3f79 Mon Sep 17 00:00:00 2001 From: David Russell Date: Tue, 24 Sep 2024 14:24:08 +0000 Subject: [PATCH 02/14] Add working dockerfile --- Dockerfile | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index 3e66445..0c3b361 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,6 +1,13 @@ +# Start with a python base image FROM python:3.9 WORKDIR /app -RUN apt-get update && apt-get install libglu1 -y +# Copy files from current directory into /app COPY . /app +# Install GLU dependencies +RUN apt update +RUN apt install -y libglu1-mesa +RUN apt install -y libgl1-mesa-glx +# Download the wheel RUN curl https://download.agisoft.com/Metashape-2.1.3-cp37.cp38.cp39.cp310.cp311-abi3-linux_x86_64.whl --output Metashape-2.1.3-cp37.cp38.cp39.cp310.cp311-abi3-linux_x86_64.whl -RUN python3 -m pip install Metashape-2.1.3-cp37.cp38.cp39.cp310.cp311-abi3-linux_x86_64.whl +# And install +RUN python3 -m pip install Metashape-2.1.3-cp37.cp38.cp39.cp310.cp311-abi3-linux_x86_64.whl \ No newline at end of file From 7f0ca97da9013d509f5948c6ac644a1dfec1f788 Mon Sep 17 00:00:00 2001 From: David Russell Date: Thu, 26 Sep 2024 17:26:59 +0000 Subject: [PATCH 03/14] Add GPU-enabled dockerfile based on Jeff's file --- Dockerfile | 43 +++++++++++++++++++++++++++++++++---------- 1 file changed, 33 insertions(+), 10 deletions(-) diff --git a/Dockerfile b/Dockerfile index 0c3b361..3d4449f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,13 +1,36 @@ -# Start with a python base image -FROM python:3.9 +# Use a GPU-enabled base image +FROM nvcr.io/nvidia/cudagl:11.4.1-runtime-ubuntu20.04 + +USER root + +# Adapted from https://github.com/jeffgillan/agisoft_metashape/blob/main/Dockerfile +LABEL authors="David Russell" +LABEL maintainer="djrussell@ucdavis" + +# Create user account with password-less sudo abilities +RUN useradd -s /bin/bash -g 100 -G sudo -m user +RUN /usr/bin/printf '%s\n%s\n' 'password' 'password'| passwd user +RUN echo "user ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers + +ENV DEBIAN_FRONTEND=noninteractive + +# Install libraries/dependencies +RUN apt-get update && \ + apt-get install -y libgl1-mesa-glx libglu1 \ + libcurl4 \ + wget && \ + rm -rf /var/lib/apt/lists/* + +# Install the command line python module. Note that this does not install the GUI +RUN apt-get update -y && apt-get install -y python3-pip +RUN cd /opt && wget https://s3-eu-west-1.amazonaws.com/download.agisoft.com/Metashape-2.1.1-cp37.cp38.cp39.cp310.cp311-abi3-linux_x86_64.whl && \ + pip3 install Metashape-2.1.1-cp37.cp38.cp39.cp310.cp311-abi3-linux_x86_64.whl && pip3 install PyYAML && \ + rm -rf *.whl + +# TODO see if this is actually needed +CMD chmod -R 755 /opt/ + +# Set the container workdir WORKDIR /app # Copy files from current directory into /app COPY . /app -# Install GLU dependencies -RUN apt update -RUN apt install -y libglu1-mesa -RUN apt install -y libgl1-mesa-glx -# Download the wheel -RUN curl https://download.agisoft.com/Metashape-2.1.3-cp37.cp38.cp39.cp310.cp311-abi3-linux_x86_64.whl --output Metashape-2.1.3-cp37.cp38.cp39.cp310.cp311-abi3-linux_x86_64.whl -# And install -RUN python3 -m pip install Metashape-2.1.3-cp37.cp38.cp39.cp310.cp311-abi3-linux_x86_64.whl \ No newline at end of file From b131c206c836ac888d2cef3b2ed8681f65b973f0 Mon Sep 17 00:00:00 2001 From: David Russell Date: Thu, 26 Sep 2024 19:01:15 +0000 Subject: [PATCH 04/14] Add entrypoint and command --- Dockerfile | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/Dockerfile b/Dockerfile index 3d4449f..e79ded4 100644 --- a/Dockerfile +++ b/Dockerfile @@ -27,10 +27,11 @@ RUN cd /opt && wget https://s3-eu-west-1.amazonaws.com/download.agisoft.com/Meta pip3 install Metashape-2.1.1-cp37.cp38.cp39.cp310.cp311-abi3-linux_x86_64.whl && pip3 install PyYAML && \ rm -rf *.whl -# TODO see if this is actually needed -CMD chmod -R 755 /opt/ - # Set the container workdir WORKDIR /app # Copy files from current directory into /app COPY . /app + +# Set the default command and default arguments +ENTRYPOINT ["python3", "/app/python/metashape_workflow.py"] +CMD ["/data/config.yml"] \ No newline at end of file From dfe25bbb6c784c9df989775ab2f1322fd8554c31 Mon Sep 17 00:00:00 2001 From: David Russell Date: Thu, 26 Sep 2024 19:01:46 +0000 Subject: [PATCH 05/14] Add argparse command line parser --- python/metashape_workflow.py | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/python/metashape_workflow.py b/python/metashape_workflow.py index c6f482b..7430542 100755 --- a/python/metashape_workflow.py +++ b/python/metashape_workflow.py @@ -6,6 +6,7 @@ # 2021 import sys +import argparse # ---- If this is a first run from the standalone python module, need to copy the license file from the full metashape install: from python import metashape_license_setup @@ -20,16 +21,17 @@ except: # running from command line (in linux) or interactively (windows) from metashape_workflow_functions import MetashapeWorkflow -if sys.stdin.isatty(): - if len(sys.argv) < 2: - print("Usage: python ") - sys.exit(1) - config_file = sys.argv[1] -else: - config_file = manual_config_file +def parse_args(): + parser = argparse.ArgumentParser() + parser.add_argument("config_file", default=manual_config_file) + + args = parser.parse_args() + return args + +args = parse_args() # Initialize the workflow instance with the configuration file -meta = MetashapeWorkflow(config_file) +meta = MetashapeWorkflow(args.config_file) ### Run the Metashape workflow meta.run() From b3d801bbfec666324a4b29e48da37f3bd8fa96d1 Mon Sep 17 00:00:00 2001 From: David Russell Date: Thu, 26 Sep 2024 19:11:32 +0000 Subject: [PATCH 06/14] Update install command to Metashape 2.1.3 --- Dockerfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index e79ded4..3e96eb1 100644 --- a/Dockerfile +++ b/Dockerfile @@ -23,8 +23,8 @@ RUN apt-get update && \ # Install the command line python module. Note that this does not install the GUI RUN apt-get update -y && apt-get install -y python3-pip -RUN cd /opt && wget https://s3-eu-west-1.amazonaws.com/download.agisoft.com/Metashape-2.1.1-cp37.cp38.cp39.cp310.cp311-abi3-linux_x86_64.whl && \ - pip3 install Metashape-2.1.1-cp37.cp38.cp39.cp310.cp311-abi3-linux_x86_64.whl && pip3 install PyYAML && \ +RUN cd /opt && wget https://download.agisoft.com/Metashape-2.1.3-cp37.cp38.cp39.cp310.cp311-abi3-linux_x86_64.whl && \ + pip3 install Metashape-2.1.3-cp37.cp38.cp39.cp310.cp311-abi3-linux_x86_64.whl && pip3 install PyYAML && \ rm -rf *.whl # Set the container workdir From 2d286bed39634fa6715dcdeb62fd147ccf5a635c Mon Sep 17 00:00:00 2001 From: David Russell Date: Thu, 26 Sep 2024 19:18:35 +0000 Subject: [PATCH 07/14] Add action to publish docker image --- .github/workflows/publish-image.yml | 59 +++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 .github/workflows/publish-image.yml diff --git a/.github/workflows/publish-image.yml b/.github/workflows/publish-image.yml new file mode 100644 index 0000000..9de4850 --- /dev/null +++ b/.github/workflows/publish-image.yml @@ -0,0 +1,59 @@ +name: Publish image to Github Packages + +on: + push # This is temporary, for testing, so every push updates the image + +env: + REGISTRY: ghcr.io + IMAGE_NAME: ${{ github.repository }} + +jobs: + build-and-push-image: + runs-on: ubuntu-latest + + permissions: + contents: read + packages: write + attestations: write + id-token: write + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Log in to the Container registry + uses: docker/login-action@65b78e6e13532edd9afa3aa52ac7964289d1a9c1 + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Extract metadata (tags, labels) for Docker + id: meta + uses: docker/metadata-action@9ec57ed1fcdbf14dcef7dfbe97b2010124a938b7 + with: + images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} + tags: | # The first 4 lines are default; have to include in order to specify 5th (latest) + type=schedule + type=ref,event=branch + type=ref,event=tag + type=ref,event=pr + type=raw,value=latest + + - name: Build and push Docker image + id: push + uses: docker/build-push-action@f2a1d5e99d037542a71f64918e516c093c6f3fc4 + with: + context: . + push: true + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} + +# Removing the attestation step because it is only allowed for public repositories, and currently +# this is a private repo while it is being developed and contains argo setup files + # - name: Generate artifact attestation + # uses: actions/attest-build-provenance@v1 + # with: + # subject-name: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME}} + # subject-digest: ${{ steps.push.outputs.digest }} + # push-to-registry: true From 97130462fd60051837541d4ce28d199138df5d9b Mon Sep 17 00:00:00 2001 From: David Russell Date: Thu, 26 Sep 2024 19:31:41 +0000 Subject: [PATCH 08/14] Add attestation step to the docker workflow --- .github/workflows/publish-image.yml | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/.github/workflows/publish-image.yml b/.github/workflows/publish-image.yml index 9de4850..1594017 100644 --- a/.github/workflows/publish-image.yml +++ b/.github/workflows/publish-image.yml @@ -49,11 +49,9 @@ jobs: tags: ${{ steps.meta.outputs.tags }} labels: ${{ steps.meta.outputs.labels }} -# Removing the attestation step because it is only allowed for public repositories, and currently -# this is a private repo while it is being developed and contains argo setup files - # - name: Generate artifact attestation - # uses: actions/attest-build-provenance@v1 - # with: - # subject-name: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME}} - # subject-digest: ${{ steps.push.outputs.digest }} - # push-to-registry: true + - name: Generate artifact attestation + uses: actions/attest-build-provenance@v1 + with: + subject-name: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME}} + subject-digest: ${{ steps.push.outputs.digest }} + push-to-registry: true From 752ed4bbc4b77481ffe562b8c93a4aa18d4e0211 Mon Sep 17 00:00:00 2001 From: David Russell Date: Fri, 27 Sep 2024 14:40:36 +0000 Subject: [PATCH 09/14] Add docker information to README --- README.md | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/README.md b/README.md index 53f727a..7d32b85 100644 --- a/README.md +++ b/README.md @@ -20,6 +20,40 @@ For internal users working on a JS2 VM created using the OFO Dev CACAO template, to switch to a conda environment with a current Metashape python package preinstalled and configured. +### Docker +Docker is a way to run software encapsulated with all the dependencies. You must install `docker` +(instuctions [here](https://docs.docker.com/engine/install/)), and if you want to use GPUs for processing, +also install the `nvidia-container-toolkit` (instructions [here](https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html)). + + +A docker image is available from the github container registry. It can be pulled with the following command. +``` +docker pull ghcr.io/open-forest-observatory/automate-metashape:latest +``` + +Before you run it, you must set up several things. + +The first is a data directory which contains your input data and a config file, and will have output +data written to it. This will be mounted inside the container in the `/data` folder. The config file +should be named `config.yml`. When creating this config file, all paths will be relative to the file +structure of the docker container. So any paths to your data folder should be replaced with `/data`. +The `-v :` flag mounts a folder from the host machine into the container. + +Metashape requires a license to run. Currently, this container only supports using a floating license +server, which is specified as an `:`. Internal users can find the credentials +(here)[https://docs.google.com/document/d/155AP0P3jkVa-yT53a-QLp7vBAfjRa78gdST1Dfb4fls/edit?usp=sharing]. +On your host machine, set the `AGISOFT_FLS=:` and then set the same environment +variable in the container using `-e AGISOFT_FLS=$AGISOFT_FLS`. + +Finally, Metashape is accelerated by using GPUs. If your platform has GPUs and you've installed +`nvidia-container-toolkit` you can make GPUs available within the container using `--gpus all`. + +The following command puts it all together. This runs `automate_metashape` on the config file named `config.yml` +within the mounted `/data` directory. +``` +docker run -v :/data -e AGISOFT_FLS=$AGISOFT_FLS --gpus all ghcr.io/open-forest-observatory/automate-metashape +``` + ## Usage **Reproducible workflow scripts:** Simply clone this repository to your machine! From 43853c9029f7dab0253c2c8ab60222b3d93533ad Mon Sep 17 00:00:00 2001 From: David Russell Date: Fri, 27 Sep 2024 14:41:46 +0000 Subject: [PATCH 10/14] Update workflow to only run on pushes to main --- .github/workflows/publish-image.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/publish-image.yml b/.github/workflows/publish-image.yml index 1594017..f0a43b6 100644 --- a/.github/workflows/publish-image.yml +++ b/.github/workflows/publish-image.yml @@ -1,7 +1,9 @@ name: Publish image to Github Packages on: - push # This is temporary, for testing, so every push updates the image + push: + branches: + - main env: REGISTRY: ghcr.io From 9d47a513ba3cf3de12e361a46373b50e731af721 Mon Sep 17 00:00:00 2001 From: David Russell Date: Fri, 27 Sep 2024 14:57:43 +0000 Subject: [PATCH 11/14] Add updated README commands --- README.md | 29 +++++++++-------------------- 1 file changed, 9 insertions(+), 20 deletions(-) diff --git a/README.md b/README.md index 7d32b85..2714012 100644 --- a/README.md +++ b/README.md @@ -21,9 +21,7 @@ For internal users working on a JS2 VM created using the OFO Dev CACAO template, to switch to a conda environment with a current Metashape python package preinstalled and configured. ### Docker -Docker is a way to run software encapsulated with all the dependencies. You must install `docker` -(instuctions [here](https://docs.docker.com/engine/install/)), and if you want to use GPUs for processing, -also install the `nvidia-container-toolkit` (instructions [here](https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html)). +Docker is a way to run software encapsulated with all the dependencies. You must install `docker` (instuctions [here](https://docs.docker.com/engine/install/)), and if you want to use GPUs for processing, also install the `nvidia-container-toolkit` (instructions [here](https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html)). A docker image is available from the github container registry. It can be pulled with the following command. @@ -31,28 +29,19 @@ A docker image is available from the github container registry. It can be pulled docker pull ghcr.io/open-forest-observatory/automate-metashape:latest ``` -Before you run it, you must set up several things. +To use the docker container, you must have a directory which contains your input data and a config file, and will have output data written to it. This will be mounted inside the container in the `/data` folder. The config file should be named `config.yml` and be at the top level of this folder. When creating this config file, all paths will be relative to the file structure of the docker container. So any paths to your data folder should be replaced with `/data`. The `-v :` flag mounts a folder from the host machine into the container. -The first is a data directory which contains your input data and a config file, and will have output -data written to it. This will be mounted inside the container in the `/data` folder. The config file -should be named `config.yml`. When creating this config file, all paths will be relative to the file -structure of the docker container. So any paths to your data folder should be replaced with `/data`. -The `-v :` flag mounts a folder from the host machine into the container. +Metashape requires a license to run. Currently, this container only supports using a floating license server, which is specified as an `:`. Internal users can find the credentials [here](https://docs.google.com/document/d/155AP0P3jkVa-yT53a-QLp7vBAfjRa78gdST1Dfb4fls/edit?usp=sharing). On your host machine, set the `AGISOFT_FLS=:` and then set the same environment variable in the container using `-e AGISOFT_FLS=$AGISOFT_FLS`. -Metashape requires a license to run. Currently, this container only supports using a floating license -server, which is specified as an `:`. Internal users can find the credentials -(here)[https://docs.google.com/document/d/155AP0P3jkVa-yT53a-QLp7vBAfjRa78gdST1Dfb4fls/edit?usp=sharing]. -On your host machine, set the `AGISOFT_FLS=:` and then set the same environment -variable in the container using `-e AGISOFT_FLS=$AGISOFT_FLS`. +Finally, Metashape is accelerated by using GPUs. If your platform has GPUs and you've installed `nvidia-container-toolkit` you can make GPUs available within the container using `--gpus all`. -Finally, Metashape is accelerated by using GPUs. If your platform has GPUs and you've installed -`nvidia-container-toolkit` you can make GPUs available within the container using `--gpus all`. - -The following command puts it all together. This runs `automate_metashape` on the config file named `config.yml` -within the mounted `/data` directory. +The following command puts it all together. This runs `automate_metashape` on the config file named `config.yml` within the mounted `/data` directory and writes the results back out to the same folder ``` -docker run -v :/data -e AGISOFT_FLS=$AGISOFT_FLS --gpus all ghcr.io/open-forest-observatory/automate-metashape +docker run -v :/data -e AGISOFT_FLS=$AGISOFT_FLS --gpus all ghcr.io/open-forest-observatory/automate-metashape ``` +Note that the owner of the output data will be the `root` user. To set the ownership to your user account, you can run `sudo chown : ` or `sudo chown : -R `. + +You can run a different config by adding `-c ` to the end of the command above. This can be helpful if you have multiple configs you would like to try. Note that this path is local to the container, so it will begin with `/data/` if you follow the previous configuration steps. ## Usage From fc643f9c416500cdac509836cb4097c0d3956f41 Mon Sep 17 00:00:00 2001 From: David Russell Date: Fri, 27 Sep 2024 15:23:13 +0000 Subject: [PATCH 12/14] Fix flag error in readme --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 2714012..30b0831 100644 --- a/README.md +++ b/README.md @@ -41,7 +41,7 @@ docker run -v :/data -e AGISOFT_FLS=$AGISOFT_FLS --gpus all ghcr ``` Note that the owner of the output data will be the `root` user. To set the ownership to your user account, you can run `sudo chown : ` or `sudo chown : -R `. -You can run a different config by adding `-c ` to the end of the command above. This can be helpful if you have multiple configs you would like to try. Note that this path is local to the container, so it will begin with `/data/` if you follow the previous configuration steps. +You can run a different config by adding `` to the end of the command above. This can be helpful if you have multiple configs you would like to try. Note that this path is local to the container, so it will begin with `/data/` if you follow the previous configuration steps. ## Usage From 40d3a2064a30daaa46c443329ec3f6e28a561c8f Mon Sep 17 00:00:00 2001 From: David Russell Date: Fri, 27 Sep 2024 20:43:58 +0000 Subject: [PATCH 13/14] Update readme and workflow tags based on review --- .github/workflows/publish-image.yml | 6 ------ README.md | 5 ++++- 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/.github/workflows/publish-image.yml b/.github/workflows/publish-image.yml index f0a43b6..eea53df 100644 --- a/.github/workflows/publish-image.yml +++ b/.github/workflows/publish-image.yml @@ -35,12 +35,6 @@ jobs: uses: docker/metadata-action@9ec57ed1fcdbf14dcef7dfbe97b2010124a938b7 with: images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} - tags: | # The first 4 lines are default; have to include in order to specify 5th (latest) - type=schedule - type=ref,event=branch - type=ref,event=tag - type=ref,event=pr - type=raw,value=latest - name: Build and push Docker image id: push diff --git a/README.md b/README.md index 30b0831..3b9d367 100644 --- a/README.md +++ b/README.md @@ -23,13 +23,16 @@ to switch to a conda environment with a current Metashape python package preinst ### Docker Docker is a way to run software encapsulated with all the dependencies. You must install `docker` (instuctions [here](https://docs.docker.com/engine/install/)), and if you want to use GPUs for processing, also install the `nvidia-container-toolkit` (instructions [here](https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html)). +If running Docker on Linux without `sudo` (as in this example), your user will need to be in the `docker` group. This can be achieved with `sudo usermod -a -G docker $USER` and then logging out and in, as explained [here](https://docs.docker.com/engine/install/linux-postinstall/). A docker image is available from the github container registry. It can be pulled with the following command. ``` docker pull ghcr.io/open-forest-observatory/automate-metashape:latest ``` -To use the docker container, you must have a directory which contains your input data and a config file, and will have output data written to it. This will be mounted inside the container in the `/data` folder. The config file should be named `config.yml` and be at the top level of this folder. When creating this config file, all paths will be relative to the file structure of the docker container. So any paths to your data folder should be replaced with `/data`. The `-v :` flag mounts a folder from the host machine into the container. +To use the docker container, you must have a directory which contains your input data and a config file, and will have output data written to it. The input data, config file, and output data can each be any number of levels below the data directory (meaning you do not need a separate data directory for each project to be run). This folder will be mounted inside the container as the `/data` folder. When creating this config file, all paths will be relative to the file structure of the docker container. So any paths to your data folder should be replaced with `/data`. The `-v :` flag mounts a folder from the host machine into the container. + +By default, the container expects the config YAML file describing the Metashape workflow parameters to be located at `/data/config.yaml`, but this can be overridden by passing a different location as a final (optional) command line argument to the `docker run` command. This would be useful if you have multiple imagery datasets/projects (and config files) nested below your mounted `/data` directory and/or if you are taking advantage of the `automate-metashape` feature to name output files based on the name of the config file. Metashape requires a license to run. Currently, this container only supports using a floating license server, which is specified as an `:`. Internal users can find the credentials [here](https://docs.google.com/document/d/155AP0P3jkVa-yT53a-QLp7vBAfjRa78gdST1Dfb4fls/edit?usp=sharing). On your host machine, set the `AGISOFT_FLS=:` and then set the same environment variable in the container using `-e AGISOFT_FLS=$AGISOFT_FLS`. From 55e2f935cee3615de566b977813296d53cd53572 Mon Sep 17 00:00:00 2001 From: David Russell Date: Fri, 27 Sep 2024 20:51:29 +0000 Subject: [PATCH 14/14] Add option workflow_dispatch option for container workflow --- .github/workflows/publish-image.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/publish-image.yml b/.github/workflows/publish-image.yml index eea53df..f58f237 100644 --- a/.github/workflows/publish-image.yml +++ b/.github/workflows/publish-image.yml @@ -4,6 +4,7 @@ on: push: branches: - main + workflow_dispatch: env: REGISTRY: ghcr.io