# Automate user access to GitHub, PagerDuty, and Jira

This Workflow automatically sets up new developers with access to GitHub, PagerDuty, and Jira.

#### Step 1: Start creating the Workflow <a href="#step-1-start-creating-the-workflow" id="step-1-start-creating-the-workflow"></a>

Follow the steps in the documentation to [create a Workflow](https://app.gitbook.com/o/RD51qiGImxmmq8NjALb1/s/JW7pYRxS4dHS3Hv6wxve/streamline/workflows/create) and [configure its basic settings](https://app.gitbook.com/o/RD51qiGImxmmq8NjALb1/s/JW7pYRxS4dHS3Hv6wxve/streamline/workflows/create#step-2-configure-your-workflow-settings).

#### Step 2: Add blocks to the Workflow <a href="#step-2-add-blocks-to-the-workflow" id="step-2-add-blocks-to-the-workflow"></a>

The instructions on this page describe how to create this Workflow in the Cortex UI, but it is also possible to copy the Workflow YAML and add it to your workspace via the [Cortex CLI](https://pypi.org/project/cortexapps-cli/). This allows you to quickly set up the example configuration then iterate on it for your own use case. Expand the tile below to learn more.

<details>

<summary>Workflow YAML instructions</summary>

To upload the Workflow example YAML into your workspace:

1. Save the Workflow example YAML file below:

```yaml
name: "Dev Onboarding: User Access"
tag: dev-onboarding-user-access
description: "Automatically sets up new developers with access to GitHub, PagerDuty,\
  \ and Jira."
isDraft: false
filter:
  type: GLOBAL
runResponseTemplate: null
failedRunResponseTemplate: null
restrictActionCompletionToRunnerUser: false
actions:
- name: Get GH Username
  slug: get-gh-username
  schema:
    inputs:
    - name: GitHub Username
      description: Enter your personal GitHub username.
      key: github-username
      required: false
      defaultValue: null
      placeholder: null
      validationRegex: "^[^\\s]+$"
      type: INPUT_FIELD
    inputOverrides: []
    type: USER_INPUT
  outgoingActions:
  - add-user-to-org
  isRootAction: true
- name: Add user to GH org
  slug: add-user-to-org
  schema:
    inputs:
      org: cortexapps
      role: member
      username: actions.get-gh-username.outputs.github-username
    integrationAlias: cortex
    actionIdentifier: github.addUserToOrg
    type: ADVANCED_HTTP_REQUEST
  outgoingActions:
  - add-user-to-pd
  isRootAction: false
- name: Add user to PagerDuty
  slug: add-user-to-pd
  schema:
    headers:
      Accept: application/vnd.pagerduty+json;version=2
      Authorization: "Bearer {{context.secrets.pd_token}}"
    httpMethod: POST
    payload: |-
      {
        "user": {
          "type": "user",
          "name": "{{context.initiatedBy.name}}",
          "email": "{{context.initiatedBy.email}}"
        }
      }
    url: https://api.pagerduty.com/users
    type: HTTP_REQUEST
  outgoingActions:
  - add-user-to-jira
  isRootAction: false
- name: Add user to Jira
  slug: add-user-to-jira
  schema:
    headers: {}
    httpMethod: POST
    payload: |-
      {
        "emailAddress": "{{context.initiatedBy.email}}",
        "displayName": "{{context.initiatedBy.name}}"
      }`
    url: https://cortex.atlassian.net/rest/api/3/user
    type: HTTP_REQUEST
  outgoingActions:
  - send-message
  isRootAction: false
- name: Send message
  slug: send-message
  schema:
    channel: social
    message: "{{context.initiatedBy.name}} has been added to GitHub, PagerDuty, and\
      \ Jira."
    type: SLACK
  outgoingActions: []
  isRootAction: false
runRestrictionPolicies: []
iconTag: AndroidLogo
variables: []

```

2. Use the [Cortex CLI](https://pypi.org/project/cortexapps-cli/) to run this command, using the path to your Workflow YAML file:\
   `cortex workflows create -f <path-to-your-workflow.yaml>`

</details>

Expand the tiles below to learn about each block in this Workflow and how to configure them in the Cortex UI:

<details>

<summary>User input</summary>

In this example, we add a User Input block to obtain the user's GitHub username.

1. Click **+** in the center of the page. In the block library modal, choose **User input**.
2. In the block configuration side panel, enter a name and unique slug for this block.
   1. In this example, we use the name `Get GH Username` and the slug `get-gh-username`.
3. Click **+Add user input**. Add the following:
   * **Name**: GitHub Username
   * **Key**: github-username
   * **Description**: Enter your personal GitHub username.
   * **Type**: Text
   * Click **Add input**.
4. At the bottom of the side panel, click **Save**.

</details>

<details>

<summary>Add user to GitHub org</summary>

This block adds a user to a GitHub organization.

1. Click **+** in the center of the page. In the block library modal, select the **GitHub > Add user to org** block.
2. In the side panel, enter a name and unique slug for the block.
   * In this example, we use the name `Add user to GH org` and the slug `add-user-to-org`.
3. Configure the block:
   * **Alias**: Choose which GitHub configuration to use.
   * **Organization**: Enter your GitHub organization name.
   * **Username**: Enter the handle for the user's GitHub account.&#x20;
     * In our example, we use templating to take the output of the previous step and set it as the value for this field: `actions.get-gh-username.outputs.github-username`
   * **Role**: Select the role of the user in the organization.&#x20;
4. At the bottom of the side panel, click **Save**.

</details>

<details>

<summary>HTTP requests</summary>

There are two HTTP requests that perform the following actions: Adding the user to PagerDuty and adding the user to Jira.

**Add the user to PagerDuty**

1. Click **+** in the center of the page. In the block library modal, select the **HTTP request** block.
2. In the side panel, enter a name and unique slug for the block.
   * In this example, we use the name `Add user to PagerDuty` and the slug `add-user-to-pd`.
3. Configure the block:
   1. **HTTP method**: POST
   2. **URL**: In our example, we set this to `https://api.pagerduty.com/users`.
   3. **Headers**: Set the following headers:
      * `Accept`: `application/vnd.pagerduty+json;version=2`
      * `Authorization`: `Bearer {{ context.secrets.pd_token }}`
   4. **Payload**: In our example, we enter the following:

```json
{
  "user": {
    "type": "user",
    "name": "{{context.initiatedBy.name}}",
    "email": "{{context.initiatedBy.email}}"
  }
}
```

4. Save the block.

**Add the user to Jira**

1. Click **+** in the center of the page. In the block library modal, select the **HTTP request** block.
2. In the side panel, enter a name and unique slug for the block.
   * In this example we use the name `Add user to Jira` and the slug `add-user-to-jira`.
3. Configure the block:
   1. **HTTP method**: POST
   2. **URL**: In our example, we set this to:\
      `https://cortex.atlassian.net/rest/api/3/user`
   3. **Payload**: In our example, we enter the following:

```json
{
  "emailAddress": "{{context.initiatedBy.email}}",
  "displayName": "{{context.initiatedBy.name}}"
}`
```

4. Save the block.

</details>

<details>

<summary>Slack message</summary>

In this step, we send a templated message via Slack informing the user that they have been added to GitHub, PageryDuty, and Jira.

1. Click **+** in the center of the page. In the block library modal, select the **Slack** block.
2. In the side panel, enter a name and unique slug for the block.&#x20;
   * In this example we use the name `Send message` and the slug `send-message`.
3. Select a Slack channel name.
4. Enter text for the message that will be sent via Slack. In our example, we use the following:

```
{{context.initiatedBy.name}} has been added to GitHub, PagerDuty, and Jira.
```

5. Save the block.

</details>

#### Step 3: Run the Workflow <a href="#step-3-run-the-workflow" id="step-3-run-the-workflow"></a>

When you run the Workflow, the following events happen:

* The Workflow pauses to collect a response from the user during the User Input block.
* The "Add user to org" block runs. It uses the output of the previous block as the username, then automatically adds to that user to the specified GitHub org.
* The first HTTP request runs. Using the name and email address of the user who initiated the Workflow, it creates a user in PagerDuty.
* The second HTTP request runs. Using the name and email address of the user who initiated the Workflow, it creates a user in Jira.
* The Slack block runs, which sends a Slack message to the user to let them know that their GitHub, PagerDuty, and Jira accounts are ready.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.cortex.io/guides/dev-onboarding/automate-user-access-to-github-pagerduty-and-jira.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
