The Augusta University Programming Languages Reading Group is a regular meeting to discuss recent results in programming languages (PL) research. The intent of the group is to learn about various ideas and generally broaden perspectives on PL research. Each week, members vote on a selection of papers drawn at random from top PL conferences. We gather in person weekly to discuss the selected papers. This repository contains our website and the tooling we use to select papers. The PL Reading Group is organized by the ΔΛΔ student organization.
- Populate
data/sources.csv
with your favorite venues. - Execute
npm run update
to fetch papers from those venues. - Commit these changes to the repository.
- Enable one of the workflows for automatic paper selection.
Command | Effect |
---|---|
npm run choose |
select a paper randomly from the dataset |
npm run details -- <DOI> |
look up title and citation of the paper with given DOI |
npm run set -- <DOI> |
manually set the next paper |
npm run stats |
print statistics about the dataset |
npm run update |
update the dataset |
The file data/sources.csv
contains a list of conferences, one per line,
from which papers are selected.
After modifying this file you must
update the dataset for the changes to take effect.
Each line of data/sources.csv
contains the name
and year
of a conference
separated by a comma, and with no additional whitespace.
The name
is such that the following URL is valid on DBLP.
https://dblp.org/db/conf/<name>/index.html
You can use this to discover conferences by browsing DBLP.
Notes.
- Venues other than conferences (e.g. journals) are not supported at the moment.
- This software identifies papers by their DOI, so conferences that do not register DOIs for their papers are not supported.
Each line of the file data/stopwords.txt
contains a keywords to exclude during
the selection process.
Any paper whose title contains (case-insensitively) such a keyword will not be
suggested for reading.
To update the dataset, run npm run update
.
This operation uses the existing dataset as a cache to minimize API calls.
If you want to rebuild the dataset from scratch, delete the file data/papers.json
.
By default, papers from venues (and years) no longer listed in data/sources.csv
will be removed during the update.
This behavior may be changed by editing the DATASET.KEEP_OLD_PAPERS
option.
Troubleshooting. If calls to the DBLP API fail,
you can inspect the relevant URLs by running npm run venues
.
The paper selection actions run on a schedule, but can also be triggered manually by running the configured workflow in GitHub actions. Doing so will generate PRs with paper suggestions. Only those with the appropriate repository permissions may run these workflows manually.
Both workflows invoke npm run choose
in the background.
Manually run the set paper workflow with the desired paper's DOI as input. If the DOI does not correspond to any paper in the data set, information about the paper will be retrieved from the internet and added to the dataset.
The corresponding command is npm run set -- <DOI>
.
The file src/config.ts
contains various settings for the runtime behavior of
the paper selection script.
The effects of individual configuration options is described in the comments of
that file.
Light maintenance is needed between semesters/reading periods.
-
Archive the previous semester: Run the script to archive the most recent semester
bash archive_semester.sh <SEMESTER> <YEAR>
For example
archive_semester.sh fall 2025
. This script will create a new directory indocs/_past_semesters
, copy the reading group info for the past semester to that directory and clear the automatically generated files indocs/
. -
Clear the Schedule: Edit the schedule (the table at the bottom of
docs/index.md
). Adjust dates, locations etc. as appropriate. Fill the description colum with a placeholder. By default you should usePaper <number> discussion
If you wish to use a different placeholder, customize the variable
SCHEDULE_PLACEHOLDER_RE
to a regular expression which matches your placeholder (and no other part ofindex.md
). -
Edit
readme.md
to reflect information about the new semester. -
Enable one of the paper selection workflows.
Disable the configured workflow.
Command | Effect |
---|---|
npm install |
Install development dependencies |
npm run build |
Typecheck the source code |
npm run serve |
Run Jekyll for Website development |
npm run venues |
Print URLs for debugging DBLP requests |
To execute the source code,
Node.js version 22.6.0
or greater is required.
This version added
native typescript execution.
To work on the source code, you will need:
- the typescript compiler
- type declarations for nodejs
- (optional) the typescript language server
Running npm install
will install all of the above locally in your development
directory.
Basic edits to the website can be performed by editing the markdown files in the
docs
directory.
For more comprehensive edits,
follow the instructions at website development.
Blog posts are ordinary markdown files located in the docs/_posts
directory.
Their file names are formatted as YYYY-MM-DD-<short title>.md
,
where the former part is the date of the blog post.
A template for authoring new posts is provided at docs/_posts/template.md
.
The docs/
directory contains files for the PL Reading Group website.
It is build using Jekyll and markdown.
Substantial edits to the website should be prototyped locally,
which requires Ruby and Jekyll.
To install dependencies and get started with local development,
follow these instructions:
- Install Jekyll
cd docs/
.- Install dependencies:
bundle install
- Run the website locally:
bundle exec jekyll serve
orcd .. && npm run serve
- Preview the website on
localhost:4000/plgroup
.
There are two available workflows: ranked choice voting and reviewer approval. Only one workflow should be enabled during a semester/reading period. Workflows are controlled by variables which can be managed at settings > secrets and variables > actions (variables)
The paper-selection actions run on automated schedule. To change the schedule, refer to the documentation on workflow schedules.
This workflow generates a predefined number of random paper suggestions. Those suggestions are then posted to a Discord channel for voting by channel members. A corresponding PR is generated for each paper suggestion. The vote is concluded manually by merging the winning suggestion PR. The remaining PRs will be closed/discarded automatically. The relevant GitHub actions are "Vote open" and "Vote close". This workflow requires Discord integration to conduct voting.
- Set
DISCORD_WEBHOOK_URL
secret to direct to the intended discord channel. - Set
PAPER_VOTE_ON
variable to1
to enable voting. - Set
OPTIONS
to a numerical list of options, e.g.[1, 2, 3]
means three options. - Set
OPTION_COUNT
to a the discord-string-representation of the emoji representing the number of options. For example, for three options the emoji 3️⃣ is typed in discord as:three:
, so set this variable to:three:
.
This picks one paper at random and suggets it as the next paper. Designated reviewers must approve the suggetion which comes in the form of PR. Once a sufficient number of reviewers accept the suggestion, the PR is merged. Closing the PR without approval automatically generates a new suggestion. This process repeats until a satisfactory suggestion has been found. The relevant GitHub actions is "Random paper".
- Create a branch protection rule for
main
branch, to enforce reviewer approval of a paper suggestion, in settings > branches.- Check "Require a pull request before merging".
- Set "Require approvals" count to the minimum number of reviewer required to approve paper suggestion.
- Set
REVIEWERS
variable to a newline-separated string of GitHub usernames.- For example:
user1 \n user2 \n user3
- The users must have sufficient permissions to perform PR reviews.
- For example:
- Set
PAPER_CHOOSE_ON
variable to1
to enable automatic suggestions. - Set
AUTOMERGE_PAT
secret to a personal access token of a user with repository write access, to enable auto-merging approved PRs.- Permission scopes for classic token: repo
- Permission scopes for fine-grained token: pull requests write and contents write.
- (Optional) Set
DISCORD_WEBHOOK_URL
secret to a Discord channel URL to enable notifications.
Complete the following steps to activate the automated actions.
- Enable workflow permissions in settings > actions > general:
- choose "Read and write permissions"
- check "Allow GitHub Actions to create and approve pull requests
- Create environment secrets and variables
with empty default values, in settings > secrets and variables > actions:
- secrets:
DISCORD_WEBHOOK_URL
andAUTOMERGE_PAT
- variables:
PAPER_CHOOSE_ON
andPAPER_VOTE_ON
andREVIEWERS
andOPTIONS
andOPTION_COUNT
- secrets:
- Configure a paper selection workflow as described above to enable automated paper suggestions.