Compare commits
22 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 1985a196b7 | |||
| f9f5e7eb0d | |||
| bbf6169456 | |||
| 5c992429f4 | |||
| 3fbfe72959 | |||
| 0f207b2ac9 | |||
| 7464659d78 | |||
| fb48441e73 | |||
| ec434a4121 | |||
| 55a204c32d | |||
| 75c2f42e27 | |||
| 01954de5d1 | |||
| d2effa04a7 | |||
| fbe120ea3c | |||
| f1e9a8147a | |||
| d846816971 | |||
| d4b09e4c90 | |||
| 4cfb3e3be2 | |||
| a97d453290 | |||
| a2ed827f1e | |||
| 51b84cb2af | |||
| 9f77251b5b |
@@ -45,25 +45,50 @@ jobs:
|
|||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
if: steps.cached-poetry-dependencies.outputs.cache-hit != 'true'
|
if: steps.cached-poetry-dependencies.outputs.cache-hit != 'true'
|
||||||
run: poetry install --no-interaction --no-root
|
run: poetry install --no-interaction --no-root
|
||||||
|
- name: Get current time
|
||||||
|
id: time
|
||||||
|
run: echo "::set-output name=time::$(TZ='America/Los_Angeles' date +'%Y-%m-%d %I:%M %p')"
|
||||||
|
- name: Get time tag
|
||||||
|
id: time_tag
|
||||||
|
run: echo "::set-output name=tag::$(TZ='America/Los_Angeles' date +'%Y-%m-%d_%I%M_%p')"
|
||||||
#----------------------------------------------
|
#----------------------------------------------
|
||||||
# install and run the project
|
# install and run the project
|
||||||
#----------------------------------------------
|
#----------------------------------------------
|
||||||
- name: Install package
|
- name: Install package
|
||||||
run: poetry install --no-interaction
|
run: poetry install --no-interaction
|
||||||
- name: Generate New Calendar Files
|
- name: Generate new calendar Files
|
||||||
run: poetry run generate-ics
|
run: poetry run generate-ics
|
||||||
#----------------------------------------------
|
#----------------------------------------------
|
||||||
|
# load cached venv if cache exists
|
||||||
|
#----------------------------------------------
|
||||||
|
- name: Check if calendars have changed
|
||||||
|
id: cached-calendars
|
||||||
|
uses: actions/cache@v4
|
||||||
|
with:
|
||||||
|
path: output
|
||||||
|
key: calendar-files-${{ hashFiles('output/**') }}
|
||||||
|
#----------------------------------------------
|
||||||
# publish artifacts and release
|
# publish artifacts and release
|
||||||
#----------------------------------------------
|
#----------------------------------------------
|
||||||
- name: Archive production artifacts
|
- name: Archive production artifacts
|
||||||
|
if: steps.cached-calendars.outputs.cache-hit != 'true'
|
||||||
uses: christopherhx/gitea-upload-artifact@v4
|
uses: christopherhx/gitea-upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: calendars
|
name: calendars
|
||||||
path: |
|
path: |
|
||||||
output/
|
output/
|
||||||
|
- name: Zip up artifacts
|
||||||
|
if: steps.cached-calendars.outputs.cache-hit != 'true'
|
||||||
|
uses: thedoctor0/zip-release@0.7.5
|
||||||
|
with:
|
||||||
|
type: 'zip'
|
||||||
|
filename: 'calendars.zip'
|
||||||
|
path: output/
|
||||||
- name: Create new release
|
- name: Create new release
|
||||||
|
if: steps.cached-calendars.outputs.cache-hit != 'true'
|
||||||
uses: akkuman/gitea-release-action@v1
|
uses: akkuman/gitea-release-action@v1
|
||||||
with:
|
with:
|
||||||
|
name: ${{ steps.time.outputs.time }}
|
||||||
|
tag_name: ${{ steps.time_tag.outputs.tag }}
|
||||||
files: |-
|
files: |-
|
||||||
output/**
|
calendars.zip
|
||||||
api_key: '${{secrets.RELEASE_TOKEN}}'
|
|
||||||
@@ -1,10 +1,38 @@
|
|||||||
|
# Events Plus
|
||||||
|
|
||||||
This script turns the Sakura-Con schedule from Eventny into iCalendar files for import into your calendar program of choice. Events are broken out into separate files, by track.
|
Right now, this is a script that turns the Sakura-Con schedule from Eventny into iCalendar files (for import into your calendar program of choice). Events are broken out into separate files, by track.
|
||||||
It is vibe-coded. Anyway, here's how to run it:
|
|
||||||
|
|
||||||
|
It may eventually grow to support other events and/or sport a separate UI. See [TODO].
|
||||||
|
|
||||||
|
Events are scraped via a pipeline that runs twice hourly, and if there are any changes, [a new release containing iCal files is published](https://g.dracoli.ch/rufei/events-plus/releases).
|
||||||
|
|
||||||
|
## Google Calendar Links
|
||||||
|
For your convenience, these have been imported to publicly available google calendars. You can (and should, for the best UX) import them [into your account here](https://calendar.google.com/calendar/u/0/r/settings/addbyurl).
|
||||||
|
|
||||||
|
* Sakura-Con 2025
|
||||||
|
* [Sakura-Con Presents](https://calendar.google.com/calendar/embed?src=f2802717d1727828bf1bfe9f6cc35844a36ffff6daad7c3fa293ab35bf51c495%40group.calendar.google.com&ctz=America%2FLos_Angeles)
|
||||||
|
* [Fan Panel](https://calendar.google.com/calendar/embed?src=8062c73edfb8db11c385b255531d97ba7a30672a5e6ded4e24cd589b25282d65%40group.calendar.google.com&ctz=America%2FLos_Angeles)
|
||||||
|
* [Gaming](https://calendar.google.com/calendar/embed?src=46c95e247f9e449f2968b44edfe659560a232efbf57576efc9f15ba8668ee0ff%40group.calendar.google.com&ctz=America%2FLos_Angeles)
|
||||||
|
* [Main Stage](https://calendar.google.com/calendar/embed?src=ae20459e6d4c41b46496663b04ec87279fb1a0ed858351ea796d82c217e20579%40group.calendar.google.com&ctz=America%2FLos_Angeles)
|
||||||
|
* [Cultural Panel](https://calendar.google.com/calendar/embed?src=633adb5a3a96b984092c8e641dda4011b80a8a314d03fc0c6e941895caabf2d2%40group.calendar.google.com&ctz=America%2FLos_Angeles)
|
||||||
|
* [Guest of Honor](https://calendar.google.com/calendar/embed?src=da7b9a6845eb7868457147046aa388101ef2601cffbaf4d29f1a1c8d00a8bea9%40group.calendar.google.com&ctz=America%2FLos_Angeles)
|
||||||
|
* [Charity Auction](https://calendar.google.com/calendar/embed?src=a51250c24fd2c4fd2d4bbefc94c055eb1f392ccf89d93799d4a92ff2c319f436%40group.calendar.google.com&ctz=America%2FLos_Angeles)
|
||||||
|
* [Industry Panel](https://calendar.google.com/calendar/embed?src=fe3a9a7e1e839dd41ac934bb0b79287d4ff705f577f726d06b0f4249bae1ac40%40group.calendar.google.com&ctz=America%2FLos_Angeles)
|
||||||
|
* [Autographs](https://calendar.google.com/calendar/embed?src=1959b9a550cbdf73d7997c070009ea836c1af93d8330353bbfdbbc2f82aff27a%40group.calendar.google.com&ctz=America%2FLos_Angeles)
|
||||||
|
* [Summit Stage](https://calendar.google.com/calendar/embed?src=106d7620bbe3a8e14ee593758e7db9c71a311615e3a17ada938f50974b0b9ccf%40group.calendar.google.com&ctz=America%2FLos_Angeles)
|
||||||
|
|
||||||
|
## How to Run
|
||||||
```sh
|
```sh
|
||||||
poetry install
|
poetry install
|
||||||
eval $(poetry env activate)
|
eval $(poetry env activate)
|
||||||
python toical.py
|
poetry run generate-ics
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## TODO
|
||||||
|
* sync events to gcal by icaluid on every release via gcal api
|
||||||
|
* create multi-select webui
|
||||||
|
* save selected event uids in cookie
|
||||||
|
* compare event ids from last sync to current and highlight changes to previously selected events
|
||||||
|
* refactor event scrapers to use a config containing start/stop and other common metadata
|
||||||
|
* modify runner scripts to stop running on events that have already elapsed
|
||||||
|
* add support for other events like lbx
|
||||||
|
|||||||
Reference in New Issue
Block a user