-
Notifications
You must be signed in to change notification settings - Fork 95
139 lines (121 loc) · 5.02 KB
/
platform.apiSpecs.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
name: ".Platform: Update API Specs file"
on:
workflow_dispatch:
schedule:
- cron: "0 10 * * 1" # Weekly Monday Update
env:
pipelinePrincipalGitUserName: "AVMPipelinePrincipal"
pipelinePrincipalGitUserEmail: "[email protected]"
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-20.04
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@v1
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 }}