Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
59 changes: 59 additions & 0 deletions .github/workflows/scrape_governance_calendars.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
name: Scrape (Governance Calendars)

on:
workflow_dispatch:
schedule:
- cron: 36 5 * * *

jobs:
scrape:
name: Run Governance Calendar Scraper
if: github.event_name != 'schedule' || github.repository == 'ocaml/ocaml.org'

runs-on: ${{ matrix.os }}

strategy:
fail-fast: false
matrix:
os:
- ubuntu-latest
ocaml-compiler:
- "5.2.0"

steps:
- name: Checkout code
uses: actions/checkout@v6

- name: Use OCaml ${{ matrix.ocaml-compiler }}
uses: ocaml/setup-ocaml@v3
with:
ocaml-compiler: ${{ matrix.ocaml-compiler }}
dune-cache: ${{ matrix.os != 'macos-latest' }}
opam-repositories: |
pin: git+https://github.com/ocaml/opam-repository#584630e7a7e27e3cf56158696a3fe94623a0cf4f
opam-disable-sandboxing: true

- name: Install system dependencies
run: sudo apt update && sudo apt-get install libev-dev libonig-dev libcurl4-openssl-dev

- name: Install opam dependencies
run: opam install --deps-only --with-test .

- name: Build scraper
run: |
opam exec -- dune build tool/data-scrape/bin/scrape.exe

- name: Run governance calendar scraper
run: |
make scrape_governance_calendars

- name: Create Pull Request
uses: peter-evans/create-pull-request@v8
with:
title: '[scrape] Refresh upcoming governance meetings'
labels: scrape
branch: create-pull-request/patch-scrape-governance-calendars
add-paths: |
data/governance-meetings.yml
commit-message: |
[scrape] Refresh upcoming governance meetings
4 changes: 4 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,10 @@ scrape_ocaml_planet:
scrape_platform_releases:
opam exec -- dune exec --root . tool/data-scrape/bin/scrape.exe platform_releases

.PHONY: scrape_governance_calendars
scrape_governance_calendars:
opam exec -- dune exec --root . tool/data-scrape/bin/scrape.exe governance_calendars

