Cross-Provider Workflow

New Hire Onboarding Chain Across Entra, GitHub, and Slack

Version 1.0.0

Provision an Entra user, add to a group, invite to GitHub, then welcome in Slack.

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

Providers Orchestrated

microsoft-entra github slack

Workflows

onboard-new-hire
Provision Entra user, add to group, invite to GitHub, welcome in Slack.
Creates an Entra user, adds them to a department group, grants GitHub organization membership, and posts a Slack welcome message.
4 steps inputs: displayName, githubOrg, githubUsername, groupId, mailNickname, password, slackChannel, userPrincipalName outputs: githubState, membershipStatus, messageTs, userId
1
create-user
$sourceDescriptions.entraApi.createUser
Provision the new hire in Microsoft Entra ID.
2
add-to-group
$sourceDescriptions.entraApi.addGroupMember
Add the new hire to the department security group.
3
github-org-invite
$sourceDescriptions.githubApi.setOrganizationMembershipForUser
Grant the new hire GitHub organization membership.
4
slack-welcome
$sourceDescriptions.slackApi.postChatPostmessage
Welcome the new hire in Slack.

Source API Descriptions

Arazzo Workflow Specification

id-new-hire-onboarding-entra-github-slack.yml Raw ↑
arazzo: 1.0.1
info:
  title: New Hire Onboarding Chain Across Entra, GitHub, and Slack
  summary: Provision an Entra user, add to a group, invite to GitHub, then welcome in Slack.
  description: >-
    A full new-hire onboarding chain that provisions a Microsoft Entra ID account,
    adds the employee to a department security group, grants them membership in a
    GitHub organization, and posts a welcome message to Slack. Demonstrates a
    four-step orchestration across three identity and collaboration providers.
  version: 1.0.0
sourceDescriptions:
  - name: entraApi
    url: https://raw.githubusercontent.com/api-evangelist/microsoft-entra/refs/heads/main/openapi/microsoft-entra-graph-identity-openapi.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: onboard-new-hire
    summary: Provision Entra user, add to group, invite to GitHub, welcome in Slack.
    description: >-
      Creates an Entra user, adds them to a department group, grants GitHub
      organization membership, and posts a Slack welcome message.
    inputs:
      type: object
      properties:
        displayName:
          type: string
        userPrincipalName:
          type: string
        mailNickname:
          type: string
        password:
          type: string
        groupId:
          type: string
        githubOrg:
          type: string
        githubUsername:
          type: string
        slackChannel:
          type: string
    steps:
      - stepId: create-user
        description: Provision the new hire in Microsoft Entra ID.
        operationId: $sourceDescriptions.entraApi.createUser
        requestBody:
          contentType: application/json
          payload:
            accountEnabled: true
            displayName: $inputs.displayName
            userPrincipalName: $inputs.userPrincipalName
            mailNickname: $inputs.mailNickname
            passwordProfile:
              forceChangePasswordNextSignIn: true
              password: $inputs.password
        successCriteria:
          - condition: $statusCode == 201
        outputs:
          userId: $response.body#/id
      - stepId: add-to-group
        description: Add the new hire to the department security group.
        operationId: $sourceDescriptions.entraApi.addGroupMember
        parameters:
          - name: group-id
            in: path
            value: $inputs.groupId
        requestBody:
          contentType: application/json
          payload:
            "@odata.id": https://graph.microsoft.com/v1.0/directoryObjects/$steps.create-user.outputs.userId
        successCriteria:
          - condition: $statusCode == 204
        outputs:
          membershipStatus: $statusCode
      - stepId: github-org-invite
        description: Grant the new hire GitHub organization membership.
        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:
          githubState: $response.body#/state
      - stepId: slack-welcome
        description: Welcome the new hire in Slack.
        operationId: $sourceDescriptions.slackApi.postChatPostmessage
        requestBody:
          contentType: application/json
          payload:
            channel: $inputs.slackChannel
            text: Please welcome $inputs.displayName to the team! Accounts and access are ready.
        successCriteria:
          - condition: $statusCode == 200
        outputs:
          messageTs: $response.body#/ts
    outputs:
      userId: $steps.create-user.outputs.userId
      membershipStatus: $steps.add-to-group.outputs.membershipStatus
      githubState: $steps.github-org-invite.outputs.githubState
      messageTs: $steps.slack-welcome.outputs.messageTs