Kumiko SHIMIZU (Unsplash License)
Information and data about our different programs, our community, etc are managed via repositories in a GitHub organization, CiviCRM, and documents stored in Google Drive.
Individuals who participated in an OLS activity are listed in People page. This page is generated from the data stored in the _data/people.yml
file that are extracted from CiviCRM.
First name
Last name
Email
Github username
Twitter username
Website
ORCID
Affiliation
City
Country
Pronouns
Areas of expertise
Bio
Prepare computational environment (locally or GitPod) as explained in the README.md
file of the GitHub repository
Run the script which extract information from the CSV file, add them to _data/people.yaml
, and add extra information about localisation
$ python bin/prepare_website_data.py extractpeople \
-df <path to csv file with people> OR -du <URL to csv file with people>
OLS is supported by several organizations as funders, as supporters, or as partners.
_data/organizations.yaml
file-
) following an alphabetical ordername
(mandatory)website
logo
It can be either an URL to an image or the path to the logo added in images/organizations
folder
description
country
_data/organizations.yaml
file and add it otherwise (see above)_data/funding.yaml
filefunder
using the organization short name from the _data/organizations.yaml
fileamount
of fundingcurrency
of fundingduration
date_award
purpose
proposal
with link to the proposal_data/organizations.yaml
file and add it otherwise (see above)_data/community.yaml
filepartners
or supporter
organization
using the organization short name from the _data/organizations.yaml
filedetails
with description of the support or partnershipAll publications by OLS team are aggregated in a Zotero group, imported weekly into the GitHub repository and then displayed in a dedicated page
_posts
with a file named following the pattern yyyy-mm-dd-name.md
Add some metadata on the top of the file
---
layout: post
title: <title of the post>
author: <ID of the authors in people.yml file>
image: images/yyyy-mm-dd-name.jpg
---
images/posts/
directoryWe list on the website events either organised by OLS or where we are invited to speak at.
_events
with a file named following the pattern yyyy-mm-dd-name.md
Add some basic metadata on the top of the file
---
layout: event
title: <title of the event>
type: <conference, workshop or training>
description: |
<short description of the event (one or two sentences)>
external: <link to event if external>
date_start: <starting date of event in YYYY-MM-DD format (e.g., 2024-10-26)>
date_end: <starting date of event in YYYY-MM-DD format (e.g., 2024-10-26). Optional, if event is more than one day>
time_start: <time start in HH:MM:SS format and UTC timezone. Optional if daylong event>
duration: <duration in HH:MM:SS format. Optional if daylong event>
location:
name:
contributions:
images:
---
Fill in more metadata
location:
If online
```
location:
name: Online
```
If not online
```
location:
geo:
lat: 45.78528236218017
lon: 4.856445300000001
name: Online
city: Lyon
country: France
```
contributions
If the event is a conference where OLS team and/or the community presented posters and/or talks highlighting OLS:
contributions:
posters:
-
presenters:
- <id from people.yaml, one per line>
title: "<title of the poster>"
poster: <link to poster>
talks:
-
speakers:
- <id from people.yaml, one per line>
title: "<title of the talk>"
slides: <link to slides>
If the event is a workshop or training organised by the OLS team and/or the community
contributions:
facilitators:
- <id from people.yaml, one per line>
helpers:
- <id from people.yaml, one per line>
instructors:
- <id from people.yaml, one per line>
organisers:
- <id from people.yaml, one per line>
funding:
- <id from funding.yaml, one per line>
workshop information
cost: <free or, e.g. 150 EUR, must be space separated, must include a currency in ISO 4217 format>
audience: <sentence about the audience>
contact_email: <contact email>
registration:
link: <link for registration>
deadline: <date in YYYY-MM-DD format (e.g., 2024-10-26)>
---
)images/events/
directoryTo organize calls in the different cohorts, we use a shared Spreadsheet containing information about calls: general information like date, time, learning objectives, but also the different activities like talks, group discussions with instructions. This spreadsheet also contains links to full recordings, slides, information about speakers.
We developed scripts for limiting manual work to propagate the information from the spreadsheet but also information about speakers to the OLS website in order to centralize the information there, build the video library. The script also generates templates for the call notes, and add information about participants, projects, and mentors in a cohort.
README.md
file of the GitHub repositoryRun the script which create cohort files:
$ python bin/prepare_website_data.py createcohort \
-p <program, e.g. openseeds>
-c <cohort id>
_data/openseeds/ols-x/metadata.yaml
organizers
_data/openseeds/ols-x/schedule.yaml
timeline
informationREADME.md
file of the GitHub repositoryRun the script which extract information from the CSV file and add them to _data/<program>/metadata.yaml
:
$ python bin/prepare_website_data.py addmentorsexperts \
-p <program, e.g. openseeds> \
-c <cohort id> \
-t <mentors or experts> \
-df <path to csv file with participants> OR -du <URL to csv file with participants>
Run the script which sort expertise and save information in metadata file:
$ python bin/prepare_website_data.py sortexpertises \
-p <program, e.g. openseeds> \
-c <cohort id>
Make a copy of the planning spreadsheet of a previous cohort on Google drive
The spreadsheet should include a sheet rows with weeks, calls, and activities, with the following columns:
Column name | Expected content |
---|---|
Week |
Week number, e.g. 00 , 01 - mandatory for every row
|
Start Date |
mandatory for weeks, calls |
Start Time |
mandatory for calls |
End Date |
|
Duration |
mandatory for calls, activities |
Title |
mandatory for calls, activities |
Type |
Type of information in the row: Week, Call (Mentor-Mentee, Mentor, Cohort, Skill-up, Q&A), Activities (Presentation, Breakout, Welcome, Silent reflections, Panel) |
Tag |
Tag for presentations, used for the library (list of tags) - mandatory for a presentation |
Call lead |
Lead of the call - mandatory for a call |
Note link |
Link to the notes - mandatory for a call |
Possible speaker |
|
Confirmed speaker |
First name and last name - mandatory for a presentation |
Slides |
Link to slidedecks - only for presentation |
Recording |
Link to recording on YouTube - mandatory for a call |
Learning objectives |
List of learning objectives (answering “at the end, participants will be able to:”) - mandatory for a call |
Before |
Instructions to do before a call - only for call |
Icebreaker |
mandatory for a call |
After |
Instructions to do after a call or an activity |
Instructions |
Instruction for an activity - mandatory for breakout or silent reflections |
People per room |
Number of people in each breakout room - mandatory for breakout |
bin/<program>/update_schedule.sh
scriptAdd new lines
echo "OLS-<cohort id>"
python bin/prepare_website_data.py \
updateschedule \
--program '<program>' \
--cohort '<cohort id>' \
--schedule_url "<copied link where 'edit?usp=sharing' is replaced by 'export?format=csv&gid=' and then the id of the sheet in the spreadsheet"
Run the script
$ bash bin/<program>/update_schedule.sh
This is run automatically every week and submitted as a Pull Request. The explanations below are only to run it manually
README.md
file of the GitHub repositoryRun the script bin/<program>/update_schedule.sh
$ bash bin/<program>/update_schedule.sh
Create in the planning spreadsheet a sheet:
(Cohort|Skill-up|Q&A|Cafeteria)
(using =FILTER('Main sheet'!A6:A142, REGEXMATCH('Main sheet'!G6:G142, "(Cohort|Skill-up|Q&A|Cafeteria)"))
)Having the columns:
Column name | Expected content |
---|---|
Week |
Week column of main sheet |
Type |
Type column of main sheet |
Topic |
Title column of main sheet |
Optional |
(optional) if Q&A or (optional for mentors)
|
Subject |
Concatenation to get something like “[Type Call] Week Week - Subject (Optional ) [Lead: Lead ]” |
Start Date |
Start Date column of main sheet |
Start Time |
Start Time column of main sheet or another column with the time at the same timezone than the Google calendar |
End Time |
End Time column of main sheet or another column with the time at the same timezone than the Google calendar |
Note link |
Note link column of main sheet |
Description |
Concatenation to get 3 lines with link to note, link to time zone and link to schedule on website |
Week
(using =FILTER('Main sheet'!A6:A142, REGEXMATCH('Main sheet'!G6:G142, "Weeks"))
)Having the columns:
Column name | Expected content |
---|---|
Week |
Week column of main sheet |
Start Date |
Start Date column of main sheet |
End Date |
Start Date $ + 6$ |
All Day Event |
TRUE |
Description |
Concatenation to get something like “OLS-N - Week Week ” |
Title
Mentor 1
Authors
Project-description
Comment regarding review
(with rejected
if needed)Keywords
Get a CSV file from CiviCRM using the predefined fields for website with participant information
Prepare computational environment (locally or GitPod) as explained in the README.md
file of the GitHub repository
Run the script which extracts project information from a CSV file and add them in project file:
$ python bin/prepare_website_data.py addprojects \
--program '<program>' \
-c <cohort id> \
-pf <path to csv file with projects> OR -pu <URL to csv file with projects> \
-df <path to csv file with participants> OR -du <URL to csv file with participants>
bin/<program>/create_call_templates.sh
scriptREADME.md
file of the GitHub repositoryRun the script bin/<program>/create_call_templates.sh
$ bash bin/<program>/create_call_templates.sh
Data about the community (e.g. members’ location), the cohort (e.g. feedback or roles), and the video library are explored and visualized via Jupyter Notebooks, stored in a GitHub repository and rendered in a dedicated OLS stat website.