tools/github_workflows/run-extractor.yaml (159 lines of code) (raw):
name: Run - Extractor
on:
workflow_dispatch:
inputs:
CONFIGURATION_YAML_PATH:
description: 'Choose Wether to extract all Apis or extract apis listed an extraction configuration file'
required: true
type: choice
options:
- Extract All APIs
- configuration.extractor.yaml
API_SPECIFICATION_FORMAT:
description: 'API Specification Format'
required: true
type: choice
options:
- OpenAPIV3Yaml
- OpenAPIV3Json
- OpenAPIV2Yaml
- OpenAPIV2Json
env:
apiops_release_version: desired-version-goes-here
jobs:
extract:
runs-on: ubuntu-latest
environment: dev # change this to match the dev environment created in settings
steps:
- uses: actions/checkout@v4
- name: Run extractor without Config Yaml
if: ${{ github.event.inputs.CONFIGURATION_YAML_PATH == 'Extract All APIs' }}
env:
AZURE_CLIENT_ID: ${{ secrets.AZURE_CLIENT_ID }}
AZURE_CLIENT_SECRET: ${{ secrets.AZURE_CLIENT_SECRET }}
AZURE_TENANT_ID: ${{ secrets.AZURE_TENANT_ID }}
AZURE_SUBSCRIPTION_ID: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
AZURE_RESOURCE_GROUP_NAME: ${{ secrets.AZURE_RESOURCE_GROUP_NAME }}
API_MANAGEMENT_SERVICE_NAME: ${{ secrets.API_MANAGEMENT_SERVICE_NAME }}
API_MANAGEMENT_SERVICE_OUTPUT_FOLDER_PATH: ${{ GITHUB.WORKSPACE }}/apimartifacts # change this to the artifacts folder
API_SPECIFICATION_FORMAT: ${{ github.event.inputs.API_SPECIFICATION_FORMAT }}
run: |
Set-StrictMode -Version Latest
$ErrorActionPreference = "Stop"
$VerbosePreference = "Continue"
$InformationPreference = "Continue"
Write-Information "Setting name variables..."
$releaseFileName = "extractor-linux-x64.zip"
$executableFileName = "extractor"
if ("${{ runner.os }}" -like "*win*") {
$releaseFileName = "extractor-win-x64.zip"
$executableFileName = "extractor.exe"
}
elseif ("${{ runner.os }}" -like "*mac*" -and "${{ runner.arch }}" -like "*arm*") {
$releaseFileName = "extractor-osx-arm64.zip"
}
elseif ("${{ runner.os }}" -like "*mac*" -and "${{ runner.arch }}" -like "*x86_64*") {
$releaseFileName = "extractor-osx-x64.zip"
}
Write-Information "Downloading release..."
$uri = "https://github.com/Azure/apiops/releases/download/${{ env.apiops_release_version }}/$releaseFileName"
$downloadFilePath = Join-Path "${{ runner.temp }}" $releaseFileName
Invoke-WebRequest -Uri "$uri" -OutFile "$downloadFilePath"
Write-Information "Extracting release..."
$executableFolderPath = Join-Path "${{ runner.temp }}" "extractor"
Expand-Archive -Path "$downloadFilePath" -DestinationPath "$executableFolderPath"
$executableFilePath = Join-Path "$executableFolderPath" $executableFileName
Write-Information "Setting file permissions..."
if ("${{ runner.os }}" -like "*linux*")
{
& chmod +x "$executableFilePath"
if ($LASTEXITCODE -ne 0) { throw "Setting file permissions failed."}
}
Write-Information "Running extractor..."
& "$executableFilePath"
if ($LASTEXITCODE -ne 0) { throw "Running extractor failed."}
Write-Information "Execution complete."
shell: pwsh
- name: Run extractor with Config Yaml
if: ${{ github.event.inputs.CONFIGURATION_YAML_PATH != 'Extract All APIs' }}
env:
AZURE_CLIENT_ID: ${{ secrets.AZURE_CLIENT_ID }}
AZURE_CLIENT_SECRET: ${{ secrets.AZURE_CLIENT_SECRET }}
AZURE_TENANT_ID: ${{ secrets.AZURE_TENANT_ID }}
AZURE_SUBSCRIPTION_ID: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
AZURE_RESOURCE_GROUP_NAME: ${{ secrets.AZURE_RESOURCE_GROUP_NAME }}
API_MANAGEMENT_SERVICE_NAME: ${{ secrets.API_MANAGEMENT_SERVICE_NAME }}
API_MANAGEMENT_SERVICE_OUTPUT_FOLDER_PATH: ${{ GITHUB.WORKSPACE }}/apimartifacts # change this to the artifacts folder
API_SPECIFICATION_FORMAT: ${{ github.event.inputs.API_SPECIFICATION_FORMAT }}
CONFIGURATION_YAML_PATH: ${{ GITHUB.WORKSPACE }}/${{ github.event.inputs.CONFIGURATION_YAML_PATH }}
run: |
Set-StrictMode -Version Latest
$ErrorActionPreference = "Stop"
$VerbosePreference = "Continue"
$InformationPreference = "Continue"
Write-Information "Setting name variables..."
$releaseFileName = "extractor-linux-x64.zip"
$executableFileName = "extractor"
if ("${{ runner.os }}" -like "*win*") {
$releaseFileName = "extractor-win-x64.zip"
$executableFileName = "extractor.exe"
}
elseif ("${{ runner.os }}" -like "*mac*" -and "${{ runner.arch }}" -like "*arm*") {
$releaseFileName = "extractor-osx-arm64.zip"
}
elseif ("${{ runner.os }}" -like "*mac*" -and "${{ runner.arch }}" -like "*x86_64*") {
$releaseFileName = "extractor-osx-x64.zip"
}
Write-Information "Downloading release..."
$uri = "https://github.com/Azure/apiops/releases/download/${{ env.apiops_release_version }}/$releaseFileName"
$downloadFilePath = Join-Path "${{ runner.temp }}" $releaseFileName
Invoke-WebRequest -Uri "$uri" -OutFile "$downloadFilePath"
Write-Information "Extracting release..."
$executableFolderPath = Join-Path "${{ runner.temp }}" "extractor"
Expand-Archive -Path "$downloadFilePath" -DestinationPath "$executableFolderPath"
$executableFilePath = Join-Path "$executableFolderPath" $executableFileName
Write-Information "Setting file permissions..."
if ("${{ runner.os }}" -like "*linux*")
{
& chmod +x "$executableFilePath"
if ($LASTEXITCODE -ne 0) { throw "Setting file permissions failed."}
}
Write-Information "Running extractor..."
& "$executableFilePath"
if ($LASTEXITCODE -ne 0) { throw "Running extractor failed."}
Write-Information "Execution complete."
shell: pwsh
- name: publish artifact
uses: actions/upload-artifact@v4
env:
API_MANAGEMENT_SERVICE_OUTPUT_FOLDER_PATH: apimartifacts # change this to the artifacts folder
with:
name: artifacts-from-portal
path: ${{ GITHUB.WORKSPACE }}/${{ env.API_MANAGEMENT_SERVICE_OUTPUT_FOLDER_PATH }}
create-pull-request:
needs: extract
runs-on: [ubuntu-latest]
permissions:
contents: write
pull-requests: write
issues: write
steps:
- uses: actions/checkout@v4
- name: Download artifacts-from-portal
uses: actions/download-artifact@v4
env:
API_MANAGEMENT_SERVICE_OUTPUT_FOLDER_PATH: apimartifacts # change this to the artifacts folder
with:
name: artifacts-from-portal
path: "${{ GITHUB.WORKSPACE }}/${{ env.API_MANAGEMENT_SERVICE_OUTPUT_FOLDER_PATH }}"
- name: Create artifacts pull request
uses: peter-evans/create-pull-request@v6
env:
API_MANAGEMENT_SERVICE_OUTPUT_FOLDER_PATH: apimartifacts # change this to the artifacts folder
with:
token: ${{ secrets.GITHUB_TOKEN }}
commit-message: "updated extract from apim instance ${{ env.API_MANAGEMENT_SERVICE_OUTPUT_FOLDER_PATH }}"
title: "${{ env.API_MANAGEMENT_SERVICE_OUTPUT_FOLDER_PATH }} - extract"
body: >
This PR is auto-generated by Github actions workflow
labels: extract, automated pr