From d8035fc67583a1b5d52895551fb84782d03fc7be Mon Sep 17 00:00:00 2001 From: Luna Simons Date: Mon, 29 Jan 2024 00:13:30 +0100 Subject: [PATCH] docs: added first rev of README --- .github/assets/banner.jpg | Bin 0 -> 17776 bytes README.md | 61 +++++++++++++++++++++++++++++--------- 2 files changed, 47 insertions(+), 14 deletions(-) create mode 100644 .github/assets/banner.jpg diff --git a/.github/assets/banner.jpg b/.github/assets/banner.jpg new file mode 100644 index 0000000000000000000000000000000000000000..492a0ee12036267828db472cda0773a6f3c0a50c GIT binary patch literal 17776 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 z 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 literal 0 HcmV?d00001 diff --git a/README.md b/README.md index 53aca94..71ad00b 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,7 @@ # untis-ics-sync +[![Node CI](https://github.com/bddvlpr/untis-ics-sync/actions/workflows/node-ci.yaml/badge.svg)](https://github.com/bddvlpr/untis-ics-sync/actions/workflows/node-ci.yaml) [![Docker CD](https://github.com/bddvlpr/untis-ics-sync/actions/workflows/docker-cd.yaml/badge.svg)](https://github.com/bddvlpr/untis-ics-sync/actions/workflows/docker-cd.yaml) + Serves a calendar API (ICS) for events provided from Untis. ## Use case @@ -8,24 +10,55 @@ Some schools, universities, or workspaces do not enable the iCalendar API that U ## Installation -Simply clone the repository and cd into it using `git clone https://github.com/bddvlpr/untis-ics-sync && cd untis-ics-sync`. -If you're planning on using Docker, you could use the [bddvlpr/untis-ics-sync](https://hub.docker.com/r/bddvlpr/untis-ics-sync/) image from Docker Hub instead of the git repository. - -### Redis - -Version 0.7.0 and above require a redis server to be supplied in environment variables for queue processing. Either externally provide one, or define one in a Docker compose environment. +### Using Docker -### Setup SSL +To deploy a quick Docker environment, fill in the target school credentials in `docker-compose.yml` and start the service by running `docker compose up -d`. Do note that if you'd like to use SSL, add any reverse proxy such as Nginx, Caddy or Traefik. View the table below for all possible environment variables. -From version 0.2.6 and forward, SSL will not be natively supported anymore. Please use a reverse proxy instead of supplying the docker container with an SSL certificate. +### Using NixOS -### Using Docker +Firstly add this repository to your flake's inputs. +```nix +{ + inputs = { + # ... + untis-ics-sync.url = "github:bddvlpr/untis-ics-sync/"; + untis-ics-sync.inputs.nixpkgs.follows = "nixpkgs"; + }; -To run the app using Docker, copy over the `.env.example` to `.env` and fill in the parameters to get the app to work. -Deploy the app (in a test environment) using `docker run -d --env-list .env -p 3000:3000 bddvlpr/untis-ics-sync`. + # ... +} +``` -### Using Yarn +Secondly, enable the service. Please **DO NOT** use a writeText derivative as this will add your credentials to the Nix store. Use agenix or nix-sops. A local Redis service will automatically be started. +```nix +{ + inputs, + ... +}: { + imports = [ + inputs.untis-ics-sync.nixosModules.default + ]; -To run the app using Yarn, copy over the `.env.example` to `.env` and fill in the parameters to get the app to work. -Hot run the app using `yarn start:dev`, or build it using `yarn build`. + services.untis-ics-sync = { + enable = true; + envFile = ./; # Path to your credentials. + }; +} +``` +## Environment +| Name | Type | Default | Description | +| - | - | - | - | +| UNTIS_SCHOOLNAME | string | `null` | The school's (Untis) service name. | +| UNTIS_USERNAME | string | `null` | The school's user name. | +| UNTIS_PASSWORD | string | `null` | The school's password. | +| UNTIS_BASEURL | string | `null` | The school's (Untis) base-url. | +| BULL_REDIS_HOST | string | `null` | The Redis service hostname or address. | +| BULL_REDIS_PORT | number | `null` | The Redis service port. | +| BULL_REDIS_PATH | string | `null` | The Redis service path for Unix socket connection. | +| CORS_ORIGIN | string | http://localhost:5173 | CORS Origin header to be sent for untis-ics-sync-ui. | +| MAINTENANCE_TITLE | string | `null` | Maintenance notification title. | +| MAINTENANCE_DESCRIPTION | string | `null` | Maintenance notification description. | +| MAINTENANCE_LOCATION | string | `null` | Maintenance notification location. | +| LESSONS_TIMETABLE_BEFORE | number | 7 | The amount of days to fetch before today. | +| LESSONS_TIMETABLE_AFTER | number | 14 | The amount of days to fetch after today. |