Compare commits

...

22 Commits

Author SHA1 Message Date
rufei 1985a196b7 update run instructions
Periodic refresh of events / Run-Scraper (push) Successful in 31s
2025-04-07 19:32:25 -07:00
rufei f9f5e7eb0d docs
Periodic refresh of events / Run-Scraper (push) Successful in 33s
2025-04-07 19:22:36 -07:00
rufei bbf6169456 docs 2025-04-07 19:20:27 -07:00
rufei 5c992429f4 add gcal links 2025-04-07 19:17:57 -07:00
rufei 3fbfe72959 update readme
Periodic refresh of events / Run-Scraper (push) Successful in 33s
2025-04-07 02:47:30 -07:00
rufei 0f207b2ac9 fix hash generation
Periodic refresh of events / Run-Scraper (push) Successful in 34s
2025-04-07 02:18:37 -07:00
rufei 7464659d78 unify casing 2025-04-07 02:17:43 -07:00
rufei fb48441e73 dont publish on output cache hit 2025-04-07 02:16:51 -07:00
rufei ec434a4121 generate tag from time 2025-04-07 02:03:34 -07:00
rufei 55a204c32d use sha
Periodic refresh of events / Run-Scraper (push) Successful in 34s
2025-04-07 01:57:27 -07:00
rufei 75c2f42e27 revert to output 2025-04-07 01:53:50 -07:00
rufei 01954de5d1 it broke? 2025-04-07 01:50:50 -07:00
rufei d2effa04a7 release md5sum 2025-04-07 01:46:59 -07:00
rufei fbe120ea3c use zip file 2025-04-07 01:35:00 -07:00
rufei f1e9a8147a indent 2025-04-07 01:32:41 -07:00
rufei d846816971 just zip the output 2025-04-07 01:32:09 -07:00
rufei d4b09e4c90 log list
Periodic refresh of events / Run-Scraper (push) Successful in 32s
2025-04-07 01:25:33 -07:00
rufei 4cfb3e3be2 update artifact path 2025-04-07 01:23:26 -07:00
rufei a97d453290 fix tz 2025-04-07 01:19:13 -07:00
rufei a2ed827f1e whoops 2025-04-07 01:11:13 -07:00
rufei 51b84cb2af use time as release 2025-04-07 01:10:30 -07:00
rufei 9f77251b5b download artifact before releasing
Periodic refresh of events / Run-Scraper (push) Successful in 35s
2025-04-07 00:54:18 -07:00
2 changed files with 59 additions and 6 deletions
+28 -3
View File
@@ -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
+31 -3
View File
@@ -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