{"id":45825100,"url":"https://github.com/pkgjs/meet","last_synced_at":"2026-02-26T21:51:14.364Z","repository":{"id":40286893,"uuid":"257059973","full_name":"pkgjs/meet","owner":"pkgjs","description":"Create a meeting issue on a schedule","archived":false,"fork":false,"pushed_at":"2026-02-11T17:08:08.000Z","size":1926,"stargazers_count":12,"open_issues_count":17,"forks_count":10,"subscribers_count":3,"default_branch":"main","last_synced_at":"2026-02-14T17:14:23.595Z","etag":null,"topics":["automation","github-actions","markdown","meetings","nodejs"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/pkgjs.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":".github/SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null},"funding":{"github":["wesleytodd"]}},"created_at":"2020-04-19T17:24:18.000Z","updated_at":"2025-10-23T00:41:32.000Z","dependencies_parsed_at":"2024-02-19T19:06:41.891Z","dependency_job_id":"96b0ddfa-cda7-49be-bf45-6ac184688b94","html_url":"https://github.com/pkgjs/meet","commit_stats":{"total_commits":44,"total_committers":7,"mean_commits":6.285714285714286,"dds":0.7045454545454546,"last_synced_commit":"3d7b0beec2d23eb421750bc697f128523f4029d4"},"previous_names":[],"tags_count":30,"template":false,"template_full_name":null,"purl":"pkg:github/pkgjs/meet","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pkgjs%2Fmeet","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pkgjs%2Fmeet/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pkgjs%2Fmeet/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pkgjs%2Fmeet/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pkgjs","download_url":"https://codeload.github.com/pkgjs/meet/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pkgjs%2Fmeet/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29873859,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-26T21:05:00.265Z","status":"ssl_error","status_checked_at":"2026-02-26T20:57:13.669Z","response_time":89,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["automation","github-actions","markdown","meetings","nodejs"],"created_at":"2026-02-26T21:51:12.770Z","updated_at":"2026-02-26T21:51:14.349Z","avatar_url":"https://github.com/pkgjs.png","language":"JavaScript","funding_links":["https://github.com/sponsors/wesleytodd"],"categories":[],"sub_categories":[],"readme":"# Schedule regularly occurring meetings via GitHub Issue\n\n[![test](https://github.com/pkgjs/meet/workflows/test/badge.svg)](https://github.com/pkgjs/meet/actions?query=workflow%3Atest)\n[![js-standard-style](https://img.shields.io/badge/code%20style-standard-brightgreen.svg)](https://github.com/standard/standard)\n\nSchedule meetings via a GitHub Action.  Creates issues based on a schedule and template.\n\nThis repository is managed by the [Package Maintenance Working Group](https://github.com/nodejs/package-maintenance), see [Governance](https://github.com/nodejs/package-maintenance/blob/main/Governance.md).\n\n## Usage\n\n```yaml\nname: Schedule team meetings\non:\n  schedule:\n    - cron: '0 0 * * * *'  # Run daily at midnight UTC\njobs:\n  build:\n    runs-on: ubuntu-latest\n    steps:\n    - uses: pkgjs/meet@v1\n      with:\n        token: ${{ secrets.GITHUB_TOKEN }}\n        schedules: 2020-04-02T17:00:00[America/Chicago]/P1D  # Every 1 day from 2020-04-02 at 5PM Chicago time\n        createWithin: P2D  # Create issue 2 days before the scheduled meeting\n```\n\n### Github Action Inputs\n\nThe meeting schedule, issue, etc can be configured with inputs to this action.\n\n- `token`: (required) The token from the action for calling to the GitHub API.\n- `schedules`: (required) The meeting schedules. Supports timezone identifiers (e.g., `2020-04-02T17:00:00[America/Chicago]/P7D`) or UTC (e.g., `2020-04-02T17:00:00Z/P7D`). Offset usage is not allowed. Default: `${now/P7D}` seven days from now\n- `createWithin`: (required) The ISO-8601 duration for how soon before the meeting to create the issue. Default `P7D`\n- `meetingLabels`: The labels to apply to issues generated by this GitHub Action for meetings. Default: `meeting`\n- `agendaLabel`: Label to pull the agenda from. Default: `meeting-agenda`\n- `issueTitle`: Template string for issue title.  Default: `Meeting \u003c%= date.toZonedDateTimeISO('UTC').toPlainDate().toString() %\u003e`\n- `issueTemplate`: The name of the issue template found in `.github/ISSUE_TEMPLATE`. Default: `meeting.md`\n\n### Schedule format\n\nThe action supports [RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339) timezone formats with two schedule options:\n\n#### Timezone identifiers (recommended)\n\nUse timezone identifiers for automatic DST handling:\n\n```yaml\nschedules: |\n  2020-04-02T17:00:00[America/Chicago]/P7D\n  2020-06-15T14:00:00[Europe/London]/P14D\n```\n\nThis ensures meetings maintain the same wall-clock time throughout the year, automatically adjusting for daylight saving time transitions.\n\n#### UTC time\n\nUse UTC for absolute time scheduling:\n\n```yaml\nschedules: |\n  2020-04-02T17:00:00Z/P7D\n```\n\n#### Invalid formats\n\nThe following formats are **not supported** and will cause errors:\n\n- `2020-04-02T17:00:00-06:00/P7D` (offset usage)\n- `2020-04-02T17:00:00-06:00[America/Chicago]/P7D` (offset + timezone)\n- `2020-04-02T17:00:00/P7D` (no timezone or UTC specified)\n\n### Default Issue Template\n\nThe default issue template can be seen in the ISSUE_TEMPLATES directory, as [meeting.md](https://github.com/pkgjs/meet/blob/main/.github/ISSUE_TEMPLATE/meeting.md). Additionally, you can find example issues of the latest version via the closed issues that are the result of CI tests.\n\nOur default template is based off of the Node.js project's practices around meetings, but changes and enhancements are welcome.\n\n\n### Custom Issue Templates\n\nIf you don't want to use the default issue template, you can use a custom issue template by passing in the file name of it (presuming it lives in ISSUE_TEMPLATES).\n\nYou can use both our shorthand and JavaScript in your meeting templates.\n\n## Template Data and Automatic Replacements\n\n#### Autoreplacing Shorthand in Custom Meeting Templates\n\nWe provide some shorthand that you can use in your meeting templates. We'll automatically replace the shorthand with the relevant dynamic information.\n\nIf you'd like to see more shorthand available, we absolutely welcome PRs.\n\n- **`\u003c!-- title --\u003e`**: The issue's title.\n- **`\u003c!-- agenda label --\u003e`**: The label for agenda items to be pulled from that you've defined in the Action's YAML configuration.\n- **`\u003c!-- invitees --\u003e`**: The list of invitees you've defined in the Action's YAML configuration.\n- **`\u003c!-- observers --\u003e`**: The list of observers you've defined in the Action's YAML configuration.\n- **`\u003c!-- meeting link --\u003e`**: The meeting video call link\n\n```md\n## Title\n\u003c!-- title --\u003e\n\n## Agenda Items\nExtracted from issues labelled with \u003c!-- agenda label --\u003e.\n\n## Participants\n- Invitees: \u003c!-- invitees --\u003e\n- Observers: \u003c!-- observers --\u003e\n```\n\n#### JavaScript in Your Custom Meeting Templates\n\nYou can include custom JavaScript in your custom meeting templates. We use [ejs](https://ejs.co/), so anything within an ejs tag will be parsed as JavaScript.\n\nWhen using EJS templates for your meeting issues, the following data properties are available:\n\n#### EJS Template Data\n\n- **`date`**: `Temporal.Instant` - The date of the meeting, formatted using [Temporal](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal) for timezone conversions and [Intl.DateTimeFormat](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat) for locale-aware formatting.\n- **`agendaIssues`**: `Array\u003cObject\u003e` - A list of agenda issues, each with properties like:\n  - `title`: `string` - The title of the agenda issue.\n  - `number`: `number` - The issue number.\n  - `html_url`: `string` - The URL to the issue on GitHub.\n- **`agendaLabel`**: `string` - The label used to identify agenda items.\n- **`meetingNotes`**: `string` - A link or content for meeting notes.\n- **`owner`**: `string` - The GitHub repository owner.\n- **`repo`**: `string` - The GitHub repository name.\n- **`title`**: `string` - The title of the issue, which can be dynamically generated.\n- **`invitees`**: `Array\u003cstring\u003e` - A list of invitees, if provided.\n- **`observers`**: `Array\u003cstring\u003e` - A list of observers, if provided.\n\n```ejs\n\u003c% const timezones = [\n  'America/Los_Angeles',\n  'America/Denver',\n  'America/Chicago',\n  'America/New_York',\n  'Europe/London',\n  'Europe/Amsterdam',\n  'Europe/Moscow',\n  'Asia/Kolkata',\n  'Asia/Shanghai',\n  'Asia/Tokyo',\n  'Australia/Sydney'\n]; %\u003e\n\n## Date/Time\n\n| Timezone | Date/Time |\n|----------|-----------|\n\u003c%= timezones.map((zone) =\u003e {\n  const zonedDate = date.toZonedDateTimeISO(zone)\n  const formatter = new Intl.DateTimeFormat('en-US', {\n    weekday: 'short',\n    month: 'short',\n    day: '2-digit',\n    year: 'numeric',\n    hour: '2-digit',\n    minute: '2-digit',\n    hour12: true,\n    timeZone: zone\n  })\n  const formattedDate = formatter.format(new Date(zonedDate.epochMilliseconds))\n  return `| ${zone} | ${formattedDate} |`\n}).join('\\n') %\u003e\n\nOr in your local time:\n\n* https://www.timeanddate.com/worldclock/fixedtime.html?msg=\u003c%= encodeURIComponent(title) %\u003e\u0026iso=\u003c%= date.toZonedDateTimeISO('UTC').toPlainDateTime().toString().slice(0, 16).replace(/[-:]/g, '') %\u003e\u0026p1=1440\u0026ah=1\n\n## Agenda\n\nExtracted from **\u003c%= agendaLabel %\u003e** labelled issues and pull requests from **\u003c%= owner %\u003e/\u003c%= repo %\u003e** prior to the meeting.\n\n\u003c%= agendaIssues.map((i) =\u003e {\n  return `* ${i.html_url}`\n}).join('\\n') %\u003e\n\n## Links\n\n* Minutes: \u003c%= meetingNotes || '' %\u003e\n\n## Joining the meeting\n\n* link for participants: \u003c%= meetingLink %\u003e\n\n---\n\nPlease use the following emoji reactions in this post to indicate your\navailability.\n\n* 👍 - Attending\n* 👎 - Not attending\n* 😕 - Not sure yet\n```\n\n### JS API Usage\n\nThe main logic of the module is also published to npm.\n\n```sh\n$ npm i @pkgjs/meet\n```\n\n```javascript\nconst maker = require('@pkgjs/meet')\n\n;(async () =\u003e {\n  const issue = await maker.meetings.createNextMeeting(client, {\n    owner: 'pkgjs',\n    repo: 'meet',\n    schedules: []\n  })\n  console.log(issue) // the response from the GitHub api creating the issue\n})()\n```\n\n## Contributing\n\nThis package welcomes contributions.  While the basic unit tests are runnable\n(`npm t`) Unfortunatly because it is requires access to the GitHub api it means\nyou need to have a token with access to create the issues as part of the\nintegration tests.  To specify the key you need to create a personal access token\nand put it in a `.env` file as `GITHUB_TOKEN=\u003cTOKEN\u003e`.  Then you can run\n`npm run test:integration` to run the main integration tests.  To be honest this\nshould probably be configurable, contributions welcome.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpkgjs%2Fmeet","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpkgjs%2Fmeet","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpkgjs%2Fmeet/lists"}