Skip to content

target/create-meeting-issue

Repository files navigation

create-meeting-issue

Automatically scaffold out a meeting using .ics recurrence, timezone info, and agenda topics from the issue log and prs.

Why?

Meetings should be conducted the same way, with an opinion on the structure needed to support healthy and productive conversations.

Upon invocation, the action will:

  • read and validate action input
  • read the recurring .ics
    • find the next meeting occurrence date and useful timezone info
    • ⚠️ The recurrence does not know about any moved instances

    • read the location from the meeting, often a zoom, slack huddle, or teams link
  • find all issues and pull requests labeled agenda and add them to the upcoming meeting agenda
  • open a new issue with the collected date, timezones, location info, and agenda items
  • output the issue url, location, and next meeting date for further use by downstream actions

Setup

  1. Download the .ics associated with the recurring meeting series.
  2. Place the .ics file at the root of your repository, or specify a different path using the MEETING_PATH input.
    • By default, the action will look for meeting.ics at the root of the repo.

Usage

Add the action to your repo as the following:

name: Create Meeting

on:
  workflow_dispatch:

jobs:
  create-meeting:
    runs-on: ubuntu-latest

permissions:
  pull-requests: read
  issues: write

steps:
  - uses: actions/checkout@v4 # use an immutable SHA in production

  - uses: target/create-meeting-issue@v1 # use an immutable SHA in production
    id: create-meeting
    with:
      GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

Inputs

Name Required Default Description
GITHUB_TOKEN A token with pull-request read access and issues write to the repository, used to create an issue.
MEETING_PATH meeting.ics The path to the recurring meeting.ics file.
TIMEZONES Etc/UTC The comma-separated timezones to display for the next meeting. For example, America/Chicago,Asia/Kolkata. Use TZ Identifiers from this list.
SLACK_CHANNEL The slack channel to mention within the issue body.
This input is not used in any workflow dispatch logic mentioned later, that is a separate process governed by a webhook originating in Slack.
DRY_RUN false If true, only outputs the issue body instead of creating the issue.

Outputs

Name Example Description
ISSUE_URL https://github.com/octocat/example/issues/16 The url of the issue that was created.
NEXT_MEETING_DATE 1/15/2025 The next meeting date from the .ics file.
LOCATION https://example.zoom.us/j/foo The meeting location from the .ics file.

Invoke manually prior to the meeting

Run workflow directly within the Actions > Create Meeting Workflow screen.

Messaging Integration

Optionally, you can compose this action together with a messaging solution, such as slack-github-action to inform folks about the upcoming meeting and agenda.

name: Create Meeting

on:
  workflow_dispatch:

jobs:
  create-meeting:
    runs-on: ubuntu-latest
    permissions:
      pull-requests: read
      issues: write

    outputs:
      ISSUE_URL: ${{ steps.create-meeting.outputs.ISSUE_URL }}
      LOCATION: ${{ steps.create-meeting.outputs.LOCATION }}
      NEXT_MEETING_DATE: ${{ steps.create-meeting.outputs.NEXT_MEETING_DATE }}

    steps:
      - uses: actions/checkout@v4 # use an immutable SHA in production

      - uses: target/create-meeting-issue@v1 # use an immutable SHA in production
        id: create-meeting
        with:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

  # this is unaffiliated boilerplate and should be tailored to your needs
  # using https://github.com/slackapi/slack-github-action/tree/main?tab=readme-ov-file#technique-1-slack-workflow-builder is a pretty lightweight way to do this
  notify-slack:
    runs-on: ubuntu-latest
    needs: create-meeting
    permissions: {} # no extra permissions needed

    steps:
      - uses: slackapi/[email protected] # use an immutable SHA in production
        with:
          webhook: ${{ secrets.SLACK_WEBHOOK_URL }}
          webhook-type: webhook-trigger
          payload: |
            issue_url: ${{ needs.create-meeting.outputs.ISSUE_URL }}
            location: ${{ needs.create-meeting.outputs.LOCATION }}
            next_meeting_date: ${{ needs.create-meeting.outputs.NEXT_MEETING_DATE }}

Warning

GitHub may omit output like location if it thinks it contains a secret, such as a pre-authorized webinar link. If you encounter this, you can combine the steps into a single job, but it does provide more permissions to subsequent steps in the job. Consult security resources as prudent. See this GitHub discussion for status and potential workarounds.

Local Development

Ensure you have the following tools:

nvm use
corepack enable
corepack install
pnpm install
pnpm dev

Packaging Process

Run pnpm package prior to pushing new versions.

This action uses ncc to emit JavaScript - at least until:

If node22 is unblocked first, the action.yml line can be uncommented and TypeScript compilation can be evaluated for removal.

About

Automatically scaffold out a meeting using .ics recurrence, timezone info, and agenda topics from the issue log and prs.

Topics

Resources

License

Code of conduct

Security policy

Stars

Watchers

Forks

Contributors 2

  •  
  •