Skip to content
Closed
Show file tree
Hide file tree
Changes from 1 commit
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
4 changes: 3 additions & 1 deletion content/wiki/office-hours.md
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
+++
title = "Office hours"
title = "Office Hours"
+++

Linebender holds weekly office hours, open to anyone interested in following the project. The best place to find more information is the [#office-hours] stream on the Zulip chat. The invite is also available through [Google Calendar].

A [Google drive folder](https://drive.google.com/drive/folders/1mmrRnlpYb3j5P0ewAOcY_zj2tTH5u5aO) holds the archives of the notes.

If you'd like to prepare and host the Office Hours call, see [this document](@/wiki/preparing_office_hours.md).

[#office-hours]: https://xi.zulipchat.com/#narrow/stream/359642-office-hours
[Google Calendar]: https://calendar.google.com/calendar/event?action=TEMPLATE&tmeid=OWkzamUwZ3JyNmwwM2pkMW9qcWhldTMwNGpfMjAyMzA1MTFUMTUwMDAwWiBmMDE1ZGYyODAzY2UwNTQ2N2ZkODE1NTdiYWQ3Nzg2NzVlMWZlMDg3MGI5NTBjNTAxMDZkNWI0ZmViMjhhMTZhQGc&tmsrc=f015df2803ce05467fd81557bad778675e1fe0870b950c50106d5b4feb28a16a%40group.calendar.google.com&scp=ALL
107 changes: 107 additions & 0 deletions content/wiki/preparing_office_hours.md

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If it's possible under Zola, I'd probably put this page as a sub-page of Office Hours; it doesn't really make sense as a top-level thing

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't think it matters. The wiki folder is already very chaotic anyway. It's not valuable real estate.

Original file line number Diff line number Diff line change
@@ -0,0 +1,107 @@
+++
title = "Preparing Office Hours"
+++

If you've volunteered to host Office Hours, the first step will be to create the agenda document.

Create a copy of [this template file](https://docs.google.com/document/d/10wUKjCAEIvYCQLnp_QpdFrAXkO0sBnarG2abbI7mduQ/edit?tab=t.0) in the [Office Hours Google drive folder](https://drive.google.com/drive/folders/1mmrRnlpYb3j5P0ewAOcY_zj2tTH5u5aO) (you may need additional permissions).

You then need to fill out the sections about the different projects, listing the important changes.

You may want to use a script like the following to programmatically get a list of recently-changed issues and PRs:
Comment thread
PoignardAzur marked this conversation as resolved.
Outdated

```js
// Copyright 2025 the Linebender Authors
// SPDX-License-Identifier: Apache-2.0

// Create new token at https://github.com/settings/tokens/new
// The token is necessary because otherwise you're likely to hit rate limits
const token = "<your-github-token>";

const repos = [
"linebender/xilem",
"linebender/vello",
"linebender/parley",
"rust-mobile/android-view",
"AccessKit/accesskit",
"linebender/interpoli",
"linebender/peniko",
"linebender/kurbo",
"linebender/color",
"linebender/kompari",
"linebender/tiny-skia",
"linebender/simplecss",
"linebender/svgtypes",
"linebender/resvg",
"linebender/bevy_vello",
"linebender/velato",
"linebender/vello_svg",
"linebender/linebender.github.io",
];

const since = new Date(Date.now() - 7 * 24 * 60 * 60 * 1000).toISOString();

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It could be nice to use 8am PDT/PST on office hours day (maybe just on the given day?), so that stuff doesn't accidentally get included twice (especially when you're not manually looking at the times). Maybe 6:30am, which gives a 90 minute window to make this?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'd rather avoid getting too clever here. This is supposed to be a simple-ish script. The user can just filter out older issues manually.


for (const repo of repos) {
const url =
`https://api.github.com/repos/${repo}/issues?since=${since}&state=all&per_page=100`;
Comment thread
PoignardAzur marked this conversation as resolved.
Outdated

const res = await fetch(url, {
headers: {
"Authorization": `token ${token}`,
"Accept": "application/vnd.github.v3+json",
Comment thread
PoignardAzur marked this conversation as resolved.
Outdated
},
});

if (!res.ok) {
console.error(`Error: ${res.status} ${res.statusText}`);
Deno.exit(1);
}

const issues = await res.json();

const results = await Promise.all(issues.map(async (issue) => {
const isPR = !!issue.pull_request;
const createdRecently = new Date(issue.created_at) >= new Date(since);

let label = "ACTIVITY";

if (!isPR && createdRecently) {
label = "open issue";
Comment thread
PoignardAzur marked this conversation as resolved.
Outdated
} else if (isPR) {
// Fetch PR details to determine draft/merged status

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's very strange that GitHub's API doesn't include this info (it even includes the PR body!), but I agree that it seems like you have to do this.

const prRes = await fetch(issue.pull_request.url, {
headers: {
"Authorization": `token ${token}`,
"Accept": "application/vnd.github.v3+json",
},
});

if (prRes.ok) {
Comment thread
PoignardAzur marked this conversation as resolved.
Outdated
const pr = await prRes.json();
if (pr.merged_at && new Date(pr.merged_at) >= new Date(since)) {
label = "merged";
Comment thread
PoignardAzur marked this conversation as resolved.
Outdated
} else if (pr.draft && createdRecently) {
label = "draft";
} else if (!pr.draft && createdRecently) {
label = "awaiting review";
Comment thread
PoignardAzur marked this conversation as resolved.
Outdated
}
}
}

return `[#${issue.number}](${issue.html_url}) (${label}) - ${issue.title}`;

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

For e.g. kurbo/peniko or android-view/accesskit or resvg/usvg/tiny-skia etc, we normally include which specific repository from that group the issue corresponds to. I see you've chosen not to do so this week - is there a reason? Maybe there's some indicator that I'm not spotting.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I've added the repo name to all issues for simplicity.

}));

console.log(`=== REPO: ${repo} ===`);
for (const line of results.reverse()) {
console.log(line);
}
console.log("");
}
```

Once this is done, follow the checklist at the bottom of the template.
It includes tasks like changing the links, making the document public, linking to it on Zulip, etc.

The last step is to connect to the designated Google Meet room (possibly one you've created yourself) and start hosting the discussions.

Have fun!