Event Execution How to create Event Issues (#40938)

Updating handbook section on event execution
This commit is contained in:
johnjeremiah 2026-03-04 11:22:01 -05:00 committed by GitHub
parent 637bcd2bb7
commit 0a594b8471
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -59,5 +59,333 @@ Once an event is approved, a Marketing directly responsible individual (DRI) is
An event's execution is not complete until the **Definition of Done** is met: the Event Overview Doc must be fully updated with post-event outcomes, notes, and final details.
## **How to automate event creation**
Since the tracking process uses github issues and subissues to track tasks, it can be tedious to create the structure for a new event. Here are the steps to automate the creation of the event execution issues in github.
### Setup
We will use a local script that executes commands on the local GitHub command line interface (CLI). In order to get started you need to have the GitHub CLI installed.
1. **Install Homebrew.** *Homebrew is a package installer and the simplest way to get the GitHub CLI installed.*.
1. Navigate to https://brew.sh/ and copy the installation script.
2. Open a terminal window, paste and run the script. *You will be prompted for your local password*
2. **Install GitHub CLI (GH CLI)**
Using homebrew, tell it to install the GitHub command line interface
`brew install gh`
3. **Authenticate / connect with GitHub**
1. Enter the command: `gh auth login` and follow the steps to authenticate with the repository
4. **Update the CLI permissions to include projects**
1. Enter the command `gh auth refresh -s project` and follow the steps to authenticate.
TODO - add a test set up section where a user has a simple issue script they test
### Event Template Process and Script
Creating a new event group is now simple.
1. copy the script below and save as **NewEvent.sh**
2. Edit the script.
First - CHANGE THESE THREE THINGS.
**Nothing else needs to change**
* EVENT_SLUG - will be the name of the event and part of the label for the event
* PLANNING_DOC_URL - is the link to the google doc where we're keeping the latest status of the event plans
* REQUEST_ISSUE - is thte number of the issue that proposed the event
For example:
```
EVENT_SLUG="2606-MacDevOpsYVR-Montreal"
PLANNING_DOC_URL="https://docs.google.com/document/d/1Td1XtFClRlOMDuoojXUkJvU8f6MUEjsBacMVRqEJbQQ/edit?tab=t.afz38t4pwdka"
REQUEST_ISSUE = "#14599"
```
Save the changed file **NewEvent.sh**
And then execute the script. `./NewEvent.sh`
That's it. This should create the events in GitHub to manage the event.
here's the script
```bash
#!/bin/bash
# --- Event specifics / details - change this
EVENT_SLUG="2606-MacDevOpsYVR-Montreal"
PLANNING_DOC_URL="https://docs.google.com/document/d/1Td1XtFClRlOMDuoojXUkJvU8f6MUEjsBacMVRqEJbQQ/edit?tab=t.afz38t4pwdka"
REQUEST_ISSUE = "#14599"
# No need to change anything else to run the script
# --- Static Configuration ---
ORG="fleetdm"
REPO="confidential"
PROJECT_NUMBER="94"
# 1. Define Labels (Fixed with leading colons)
NEW_LABEL=":mktg-event:${EVENT_SLUG}"
PARENT_LABELS=":mktg-event,:mktg-event:overview,:mktg-event:tp"
CHILD_LABELS=":mktg-event,:mktg-event:detail,:mktg-event:tp"
# Ensure the specific event label exists
echo "1. Ensuring label '${NEW_LABEL}' exists..."
# gh label create "$NEW_LABEL" --repo "$ORG/$REPO" --color "1D76DB" --force >/dev/null 2>&1 || true
gh label create "$NEW_LABEL" --repo "$ORG/$REPO" --force >/dev/null 2>&1 || true
# ==========================================
# STEP 1: CREATE THE PARENT ISSUE
# ==========================================
echo "2. Creating Parent Issue (Overview)..."
PARENT_TITLE="${EVENT_SLUG} Execution Overview"
# Using a Heredoc for clean, WYSIWYG Markdown formatting
PARENT_BODY=$(cat << EOF
Master tracking issue for ${EVENT_SLUG}.
EXECUTION for request $REQUEST_ISSUE
## Executive Snapshot & Key Decisions
Use this section for a quick overview. If someone only reads this part, they should understand the scope and scale of our presence.
| Category | Details |
|---|---|
| Event Name | [e.g., KubeCon NA 2026] |
| Dates | [Start Date] to [End Date] |
| Location | [City, State, Venue Name] |
| Event Website | [Link to official site] |
| Budget Estimate | [Total estimated cost] |
| Primary Goal | [e.g., Lead Gen (500 scans), Brand Awareness, Recruiting] |
| Booth Size | [e.g., 10x20, Island, Tabletop] |
| Speaking Slot? (details below) | Yes or No |
| Workshop? | Yes or No |
| DRI | [Name of person responsible] |
| Onsite DRI | [Name of person responsible] |
| Planing Doc | $PLANNING_DOC_URL |
- [ ] Finalize sponsorship agreements
- [ ] Assign issues/tasks
## Progress Tracker
- [ ] 1. Speaking Session & Workshop Details
- [ ] 2. Promotion & Marketing Plan
- [ ] 3. Booth Strategy & Messaging
- [ ] 4. Staffing & Travel Logistics
- [ ] 5. Execution, Logistics & Swag
- [ ] 6 Lead Capture & Follow-Up Strategy
- [ ] 7. Post-Mortem & ROI Analysis
EOF
)
# Create Parent
PARENT_URL=$(gh issue create \
--repo "$ORG/$REPO" \
--title "$PARENT_TITLE" \
--body "$PARENT_BODY" \
--label "$PARENT_LABELS,$NEW_LABEL")
# CRITICAL CHECK: Did the parent issue actually get created?
if [ -z "$PARENT_URL" ]; then
echo "❌ ERROR: Failed to create Parent Issue. Check if labels exist in the repo."
exit 1
fi
# Extract Issue Number from URL
PARENT_NUM=$(echo "$PARENT_URL" | awk -F/ '{print $NF}')
echo " ✅ Parent Created: #$PARENT_NUM"
# Get the Global Node ID of the Parent (Needed for GraphQL linking)
PARENT_NODE_ID=$(gh api graphql -f query='
query($owner:String!, $repo:String!, $number:Int!) {
repository(owner:$owner, name:$repo) {
issue(number:$number) { id }
}
}' -f owner="$ORG" -f repo="$REPO" -F number="$PARENT_NUM" --jq '.data.repository.issue.id')
if [ -z "$PARENT_NODE_ID" ] || [ "$PARENT_NODE_ID" == "null" ]; then
echo "❌ ERROR: Could not fetch GraphQL Node ID for Parent #$PARENT_NUM"
exit 1
fi
echo " 🔹 Parent Node ID: $PARENT_NODE_ID"
# Add Parent to Project
gh project item-add "$PROJECT_NUMBER" --owner "$ORG" --url "$PARENT_URL" >/dev/null 2>&1
# ==========================================
# STEP 2: HELPER FUNCTION FOR CHILD ISSUES
# ==========================================
# This function handles the creation and linking of all sub-issues
create_sub_issue() {
local TITLE="$1"
local BODY="$2"
CHILD_URL=$(gh issue create \
--repo "$ORG/$REPO" \
--title "$TITLE: ${EVENT_SLUG}" \
--body "$BODY" \
--label "$CHILD_LABELS,$NEW_LABEL")
if [ -n "$CHILD_URL" ]; then
CHILD_NUM=$(echo "$CHILD_URL" | awk -F/ '{print $NF}')
# Get Child Node ID
CHILD_NODE_ID=$(gh api graphql -f query='
query($owner:String!, $repo:String!, $number:Int!) {
repository(owner:$owner, name:$repo) {
issue(number:$number) { id }
}
}' -f owner="$ORG" -f repo="$REPO" -F number="$CHILD_NUM" --jq '.data.repository.issue.id')
echo " ✅ Created Child: #$CHILD_NUM ($TITLE)"
# Link as Sub-Issue via GraphQL
LINK_RESULT=$(gh api graphql -f query='
mutation($parentId: ID!, $childId: ID!) {
addSubIssue(input: {issueId: $parentId, subIssueId: $childId}) {
clientMutationId
}
}
' -f parentId="$PARENT_NODE_ID" -f childId="$CHILD_NODE_ID" 2>&1)
if [[ $? -eq 0 ]]; then
echo " 🔗 Linked as Sub-issue to Parent #$PARENT_NUM"
else
echo " ⚠️ Failed to link. Error details:"
echo "$LINK_RESULT"
fi
# Add to Project
gh project item-add "$PROJECT_NUMBER" --owner "$ORG" --url "$CHILD_URL" >/dev/null 2>&1
else
echo " ❌ Failed to create child: $TITLE"
fi
}
# ==========================================
# STEP 3: DEFINE & CREATE CHILD ISSUES
# ==========================================
echo "3. Creating and Linking Child Issues..."
# --- Child 1 ---
BODY=$(cat << EOF
**Description**
Track all details, deadlines, and requirements for any speaking slots or workshops we are hosting before, during, or after the event.
- [ ] Confirm speaking session details (Title, Speaker, Date/Time, Room)
- [ ] Submit Abstract Link and AV Requirements
- [ ] Confirm workshop hosting and timing
- [ ] Update Workshop Planning Doc, Registration Link, and Capacity
- [ ] Update the $PLANNING_DOC_URL
EOF
)
create_sub_issue "1. Speaking Session & Workshop Details" "$BODY"
# --- Child 2 ---
BODY=$(cat << EOF
**Description**
Manage how we are driving traffic to our booth, session, or workshop.
- [ ] Schedule Pre-Event Email Blast
- [ ] Schedule LinkedIn and Twitter/X Posts
- [ ] Create Speaker Promo Graphics and Blog Post
- [ ] Assign Customer Invites
- [ ] Assign Live Social Coverage during event
- [ ] Schedule Event App Push Notification
- [ ] Update the $PLANNING_DOC_URL
EOF
)
create_sub_issue "2. Promotion & Marketing Plan" "$BODY"
# --- Child 3 ---
BODY=$(cat << EOF
**Description**
Define the core purpose, layout, and messaging for our physical footprint on the show floor.
- [ ] Document Booth Number and Exhibit Hall Hours
- [ ] Define Core Messaging/Theme
- [ ] List Key Demos
- [ ] Document Key Requirements (internet, scanners, monitors)
- [ ] Update the $PLANNING_DOC_URL
EOF
)
create_sub_issue "3. Booth Strategy & Messaging" "$BODY"
# --- Child 4 ---
BODY=$(cat << EOF
**Description**
Manage who is going, where they are staying, and when they are working the booth.
- [ ] Assign Staff Manager and Attire
- [ ] Select Suggested Hotel
- [ ] Set Arrival and Departure Requirements
- [ ] Complete Staff Assignments table
- [ ] Create Booth Staffing Schedule
- [ ] Update the $PLANNING_DOC_URL
EOF
)
create_sub_issue "4. Staffing & Travel Logistics" "$BODY"
# --- Child 5 ---
BODY=$(cat << EOF
**Description**
This section is for the operations team to handle on-site setup, booth build, and shipping.
- [ ] Track Shipping & Handling deadlines and tracking numbers
- [ ] Create Return Shipping Label
- [ ] Confirm Booth Vendor, Graphics Deadline, and Furniture/Electrical
- [ ] Order Premium Swag, General Swag, and Raffle/Contest items
- [ ] Complete Key Points of Contact table
- [ ] Update the $PLANNING_DOC_URL
EOF
)
create_sub_issue "5. Execution, Logistics & Swag" "$BODY"
# --- Child 6 ---
BODY=$(cat << EOF
**Description**
Crucial for ROI. Track how we capture data and what happens next.
- [ ] Define Capture Mechanics, Method, and Device Rental
- [ ] Define Incentive to Scan
- [ ] Write Qualifying Questions for Booth Staff
- [ ] Assign Lead Upload Owner and SLA
- [ ] Define Follow Up Strategy and Nurture Sequence
- [ ] Update the $PLANNING_DOC_URL
EOF
)
create_sub_issue "6. Lead Capture & Follow-Up Strategy" "$BODY"
# --- Child 7 ---
BODY=$(cat << EOF
**Description**
To be filled out within 1 week of event conclusion to analyze performance and ROI.
- [ ] Record The Numbers (Leads, MQLs, Spend, CPL)
- [ ] Complete Retrospective (What went well/wrong)
- [ ] Document Competitor Intel
- [ ] Upload Photo Archive
- [ ] Update the $PLANNING_DOC_URL
EOF
)
create_sub_issue "7. Post-Mortem & ROI Analysis" "$BODY"
echo "Done."
```
<meta name="maintainedBy" value="johnjeremiah">
<meta name="title" value="🫧 Marketing Event Execution">