Integration guide
Phaset can be used without automation support, but it really blooms out when you drive it through automation. This guide helps you set up things to gain maximum benefit from Phaset.
Integration overview
Section titled “Integration overview”A complete integration involves two parts:
- Pushing Records and/or Standards, usually done in CI pipelines, e.g. GitHub Actions.
- Sending Metrics, usually done via webhooks in your Version Control System, e.g. GitHub.
However, at the end of the day, you choose how deep you want to go. The only constant is that you must have a Record if you want to push Standards or Metrics.
The below table explains how Phaset supports your integration needs.
| GitHub App (Future) | CI workflows (e.g. GitHub Actions, GitLab…) | Webhooks | Manual | |
|---|---|---|---|---|
| Level of access | File tree | Source code | Event data | Source code |
| Records | ✅ | ✅ | ❌ | ✅ |
| Standards | ✅ | ✅ | ❌ | ⚠️ Yes, but requires running StandardLint (open-source Node.js package) to produce results |
| DORA metrics | ⚠️* Yes, if using GH Issues | ❌ | ✅** | ⚠️ Yes, but some events require Git/source code access and calculating values |
| Engineering metrics | ⚠️* Yes, if using GH Issues | ❌ | ✅** | ⚠️ Yes, but some events require Git/source code access and calculating values |
* = Can be disabled and complemented with webhooks from your Issue Management System, e.g. Jira.
** = Requires setup according to instructions.
Which tools Phaset supports
Section titled “Which tools Phaset supports”With Phaset supporting many common tools, your needs are probably covered well.
Where do you host your Records and Standards?
Section titled “Where do you host your Records and Standards?”Records and Standards are pushed (“uploaded”) during your continuous integration process.
This will likely be the same where place you store your code.
Phaset supports:
- GitHub
- GitLab
- Bitbucket
- Azure DevOps
- Somewhere else (manual)
Where do you host your issues?
Section titled “Where do you host your issues?”Tracking your issues enables Phaset to gather and present various metrics.
This will likely be your regular issue tracker, if you are using such a tool.
Phaset supports:
- GitHub
- GitLab
- Bitbucket
- Azure DevOps
- Jira
- Linear
- Somewhere else (manual)
Can I use different tools for code and issues?
Section titled “Can I use different tools for code and issues?”Yes, that’s entirely possible!
Records and Standards
Section titled “Records and Standards”Records constitute the central feature of Phaset, supporting your needs around documenting software.
Standards let you see how the technical context presented in a Record conforms to your organizational Standards. Standards can only be updated via automation; they cannot be updated in the Phaset user interface.
How to handle Records and Standards
Section titled “How to handle Records and Standards”The information displayed in Phaset’s Records can be stored in a structured JSON file: This is called the manifest file and is always named phaset.manifest.json. You keep and lifecycle-manage this manifest file in a Git repository.
The recommended way to store and manage the manifest file is to follow standard developer conventions:
- Store the manifest file in a Git repository.
- For custom-developed software, this will be the same Git repository as the Record logically refers to, e.g. your Record representing
My APImight be in a repository calledmy-api. Note that the repository name is not used by Phaset; this is just stated for your own convenience. - For other software, e.g. SaaS or externally-provided software, you will have to decide on a way that suits your needs and organization. For example, this repository could be a new repository only containing the manifest file. This way you get a 1:1 relation between a piece of software and the context that drives updates, i.e. the CI run and Phaset integration. Note that Phaset won’t care about how you do this, so find the way that is best for you.
- Update the Record via the integration method provided for your Version Control System. This is ideally done during your continuous integration workflow, such as when the pipeline for the main branch runs.
Integrating Records and Standards
Section titled “Integrating Records and Standards”To avoid hardcoding sensitive information, configure variables in the repository settings.
- Navigate to your repository and go to
Settings>Secrets and variables>Actions. - For each of the following required variables, create a new secret with the listed name and your corresponding value for it:
PHASET_API_KEY: Your Phaset API key.PHASET_ENDPOINT: Your Phaset endpoint URL (e.g., https://phaset.example.com/integration)PHASET_ORG_ID: (Optional) Your Organization ID. Will be inferred from theorganizationIdin the manifest file if not explicitly provided.PHASET_RECORD_ID: (Optional) The Record ID. Will be inferred from theidin the manifest file if not explicitly provided.
You can also optionally add:
RUN_RECORDandRUN_STANDARDS: These default to true.RUN_DEPLOYMENT: This defaults to false.
Now, the only remaining thing to do is to use the phaset-action GitHub Action in your workflows!
Here’s an example of using the Phaset GitHub Action: TODO
on: [push]
jobs: phaset: runs-on: ubuntu-latest environment: production steps: - name: Checkout uses: actions/checkout@v5
- name: Run Phaset action (alpha) uses: phasetdev/phaset-action@v0 with: endpoint: ${{ secrets.PHASET_ENDPOINT }} api-key: ${{ secrets.PHASET_API_KEY }} org-id: 'demoorg' # Optional: Will be inferred if not provided record-id: 'demorecord' # Optional: Will be inferred if not provided #run-deployment: 'true' # Uncomment to fire deployment events- Navigate to your repository and go to
Settings>CI/CD>Variables. - Add the following required variables:
PHASET_API_KEY: Your Phaset API key.PHASET_ENDPOINT: Your Phaset endpoint URL (e.g., https://phaset.example.com/integration)PHASET_ORG_ID: (Optional) Your Organization ID. Will be inferred from theorganizationIdin the manifest file if not explicitly provided.PHASET_RECORD_ID: (Optional) The Record ID. Will be inferred from theidin the manifest file if not explicitly provided.
You can also optionally add:
RUN_RECORDandRUN_STANDARDS: These default to true.RUN_DEPLOYMENT: This defaults to false.
Here’s an example implementation:
image: node:latest
stages: - production
phaset-action-alpha: stage: production variables: API_KEY: "$PHASET_API_KEY" ORG_ID: "$PHASET_ORG_ID" RECORD_ID: "$PHASET_RECORD_ID" ENDPOINT: "$PHASET_ENDPOINT" RUN_RECORD: "true" RUN_STANDARDS: "true" RUN_DEPLOYMENT: "false" script: - export RUN_RECORD=${RUN_RECORD:-true} - export RUN_STANDARDS=${RUN_STANDARDS:-true} - export RUN_DEPLOYMENT=${RUN_DEPLOYMENT:-false} - curl -Lso phaset.sh https://raw.githubusercontent.com/phasetdev/phaset-action-alpha/main/phaset.sh - if [ "$RUN_RECORD" == "true" ]; then bash ./phaset.sh --org-id "${ORG_ID}" --record-id "${RECORD_ID}" --token "${API_KEY}" --endpoint "${ENDPOINT}" --action "record"; fi - if [ "$RUN_STANDARDS" == "true" ]; then bash ./phaset.sh --org-id "${ORG_ID}" --record-id "${RECORD_ID}" --token "${API_KEY}" --endpoint "${ENDPOINT}" --action "standards"; fi - if [ "$RUN_DEPLOYMENT" == "true" ]; then bash ./phaset.sh --org-id "${ORG_ID}" --record-id "${RECORD_ID}" --token "${API_KEY}" --endpoint "${ENDPOINT}" --action "deployment"; fi environment: name: production url: https://my-env-123.example-does-not-exist.cloudFeel free to templatize this to make reuse easier across many Records.
- Navigate to your Bitbucket repository and go to
Settings>Repository settings>Environment variables - Add the following required variables:
PHASET_API_KEY: Your Phaset API key.PHASET_ENDPOINT: Your Phaset endpoint URL (e.g., https://phaset.example.com/integration)PHASET_ORG_ID: (Optional) Your Organization ID. Will be inferred from theorganizationIdin the manifest file if not explicitly provided.PHASET_RECORD_ID: (Optional) The Record ID. Will be inferred from theidin the manifest file if not explicitly provided.
You can also optionally add:
RUN_RECORDandRUN_STANDARDS: These default to true.RUN_DEPLOYMENT: This defaults to false.
An example implementation could look like this:
image: node:lts
pipelines: default: - step: &phaset-action-alpha name: Phaset Integration deployment: production script: - export API_KEY="${PHASET_API_KEY}" - export ORG_ID="${PHASET_ORG_ID}" - export RECORD_ID="${PHASET_RECORD_ID}" - export ENDPOINT="${PHASET_ENDPOINT}" - export RUN_RECORD="${RUN_RECORD:-true}" - export RUN_STANDARDS="${RUN_STANDARDS:-true}" - export RUN_DEPLOYMENT="${RUN_DEPLOYMENT:-true}" - curl -Lso phaset.sh https://raw.githubusercontent.com/phasetdev/phaset-action-alpha/main/phaset.sh - if [ "$RUN_RECORD" == "true" ]; then bash ./phaset.sh --org-id "${ORG_ID}" --record-id "${RECORD_ID}" --token "${API_KEY}" --endpoint "${ENDPOINT}" --action "record"; fi - if [ "$RUN_STANDARDS" == "true" ]; then bash ./phaset.sh --org-id "${ORG_ID}" --record-id "${RECORD_ID}" --token "${API_KEY}" --endpoint "${ENDPOINT}" --action "standards"; fi - if [ "$RUN_DEPLOYMENT" == "true" ]; then bash ./phaset.sh --org-id "${ORG_ID}" --record-id "${RECORD_ID}" --token "${API_KEY}" --endpoint "${ENDPOINT}" --action "deployment"; fiFeel free to put this in a Bitbucket Pipe to make reuse easier across many Records.
Start by defining the required variables in Azure DevOps as pipeline variables:
- Go to Azure DevOps >
Pipelines>Library>Variable Group. - Create a variable group (e.g., Phaset Variables) and add the following variables:
PHASET_API_KEY: Your Phaset API key.PHASET_ENDPOINT: Your Phaset endpoint URL (e.g., https://phaset.example.com/integration)PHASET_ORG_ID: (Optional) Your Organization ID. Will be inferred from theorganizationIdin the manifest file if not explicitly provided.PHASET_RECORD_ID: (Optional) The Record ID. Will be inferred from theidin the manifest file if not explicitly provided.
You can also optionally add:
RUN_RECORDandRUN_STANDARDS: These default to true.RUN_DEPLOYMENT: This defaults to false.
Link the variable group to your pipeline:
variables:- group: Phaset VariablesAn example implementation could look like this:
trigger:- main
pool: vmImage: 'ubuntu-latest'
variables:- group: Phaset Variables
stages:- stage: production jobs: - deployment: phaset displayName: "Phaset Integration" environment: production strategy: runOnce: deploy: steps: - checkout: self - script: | export RUN_RECORD=${RUN_RECORD:-true} export RUN_STANDARDS=${RUN_STANDARDS:-true} export RUN_DEPLOYMENT=${RUN_DEPLOYMENT:-false} curl -Lso phaset.sh https://raw.githubusercontent.com/phasetdev/phaset-action-alpha/main/phaset.sh if [ "$RUN_RECORD" == "true" ]; then bash ./phaset.sh --org-id "${PHASET_ORG_ID}" --record-id "${PHASET_RECORD_ID}" --token "${PHASET_API_KEY}" --endpoint "${PHASET_ENDPOINT}" --action "record"; fi if [ "$RUN_STANDARDS" == "true" ]; then bash ./phaset.sh --org-id "${PHASET_ORG_ID}" --record-id "${PHASET_RECORD_ID}" --token "${PHASET_API_KEY}" --endpoint "${PHASET_ENDPOINT}" --action "standards"; fi if [ "$RUN_DEPLOYMENT" == "true" ]; then bash ./phaset.sh --org-id "${PHASET_ORG_ID}" --record-id "${PHASET_RECORD_ID}" --token "${PHASET_API_KEY}" --endpoint "${PHASET_ENDPOINT}" --action "deployment"; fi displayName: "Phaset"You can update Records and Standards manually via the Integration API. Please refer to the linked documentation for instructions.
Metrics
Section titled “Metrics”Metrics provide insights about activity, performance, and various lead times for a Record. Assuming you set up the event integration, Phaset provides both DORA metrics and more general engineering metrics.
How to handle Metrics
Section titled “How to handle Metrics”If you use a supported Version Control System (VCS), such as GitHub, then sending events to Phaset is as simple as setting up a guides for several tools are provided below. These webhooks are then run automatically when relevant events occur.
Phaset also supports sending events via the Integration API, in effect supporting any situation, as long as you can produce the correct input and send it over an HTTP request.
Handling deployment metrics
Section titled “Handling deployment metrics”Deployments mark the moment that a successful deployment has been performed. “Successful” in this context means that everything up until that moment (e.g. compilation, tests…) has worked without issues and the code is now available in a production environment. The right moment to send this event is therefore at the very end of a workflow in which a deployment has been performed (assuming there are no events post-deployment).
Some VCS tools provide native support for deployment events:
- GitHub deployment webhook events
- GitLab deployment webhook events
- Azure DevOps release deployment service hook events
Wherever these events are supported, Phaset will use them. If you already use e.g. GitHub or GitLab deployments, then Phaset will track those. Note that Phaset, however, will not check the name of the environment or anything like that; it will just track the deployment event itself.
With any other VCS tools you will need to manually fire a deployment event when that happens. Please see the Integration API documentation for more details.
If you are already using the provided integration tools, then you can use them for this purpose. Here’s an example of using the Phaset GitHub Action to emit the deployment event:
on: [push]
jobs: phaset: runs-on: ubuntu-latest environment: production steps: - name: Checkout uses: actions/checkout@v5
# Do your magic here: build, test, deploy...
- name: Run Phaset action (alpha) uses: phasetdev/phaset-action@v0 with: endpoint: ${{ secrets.PHASET_ENDPOINT }} api-key: ${{ secrets.PHASET_API_KEY }} org-id: 'demoorg' # Optional record-id: 'demorecord' # Optional run-standards: 'false' # Don't do any of the other stuff run-record: 'false' # Don't do any of the other stuff run-deployment: 'true' # Fire the deployment event using the Integration APIIn the above example we are only firing the deployment event but none of the other ones.
Again, if you cannot use any of the provided tools, or if you want to have a shorter/terser solution, you can always send the event yourself using Phaset’s Integration API.
Handling incident metrics
Section titled “Handling incident metrics”There is no industry-standard way of handling, labeling, or acting on incidents. This means that Phaset may require certain new conventions on your end to ensure that Phaset can correctly track incidents. We’ve tried to make it very easy and generalized, though!
Incidents have one (then later: two) critical pieces of information:
- When they occured.
- When they were closed or “resolved” (eventually).
We identify the same incident by an appropriate, fixed and unique ID. This is handled easily when you are integrating from a VCS, since those already have issue IDs.
Here’s how, in practice, opening and closing incidents will look using your tools:
- Open incident: Create a GitHub Issue with the (custom)
incidentlabel. - Close incident: Close the Issue or unlabel
incidentlabel.
- Open incident: Create either an Issue with
Incidenttype or anIssuewith a (custom)incidentlabel. - Close incident: Close the Issue or unlabel
incidentlabel.
- Open incident: Create a Bitbucket Issue with a
buglabel. - Close incident: Close the Issue or unlabel the
buglabel.
- Open incident: Label an issue with an
incidentlabel. - Close incident: Pull the issue to
Doneor delete it.
- Open incident: Create a Jira Issue with an
incidentlabel and a label with the record ID, e.g.rAnDoM12. - Close incident: Close the Issue or unlabel the
incidentlabel and the record ID label.
- Open incident: Create a Linear Issue with an
incidentlabel or label one with it. - Close incident: Close the Issue, unlabel the
incidentlabel, or delete the issue.
If you can’t do this, or if your issue tracker is not supported, Phaset also supports receiving these events (sent manually by you) via the Integration API. The critical thing to remember is that you need to provide unique IDs for these incidents.
Support for Metrics
Section titled “Support for Metrics”Phaset supports several tools for integrating Metrics. We aim to accurately integrate all important events, but sometimes the design of the integrating tool makes this impossible or the event is simply not available.
You can combine tools, for example, if you use a separate issue tracked (such as Jira) and keep code and pull requests in GitHub. However, in that case you will need to ensure that the integrations don’t overlap in terms of events sent to Phaset, so as to create duplicate events.
In the spirit of transparency, we’ve outlined what events we are able to receive from a correct integration for each of the supported tools.
| Metric | Supported? |
|---|---|
| Pushed | ✅ |
| Deployed | ✅ |
| Commented on issue | ✅ |
| Commented on PR | ✅ |
| Issue opened | ✅ |
| Issue labeled (opened) | ✅ |
| Issue unlabeled (closed) | ✅ |
| Issue deleted (closed) | ✅ |
| Issue resolved (closed) | ✅ |
| PR opened | ✅ |
| PR approved | ✅ |
| PR changes requested | ✅ |
| PR merged (closed) | ✅ |
| PR deleted (closed) | ✅ |
| Merge Time* | ✅ |
| Review Time* | ✅ |
| Review Size* | ✅ |
* = Derived metric.
| Metric | Supported? |
|---|---|
| Pushed | ✅ |
| Deployed | ✅ |
| Commented on issue | ✅ |
| Commented on PR | ✅ |
| Issue opened | ✅ |
| Issue labeled (opened) | ✅ |
| Issue unlabeled (closed) | ✅ |
| Issue deleted (closed) | ✅ |
| Issue resolved (closed) | ✅ |
| PR opened | ✅ |
| PR approved | ✅ |
| PR changes requested | ❌ |
| PR merged (closed) | ✅ |
| PR deleted (closed) | ✅ |
| Merge Time* | ✅ |
| Review Time* | ✅ |
| Review Size* | ❌ |
* = Derived metric.
| Metric | Supported? |
|---|---|
| Pushed | ✅ |
| Deployed | ✅ |
| Commented on issue | ✅ |
| Commented on PR | ✅ |
| Issue opened | ✅ |
| Issue labeled (opened) | ✅ |
| Issue unlabeled (closed) | ✅ |
| Issue deleted (closed) | ❌ |
| Issue resolved (closed) | ✅ |
| PR opened | ✅ |
| PR approved | ❌ |
| PR changes requested | ❌ |
| PR merged (closed) | ✅ |
| PR deleted (closed) | ✅ |
| Merge Time* | ✅ |
| Review Time* | ✅ |
| Review Size* | ❌ |
* = Derived metric.
| Metric | Supported? |
|---|---|
| Pushed | ✅ |
| Deployed | ✅ |
| Commented on issue | ✅ |
| Commented on PR | ✅ |
| Issue opened | ✅ |
| Issue labeled (opened) | ✅ |
| Issue unlabeled (closed) | ✅** |
| Issue deleted (closed) | ✅ |
| Issue resolved (closed) | ✅ |
| PR opened | ✅ |
| PR approved | ✅ |
| PR changes requested | ❌ |
| PR merged (closed) | ✅ |
| PR deleted (closed) | ✅ |
| Merge Time* | ✅ |
| Review Time* | ❌ |
| Review Size* | ❌ |
* = Derived metric.
** = Depending on the webhook’s tag filtering, you may not get events for unlabeled (untagged) issues.
Jira is an issue tracking system and therefore lacks dedicated support, for example, for pull requests - this is to be expected.
| Metric | Supported? |
|---|---|
| Pushed | ❌ |
| Deployed | ❌ |
| Commented on issue | ✅ |
| Commented on PR | ❌ |
| Issue opened | ✅ |
| Issue labeled (opened) | ✅ |
| Issue unlabeled (closed) | ✅ |
| Issue deleted (closed) | ✅ |
| Issue resolved (closed) | ✅ |
| PR opened | ❌ |
| PR approved | ❌ |
| PR changes requested | ❌ |
| PR merged (closed) | ❌ |
| PR deleted (closed) | ❌ |
| Merge Time* | ❌ |
| Review Time* | ❌ |
| Review Size* | ❌ |
* = Derived metric.
Linear is an issue tracking system and therefore lacks dedicated support, for example, for pull requests - this is to be expected.
| Metric | Supported? |
|---|---|
| Pushed | ❌ |
| Deployed | ❌ |
| Commented on issue | ✅ |
| Commented on PR | ❌ |
| Issue opened | ✅ |
| Issue labeled (opened) | ✅ |
| Issue unlabeled (closed) | ✅ |
| Issue deleted (closed) | ✅ |
| Issue resolved (closed) | ✅ |
| PR opened | ❌ |
| PR approved | ❌ |
| PR changes requested | ❌ |
| PR merged (closed) | ❌ |
| PR deleted (closed) | ❌ |
| Merge Time* | ❌ |
| Review Time* | ❌ |
| Review Size* | ❌ |
* = Derived metric.
All events are supported when sending them manually. However, the complexity lies in doing this as the events happen.
| Metric | Supported? |
|---|---|
| Pushed | ✅ |
| Deployed | ✅ |
| Commented on issue | ✅ |
| Commented on PR | ✅ |
| Issue opened | ✅ |
| Issue labeled (opened) | ✅ |
| Issue unlabeled (closed) | ✅ |
| Issue deleted (closed) | ✅ |
| Issue resolved (closed) | ✅ |
| PR opened | ✅ |
| PR approved | ✅ |
| PR changes requested | ✅ |
| PR merged (closed) | ✅ |
| PR deleted (closed) | ✅ |
| Merge Time* | ✅ |
| Review Time* | ✅ |
| Review Size* | ✅ |
* = Derived metric.
Integrating Metrics
Section titled “Integrating Metrics”Read on for implementation guides for your tool, together with examples.
- Navigate to your repository and go to
Settings>Webhooksand create a new webhook. - Set
https://integration.phaset.systems/event/{YOUR_ORG_ID}/{YOUR_RECORD_ID}/{YOUR_TOKEN}as the URL, updating it with your values. - Set
application/jsonas the content type. - Leave the secret empty.
- SSL verification should be enabled.
- Click “Let me select individual events” and add the following events:
- Deployment statuses
- Issues
- Issue comments
- Pushes
- Pull requests
- Pull request reviews
- Pull request review comments
Please see this guide if you need more instructions.
If you want to automate this via their API, you can use:
curl -X POST \-H "Authorization: token {YOUR_PERSONAL_ACCESS_TOKEN}" \-H "Accept: application/vnd.github+json" \-H "X-GitHub-Api-Version: 2022-11-28" \https://api.github.com/repos/{OWNER}/{REPO}/hooks \-d '{ "name": "web", "config": { "url": "https://integration.phaset.systems/event/{YOUR_ORG_ID}/{YOUR_RECORD_ID}/{YOUR_TOKEN}", "content_type": "json", "insecure_ssl": "0" }, "events": [ "deployment_status", "issues", "issue_comment", "push", "pull_request", "pull_request_review", "pull_request_review_comment" ], "active": true}'GitLab also has its own DORA metrics feature, but please note that any results in Phaset may be different from what GitLab reports in that feature.
- Navigate to your repository and go to
Settings>Webhooksand add a new webhook. - Set
https://integration.phaset.systems/event/{YOUR_ORG_ID}/{YOUR_RECORD_ID}/{YOUR_TOKEN}as the URL, updating it with your values. - Use any name and description you like.
- Leave the secret empty.
- SSL verification should be enabled.
- Add the following events:
- Deployment events
- Issues events
- Merge request events
- Comments
- Push events
Please see this guide if you need more instructions.
If you want to automate this via their API, you can use:
curl -X POST \-H "Authorization: Bearer {YOUR_PERSONAL_ACCESS_TOKEN}" \-H "Content-Type: application/json" \https://gitlab.com/api/v4/projects/{PROJECT_ID}/hooks \-d '{ "url": "https://integration.phaset.systems/event/{YOUR_ORG_ID}/{YOUR_RECORD_ID}/{YOUR_TOKEN}", "push_events": true, "issues_events": true, "merge_requests_events": true, "note_events": true, "deployment_events": true, "enable_ssl_verification": true}'- Navigate to your repository and go to
Repository settings>Webhooksand add a new webhook. - Use any title you like.
- Set
https://integration.phaset.systems/event/{YOUR_ORG_ID}/{YOUR_RECORD_ID}/{YOUR_TOKEN}as the URL, updating it with your values. - Leave the secret empty.
- SSL verification should be enabled.
- Add the following events:
- Repository push
- Issue created
- Issue updated
- Issue comment created
- Pull request created
- Pull request updated
- Pull request approved
- Pull request changes request created
- Pull request changes request removed
- Pull request merged
- Pull request declined
- Pull request comment created
Please see this guide if you need more instructions.
If you want to do this via their API, you can use:
curl -X POST \-u "{USERNAME}:{APP_PASSWORD}" \-H "Content-Type: application/json" \https://api.bitbucket.org/2.0/repositories/{WORKSPACE}/{REPOSITORY_SLUG}/hooks \-d '{ "description": "Integration webhook for Phaset", "url": "https://integration.phaset.systems/event/{YOUR_ORG_ID}/{YOUR_RECORD_ID}/{YOUR_TOKEN}", "active": true, "events": [ "repo:push", "issue:created", "issue:updated", "issue:comment_created", "pullrequest:created", "pullrequest:updated", "pullrequest:approved", "pullrequest:unapproved", "pullrequest:changes_request_created", "pullrequest:changes_request_removed", "pullrequest:merged", "pullrequest:declined", "pullrequest:comment_created" ]}'Azure DevOps webhooks are supplied in a way that requires you to set up multiple webhooks. Follow these steps for each of the webhooks:
- Code pushed
- Pull request commented on
- Pull request created
- Pull request merge attemped
- Merge result: Merge Successful
- Release deployment completed
- Status: Succeeded
- Work item created
- Tag:
incident
- Tag:
- Work item deleted
- Tag:
incident
- Tag:
- Work item updated
- Tag:
incident
- Tag:
- Work item commented on
- Navigate to your project, then click
Project settingsin the bottom left >Service Hooks. - Click “Create subscription”.
- Select “Web Hook” and continue to the next section.
- Select the event type as per the above list.
- Set up filtering for your needs.
- Set
https://integration.phaset.systems/event/{YOUR_ORG_ID}/{YOUR_RECORD_ID}/{YOUR_TOKEN}as the URL, updating it with your values.
Please see this guide if you need more instructions.
Only incidents and issue commentscan be handled through Jira. Feel free to combine this capability with any other tooling you have to get a full-featured metrics support.
- Click the cogwheel icon in the upper right corner >
System, and then clickWebhooks(at the bottom). - Click “Create a webhook”.
- Use any name and description you like.
- Set
https://integration.phaset.systems/event/{YOUR_ORG_ID}/{YOUR_RECORD_ID}/{YOUR_TOKEN}as the URL, updating it with your values. - Leave the secret empty.
- SSL verification should be enabled.
- Under “Issue related events”, add the following events:
- Issue created
- Issue updated
- Issue deleted
- Comment created
Please see this guide if you need more instructions.
If you want to automate this via their API, you can use:
curl -X POST \-H "Content-Type: application/json" \https://{JIRA_INSTANCE}.atlassian.net/rest/webhooks/1.0/webhook \ -d '{ "name": "Integration webhook for Phaset", "url": "https://integration.phaset.systems/event/{YOUR_ORG_ID}/{YOUR_RECORD_ID}/{YOUR_TOKEN}", "events": [ "jira:issue_created", "jira:issue_updated", "jira:issue_deleted", "comment_created" ], "filters": { "issue-related-events-section": "labels = {YOUR_RECORD_ID} AND labels = incident" }, "excludeBody": false}'Only incidents and issue comments can be handled through Linear. Feel free to combine this capability with any other tooling you have to get a full-featured metrics support.
- Click your team/workspace name in the upper left corner >
Settings>API. - Click “Create new webhook”.
- Use any label you like.
- Set
https://integration.phaset.systems/event/{YOUR_ORG_ID}/{YOUR_RECORD_ID}/{YOUR_TOKEN}as the URL, updating it with your values. - The secret can be ignored.
- Receive events from all teams, unless Records somehow map to specific teams.
- Under “Issue related events”, add the following events:
- Issues
- Comments
Please see this guide if you need more instructions.
If you want to automate this via their API, you can use:
curl -X POST \-H "Content-Type: application/json" \-H "Authorization: {API_KEY}" \https://api.linear.app \ -d '{"query":"mutation {\n webhookCreate(\n input: {url: \"https://integration.phaset.systems/event/{YOUR_ORG_ID}/{YOUR_RECORD_ID}/{YOUR_TOKEN}\", allPublicTeams: true, resourceTypes: [\"Issue\", \"Comment\"]}\n ) {\n success\n webhook {\n id\n enabled\n }\n }\n}"}'You can create metrics manually via the Integration API. Please refer to the Integration API documentation for instructions.