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.
- Node.js 22+ (LTS)
- GitHub Personal Access Token
- Google Cloud Project with Calendar API enabled (for meeting scheduling)
- Google API Key for Calendar access
- HackMD API Token (for meeting minutes)
- Create a GitHub Personal Access Token
- Grant the following permissions:
repo
(Full control of private repositories)user
(Read user information)
- Go to HackMD and sign in to your account
- Navigate to Account Settings > API Tokens
- Create a new API token for the meeting artifacts tool
- Optionally, create or join a team workspace for better organization
- Go to Google Cloud Console
- Create a new project or select an existing one
- Enable the Google Calendar API
- Go to Credentials → Create Credentials → API Key
- Restrict the API key to the Google Calendar API for security
- Add the API key to your environment variables as
GOOGLE_API_KEY
Note: API Keys provide simplified authentication and are sufficient for read-only calendar access. They don't require complex OAuth flows or service account setup.
create-node-meeting-artifacts/
├── src/
│ ├── config.mjs # Configuration management
│ ├── constants.mjs # Application constants
│ ├── github.mjs # GitHub API integration
│ ├── google.mjs # Google APIs integration
│ ├── meeting.mjs # Meeting operations
| ├── index.mjs # Main application
│ └── utils.mjs # Utility functions
├── templates/ # Meeting templates
├── .nvmrc # Node.js version
├── .env.example # Environment variables example
└── README.md # This file
To add a new meeting group to the system, you need to create a configuration file in configs
. These configuration files should
follow the following design:
{
"github": {
"owner": "Organization (i.e. nodejs, openjs-foundation)",
"repo": "Repository (i.e. build)",
"agendaTag?": "If the label isn't [filename]-agenda, put it here"
},
"meeting": {
"displayName": "Who is meeting?",
"labels?": ["If the meeting issue should be labeled, what?"],
"calendar": {
"id": "This is the Google Calendar ID, without the \"@...\" part.",
"filter": "What's the meeting called?"
},
"links": {
"participant": "Where do I go to participate?",
"observer": "Where do I go to watch?"
},
"invitees": ["Who is invited?"],
"observers?": ["Who is watching?"]
},
"hackmd": {
"team": "Where in HackMD should the notes be generated?"
}
}
- Clone the repository
- Install dependencies:
npm install
- Copy
.env.example
to.env
and configure your credentials - Create meeting artifacts:
npm run dev <group>
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
# Using npm scripts
npm run dev tsc
# Direct execution
npx . tsc
The application creates:
- GitHub Issue: Posted to the configured repository with meeting details and agenda
- HackMD Document: Meeting minutes document in Markdown format with collaborative editing
- Console Output: Links to both the created issue and HackMD document
GITHUB_TOKEN
: GitHub Personal Access TokenHACKMD_API_TOKEN
: HackMD API token for creating and managing documentsGOOGLE_API_KEY
: Google Calendar API Key for read-only calendar access