From f47e974c7cf2c1f1b035144610f53bef02e19aa0 Mon Sep 17 00:00:00 2001 From: Christopher Obbard Date: Fri, 13 Jan 2023 18:09:33 +0000 Subject: [PATCH 1/3] Allow setting Todoist API key from environment variable In the Docker world, secrets (e.g. passwords, API keys) are usually shared with an application as environment variables so that they can be imported from separate secure areas: in docker-compose you can specify a file where secrets are imported from as environment variables. Read the API key from the TODOIST_API_KEY environment variable first, then check the command-line argument. Signed-off-by: Christopher Obbard --- autodoist.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/autodoist.py b/autodoist.py index 941574f..09e4539 100644 --- a/autodoist.py +++ b/autodoist.py @@ -333,7 +333,7 @@ def initialise_api(args): # Check we have a API key if not args.api_key: logging.error( - "\n\nNo API key set. Run Autodoist with '-a '\n") + "\n\nNo API key set. Run Autodoist with '-a ' or set the environment variable TODOIST_API_KEY.\n") sys.exit(1) # Check if alternative end of day is used @@ -1356,8 +1356,8 @@ def main(): # Main process functions. parser = argparse.ArgumentParser( formatter_class=make_wide(argparse.HelpFormatter, w=120, h=60)) - parser.add_argument('-a', '--api_key', - help='takes your Todoist API Key.', type=str) + parser.add_argument( + '-a', '--api_key', help='takes your Todoist API Key.', default=os.environ.get('TODOIST_API_KEY'), type=str) parser.add_argument( '-l', '--label', help='enable next action labelling. Define which label to use.', type=str) parser.add_argument( From 2ee1088e9cd97b926c09c89138fd6ce88281e979 Mon Sep 17 00:00:00 2001 From: Christopher Obbard Date: Sun, 2 Jan 2022 18:30:14 +0000 Subject: [PATCH 2/3] Add Dockerfile Add a Dockerfile to have the ability to build a container from the app. Signed-off-by: Christopher Obbard --- Dockerfile | 10 ++++++++++ README.md | 11 +++++++++++ 2 files changed, 21 insertions(+) create mode 100644 Dockerfile diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..c91741c --- /dev/null +++ b/Dockerfile @@ -0,0 +1,10 @@ +FROM python:3-slim-bullseye + +WORKDIR /usr/src/app + +COPY requirements.txt ./ +RUN pip install --no-cache-dir -r requirements.txt + +COPY . . + +ENTRYPOINT [ "python", "./autodoist.py" ] diff --git a/README.md b/README.md index 2c6e38b..737c9f1 100644 --- a/README.md +++ b/README.md @@ -150,3 +150,14 @@ In addition, if you experience issues with syncing you can increase the api sync For all arguments, please check out the help: python autodoist.py --help + + +## Docker container + +To build the docker container, check out the repository and run: + + docker build . --tag autodoist:latest + +To run autodoist inside the docker container: + + docker run -it autodoist:latest From 0231937b8f5f15e8b2737aa17c5ecf70e45bc203 Mon Sep 17 00:00:00 2001 From: Christopher Obbard Date: Mon, 3 Jan 2022 16:44:06 +0000 Subject: [PATCH 3/3] Build and publish Docker image in GitHub actions Add the ability to build a Docker image in GitHub actions and push that image to the GitHub container registry. Signed-off-by: Christopher Obbard --- .github/workflows/ci.yaml | 41 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 .github/workflows/ci.yaml diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml new file mode 100644 index 0000000..6a05e6f --- /dev/null +++ b/.github/workflows/ci.yaml @@ -0,0 +1,41 @@ +name: Build and publish Docker image + +on: + push: + +env: + REGISTRY: ghcr.io + IMAGE_NAME: ${{ github.repository }} + +jobs: + build-and-publish-docker-image: + name: Build and publish Docker image + runs-on: ubuntu-latest + permissions: + contents: read + packages: write + + steps: + - name: Checkout repository + uses: actions/checkout@v2 + + - name: Log in to the Container registry + uses: docker/login-action@v1 + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Extract metadata (tags, labels) for Docker + id: meta + uses: docker/metadata-action@v3 + with: + images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} + + - name: Build and push Docker image + uses: docker/build-push-action@v2 + with: + context: . + push: true + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }}