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 - 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}}'
+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. 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