diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..b0575f6 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,8 @@ +/.git + +# .gitignore +/.meltano/ +/output/ +/logs/ +/.env +/.python-version diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml new file mode 100644 index 0000000..6485e5f --- /dev/null +++ b/.github/workflows/main.yml @@ -0,0 +1,72 @@ +name: Build, Test, Push + +on: + push: + schedule: + - cron: "0 0 * * 0" + +permissions: + contents: read + packages: write + +env: + REGISTRY: ghcr.io + IMAGE_NAME: ${{ github.repository }} + +jobs: + build-test-push: + runs-on: ubuntu-latest + + steps: + ### Build + - name: Build / Checkout repository + uses: actions/checkout@v3 + + - name: Build / Set up Docker Buildx + uses: docker/setup-buildx-action@v2 + + - name: Build / Extract Docker metadata (tags, labels) + id: meta + uses: docker/metadata-action@v4.6.0 + with: + images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} + + - name: Build / Build Docker image + uses: docker/build-push-action@v4.1.1 + with: + context: . + load: true + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} + cache-from: type=gha + cache-to: type=gha,mode=max + + ### Test + - name: Test / Render app to image + run: | + docker run -v "$(pwd)/output:/project/output" -e TAP_PIXLET_MAGNIFICATION=8 ${{ steps.meta.outputs.tags }} + sudo mv output/**/*.webp output/image.webp + + - name: Test / Store image + uses: actions/upload-artifact@v3 + with: + name: image + path: output/image.webp + + ### Push + - name: Push / Log in to the Container registry + uses: docker/login-action@v2.2.0 + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Push / Push Docker image + uses: docker/build-push-action@v4.1.1 + with: + context: . + push: true + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} + cache-from: type=gha + cache-to: type=gha,mode=max diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..fe73af6 --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +/.meltano +/output/ +/logs/ +/.env +/.python-version diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..5968a3c --- /dev/null +++ b/Dockerfile @@ -0,0 +1,19 @@ +ARG PIXBYT_IMAGE=ghcr.io/douwem/pixbyt:main +FROM $PIXBYT_IMAGE as base + +ENV APP_NAME=jeopardy + +WORKDIR /project + +# Copy app files +COPY ./ ./apps/${APP_NAME} + +# Install apt packages for apps +RUN cat ./apps/**/apt-packages.txt | sort | uniq > ./apps/apt-packages.txt +RUN xargs -a apps/apt-packages.txt apt-get install -y + +# Install Meltano plugins for apps +RUN meltano --log-level=debug install extractors tap-pixlet--${APP_NAME} + +ENTRYPOINT [] +CMD meltano run ${APP_NAME}--webp diff --git a/README.md b/README.md index 0734d3e..ebee496 100644 --- a/README.md +++ b/README.md @@ -3,3 +3,39 @@ [Tidbyt](https://tidbyt.com/) app that shows a random *Jeopardy!* clue from [J! Archive](https://j-archive.com/). The correct answer is shown after 10 seconds. ![Screenshot](screenshot.webp) + +## Installation + +This app is not available through Tidbyt's mobile app as it uses features that (for security reasons) are not supported in [community apps](https://tidbyt.dev/docs/publish/community-apps) that run on Tidbyt's official app server. + +Instead, it needs to be run using [Pixbyt](https://pixbyt.dev), a self-hosted Tidbyt app server for advanced apps. + +### 1. Set up Pixbyt + +1. [Create your own Pixbyt repo](https://github.com/DouweM/pixbyt#1-create-your-own-pixbyt-repo) +2. [Configure your Tidbyt](https://github.com/DouweM/pixbyt#2-configure-your-tidbyt) + +### 2. Install the app + +1. Add this repo as a submodule under `apps`: + + ```bash + git submodule add https://github.com/DouweM/tidbyt-jeopardy.git apps/jeopardy + ``` + +1. Add an update schedule to `apps.yml` under `schedules:`: + + ```yaml + schedules: + # ... + - name: jeopardy + interval: '*/5 * * * *' # Every 5 minutes + job: jeopardy + ``` + +## Usage + +Build and launch your Pixbyt app server: + +1. [Build the app server](https://github.com/DouweM/pixbyt#4-build-the-app-server) +1. [Launch the app server](https://github.com/DouweM/pixbyt#5-launch-the-app-server)