Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Oh No! The Robots Have Taken Over

Oh No! The Robots Have Taken Over

As part of his work, Chris and his team at Google are responsible for managing libraries for 150 APIs across 7 languages. This results in a crushing amount of toil, making it hard at times to both make forward progress and maintain what has been created.

When you own over 70 node repositories you have to get creative. So the team decided to make an army of sorts. An army of screaming, free roaming robots.

Bots can have a freeing effect on your engineering team. Come to hear how embracing automation has let a team of engineers do what they do best and let the toil fall to the machines.

Presented at Node+JS Interactive 2019: https://sched.co/T5HD

Christopher Wilcox

December 11, 2019
Tweet

More Decks by Christopher Wilcox

Other Decks in Technology

Transcript

  1. @chriswilcox47 https://chriswilcox.dev
    Oh No! The Robots
    Have Taken Over!
    Chris Wilcox
    Engineer, Google Cloud
    @chriswilcox47 https://chriswilcox.dev

    View Slide

  2. @chriswilcox47 https://chriswilcox.dev
    What’s a bot
    anyway?

    View Slide

  3. @chriswilcox47 https://chriswilcox.dev
    @chriswilcox47 https://chriswilcox.dev Photo by Lenny Kuhne on Unsplash

    View Slide

  4. @chriswilcox47 https://chriswilcox.dev
    @chriswilcox47 https://chriswilcox.dev

    View Slide

  5. @chriswilcox47 https://chriswilcox.dev
    @chriswilcox47 https://chriswilcox.dev

    View Slide

  6. @chriswilcox47 https://chriswilcox.dev
    What are bots
    good at?

    View Slide

  7. @chriswilcox47 https://chriswilcox.dev

    View Slide

  8. @chriswilcox47 https://chriswilcox.dev
    @chriswilcox47 https://chriswilcox.dev
    Levels of
    automation

    View Slide

  9. @chriswilcox47 https://chriswilcox.dev @chriswilcox47 https://chriswilcox.dev

    View Slide

  10. @chriswilcox47 https://chriswilcox.dev
    Level Description Execution Monitoring Fallback System
    Capabilities
    1 Tooling, Basic
    Automation
    Human
    System
    Human Humam Scoped
    2 Human monitored
    automation.
    System Human Human Scoped
    3 System monitored
    automation with
    human fallback
    System System Human Scoped
    4 System handles
    fallback within a scope
    System System System Scoped
    5 System handles work
    with nebulous scope
    System System System Unscoped
    @chriswilcox47 https://chriswilcox.dev

    View Slide

  11. @chriswilcox47 https://chriswilcox.dev
    @chriswilcox47 https://chriswilcox.dev
    Level 1: Automate
    portions of your
    workflow.

    View Slide

  12. @chriswilcox47 https://chriswilcox.dev
    Level 1 - Automate portions of workflow
    - Problem: Releasing a package takes multiple actions and it is
    easy to forget a bit.
    - Bot: Run script that tags main branch and publishes to
    package manager.
    The Simpsons, 20th Century Fox

    View Slide

  13. @chriswilcox47 https://chriswilcox.dev
    Level 2: Automate discovery
    and work, but under
    supervision.

    View Slide

  14. @chriswilcox47 https://chriswilcox.dev
    Level 2: Automate, but supervise
    - Problem: The script we authored to publish releases is
    easy to forget to run after we have a PR to update our
    version.
    - Bot: Automatically publish when a release PR is merged.
    Futurama, 20th Century Fox

    View Slide

  15. @chriswilcox47 https://chriswilcox.dev
    @chriswilcox47 https://chriswilcox.dev
    Level 3: Let the
    robot do work for
    you, with limited
    supervision.

    View Slide

  16. @chriswilcox47 https://chriswilcox.dev
    Level 3: Automate with limited supervision
    - Problem: We have issues go stale in our repository.
    - Bot: Reassign issues to other contributors when issues go
    stale.
    Boston Dynamics

    View Slide

  17. @chriswilcox47 https://chriswilcox.dev
    @chriswilcox47 https://chriswilcox.dev
    Level 4: Stop
    Supervising, Stop
    Fallback support.

    View Slide

  18. @chriswilcox47 https://chriswilcox.dev
    Level 4: Automate with *no* supervision
    - Problem: Sometimes branches other than master lie around
    after merges.
    - Bot: Delete stale branches from the repository.
    Matt Unsworth / YouTube

    View Slide

  19. @chriswilcox47 https://chriswilcox.dev
    @chriswilcox47 https://chriswilcox.dev
    Level 5: The robot
    is your boss now.

    View Slide

  20. @chriswilcox47 https://chriswilcox.dev
    crwilcox @chriswilcox47

    View Slide

  21. @chriswilcox47 https://chriswilcox.dev
    TriStar Pictures, 1991

    View Slide

  22. @chriswilcox47 https://chriswilcox.dev
    @chriswilcox47 https://chriswilcox.dev
    Writing a bot

    View Slide

  23. @chriswilcox47 https://chriswilcox.dev
    @chriswilcox47 https://chriswilcox.dev
    Writing a bot to
    write bots.

    View Slide

  24. @chriswilcox47 https://chriswilcox.dev
    @chriswilcox47 https://chriswilcox.dev
    Writing a bot to
    write bots.

    View Slide

  25. @chriswilcox47 https://chriswilcox.dev
    @chriswilcox47 https://chriswilcox.dev
    Writing a bot to
    write bots.

    View Slide

  26. @chriswilcox47 https://chriswilcox.dev
    @chriswilcox47 https://chriswilcox.dev

    View Slide

  27. @chriswilcox47 https://chriswilcox.dev
    Describe the
    scenario we
    want to solve
    “Can we run renovate
    pull request CI
    automatically?”

    View Slide

  28. @chriswilcox47 https://chriswilcox.dev
    @chriswilcox47 https://chriswilcox.dev
    Identify the
    event
    - Initial PR
    - Every PR update
    - On merge to master
    - On issue creation

    View Slide

  29. @chriswilcox47 https://chriswilcox.dev
    @chriswilcox47 https://chriswilcox.dev
    Decide if bot will
    alert or change.

    View Slide

  30. @chriswilcox47 https://chriswilcox.dev
    @chriswilcox47 https://chriswilcox.dev
    Let’s build it
    already!

    View Slide

  31. @chriswilcox47 https://chriswilcox.dev
    @chriswilcox47 https://chriswilcox.dev

    View Slide

  32. @chriswilcox47 https://chriswilcox.dev
    @chriswilcox47 https://chriswilcox.dev

    View Slide

  33. @chriswilcox47 https://chriswilcox.dev
    Just another
    node package.

    View Slide

  34. @chriswilcox47 https://chriswilcox.dev
    @chriswilcox47 https://chriswilcox.dev
    Minimal deps.

    View Slide

  35. @chriswilcox47 https://chriswilcox.dev
    @chriswilcox47 https://chriswilcox.dev
    src

    View Slide

  36. @chriswilcox47 https://chriswilcox.dev
    @chriswilcox47 https://chriswilcox.dev

    View Slide

  37. @chriswilcox47 https://chriswilcox.dev
    @chriswilcox47 https://chriswilcox.dev
    Setting up your
    environment to run
    a probot bot.

    View Slide

  38. @chriswilcox47 https://chriswilcox.dev

    View Slide

  39. @chriswilcox47 https://chriswilcox.dev
    Run smee proxy

    View Slide

  40. @chriswilcox47 https://chriswilcox.dev
    npm start

    View Slide

  41. @chriswilcox47 https://chriswilcox.dev
    Creating the
    GitHub App

    View Slide

  42. @chriswilcox47 https://chriswilcox.dev

    View Slide

  43. @chriswilcox47 https://chriswilcox.dev

    View Slide

  44. @chriswilcox47 https://chriswilcox.dev
    @chriswilcox47 https://chriswilcox.dev
    Configure
    Permissions

    View Slide

  45. @chriswilcox47 https://chriswilcox.dev

    View Slide

  46. @chriswilcox47 https://chriswilcox.dev
    @chriswilcox47 https://chriswilcox.dev
    Install the bot in a
    repository

    View Slide

  47. @chriswilcox47 https://chriswilcox.dev

    View Slide

  48. @chriswilcox47 https://chriswilcox.dev

    View Slide

  49. @chriswilcox47 https://chriswilcox.dev
    @chriswilcox47 https://chriswilcox.dev
    Running a bot
    locally.

    View Slide

  50. @chriswilcox47 https://chriswilcox.dev
    Set a few environment variables
    - APP_ID
    - WEBHOOK_SECRET
    - PRIVATE_KEY_PATH

    View Slide

  51. @chriswilcox47 https://chriswilcox.dev

    View Slide

  52. @chriswilcox47 https://chriswilcox.dev

    View Slide

  53. @chriswilcox47 https://chriswilcox.dev

    View Slide

  54. @chriswilcox47 https://chriswilcox.dev
    Starting test bot locally

    View Slide

  55. @chriswilcox47 https://chriswilcox.dev

    View Slide

  56. @chriswilcox47 https://chriswilcox.dev

    View Slide

  57. @chriswilcox47 https://chriswilcox.dev

    View Slide

  58. @chriswilcox47 https://chriswilcox.dev
    @chriswilcox47 https://chriswilcox.dev
    Deployment.

    View Slide

  59. @chriswilcox47 https://chriswilcox.dev
    Google Cloud Functions

    View Slide

  60. @chriswilcox47 https://chriswilcox.dev
    @chriswilcox47 https://chriswilcox.dev

    View Slide

  61. @chriswilcox47 https://chriswilcox.dev
    Google Cloud Storage + Google Cloud KMS
    Key Management Service maintains secrets so they aren’t hard
    coded in Google Cloud Function.

    View Slide

  62. @chriswilcox47 https://chriswilcox.dev
    @chriswilcox47 https://chriswilcox.dev

    View Slide

  63. @chriswilcox47 https://chriswilcox.dev
    Google Cloud Build
    Builds and Deploys our bots once merged to HEAD.

    View Slide

  64. @chriswilcox47 https://chriswilcox.dev
    Building
    npm install
    npm run compile
    mkdir -p "target"
    cp -r build "target"
    cp package.json "target/package.json"

    View Slide

  65. @chriswilcox47 https://chriswilcox.dev
    Publishing
    functionname="function_name"
    gcloud functions deploy "$functionname" --trigger-http \
    --runtime nodejs10 \
    --region "$FUNCTION_REGION" \
    --set-env-vars
    DRIFT_PRO_BUCKET="$BUCKET",KEY_LOCATION="$KEY_LOCATION",KEY_
    RING="$KEY_RING",GCF_SHORT_FUNCTION_NAME="$functionname",PRO
    JECT_ID="$PROJECT_ID"

    View Slide

  66. @chriswilcox47 https://chriswilcox.dev
    @chriswilcox47 https://chriswilcox.dev
    Maybe we can
    stop playing
    bad robots?

    View Slide

  67. @chriswilcox47 https://chriswilcox.dev
    @chriswilcox47 https://chriswilcox.dev
    https://github.com/googleapis/repo-automation-bots

    View Slide

  68. @chriswilcox47 https://chriswilcox.dev
    Thanks to the Googlers that contributed!
    And others...
    Benjamin Coe bcoe BenjaminCoe
    Jeff Ching chingor13
    Colin Nelson orthros orthros_
    Justin Beckwith justinbeckwith JustinBeckwith
    Chris Wilcox crwilcox chriswilcox47
    Alexander Fenster alexander-fenster
    Sofia Leon sofisl
    https://github.com/googleapis/repo-automation-bots

    View Slide