Cross-Provider Workflow

Google Workspace User to GitHub Org Invite

Version 1.0.0

Create a Google Workspace user, then grant them GitHub organization membership.

1 workflow 3 source APIs 3 providers
View Spec View on GitHub ArazzoWorkflowsCross-Provider

Providers Orchestrated

google-workspace github slack

Workflows

provision-google-user-github-org
Provision a Google Workspace user and add them to a GitHub org.
Inserts a new user into Google Workspace, grants the developer membership in a GitHub organization, and posts a Slack confirmation message.
3 steps inputs: familyName, githubOrg, githubUsername, givenName, password, primaryEmail, slackChannel outputs: googleUserId, membershipState, messageTs
1
create-google-user
$sourceDescriptions.googleWorkspaceApi.insertUser
Provision the user in Google Workspace Directory.
2
add-github-membership
$sourceDescriptions.githubApi.setOrganizationMembershipForUser
Grant the developer membership in the GitHub organization.
3
notify-slack
$sourceDescriptions.slackApi.postChatPostmessage
Confirm the onboarding in a Slack channel.

Source API Descriptions

Arazzo Workflow Specification

id-google-workspace-user-to-github-org-invite.yml Raw ↑
arazzo: 1.0.1
info:
  title: Google Workspace User to GitHub Org Invite
  summary: Create a Google Workspace user, then grant them GitHub organization membership.
  description: >-
    A developer onboarding workflow that provisions a Google Workspace identity
    in the Admin SDK Directory, then invites the corresponding GitHub user into
    an organization, and confirms the action with a Slack notification. Bridges
    a corporate directory and a source-control platform in one pass.
  version: 1.0.0
sourceDescriptions:
  - name: googleWorkspaceApi
    url: https://raw.githubusercontent.com/api-evangelist/google-workspace/refs/heads/main/openapi/admin-sdk-directory-api.yml
    type: openapi
  - name: githubApi
    url: https://raw.githubusercontent.com/api-evangelist/github/refs/heads/main/openapi/github-organizations-openapi.yml
    type: openapi
  - name: slackApi
    url: https://raw.githubusercontent.com/api-evangelist/slack/refs/heads/main/openapi/slack-chat-openapi.yml
    type: openapi
workflows:
  - workflowId: provision-google-user-github-org
    summary: Provision a Google Workspace user and add them to a GitHub org.
    description: >-
      Inserts a new user into Google Workspace, grants the developer membership
      in a GitHub organization, and posts a Slack confirmation message.
    inputs:
      type: object
      properties:
        primaryEmail:
          type: string
        givenName:
          type: string
        familyName:
          type: string
        password:
          type: string
        githubOrg:
          type: string
        githubUsername:
          type: string
        slackChannel:
          type: string
    steps:
      - stepId: create-google-user
        description: Provision the user in Google Workspace Directory.
        operationId: $sourceDescriptions.googleWorkspaceApi.insertUser
        requestBody:
          contentType: application/json
          payload:
            primaryEmail: $inputs.primaryEmail
            name:
              givenName: $inputs.givenName
              familyName: $inputs.familyName
            password: $inputs.password
            changePasswordAtNextLogin: true
        successCriteria:
          - condition: $statusCode == 200
        outputs:
          googleUserId: $response.body#/id
          primaryEmail: $response.body#/primaryEmail
      - stepId: add-github-membership
        description: Grant the developer membership in the GitHub organization.
        operationId: $sourceDescriptions.githubApi.setOrganizationMembershipForUser
        parameters:
          - name: org
            in: path
            value: $inputs.githubOrg
          - name: username
            in: path
            value: $inputs.githubUsername
        requestBody:
          contentType: application/json
          payload:
            role: member
        successCriteria:
          - condition: $statusCode == 200
        outputs:
          membershipState: $response.body#/state
      - stepId: notify-slack
        description: Confirm the onboarding in a Slack channel.
        operationId: $sourceDescriptions.slackApi.postChatPostmessage
        requestBody:
          contentType: application/json
          payload:
            channel: $inputs.slackChannel
            text: Provisioned $inputs.primaryEmail and invited $inputs.githubUsername to $inputs.githubOrg.
        successCriteria:
          - condition: $statusCode == 200
        outputs:
          messageTs: $response.body#/ts
    outputs:
      googleUserId: $steps.create-google-user.outputs.googleUserId
      membershipState: $steps.add-github-membership.outputs.membershipState
      messageTs: $steps.notify-slack.outputs.messageTs