Skip to content

Commit 3238990

Browse files
GHA-193 Update for sonar-java: use latest rule-api and add post-update step (#100)
1 parent 1fff2e6 commit 3238990

File tree

2 files changed

+49
-9
lines changed

2 files changed

+49
-9
lines changed

.github/workflows/test-update-rule-metadata.yml

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -178,7 +178,11 @@ jobs:
178178
echo "Testing that vault secrets include GitHub token..."
179179
180180
# Test that the vault step retrieves a GitHub token for private rspec repo access
181-
if grep -A10 "Get vault secrets" update-rule-metadata/action.yml | grep -q "development/github/token/{REPO_OWNER_NAME_DASH}-rspec-read"; then
181+
# The string is build gradually to escaple GitHub string interpolation.
182+
TOKEN='${'
183+
TOKEN+="{ inputs.rspec-token-suffix || 'rspec-read' }"
184+
TOKEN+='}'
185+
if grep -A10 "Get vault secrets" update-rule-metadata/action.yml | grep -q "development/github/token/{REPO_OWNER_NAME_DASH}-${TOKEN}"; then
182186
echo "✓ GitHub token vault secret path found"
183187
else
184188
echo "✗ GitHub token vault secret path not found in vault step"

update-rule-metadata/action.yml

Lines changed: 44 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,10 @@ description: |
55
66
inputs:
77
rule-api-version:
8-
description: Version of the rule-api tooling to be used for the workflow.
8+
description: |
9+
Version of the rule-api tooling to be used for the workflow.
10+
Leave empty to use the latest.
11+
required: false
912
sonarpedia-files:
1013
description: |
1114
Comma-separated list of sonarpedia files to be updated.
@@ -19,6 +22,15 @@ inputs:
1922
Branch of the rspec repository to be used.
2023
If not specified, the 'master' branch of the rspec repository will be used.
2124
default: master
25+
labels:
26+
description: 'Labels to add to the PR'
27+
default: skip-qa
28+
post-update:
29+
description: 'Additional commands to run after rule-api.jar update'
30+
required: false
31+
rspec-token-suffix:
32+
description: 'Suffix for the RSpec token if different from "rspec-read".'
33+
required: false
2234

2335
outputs:
2436
has-changes:
@@ -44,26 +56,43 @@ runs:
4456
secrets: |
4557
development/artifactory/token/{REPO_OWNER_NAME_DASH}-private-reader access_token | ARTIFACTORY_ACCESS_TOKEN;
4658
development/artifactory/token/{REPO_OWNER_NAME_DASH}-private-reader role | ARTIFACTORY_ROLE;
47-
development/github/token/{REPO_OWNER_NAME_DASH}-rspec-read token | GITHUB_TOKEN;
59+
development/github/token/{REPO_OWNER_NAME_DASH}-${{ inputs.rspec-token-suffix || 'rspec-read' }} token | GITHUB_TOKEN;
4860
4961
- name: Cache rule-api jar
5062
id: cache-rule-api
63+
if: ${{ inputs.rule-api-version != '' }}
5164
uses: actions/cache@v4
5265
with:
5366
path: rule-api.jar
54-
key: rule-api-${{ inputs.rule-api-version || '2.18.0.5734' }}
67+
key: rule-api-${{ inputs.rule-api-version }}
68+
69+
- name: Setup JFrog
70+
if: ${{ inputs.rule-api-version == '' }}
71+
uses: SonarSource/jfrog-setup-wrapper@v3
72+
with:
73+
artifactoryRoleSuffix: private-reader
5574

5675
- name: Download rule-api jar
76+
id: download
5777
if: ${{ steps.cache-rule-api.outputs.cache-hit != 'true' }}
5878
env:
5979
REPOX_USER: vault-${{ fromJSON(steps.secrets.outputs.vault).ARTIFACTORY_ROLE }}
6080
REPOX_PASS: ${{ fromJSON(steps.secrets.outputs.vault).ARTIFACTORY_ACCESS_TOKEN }}
61-
RULE_API_VERSION: ${{ inputs.rule-api-version || '2.18.0.5734' }}
81+
RULE_API_VERSION: ${{ inputs.rule-api-version }}
6282
shell: bash
6383
run: |
64-
echo "Downloading rule-api.jar version '$RULE_API_VERSION' from Artifactory"
65-
curl -u $REPOX_USER:$REPOX_PASS -o rule-api.jar "https://repox.jfrog.io/artifactory/sonarsource-private-releases/com/sonarsource/rule-api/rule-api/$RULE_API_VERSION/rule-api-$RULE_API_VERSION.jar"
66-
echo "Downloaded rule-api.jar ($(ls -lh rule-api.jar | awk '{print $5}'))"
84+
if [[ -n "$RULE_API_VERSION" ]]; then
85+
echo "Downloading rule-api.jar version '$RULE_API_VERSION' from Artifactory"
86+
curl -u $REPOX_USER:$REPOX_PASS -o rule-api.jar "https://repox.jfrog.io/artifactory/sonarsource-private-releases/com/sonarsource/rule-api/rule-api/$RULE_API_VERSION/rule-api-$RULE_API_VERSION.jar"
87+
echo "Downloaded rule-api.jar ($(ls -lh rule-api.jar | awk '{print $5}'))"
88+
echo "rule-api-version=$RULE_API_VERSION" >> $GITHUB_OUTPUT
89+
else
90+
echo "Downloading the latest rule-api release."
91+
jfrog rt curl -sLf "sonarsource-private-releases/com/sonarsource/rule-api/rule-api/%5BRELEASE%5D/rule-api-%5BRELEASE%5D.jar" -o rule-api.jar
92+
jar xf rule-api.jar META-INF/MANIFEST.MF
93+
grep 'Implementation-Version' META-INF/MANIFEST.MF | sed 's/Implementation-Version: /rule-api-version=/' >> $GITHUB_OUTPUT
94+
rm -rf META-INF
95+
fi
6796
6897
- name: Install Java to run rule-api
6998
uses: actions/setup-java@v4
@@ -157,6 +186,11 @@ runs:
157186
fi
158187
done <<< "$sonarpedia_dirs"
159188
189+
- name: Run Post Update Script
190+
if: ${{ inputs.post-update }}
191+
shell: bash
192+
run: ${{ inputs.post-update }}
193+
160194
- name: Remove rule-api jar
161195
shell: bash
162196
run: |
@@ -192,6 +226,8 @@ runs:
192226
echo "| **Total** | **${total_rules}** |" >> "$summary_file"
193227
fi
194228
229+
echo -e "\nRule API Version: ${{ steps.download.outputs.rule-api-version }}" >> "$summary_file"
230+
195231
# Write summary to output using delimiter to preserve newlines
196232
if [[ "$has_entries" == "false" ]]; then
197233
echo "summary=Update rule metadata" >> $GITHUB_OUTPUT
@@ -242,4 +278,4 @@ runs:
242278
base: ${{ inputs.branch }}
243279
branch: bot/update-rule-metadata
244280
branch-suffix: timestamp
245-
labels: skip-qa
281+
labels: ${{ inputs.labels }}

0 commit comments

Comments
 (0)