.PHONY: docker
docker: ## Generate docker container
docker build -f Dockerfile . -t ocamlorg:latest
217 changes: 217 additions & 0 deletions data/governance-meetings.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,217 @@
meetings:
- team_id: platform/dune-dev
team_name: Dune
starts_at: 2026-03-04T16:00:00
timezone: Europe/Paris
duration_minutes: 60
meeting_link: https://us06web.zoom.us/j/85096877776?pwd=cWNhU1dHQ1ZNSjZuOUZCQ0h2by9Udz09
notes_link: https://github.com/ocaml/dune/wiki
ical: https://calendar.google.com/calendar/ical/c_5cd698df6784e385b1cdcdc1dbca18c061faa96959a04781566d304dc9ec7319%40group.calendar.google.com/public/basic.ics
- team_id: platform/dune-dev
team_name: Dune
starts_at: 2026-03-18T16:00:00
timezone: Europe/Paris
duration_minutes: 60
meeting_link: https://us06web.zoom.us/j/85096877776?pwd=cWNhU1dHQ1ZNSjZuOUZCQ0h2by9Udz09
notes_link: https://github.com/ocaml/dune/wiki
ical: https://calendar.google.com/calendar/ical/c_5cd698df6784e385b1cdcdc1dbca18c061faa96959a04781566d304dc9ec7319%40group.calendar.google.com/public/basic.ics
- team_id: platform/dune-dev
team_name: Dune
starts_at: 2026-04-01T16:00:00
timezone: Europe/Paris
duration_minutes: 60
meeting_link: https://us06web.zoom.us/j/85096877776?pwd=cWNhU1dHQ1ZNSjZuOUZCQ0h2by9Udz09
notes_link: https://github.com/ocaml/dune/wiki
ical: https://calendar.google.com/calendar/ical/c_5cd698df6784e385b1cdcdc1dbca18c061faa96959a04781566d304dc9ec7319%40group.calendar.google.com/public/basic.ics
- team_id: platform/dune-dev
team_name: Dune
starts_at: 2026-04-15T16:00:00
timezone: Europe/Paris
duration_minutes: 60
meeting_link: https://us06web.zoom.us/j/85096877776?pwd=cWNhU1dHQ1ZNSjZuOUZCQ0h2by9Udz09
notes_link: https://github.com/ocaml/dune/wiki
ical: https://calendar.google.com/calendar/ical/c_5cd698df6784e385b1cdcdc1dbca18c061faa96959a04781566d304dc9ec7319%40group.calendar.google.com/public/basic.ics
- team_id: platform/dune-dev
team_name: Dune
starts_at: 2026-04-29T16:00:00
timezone: Europe/Paris
duration_minutes: 60
meeting_link: https://us06web.zoom.us/j/85096877776?pwd=cWNhU1dHQ1ZNSjZuOUZCQ0h2by9Udz09
notes_link: https://github.com/ocaml/dune/wiki
ical: https://calendar.google.com/calendar/ical/c_5cd698df6784e385b1cdcdc1dbca18c061faa96959a04781566d304dc9ec7319%40group.calendar.google.com/public/basic.ics
- team_id: platform/dune-dev
team_name: Dune
starts_at: 2026-05-13T16:00:00
timezone: Europe/Paris
duration_minutes: 60
meeting_link: https://us06web.zoom.us/j/85096877776?pwd=cWNhU1dHQ1ZNSjZuOUZCQ0h2by9Udz09
notes_link: https://github.com/ocaml/dune/wiki
ical: https://calendar.google.com/calendar/ical/c_5cd698df6784e385b1cdcdc1dbca18c061faa96959a04781566d304dc9ec7319%40group.calendar.google.com/public/basic.ics
- team_id: platform/dune-dev
team_name: Dune
starts_at: 2026-05-27T16:00:00
timezone: Europe/Paris
duration_minutes: 60
meeting_link: https://us06web.zoom.us/j/85096877776?pwd=cWNhU1dHQ1ZNSjZuOUZCQ0h2by9Udz09
notes_link: https://github.com/ocaml/dune/wiki
ical: https://calendar.google.com/calendar/ical/c_5cd698df6784e385b1cdcdc1dbca18c061faa96959a04781566d304dc9ec7319%40group.calendar.google.com/public/basic.ics
- team_id: platform/dune-dev
team_name: Dune
starts_at: 2026-06-10T16:00:00
timezone: Europe/Paris
duration_minutes: 60
meeting_link: https://us06web.zoom.us/j/85096877776?pwd=cWNhU1dHQ1ZNSjZuOUZCQ0h2by9Udz09
notes_link: https://github.com/ocaml/dune/wiki
ical: https://calendar.google.com/calendar/ical/c_5cd698df6784e385b1cdcdc1dbca18c061faa96959a04781566d304dc9ec7319%40group.calendar.google.com/public/basic.ics
- team_id: platform/dune-dev
team_name: Dune
starts_at: 2026-06-24T16:00:00
timezone: Europe/Paris
duration_minutes: 60
meeting_link: https://us06web.zoom.us/j/85096877776?pwd=cWNhU1dHQ1ZNSjZuOUZCQ0h2by9Udz09
notes_link: https://github.com/ocaml/dune/wiki
ical: https://calendar.google.com/calendar/ical/c_5cd698df6784e385b1cdcdc1dbca18c061faa96959a04781566d304dc9ec7319%40group.calendar.google.com/public/basic.ics
- team_id: platform/dune-dev
team_name: Dune
starts_at: 2026-07-08T16:00:00
timezone: Europe/Paris
duration_minutes: 60
meeting_link: https://us06web.zoom.us/j/85096877776?pwd=cWNhU1dHQ1ZNSjZuOUZCQ0h2by9Udz09
notes_link: https://github.com/ocaml/dune/wiki
ical: https://calendar.google.com/calendar/ical/c_5cd698df6784e385b1cdcdc1dbca18c061faa96959a04781566d304dc9ec7319%40group.calendar.google.com/public/basic.ics
- team_id: platform/dune-dev
team_name: Dune
starts_at: 2026-07-22T16:00:00
timezone: Europe/Paris
duration_minutes: 60
meeting_link: https://us06web.zoom.us/j/85096877776?pwd=cWNhU1dHQ1ZNSjZuOUZCQ0h2by9Udz09
notes_link: https://github.com/ocaml/dune/wiki
ical: https://calendar.google.com/calendar/ical/c_5cd698df6784e385b1cdcdc1dbca18c061faa96959a04781566d304dc9ec7319%40group.calendar.google.com/public/basic.ics
- team_id: platform/dune-dev
team_name: Dune
starts_at: 2026-08-05T16:00:00
timezone: Europe/Paris
duration_minutes: 60
meeting_link: https://us06web.zoom.us/j/85096877776?pwd=cWNhU1dHQ1ZNSjZuOUZCQ0h2by9Udz09
notes_link: https://github.com/ocaml/dune/wiki
ical: https://calendar.google.com/calendar/ical/c_5cd698df6784e385b1cdcdc1dbca18c061faa96959a04781566d304dc9ec7319%40group.calendar.google.com/public/basic.ics
- team_id: platform/dune-dev
team_name: Dune
starts_at: 2026-08-19T16:00:00
timezone: Europe/Paris
duration_minutes: 60
meeting_link: https://us06web.zoom.us/j/85096877776?pwd=cWNhU1dHQ1ZNSjZuOUZCQ0h2by9Udz09
notes_link: https://github.com/ocaml/dune/wiki
ical: https://calendar.google.com/calendar/ical/c_5cd698df6784e385b1cdcdc1dbca18c061faa96959a04781566d304dc9ec7319%40group.calendar.google.com/public/basic.ics
- team_id: platform/dune-dev
team_name: Dune
starts_at: 2026-09-02T16:00:00
timezone: Europe/Paris
duration_minutes: 60
meeting_link: https://us06web.zoom.us/j/85096877776?pwd=cWNhU1dHQ1ZNSjZuOUZCQ0h2by9Udz09
notes_link: https://github.com/ocaml/dune/wiki
ical: https://calendar.google.com/calendar/ical/c_5cd698df6784e385b1cdcdc1dbca18c061faa96959a04781566d304dc9ec7319%40group.calendar.google.com/public/basic.ics
- team_id: platform/dune-dev
team_name: Dune
starts_at: 2026-09-16T16:00:00
timezone: Europe/Paris
duration_minutes: 60
meeting_link: https://us06web.zoom.us/j/85096877776?pwd=cWNhU1dHQ1ZNSjZuOUZCQ0h2by9Udz09
notes_link: https://github.com/ocaml/dune/wiki
ical: https://calendar.google.com/calendar/ical/c_5cd698df6784e385b1cdcdc1dbca18c061faa96959a04781566d304dc9ec7319%40group.calendar.google.com/public/basic.ics
- team_id: platform/dune-dev
team_name: Dune
starts_at: 2026-09-30T16:00:00
timezone: Europe/Paris
duration_minutes: 60
meeting_link: https://us06web.zoom.us/j/85096877776?pwd=cWNhU1dHQ1ZNSjZuOUZCQ0h2by9Udz09
notes_link: https://github.com/ocaml/dune/wiki
ical: https://calendar.google.com/calendar/ical/c_5cd698df6784e385b1cdcdc1dbca18c061faa96959a04781566d304dc9ec7319%40group.calendar.google.com/public/basic.ics
- team_id: platform/dune-dev
team_name: Dune
starts_at: 2026-10-14T16:00:00
timezone: Europe/Paris
duration_minutes: 60
meeting_link: https://us06web.zoom.us/j/85096877776?pwd=cWNhU1dHQ1ZNSjZuOUZCQ0h2by9Udz09
notes_link: https://github.com/ocaml/dune/wiki
ical: https://calendar.google.com/calendar/ical/c_5cd698df6784e385b1cdcdc1dbca18c061faa96959a04781566d304dc9ec7319%40group.calendar.google.com/public/basic.ics
- team_id: platform/dune-dev
team_name: Dune
starts_at: 2026-10-28T16:00:00
timezone: Europe/Paris
duration_minutes: 60
meeting_link: https://us06web.zoom.us/j/85096877776?pwd=cWNhU1dHQ1ZNSjZuOUZCQ0h2by9Udz09
notes_link: https://github.com/ocaml/dune/wiki
ical: https://calendar.google.com/calendar/ical/c_5cd698df6784e385b1cdcdc1dbca18c061faa96959a04781566d304dc9ec7319%40group.calendar.google.com/public/basic.ics
- team_id: platform/dune-dev
team_name: Dune
starts_at: 2026-11-11T16:00:00
timezone: Europe/Paris
duration_minutes: 60
meeting_link: https://us06web.zoom.us/j/85096877776?pwd=cWNhU1dHQ1ZNSjZuOUZCQ0h2by9Udz09
notes_link: https://github.com/ocaml/dune/wiki
ical: https://calendar.google.com/calendar/ical/c_5cd698df6784e385b1cdcdc1dbca18c061faa96959a04781566d304dc9ec7319%40group.calendar.google.com/public/basic.ics
- team_id: platform/dune-dev
team_name: Dune
starts_at: 2026-11-25T16:00:00
timezone: Europe/Paris
duration_minutes: 60
meeting_link: https://us06web.zoom.us/j/85096877776?pwd=cWNhU1dHQ1ZNSjZuOUZCQ0h2by9Udz09
notes_link: https://github.com/ocaml/dune/wiki
ical: https://calendar.google.com/calendar/ical/c_5cd698df6784e385b1cdcdc1dbca18c061faa96959a04781566d304dc9ec7319%40group.calendar.google.com/public/basic.ics
- team_id: platform/dune-dev
team_name: Dune
starts_at: 2026-12-09T16:00:00
timezone: Europe/Paris
duration_minutes: 60
meeting_link: https://us06web.zoom.us/j/85096877776?pwd=cWNhU1dHQ1ZNSjZuOUZCQ0h2by9Udz09
notes_link: https://github.com/ocaml/dune/wiki
ical: https://calendar.google.com/calendar/ical/c_5cd698df6784e385b1cdcdc1dbca18c061faa96959a04781566d304dc9ec7319%40group.calendar.google.com/public/basic.ics
- team_id: platform/dune-dev
team_name: Dune
starts_at: 2026-12-23T16:00:00
timezone: Europe/Paris
duration_minutes: 60
meeting_link: https://us06web.zoom.us/j/85096877776?pwd=cWNhU1dHQ1ZNSjZuOUZCQ0h2by9Udz09
notes_link: https://github.com/ocaml/dune/wiki
ical: https://calendar.google.com/calendar/ical/c_5cd698df6784e385b1cdcdc1dbca18c061faa96959a04781566d304dc9ec7319%40group.calendar.google.com/public/basic.ics
- team_id: platform/dune-dev
team_name: Dune
starts_at: 2027-01-06T16:00:00
timezone: Europe/Paris
duration_minutes: 60
meeting_link: https://us06web.zoom.us/j/85096877776?pwd=cWNhU1dHQ1ZNSjZuOUZCQ0h2by9Udz09
notes_link: https://github.com/ocaml/dune/wiki
ical: https://calendar.google.com/calendar/ical/c_5cd698df6784e385b1cdcdc1dbca18c061faa96959a04781566d304dc9ec7319%40group.calendar.google.com/public/basic.ics
- team_id: platform/dune-dev
team_name: Dune
starts_at: 2027-01-20T16:00:00
timezone: Europe/Paris
duration_minutes: 60
meeting_link: https://us06web.zoom.us/j/85096877776?pwd=cWNhU1dHQ1ZNSjZuOUZCQ0h2by9Udz09
notes_link: https://github.com/ocaml/dune/wiki
ical: https://calendar.google.com/calendar/ical/c_5cd698df6784e385b1cdcdc1dbca18c061faa96959a04781566d304dc9ec7319%40group.calendar.google.com/public/basic.ics
- team_id: platform/dune-dev
team_name: Dune
starts_at: 2027-02-03T16:00:00
timezone: Europe/Paris
duration_minutes: 60
meeting_link: https://us06web.zoom.us/j/85096877776?pwd=cWNhU1dHQ1ZNSjZuOUZCQ0h2by9Udz09
notes_link: https://github.com/ocaml/dune/wiki
ical: https://calendar.google.com/calendar/ical/c_5cd698df6784e385b1cdcdc1dbca18c061faa96959a04781566d304dc9ec7319%40group.calendar.google.com/public/basic.ics
- team_id: platform/dune-dev
team_name: Dune
starts_at: 2027-02-17T16:00:00
timezone: Europe/Paris
duration_minutes: 60
meeting_link: https://us06web.zoom.us/j/85096877776?pwd=cWNhU1dHQ1ZNSjZuOUZCQ0h2by9Udz09
notes_link: https://github.com/ocaml/dune/wiki
ical: https://calendar.google.com/calendar/ical/c_5cd698df6784e385b1cdcdc1dbca18c061faa96959a04781566d304dc9ec7319%40group.calendar.google.com/public/basic.ics
- team_id: platform/dune-dev
team_name: Dune
starts_at: 2027-03-03T16:00:00
timezone: Europe/Paris
duration_minutes: 60
meeting_link: https://us06web.zoom.us/j/85096877776?pwd=cWNhU1dHQ1ZNSjZuOUZCQ0h2by9Udz09
notes_link: https://github.com/ocaml/dune/wiki
ical: https://calendar.google.com/calendar/ical/c_5cd698df6784e385b1cdcdc1dbca18c061faa96959a04781566d304dc9ec7319%40group.calendar.google.com/public/basic.ics
4 changes: 4 additions & 0 deletions data/governance.yml
Original file line number Diff line number Diff line change
Expand Up @@ -236,6 +236,8 @@ teams:
date: Every other Wednesday
time: Alternating 9:00 AM CET and 5:00 PM CET (see wiki)
link: https://us06web.zoom.us/j/85096877776?pwd=cWNhU1dHQ1ZNSjZuOUZCQ0h2by9Udz09
ical: https://calendar.google.com/calendar/ical/c_5cd698df6784e385b1cdcdc1dbca18c061faa96959a04781566d304dc9ec7319%40group.calendar.google.com/public/basic.ics
calendar: https://calendar.google.com/calendar/embed?src=c_5cd698df6784e385b1cdcdc1dbca18c061faa96959a04781566d304dc9ec7319%40group.calendar.google.com
notes: https://github.com/ocaml/dune/wiki
contacts:
- name: GitHub
Expand Down Expand Up @@ -401,6 +403,7 @@ teams:
date: Every third Tuesday
time: 6:00 PM CET
link: https://meet.google.com/bwy-fyqo-dnf
ical: https://calendar.google.com/calendar/ical/c_b009d08084c20ac304862a7adebbb7f9544b1c102e403210301bcfab7000f23e%40group.calendar.google.com/public/basic.ics
calendar: https://calendar.google.com/calendar/u/4?cid=Y19iMDA5ZDA4MDg0YzIwYWMzMDQ4NjJhN2FkZWJiYjdmOTU0NGIxYzEwMmU0MDMyMTAzMDFiY2ZhYjcwMDBmMjNlQGdyb3VwLmNhbGVuZGFyLmdvb2dsZS5jb20
notes: https://github.com/ocaml-ppx/ppxlib/wiki
members:
Expand Down Expand Up @@ -620,6 +623,7 @@ working-groups:
date: Biweekly on Mondays
time: "10:00 AM BST"
link: "http://meet.google.com/byo-dfiz-dou"
ical: "https://calendar.google.com/calendar/ical/c_b009d08084c20ac304862a7adebbb7f9544b1c102e403210301bcfab7000f23e%40group.calendar.google.com/public/basic.ics"
calendar: "https://calendar.google.com/calendar/u/4?cid=Y19iMDA5ZDA4MDg0YzIwYWMzMDQ4NjJhN2FkZWJiYjdmOTU0NGIxYzEwMmU0MDMyMTAzMDFiY2ZhYjcwMDBmMjNlQGdyb3VwLmNhbGVuZGFyLmdvb2dsZS5jb20"
notes: "https://docs.google.com/document/d/1ZBfbjAkvEkv9ldumpZV5VXrEc_HpPeYjHPW_TiwJe4Q/"
members:
Expand Down
1 change: 1 addition & 0 deletions src/ocamlorg_data/data_intf.ml
Original file line number Diff line number Diff line change
Expand Up @@ -248,6 +248,7 @@ module Governance = struct
date : string;
time : string;
link : string;
ical : string option;
calendar : string option;
notes : string;
}
Expand Down
17 changes: 15 additions & 2 deletions tool/data-packer/lib/governance_parser.ml
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,21 @@ let contact_kind_of_yaml = function
type contact = [%import: Data_intf.Governance.contact]
[@@deriving of_yaml, show]

