Skip to content

Chapter 17: GitHub Workflows

The Problem

You're not working alone. Multiple marketers create segments. Managers need to approve campaigns before launch. Mistakes need catching before they reach production. How do you coordinate?

The Key Idea

Core concept

GitHub enables team collaboration through pull requests—proposed changes that others can review before they go live.

No one pushes directly to production. Every change is reviewed. Every review is documented.

The Collaboration Model

This is how software teams have worked for years. It works for marketing configurations too.

What is GitHub?

GitHub is where your Git repository lives online. It provides:

  • Shared storage: Everyone accesses the same files
  • Pull requests: Propose and review changes
  • Discussions: Comment on specific lines
  • History: See who changed what, when, and why

The GitHub CLI

gh is GitHub's command-line tool. It lets AI interact with GitHub directly—creating pull requests, checking reviews, merging changes—all from the terminal.

bash
gh pr create    # Create a pull request
gh pr list      # List open PRs
gh pr merge     # Merge a PR
gh pr checkout  # Check out a PR locally

When you ask AI to "create a pull request," it uses gh behind the scenes. This is why AI can work with GitHub as easily as it works with local files.

Creating a Pull Request

You've made changes locally. Now propose them:

> "Create a pull request for my segment changes"

AI helps you:

bash
git checkout -b update-high-value-threshold
git add .
git commit -m "Increase high-value threshold to $1000"
git push -u origin update-high-value-threshold
gh pr create --title "Increase high-value threshold to $1000" \
  --body "Updated for Q1 campaign targeting"
Pull request created:
https://github.com/company/marketing-configs/pull/42

Your changes are now proposed, not applied.

Anatomy of a Pull Request

A pull request shows:

┌────────────────────────────────────────────────────────┐
│ PR #42: Increase high-value threshold to $1000         │
├────────────────────────────────────────────────────────┤
│ Author: Sarah                                          │
│ Branch: update-high-value-threshold → main             │
├────────────────────────────────────────────────────────┤
│ Description:                                           │
│ Updated for Q1 campaign targeting. Changing threshold  │
│ from $500 to $1000 reduces audience by ~38%.           │
├────────────────────────────────────────────────────────┤
│ Files changed: 1                                       │
│                                                        │
│ segments/high-value-customers.yaml                     │
│   - value: 500                                         │
│   + value: 1000                                        │
├────────────────────────────────────────────────────────┤
│ Reviews: Pending                                       │
│ Checks: ✓ Validation passed                            │
└────────────────────────────────────────────────────────┘

Reviewing a Pull Request

When someone asks you to review:

> "Show me the open pull requests"
Open pull requests:
#42 - Increase high-value threshold to $1000 (Sarah)
#41 - Add churned customers segment (Mike)
#40 - Update welcome journey timing (Lisa)
> "Review pull request #42"

AI shows you the changes and helps you understand them.

Adding Review Comments

Comment on specific lines:

> "Comment on line 5: Why $1000? Our average order is $150."

Start a discussion directly on the code. The author can respond, explain, or adjust.

Approving or Requesting Changes

After review:

If it looks good:

> "Approve pull request #42"

If changes are needed:

> "Request changes: Please add a comment explaining the threshold rationale"

Automated Checks

GitHub can run validation automatically:

yaml
# .github/workflows/validate.yml
name: Validate Configs

on: pull_request

jobs:
  validate:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - run: npm install -g @treasuredata/tdx
      - run: tdx sg validate segments/*.yaml
      - run: tdx journey validate journeys/*.yaml

Every pull request is automatically validated. Broken configurations can't be merged.

Merging

When approved and checks pass:

> "Merge pull request #42"

The changes become part of main. They're ready to deploy.

Protected Branches

Prevent direct pushes to main:

  • Require reviews: At least one approval needed
  • Require checks: Validation must pass
  • No force push: History can't be rewritten

This ensures every production change is reviewed.

The Review Workflow

For authors:

  1. Create a branch
  2. Make changes
  3. Open a pull request
  4. Address review feedback
  5. Wait for approval

For reviewers:

  1. Read the description
  2. Review the changes
  3. Comment on concerns
  4. Approve or request changes

Mental Model: Peer Review

Think of pull requests like peer review in publishing:

  • You write an article (make changes)
  • Submit it for review (open PR)
  • Reviewers provide feedback (comments)
  • You revise based on feedback (update PR)
  • Editor approves (merge)
  • Article is published (deployed)

No article goes out unreviewed. No configuration should either.

Working with AI in Pull Requests

AI can help throughout:

Creating PRs:

> "Create a PR for my changes with a description of what I modified"

Reviewing PRs:

> "Explain the changes in PR #42"

Responding to feedback:

> "Update the file to address the reviewer's comment about threshold"

PR Best Practices

Keep PRs small:

  • One segment or journey per PR
  • Easier to review, easier to roll back

Write clear descriptions:

  • What changed and why
  • Impact on audience size
  • Related campaigns or tickets

Respond to feedback promptly:

  • Don't let PRs go stale
  • Discuss concerns openly

Team Roles

RoleResponsibilities
AuthorCreate PR, respond to feedback
ReviewerCheck changes, provide feedback
ApproverFinal sign-off (often a lead/manager)
MergerMerge and deploy (may be automated)

Pitfalls

"My PR has been open for days."

Ping reviewers directly:

> "Request review from @manager on PR #42"

"I disagree with the feedback."

Discuss in the PR comments. Document the decision either way.

"I need to make more changes."

Push additional commits to the same branch. The PR updates automatically.

What You've Learned

  • Pull requests propose changes for review
  • Team members comment and approve
  • Automated checks catch errors
  • Protected branches enforce the process
  • Every change is documented and traceable
  • AI helps throughout the workflow

Next Step

You've mastered team collaboration. The Closing wraps up your journey and points you to what's next.


You've built the complete workflow. Time to wrap up.