From 2f937d6ce92ebb4c46b88c1779d64b05cdb3750c Mon Sep 17 00:00:00 2001 From: Andrew Williams Date: Thu, 16 Mar 2023 16:07:48 +0000 Subject: [PATCH 1/2] Add Dockerfile and container build workflow --- .github/workflows/build-container.yaml | 31 ++++++++++++++++++++++++++ Dockerfile | 6 +++++ 2 files changed, 37 insertions(+) create mode 100644 .github/workflows/build-container.yaml create mode 100644 Dockerfile diff --git a/.github/workflows/build-container.yaml b/.github/workflows/build-container.yaml new file mode 100644 index 0000000..c8a43e4 --- /dev/null +++ b/.github/workflows/build-container.yaml @@ -0,0 +1,31 @@ +name: Build Container + +"on": + push: + branches: + - main + tags: + - "v[0-9]+.[0-9]+.[0-9]+" +jobs: + docker: + runs-on: ubuntu-latest + steps: + - name: Set up QEMU + uses: docker/setup-qemu-action@v2 + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v2 + - name: Login to GHCR + uses: docker/login-action@v2 + if: github.event_name != 'pull_request' + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + - name: Build and push + id: docker_build + uses: docker/build-push-action@v4 + with: + push: true + tags: | + ghcr.io/${{ github.repository_owner }}/mastodon_get_replies:${{ github.ref_name }} + ghcr.io/${{ github.repository_owner }}/mastodon_get_replies:latest diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..a6b9952 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,6 @@ +FROM python:3.11-alpine +WORKDIR /app +COPY ./requirements.txt /app/requirements.txt +RUN pip install --no-cache-dir --upgrade -r /app/requirements.txt +COPY ./find_posts.py /app/ +ENTRYPOINT ["python", "find_posts.py"] From 1676885ed59fd1333c995c67626cccda885654ec Mon Sep 17 00:00:00 2001 From: Andrew Williams Date: Fri, 17 Mar 2023 06:54:16 +0000 Subject: [PATCH 2/2] Update README and add example CronJob definition --- README.md | 11 +++++++++++ examples/k8s-cronjob.yaml | 23 +++++++++++++++++++++++ 2 files changed, 34 insertions(+) create mode 100644 examples/k8s-cronjob.yaml diff --git a/README.md b/README.md index c07638c..142baa1 100644 --- a/README.md +++ b/README.md @@ -63,6 +63,17 @@ When setting up your cronjob, do make sure you are setting the interval long eno If you are running this script locally, my recommendation is to run it manually once, before turning on the cron job: The first run will be significantly slower than subsequent runs, and that will help you prevent overlapping during that first run. +### 4) Run this script from a container + +This script is also available in a pre-packaged container, [mastodon_get_replies](https://github.com/nanos/mastodon_get_replies/pkgs/container/mastodon_get_replies). + +1. Pull the container from `ghcr.io`, using Docker or your container tool of choice: `docker pull ghcr.io/nanos/mastodon_get_replies:latest` +2. Run the container, passing the command line arguments like running the script directly: `docker run -it ghcr.io/nanos/mastodon_get_replies:latest --access-token= --server=` + +The same rules for running this as a cron job apply to running the container, don't overlap any executions. + +An example Kubernetes CronJob for running the container is included in the [`examples`](https://github.com/nanos/mastodon_get_replies/tree/main/examples) folder. + ## Acknowledgments This script is mostly taken from [Abhinav Sarkar](https://notes.abhinavsarkar.net/2023/mastodon-context), with just some additions and alterations. Thank you Abhinav! diff --git a/examples/k8s-cronjob.yaml b/examples/k8s-cronjob.yaml new file mode 100644 index 0000000..accd720 --- /dev/null +++ b/examples/k8s-cronjob.yaml @@ -0,0 +1,23 @@ +--- +apiVersion: batch/v1 +kind: CronJob +metadata: + name: mastodon-get-replies +spec: + # Run every 2 hours + schedule: "0 */2 * * *" + successfulJobsHistoryLimit: 1 + failedJobsHistoryLimit: 1 + concurrencyPolicy: Forbid + jobTemplate: + spec: + template: + spec: + containers: + - name: mastodon-get-replies + image: ghcr.io/nanos/mastodon_get_replies:latest + args: + - --server=your.server.social + - --access-token=TOKEN + restartPolicy: Never +