type dev_meeting = [%import: Data_intf.Governance.dev_meeting]
[@@deriving of_yaml, show]
type dev_meeting = [%import: Data_intf.Governance.dev_meeting] [@@deriving show]

type dev_meeting_metadata = {
date : string;
time : string;
link : string;
ical : string option; [@default None]
calendar : string option; [@default None]
notes : string;
}
[@@deriving of_yaml, stable_record ~version:Data_intf.Governance.dev_meeting]

let dev_meeting_of_yaml yml =
yml |> dev_meeting_metadata_of_yaml
|> Result.map dev_meeting_metadata_to_Data_intf_Governance_dev_meeting

type team_metadata = {
id : string;
Expand Down
6 changes: 5 additions & 1 deletion tool/data-scrape/bin/scrape.ml
Original file line number Diff line number Diff line change
Expand Up @@ -40,9 +40,13 @@ let platform_releases_cmd =
let run () = Platform_release_scraper.scrape () in
Cmd.v (Cmd.info "platform_releases") Term.(const run $ const ())

let governance_calendars_cmd =
let run () = Governance_calendar_scraper.scrape () in
Cmd.v (Cmd.info "governance_calendars") Term.(const run $ const ())

let cmds =
Cmd.group (Cmd.info "data-scrape")
[ planet_cmd; video_cmd; platform_releases_cmd ]
[ planet_cmd; video_cmd; platform_releases_cmd; governance_calendars_cmd ]

let () =
Printexc.record_backtrace true;
Expand Down
1 change: 1 addition & 0 deletions tool/data-scrape/lib/data_scrape.ml
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,5 @@ module Blog_scraper = Blog_scraper
module Youtube_scraper = Youtube_scraper
module Watch_scraper = Watch_scraper
module Platform_release_scraper = Platform_release_scraper
module Governance_calendar_scraper = Governance_calendar_scraper
module Scrape_report = Scrape_report
Loading
Loading