|
| 1 | +name: Check ARM VM Size Changes |
| 2 | + |
| 3 | +on: |
| 4 | + workflow_dispatch: |
| 5 | + schedule: |
| 6 | + - cron: '0 0 */14 * *' # Runs at midnight (00:00) UTC every 14 days (2 weeks) |
| 7 | + |
| 8 | +env: |
| 9 | + azureCredentials: ${{ secrets.AZURE_CREDENTIALS }} |
| 10 | + repoName: "weblogic-azure" |
| 11 | + userEmail: ${{ secrets.USER_EMAIL }} |
| 12 | + userName: ${{ secrets.USER_NAME }} |
| 13 | + GH_TOKEN: ${{ secrets.GIT_TOKEN }} |
| 14 | + |
| 15 | +jobs: |
| 16 | + check-vm-sizes: |
| 17 | + if: github.event_name == 'workflow_dispatch' || (github.event_name == 'schedule' && github.repository_owner == 'azure-javaee') |
| 18 | + runs-on: ubuntu-latest |
| 19 | + steps: |
| 20 | + - name: Checkout oracle/weblogic-azure:main |
| 21 | + uses: actions/checkout@v2 |
| 22 | + with: |
| 23 | + repository: oracle/${{ env.repoName }} |
| 24 | + ref: main |
| 25 | + path: ${{ env.repoName }} |
| 26 | + |
| 27 | + - uses: azure/login@v1 |
| 28 | + id: azure-login |
| 29 | + with: |
| 30 | + creds: ${{ env.azureCredentials }} |
| 31 | + |
| 32 | + - name: Check for VM size changes |
| 33 | + id: check_vm_sizes |
| 34 | + run: | |
| 35 | + ls -l ${{ env.repoName }} |
| 36 | + # Path to the properties file |
| 37 | + property_file="${{ env.repoName }}/resources/azure-common.properties" |
| 38 | +
|
| 39 | + # Check if the properties file exists |
| 40 | + if [ ! -f "$property_file" ]; then |
| 41 | + echo "Properties file '$property_file' not found." |
| 42 | + exit 1 |
| 43 | + fi |
| 44 | +
|
| 45 | + if ! grep -q '^azure\.armBased\.vmSize\.list=' "$property_file"; then |
| 46 | + echo "Line 'azure.armBased.vmSize.list' not found in $property_file." |
| 47 | + echo "vm_sizes_changed=false" >> "$GITHUB_OUTPUT" |
| 48 | + exit 0 |
| 49 | + fi |
| 50 | +
|
| 51 | + # Using grep to find the line containing azure.armBased.vmSize.list |
| 52 | + vm_size_variable=$(grep '^azure\.armBased\.vmSize\.list=' "$property_file") |
| 53 | + vm_size_list=${vm_size_variable#*=} |
| 54 | +
|
| 55 | + # Print the extracted value |
| 56 | + echo "$vm_size_list" |
| 57 | +
|
| 58 | + latest_locations=$(az account list-locations --query '[].name' -o tsv) |
| 59 | +
|
| 60 | + new_sizes="" |
| 61 | + for location in $latest_locations; do |
| 62 | + latest_sizes=$(az vm list-sizes --location $location | jq '.[] | select(.name | contains("p")) | .name' | tr -d "\"") |
| 63 | + for size in $latest_sizes; do |
| 64 | + # if new_sizes does not contain size |
| 65 | + if [[ $(echo "[$new_sizes]" | jq '. | index("'${size}'")') == null ]]; then |
| 66 | + echo "Add size: ${size}" |
| 67 | + if [ -z "$new_sizes" ]; then |
| 68 | + new_sizes="\"$size\"" |
| 69 | + else |
| 70 | + new_sizes="$new_sizes,\"$size\"" |
| 71 | + fi |
| 72 | + fi |
| 73 | + done |
| 74 | + done |
| 75 | +
|
| 76 | + if [ ${#new_sizes} -ne ${#vm_size_list} ]; then |
| 77 | + echo "VM sizes changed" |
| 78 | + echo "vm_sizes_changed=true" >> "$GITHUB_OUTPUT" |
| 79 | + else |
| 80 | + echo "vm_sizes_changed=false" >> "$GITHUB_OUTPUT" |
| 81 | + fi |
| 82 | +
|
| 83 | + echo "Current sizes : $new_sizes" |
| 84 | + echo "latest_sizes=\"${new_sizes}\"" >> "$GITHUB_OUTPUT" |
| 85 | +
|
| 86 | + - name: Create PR if changes detected |
| 87 | + if: steps.check_vm_sizes.outputs.vm_sizes_changed == 'true' |
| 88 | + run: | |
| 89 | + # Logic to create a pull request to update the ARM VM sizes configuration file |
| 90 | + # Example: Use GitHub CLI or git commands to create a branch and push changes |
| 91 | + cd ${{ env.repoName }} |
| 92 | + branchName="update-vm-sizes-$(date +%s)" |
| 93 | + git config --global user.email "${userEmail}" |
| 94 | + git config --global user.name "${userName}" |
| 95 | +
|
| 96 | + git checkout -b ${branchName} |
| 97 | + # Use sed to delete the line starting with azure.armBased.vmSize.list= |
| 98 | + property_file="resources/azure-common.properties" |
| 99 | + sed -i '/^azure\.armBased\.vmSize\.list=/d' "$property_file" |
| 100 | + latest_sizes=$(echo ${{ steps.check_vm_sizes.outputs.latest_sizes }} | sed 's/,/","/g') |
| 101 | + echo "azure.armBased.vmSize.list=\"$latest_sizes\"" >> "$property_file" |
| 102 | +
|
| 103 | + git add $property_file |
| 104 | + git commit -m "Update ARM VM sizes" |
| 105 | + git push origin ${branchName} |
| 106 | +
|
| 107 | + # Create a pull request |
| 108 | + gh pr create --title "Update ARM VM sizes" \ |
| 109 | + --body "Automatic update of ARM VM sizes based on latest changes" \ |
| 110 | + --reviewer edburns,galiacheng \ |
| 111 | + --base main \ |
| 112 | + --head ${branchName} |
0 commit comments