.Platform: Update API Specs file #45
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: ".Platform: Update API Specs file" | |
on: | |
workflow_dispatch: | |
schedule: | |
- cron: "0 10 * * 1" # Weekly Monday Update | |
env: | |
pipelinePrincipalGitUserName: "AVMPipelinePrincipal" | |
pipelinePrincipalGitUserEmail: "AVM@noreply.github.com" | |
branch_name: "update-api-specs" | |
pr_title: "Update Azure API Specs List (automated)" | |
pr_body: | |
"This is an automated ``pull_request`` containing updates to the Azure API Specs List that is stored at ``docs/static/governance/apiSpecsList.json``.\nPlease review the ``files changed`` tab to review changes." | |
permissions: | |
id-token: write | |
contents: write | |
jobs: | |
job_update_api_specs_file: | |
name: "Update file" | |
if: github.ref == 'refs/heads/main' || github.ref == 'refs/heads/master' | |
runs-on: ubuntu-latest | |
environment: platform | |
steps: | |
- name: "Checkout" | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
# [Setup] task(s) | |
# --------------- | |
- name: "Setup agent" | |
shell: pwsh | |
run: | | |
# Load used functions | |
. (Join-Path $env:GITHUB_WORKSPACE 'utilities' 'pipelines' 'sharedScripts' 'Set-EnvironmentOnAgent.ps1') | |
# Define PS modules to install on the runner | |
$modules = @( | |
@{ Name = 'Az.Accounts' }, | |
@{ Name = 'Az.Resources' } | |
) | |
# Set agent up | |
Set-EnvironmentOnAgent -PSModules $modules | |
- uses: tibdex/github-app-token@v2 | |
id: generate-token | |
with: | |
app_id: ${{ secrets.APP_ID }} | |
private_key: ${{ secrets.APP_PRIVATE_KEY }} | |
- name: Configure local git | |
run: | | |
git config --global user.name '${{ env.pipelinePrincipalGitUserEmail }}' | |
git config --global user.email '${{ env.pipelinePrincipalGitUserName }}' | |
- name: Create and checkout branch | |
run: | | |
BRANCH_URL="repos/${{ github.repository }}/branches" | |
JQ_FILTER=".[] | select(.name == \"${{ env.branch_name }}\").name" | |
CHECK_BRANCH_ORIGIN=$(gh api $BRANCH_URL | jq -r "$JQ_FILTER") | |
if [ -z "$CHECK_BRANCH_ORIGIN" ] | |
then | |
echo "Checkout local branch (create new, no origin)..." | |
git checkout -b ${{ env.branch_name }} | |
else | |
echo "Checkout local branch (create new, track from origin)..." | |
git checkout -b ${{ env.branch_name }} --track origin/${{ env.branch_name }} | |
fi | |
env: | |
GITHUB_TOKEN: ${{ steps.generate-token.outputs.token }} | |
- name: Azure Login | |
id: login | |
uses: azure/login@v2 | |
with: | |
client-id: ${{ secrets.API_SPECS_OIDC_CLIENT_ID }} | |
tenant-id: ${{ secrets.API_SPECS_OIDC_TENANT_ID }} | |
enable-AzPSSession: true | |
allow-no-subscriptions: true | |
- name: "Update file" | |
shell: pwsh | |
run: | | |
# Load used functions | |
. (Join-Path $env:GITHUB_WORKSPACE 'utilities' 'tools' 'platform' 'Set-ApiSpecsFile.ps1') | |
$functionInput = @{ | |
SpecsFilePath = Join-Path $env:GITHUB_WORKSPACE 'docs' 'static' 'governance' 'apiSpecsList.json' | |
IncludePreview = $true | |
IncludeExternalSources = $true | |
} | |
Write-Verbose "Invoke task with" -Verbose | |
Write-Verbose ($functionInput | ConvertTo-Json | Out-String) -Verbose | |
Set-ApiSpecsFile @functionInput -Verbose | |
- name: Check for changes | |
id: git_status | |
run: | | |
mapfile -t "CHECK_GIT_STATUS" < <(git status -s) | |
printf "%s\n" "${CHECK_GIT_STATUS[@]}" | |
echo "changes=${#CHECK_GIT_STATUS[@]}" >> "$GITHUB_OUTPUT" | |
- name: Add files, commit and push | |
if: steps.git_status.outputs.changes > 0 | |
run: | | |
echo "Pushing changes to origin..." | |
git add docs/static/governance/apiSpecsList.json | |
git commit -m '${{ env.pr_title }}' | |
git push origin ${{ env.branch_name }} | |
env: | |
GITHUB_TOKEN: ${{ steps.generate-token.outputs.token }} | |
- name: Create pull request | |
if: steps.git_status.outputs.changes > 0 | |
run: | | |
HEAD_LABEL="${{ github.repository_owner }}:${{ env.branch_name }}" | |
BASE_LABEL="${{ github.repository_owner }}:$(echo '${{ github.ref }}' | sed 's:refs/heads/::')" | |
PULL_REQUEST_URL="repos/${{ github.repository }}/pulls" | |
JQ_FILTER=".[] | select(.head.label == \"$HEAD_LABEL\") | select(.base.label == \"$BASE_LABEL\") | .url" | |
CHECK_PULL_REQUEST_URL=$(gh api $PULL_REQUEST_URL | jq -r "$JQ_FILTER") | |
if [ -z "$CHECK_PULL_REQUEST_URL" ] | |
then | |
CHECK_PULL_REQUEST_URL=$(gh pr create \ | |
--title "${{ env.pr_title }}" \ | |
--body "${{ env.pr_body }}" \ | |
--base "${{ github.ref }}" \ | |
--head "${{ env.branch_name }}") | |
echo "Created new PR: $CHECK_PULL_REQUEST_URL" | |
else | |
echo "Existing PR found: $CHECK_PULL_REQUEST_URL" | |
fi | |
env: | |
GITHUB_TOKEN: ${{ steps.generate-token.outputs.token }} |