# create-node-meeting-artifacts **Repository Path**: mirrors_nodejs/create-node-meeting-artifacts ## Basic Information - **Project Name**: create-node-meeting-artifacts - **Description**: Tool to create artifacts for node.js team meetings - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-08-19 - **Last Updated**: 2026-01-17 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Node.js Meeting Artifacts Creator A modern Node.js application that creates GitHub issues and HackMD documents for Node.js team meetings. This tool automates the process of reading meeting configuration, fetching calendar events, creating meeting minutes documents, and posting GitHub issues. ## 📋 Requirements - Node.js 22+ (LTS) - GitHub Personal Access Token - HackMD API Token (for meeting minutes) ## 🔑 Authentication Setup ### GitHub Authentication 1. Create a [GitHub Personal Access Token](https://github.com/settings/tokens) 2. Grant the following permissions: - `repo` (Full control of private repositories) - `user` (Read user information) ### HackMD Authentication 1. Go to [HackMD](https://hackmd.io/) and sign in to your account 2. Navigate to Account Settings > API Tokens 3. Create a new API token for the meeting artifacts tool 4. Optionally, create or join a team workspace for better organization ## 📁 Project Structure ``` create-node-meeting-artifacts/ ├── src/ │ ├── config.mjs # Configuration management │ ├── constants.mjs # Application constants │ ├── github.mjs # GitHub API integration │ ├── calendar.mjs # Calendar integration │ ├── meeting.mjs # Meeting operations │ └── utils.mjs # Utility functions ├── templates/ # Meeting templates ├── .nvmrc # Node.js version ├── .env.example # Environment variables example ├── create-node-meeting-artifacts.mjs # Main application ├── TEMPLATES_DOCUMENTATION.md # Template creation guide └── README.md # This file ``` ## 📝 Meeting Templates Meeting configurations are stored in the `templates/` directory. Each meeting group requires four template files: - `invited_`: List of invited attendees (GitHub team mentions) - `observers_`: List of observers with their details - `meeting_base_`: Base meeting configuration (calendar ID, GitHub repo, etc.) - `minutes_base_`: Template for meeting minutes document For detailed information about creating new templates, see [TEMPLATES_DOCUMENTATION.md](./TEMPLATES_DOCUMENTATION.md). ### Template Variables Templates support the following replacement variables: - `$TITLE$`: Meeting title - `$AGENDA_CONTENT$`: Auto-generated agenda items - `$INVITED$`: Invited attendees list - `$OBSERVERS$`: Observers list - `$GITHUB_ISSUE$`: GitHub issue URL - `$MINUTES_DOC$`: Google Doc URL ## ➕ Adding New Meeting Groups To add a new meeting group to the system, you need to create templates and update configuration in three places: ### 1. Create Template Files Create four template files in the `templates/` directory following the naming convention: ```bash # Replace with your meeting group identifier templates/invited_ templates/observers_ templates/meeting_base_ templates/minutes_base_ ``` See [TEMPLATES_DOCUMENTATION.md](./TEMPLATES_DOCUMENTATION.md) for detailed template examples and variable explanations. ### 2. Update GitHub Actions Workflows Add your meeting group to both workflow files: - `.github/workflows/create-meeting-artifacts-manual.yml` - `.github/workflows/create-meeting-artifacts-scheduled.yml` For manual workflow, add your group to the `options` list under `workflow_dispatch.inputs.meeting_group`: ```yaml workflow_dispatch: inputs: meeting_group: description: 'Meeting group to create artifacts for' required: true type: choice options: - uvwasi - tsc - build # ... existing groups ... - your-new-group # Add your group here ``` For scheduled workflow, add your group to the `matrix.meeting_group` list: ```yaml strategy: matrix: meeting_group: - uvwasi - tsc - build # ... existing groups ... - your-new-group # Add your group here ``` ### 3. Update Package.json Scripts Add npm scripts to `package.json` following this pattern: ```json { "scripts": { "your-meeting-group-meeting": "node create-node-meeting-artifacts.mjs your_meeting_group", "your-meeting-group-meeting:dev": "node --env-file=.env create-node-meeting-artifacts.mjs your_meeting_group" } } ``` **Important Notes:** - Use **kebab-case** for script names: `your-meeting-group-meeting` - Use **snake_case** for the actual group parameter: `your_meeting_group` - Always create both production and development (`:dev`) versions - The development version uses `--env-file=.env` for local testing ## 🏗️ Development ### Environment Setup 1. Clone the repository 2. Install dependencies: `npm install` 3. Copy `.env.example` to `.env` and configure your credentials 4. Create meeting artifacts: `npm run -meeting:dev` ### Code Quality ```bash npm run lint # Run ESLint npm run lint:fix # Fix ESLint issues automatically npm run format # Format code with Prettier npm run format:check # Check code formatting npm run check # Run both linting and formatting checks ``` ## 🚀 Usage ### Local Development ```bash # Using npx npx --env-file=.env . tsc # Direct execution (with a `.env` file) node --env-file=.env create-node-meeting-artifacts.mjs tsc ``` ## 📂 Output The application creates: 1. **GitHub Issue**: Posted to the configured repository with meeting details and agenda 2. **HackMD Document**: Meeting minutes document in Markdown format with collaborative editing 3. **Console Output**: Links to both the created issue and HackMD document ## 🔧 Configuration ### Environment Variables #### Required - `GITHUB_TOKEN`: GitHub Personal Access Token - `HACKMD_API_TOKEN`: HackMD API token for creating and managing documents ### Meeting Base Configuration Each `meeting_base_` file contains: ```bash CALENDAR_FILTER="Meeting Name in Calendar" USER="nodejs" REPO="repository-name" GROUP_NAME="Full Group Name" AGENDA_TAG="agenda-label" ISSUE_LABEL="optional-issue-label" HACKMD_TEAM_NAME="openjs-nodejs" JOINING_INSTRUCTIONS="Meeting join instructions" ```