Skip to main content

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 filePurpose
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):
  1. 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).
  2. If a match is found and the content differs, the tool updates the existing issue body.
  3. If a match is found and the content is identical, the tool returns the existing issue without any write operations.
  4. 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):
VariableRequiredDescription
GITHUB_TOKENYesGitHub 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_TOKENYesHackMD API token used to authenticate the @hackmd/api client.
MEETINGS_CONFIG_DIRNoAlternative 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.

Build docs developers (and LLMs) love