The <group> argument
The positional <group> argument is the shortname of a meeting group. It must exactly match the suffix of four template files that exist in the templates/ directory:
| Template file | Purpose |
|---|
invited_<group> | Markdown list of invited attendees |
observers_<group> | Markdown list of observers |
meeting_base_<group> | dotenv-formatted properties file |
minutes_base_<group> | Markdown template for HackMD minutes |
If any of these files is missing the tool exits with a non-zero code. See Supported Meeting Groups for the full list of valid shortnames.
The template files are always resolved from the templates/ directory bundled with the package (set at src/config.mjs as directories.templates using dirname(import.meta.dirname)). The MEETINGS_CONFIG_DIR environment variable sets directories.config — a separate path that is available in the config object but is not currently used by the template-loading code paths.
--dry-run
Runs the tool in preview mode. Use this flag to inspect the generated issue body without touching any external service.
What --dry-run skips:
- Fetching events from the iCal calendar URL
- Creating or retrieving a HackMD document
- Creating or updating a GitHub issue
What --dry-run still does:
- Reads and validates the application configuration
- Reads all four template files for the specified group
- Fetches open agenda issues from GitHub (to populate the agenda section)
- Generates the full issue body
- Prints the generated issue body to
stdout
- Exits with code
0
node --env-file=.env create-node-meeting-artifacts.mjs tsc --dry-run
--force
Bypasses the duplicate-detection logic and always creates a new GitHub issue and a new HackMD document.
Default behaviour (without --force):
- The tool searches GitHub for an open issue in the configured repository whose title exactly matches the generated meeting title (e.g.,
Node.js Technical Steering Committee (TSC) Meeting 2025-03-19).
- If a match is found and the content differs, the tool updates the existing issue body.
- If a match is found and the content is identical, the tool returns the existing issue without any write operations.
- The same title-match logic applies to HackMD: if a note with the same title already exists in the note list, it is returned instead of creating a new one.
With --force:
Steps 1–3 are skipped entirely. A new issue is created unconditionally, and a new HackMD document is created unconditionally.
node --env-file=.env create-node-meeting-artifacts.mjs tsc --force
Using --force repeatedly will create duplicate GitHub issues and HackMD documents for the same meeting date.
--verbose
Enables detailed debug logging for every GitHub API call made via Octokit.
When this flag is set, the tool passes console as the Octokit logger:
new Octokit({ auth, log: verbose ? console : undefined })
This causes console.debug, console.info, console.warn, and console.error to emit log lines for each request and response. It is useful for diagnosing authentication failures, rate-limit issues, or unexpected API responses.
node --env-file=.env create-node-meeting-artifacts.mjs tsc --verbose
Environment variables
The following environment variables are read at startup from process.env (or from an --env-file passed to Node.js):
| Variable | Required | Description |
|---|
GITHUB_TOKEN | Yes | GitHub personal access token used to authenticate Octokit. Needs repo scope to create and update issues, and read:org scope to search across an organisation. |
HACKMD_API_TOKEN | Yes | HackMD API token used to authenticate the @hackmd/api client. |
MEETINGS_CONFIG_DIR | No | Alternative directory for configuration files. Defaults to ./. |
The tool sets process.env.TZ = 'UTC' on startup so that all date formatting and calendar calculations use UTC, regardless of the host system’s local timezone.