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
|
||||
if: steps.cached-poetry-dependencies.outputs.cache-hit != 'true'
|
||||
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
|
||||
#----------------------------------------------
|
||||
- name: Install package
|
||||
run: poetry install --no-interaction
|
||||
- name: Generate New Calendar Files
|
||||
- name: Generate new calendar Files
|
||||
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
|
||||
#----------------------------------------------
|
||||
- name: Archive production artifacts
|
||||
if: steps.cached-calendars.outputs.cache-hit != 'true'
|
||||
uses: christopherhx/gitea-upload-artifact@v4
|
||||
with:
|
||||
name: calendars
|
||||
path: |
|
||||
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
|
||||
if: steps.cached-calendars.outputs.cache-hit != 'true'
|
||||
uses: akkuman/gitea-release-action@v1
|
||||
with:
|
||||
name: ${{ steps.time.outputs.time }}
|
||||
tag_name: ${{ steps.time_tag.outputs.tag }}
|
||||
files: |-
|
||||
output/**
|
||||
api_key: '${{secrets.RELEASE_TOKEN}}'
|
||||
calendars.zip
|
||||
@@ -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.
|
||||
It is vibe-coded. Anyway, here's how to run it:
|
||||
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 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
|
||||
poetry install
|
||||
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