mirror of
https://github.com/SonarSource/sonarqube-scan-action.git
synced 2025-12-12 09:21:16 +00:00
621 lines
No EOL
24 KiB
YAML
621 lines
No EOL
24 KiB
YAML
name: QA Main action
|
|
|
|
on:
|
|
push:
|
|
branches:
|
|
- master
|
|
pull_request:
|
|
types: [opened, synchronize, reopened]
|
|
|
|
jobs:
|
|
noInputsTest:
|
|
name: >
|
|
No inputs
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
with:
|
|
token: ${{ secrets.GITHUB_TOKEN }}
|
|
- name: Run action with args
|
|
uses: ./
|
|
env:
|
|
SONAR_HOST_URL: http://not_actually_used
|
|
SONAR_SCANNER_JSON_PARAMS: '{"sonar.scanner.internal.dumpToFile": "./output.properties"}'
|
|
- name: Assert
|
|
run: |
|
|
./test/assertFileContains ./output.properties "sonar.projectBaseDir=."
|
|
argsInputTest:
|
|
name: >
|
|
'args' input
|
|
strategy:
|
|
matrix:
|
|
os: [ ubuntu-latest, windows-latest, macos-latest ]
|
|
runs-on: ${{ matrix.os }}
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
with:
|
|
token: ${{ secrets.GITHUB_TOKEN }}
|
|
- name: Run action with args
|
|
uses: ./
|
|
with:
|
|
args: -Dsonar.someArg=aValue -Dsonar.scanner.internal.dumpToFile=./output.properties
|
|
env:
|
|
SONAR_HOST_URL: http://not_actually_used
|
|
SONAR_SCANNER_JSON_PARAMS: '{"sonar.scanner.internal.dumpToFile": "./output.properties"}'
|
|
- name: Assert
|
|
run: |
|
|
./test/assertFileContains ./output.properties "sonar.someArg=aValue"
|
|
projectBaseDirInputTest:
|
|
name: >
|
|
'projectBaseDir' input
|
|
strategy:
|
|
matrix:
|
|
os: [ ubuntu-latest, windows-latest, macos-latest ]
|
|
runs-on: ${{ matrix.os }}
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
with:
|
|
token: ${{ secrets.GITHUB_TOKEN }}
|
|
- run: mkdir -p ./baseDir
|
|
- name: Run action with projectBaseDir
|
|
uses: ./
|
|
with:
|
|
args: -Dsonar.scanner.internal.dumpToFile=./output.properties
|
|
projectBaseDir: ./baseDir
|
|
env:
|
|
SONAR_HOST_URL: http://not_actually_used
|
|
SONAR_SCANNER_JSON_PARAMS: '{"sonar.scanner.internal.dumpToFile": "./output.properties"}'
|
|
- name: Assert
|
|
run: |
|
|
./test/assertFileContains ./output.properties "sonar.projectBaseDir=.*/baseDir"
|
|
scannerVersionTest:
|
|
name: >
|
|
'scannerVersion' input
|
|
runs-on: ubuntu-latest # assumes default RUNNER_ARCH for linux is X64
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
with:
|
|
token: ${{ secrets.GITHUB_TOKEN }}
|
|
- name: Run action with scannerVersion
|
|
uses: ./
|
|
with:
|
|
scannerVersion: 6.1.0.4477
|
|
args: -Dsonar.scanner.internal.dumpToFile=./output.properties
|
|
env:
|
|
NO_CACHE: true # force install-sonar-scanner-cli.sh execution
|
|
SONAR_HOST_URL: http://not_actually_used
|
|
SONAR_SCANNER_JSON_PARAMS: '{"sonar.scanner.internal.dumpToFile": "./output.properties"}'
|
|
- name: Assert
|
|
run: |
|
|
./test/assertFileExists "$RUNNER_TEMP/sonarscanner/sonar-scanner-cli-6.1.0.4477-linux-x64.zip"
|
|
scannerBinariesUrlTest:
|
|
name: >
|
|
'scannerBinariesUrl' input with invalid URL
|
|
runs-on: ubuntu-latest # assumes default RUNNER_ARCH for linux is X64
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
with:
|
|
token: ${{ secrets.GITHUB_TOKEN }}
|
|
- name: Run action with scannerBinariesUrl
|
|
id: runTest
|
|
uses: ./
|
|
continue-on-error: true
|
|
with:
|
|
scannerVersion: 6.2.1.4610
|
|
scannerBinariesUrl: https://invalid_uri/Distribution/sonar-scanner-cli
|
|
env:
|
|
NO_CACHE: true # force install-sonar-scanner-cli.sh execution
|
|
SONAR_HOST_URL: http://not_actually_used
|
|
SONAR_SCANNER_JSON_PARAMS: '{"sonar.scanner.internal.dumpToFile": "./output.properties"}'
|
|
- name: Fail if action succeeded
|
|
if: steps.runTest.outcome == 'success'
|
|
run: exit 1
|
|
- name: Assert Sonar Scanner CLI was not downloaded
|
|
run: |
|
|
./test/assertFileDoesntExist "$RUNNER_TEMP/sonarscanner/sonar-scanner-cli-6.2.1.4610-linux-x64.zip"
|
|
- name: Assert Sonar Scanner CLI was not executed
|
|
run: |
|
|
./test/assertFileDoesntExist ./output.properties
|
|
scannerBinariesUrlIsEscapedWithWget:
|
|
name: >
|
|
'scannerBinariesUrl' is escaped with wget so special chars are not injected in the download command
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
with:
|
|
token: ${{ secrets.GITHUB_TOKEN }}
|
|
- name: Run action with scannerBinariesUrl
|
|
id: runTest
|
|
uses: ./
|
|
continue-on-error: true
|
|
with:
|
|
scannerBinariesUrl: 'http://some_uri;touch file.txt;'
|
|
env:
|
|
NO_CACHE: true
|
|
SONAR_HOST_URL: http://not_actually_used
|
|
SONAR_SCANNER_JSON_PARAMS: '{"sonar.scanner.internal.dumpToFile": "./output1.properties"}'
|
|
- name: Assert file.txt does not exist
|
|
run: |
|
|
./test/assertFileDoesntExist "$RUNNER_TEMP/sonarscanner/file.txt"
|
|
scannerBinariesUrlIsEscapedWithCurl:
|
|
name: >
|
|
'scannerBinariesUrl' is escaped with curl so special chars are not injected in the download command
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
with:
|
|
token: ${{ secrets.GITHUB_TOKEN }}
|
|
- name: Remove wget
|
|
run: sudo apt-get remove -y wget
|
|
- name: Assert wget is not available
|
|
run: |
|
|
if command -v wget 2>&1 >/dev/null
|
|
then
|
|
exit 1
|
|
fi
|
|
- name: Run action with scannerBinariesUrl
|
|
id: runTest
|
|
uses: ./
|
|
continue-on-error: true
|
|
with:
|
|
scannerBinariesUrl: 'http://some_uri http://another_uri''; touch file.txt;'
|
|
env:
|
|
NO_CACHE: true
|
|
SONAR_HOST_URL: http://not_actually_used
|
|
SONAR_SCANNER_JSON_PARAMS: '{"sonar.scanner.internal.dumpToFile": "./output1.properties"}'
|
|
- name: Assert file.txt does not exist
|
|
run: |
|
|
./test/assertFileDoesntExist "$RUNNER_TEMP/sonarscanner/file.txt"
|
|
dontFailGradleTest:
|
|
name: >
|
|
Don't fail on Gradle project
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
with:
|
|
token: ${{ secrets.GITHUB_TOKEN }}
|
|
- name: Run action on Gradle project
|
|
id: runTest
|
|
uses: ./
|
|
continue-on-error: true
|
|
env:
|
|
SONAR_HOST_URL: http://not_actually_used
|
|
SONAR_SCANNER_JSON_PARAMS: '{"sonar.scanner.internal.dumpToFile": "./output.properties"}'
|
|
with:
|
|
projectBaseDir: ./test/gradle-project
|
|
args: -Dsonar.scanner.internal.dumpToFile=./output.properties
|
|
- name: Assert
|
|
run: |
|
|
./test/assertFileExists ./output.properties
|
|
dontFailGradleKotlinTest:
|
|
name: >
|
|
Don't fail on Kotlin Gradle project
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
with:
|
|
token: ${{ secrets.GITHUB_TOKEN }}
|
|
- name: Run action on Kotlin Gradle project
|
|
id: runTest
|
|
uses: ./
|
|
continue-on-error: true
|
|
env:
|
|
SONAR_HOST_URL: http://not_actually_used
|
|
SONAR_SCANNER_JSON_PARAMS: '{"sonar.scanner.internal.dumpToFile": "./output.properties"}'
|
|
with:
|
|
projectBaseDir: ./test/gradle-project
|
|
args: -Dsonar.scanner.internal.dumpToFile=./output.properties
|
|
- name: Assert
|
|
run: |
|
|
./test/assertFileExists ./output.properties
|
|
dontFailMavenTest:
|
|
name: >
|
|
Don't fail on Maven project
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
with:
|
|
token: ${{ secrets.GITHUB_TOKEN }}
|
|
- name: Run action on Maven project
|
|
id: runTest
|
|
uses: ./
|
|
continue-on-error: true
|
|
env:
|
|
SONAR_HOST_URL: http://not_actually_used
|
|
SONAR_SCANNER_JSON_PARAMS: '{"sonar.scanner.internal.dumpToFile": "./output.properties"}'
|
|
with:
|
|
projectBaseDir: ./test/maven-project
|
|
args: -Dsonar.scanner.internal.dumpToFile=./output.properties
|
|
- name: Assert
|
|
run: |
|
|
./test/assertFileExists ./output.properties
|
|
runAnalysisTest:
|
|
runs-on: ubuntu-latest
|
|
services:
|
|
sonarqube:
|
|
image: sonarqube:lts-community
|
|
ports:
|
|
- 9000:9000
|
|
volumes:
|
|
- sonarqube_data:/opt/sonarqube/data
|
|
- sonarqube_logs:/opt/sonarqube/logs
|
|
- sonarqube_extensions:/opt/sonarqube/extensions
|
|
options: >-
|
|
--health-cmd "grep -Fq \"SonarQube is operational\" /opt/sonarqube/logs/sonar.log"
|
|
--health-interval 10s
|
|
--health-timeout 5s
|
|
--health-retries 10
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
with:
|
|
token: ${{ secrets.GITHUB_TOKEN }}
|
|
- name: Run action on sample project
|
|
id: runTest
|
|
uses: ./
|
|
env:
|
|
SONAR_HOST_URL: http://localhost:9000
|
|
with:
|
|
args: -Dsonar.login=admin -Dsonar.password=admin
|
|
projectBaseDir: ./test/example-project
|
|
- name: Assert
|
|
run: |
|
|
./test/assertFileExists ./test/example-project/.scannerwork/report-task.txt
|
|
runnerDebugUsedTest:
|
|
name: >
|
|
'RUNNER_DEBUG' is used
|
|
strategy:
|
|
matrix:
|
|
os: [ ubuntu-latest, windows-latest, macos-latest ]
|
|
runs-on: ${{ matrix.os }}
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
with:
|
|
token: ${{ secrets.GITHUB_TOKEN }}
|
|
- name: Run action with debug mode
|
|
uses: ./
|
|
with:
|
|
args: -Dsonar.scanner.internal.dumpToFile=./output.properties
|
|
env:
|
|
RUNNER_DEBUG: 1
|
|
SONAR_HOST_URL: http://not_actually_used
|
|
SONAR_SCANNER_JSON_PARAMS: '{"sonar.scanner.internal.dumpToFile": "./output.properties"}'
|
|
- name: Assert
|
|
run: |
|
|
./test/assertFileContains ./output.properties "sonar.verbose=true"
|
|
runAnalysisWithCacheTest:
|
|
runs-on: ubuntu-latest
|
|
services:
|
|
sonarqube:
|
|
image: sonarqube:lts-community
|
|
ports:
|
|
- 9000:9000
|
|
volumes:
|
|
- sonarqube_data:/opt/sonarqube/data
|
|
- sonarqube_logs:/opt/sonarqube/logs
|
|
- sonarqube_extensions:/opt/sonarqube/extensions
|
|
options: >-
|
|
--health-cmd "grep -Fq \"SonarQube is operational\" /opt/sonarqube/logs/sonar.log"
|
|
--health-interval 10s
|
|
--health-timeout 5s
|
|
--health-retries 10
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
with:
|
|
token: ${{ secrets.GITHUB_TOKEN }}
|
|
- name: SonarQube Cache
|
|
uses: actions/cache@v4
|
|
with:
|
|
path: ${{ github.workspace }}/.sonar/cache
|
|
key: ${{ runner.os }}-${{ runner.arch }}-sonar
|
|
- name: Run action on sample project
|
|
id: runTest
|
|
uses: ./
|
|
env:
|
|
SONAR_HOST_URL: http://localhost:9000
|
|
SONAR_USER_HOME: ${{ github.workspace }}/.sonar
|
|
with:
|
|
args: -Dsonar.login=admin -Dsonar.password=admin
|
|
projectBaseDir: ./test/example-project
|
|
- name: Assert
|
|
run: |
|
|
./test/assertFileExists ./test/example-project/.scannerwork/report-task.txt
|
|
overrideSonarcloudUrlTest:
|
|
name: >
|
|
'SONARCLOUD_URL' is used
|
|
strategy:
|
|
matrix:
|
|
os: [ ubuntu-latest, windows-latest, macos-latest ]
|
|
runs-on: ${{ matrix.os }}
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
with:
|
|
token: ${{ secrets.GITHUB_TOKEN }}
|
|
- name: Run action with SONARCLOUD_URL
|
|
uses: ./
|
|
with:
|
|
args: -Dsonar.scanner.internal.dumpToFile=./output.properties
|
|
env:
|
|
SONARCLOUD_URL: mirror.sonarcloud.io
|
|
SONAR_TOKEN: FAKE_TOKEN
|
|
- name: Assert
|
|
run: |
|
|
./test/assertFileContains ./output.properties "sonar.host.url=mirror.sonarcloud.io"
|
|
./test/assertFileContains ./output.properties "sonar.scanner.sonarcloudUrl=mirror.sonarcloud.io"
|
|
dontFailWhenMissingWgetButCurlAvailable:
|
|
name: Don't fail when missing wget but curl available
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
with:
|
|
token: ${{ secrets.GITHUB_TOKEN }}
|
|
- name: Remove wget
|
|
run: sudo apt-get remove -y wget
|
|
- name: Assert wget is not available
|
|
run: |
|
|
if command -v wget 2>&1 >/dev/null
|
|
then
|
|
exit 1
|
|
fi
|
|
- name: Run action
|
|
uses: ./
|
|
env:
|
|
NO_CACHE: true
|
|
SONAR_HOST_URL: http://not_actually_used
|
|
SONAR_SCANNER_JSON_PARAMS: '{"sonar.scanner.internal.dumpToFile": "./output.properties"}'
|
|
with:
|
|
args: -Dsonar.scanner.internal.dumpToFile=./output.properties
|
|
- name: Assert
|
|
run: |
|
|
./test/assertFileExists ./output.properties
|
|
dontFailWhenMissingCurlButWgetAvailable:
|
|
name: Don't fail when missing curl but wget available
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
with:
|
|
token: ${{ secrets.GITHUB_TOKEN }}
|
|
- name: Remove curl
|
|
run: sudo apt-get remove -y curl
|
|
- name: Assert curl is not available
|
|
run: |
|
|
if command -v curl 2>&1 >/dev/null
|
|
then
|
|
exit 1
|
|
fi
|
|
- name: Run action
|
|
id: runTest
|
|
uses: ./
|
|
env:
|
|
NO_CACHE: true
|
|
SONAR_HOST_URL: http://not_actually_used
|
|
SONAR_SCANNER_JSON_PARAMS: '{"sonar.scanner.internal.dumpToFile": "./output.properties"}'
|
|
with:
|
|
args: -Dsonar.scanner.internal.dumpToFile=./output.properties
|
|
- name: Assert
|
|
run: |
|
|
./test/assertFileExists ./output.properties
|
|
failWhenBothWgetAndCurlMissing:
|
|
name: Fail when both wget and curl are missing
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
with:
|
|
token: ${{ secrets.GITHUB_TOKEN }}
|
|
- name: Remove wget and curl
|
|
run: sudo apt-get remove -y wget curl
|
|
- name: Assert wget and curl are not available
|
|
run: |
|
|
if command -v wget 2>&1 >/dev/null
|
|
then
|
|
exit 1
|
|
fi
|
|
if command -v curl 2>&1 >/dev/null
|
|
then
|
|
exit 1
|
|
fi
|
|
- name: Run action
|
|
id: runTest
|
|
uses: ./
|
|
continue-on-error: true
|
|
env:
|
|
NO_CACHE: true
|
|
SONAR_HOST_URL: http://not_actually_used
|
|
SONAR_SCANNER_JSON_PARAMS: '{"sonar.scanner.internal.dumpToFile": "./output.properties"}'
|
|
with:
|
|
args: -Dsonar.scanner.internal.dumpToFile=./output.properties
|
|
- name: Assert failure of previous step
|
|
if: steps.runTest.outcome == 'success'
|
|
run: exit 1
|
|
curlPerformsRedirect:
|
|
name: >
|
|
curl performs redirect when scannerBinariesUrl returns 3xx
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
with:
|
|
token: ${{ secrets.GITHUB_TOKEN }}
|
|
- name: Remove wget
|
|
run: sudo apt-get remove -y wget
|
|
- name: Assert wget is not available
|
|
run: |
|
|
if command -v wget 2>&1 >/dev/null
|
|
then
|
|
exit 1
|
|
fi
|
|
- name: Start nginx via Docker Compose
|
|
run: docker compose up -d --wait
|
|
working-directory: .github/qa-nginx-redirecting
|
|
- name: Run action with scannerBinariesUrl
|
|
id: runTest
|
|
uses: ./
|
|
with:
|
|
scannerBinariesUrl: http://localhost:8080/clientRedirectToSonarBinaries
|
|
env:
|
|
NO_CACHE: true
|
|
SONAR_HOST_URL: http://not_actually_used
|
|
SONAR_SCANNER_JSON_PARAMS: '{"sonar.scanner.internal.dumpToFile": "./output1.properties"}'
|
|
- name: Assert Sonar Scanner CLI was downloaded
|
|
run: |
|
|
./test/assertFileExists "$RUNNER_TEMP/sonarscanner/sonar-scanner-cli-6.2.1.4610-linux-x64.zip"
|
|
useSslCertificate:
|
|
name: >
|
|
'SONAR_ROOT_CERT' is converted to truststore
|
|
strategy:
|
|
matrix:
|
|
os: [ ubuntu-latest, windows-latest, macos-latest ]
|
|
runs-on: ${{ matrix.os }}
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
with:
|
|
token: ${{ secrets.GITHUB_TOKEN }}
|
|
- name: Run action with SSL certificate
|
|
uses: ./
|
|
with:
|
|
args: -Dsonar.scanner.internal.dumpToFile=./output.properties
|
|
env:
|
|
SONAR_ROOT_CERT: |
|
|
-----BEGIN CERTIFICATE-----
|
|
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
|
|
Fct6d1S08JAosVnZcP2P7Yz+TbmDRtsqCgk=
|
|
-----END CERTIFICATE-----
|
|
SONAR_HOST_URL: http://not_actually_used
|
|
- name: Assert
|
|
run: |
|
|
./test/assertFileExists ~/.sonar/ssl/truststore.p12
|
|
analysisWithSslCertificate:
|
|
name: >
|
|
Analysis takes into account 'SONAR_ROOT_CERT'
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
with:
|
|
token: ${{ secrets.GITHUB_TOKEN }}
|
|
- name: Generate server certificate
|
|
run: |
|
|
openssl req \
|
|
-newkey rsa:4096 \
|
|
-x509 \
|
|
-sha256 \
|
|
-addext "subjectAltName = DNS:localhost" \
|
|
-days 3650 \
|
|
-nodes \
|
|
-out server.crt \
|
|
-subj "/C=CH/ST=Geneva/L=Geneva/O=Server/OU=Dept" \
|
|
-keyout server.key
|
|
working-directory: .github/qa-sq-behind-ngix
|
|
- name: Start nginx and SonarQube via Docker Compose
|
|
run: docker compose up -d --wait
|
|
working-directory: .github/qa-sq-behind-ngix
|
|
- name: Read correct server certificate
|
|
run: |
|
|
# read server.crt from .github/qa-sq-behind-ngix/ and store into the SONAR_ROOT_CERT_VALID
|
|
# environment variable, to be able to read it in the next step
|
|
{
|
|
echo 'SONAR_ROOT_CERT_VALID<<=========='
|
|
cat .github/qa-sq-behind-ngix/server.crt
|
|
echo ==========
|
|
} >> $GITHUB_ENV
|
|
- name: Run action with the correct SSL certificate
|
|
uses: ./
|
|
env:
|
|
SONAR_ROOT_CERT: ${{ env.SONAR_ROOT_CERT_VALID }}
|
|
SONAR_HOST_URL: https://localhost:4443
|
|
with:
|
|
args: -Dsonar.login=admin -Dsonar.password=admin
|
|
projectBaseDir: ./test/example-project
|
|
- name: Clear imported SSL certificates
|
|
run: |
|
|
rm -f ~/.sonar/ssl/truststore.p12
|
|
- name: Run action with an invalid SSL certificate
|
|
id: invalid_ssl_certificate
|
|
continue-on-error: true
|
|
uses: ./
|
|
env:
|
|
SONAR_ROOT_CERT: |
|
|
-----BEGIN CERTIFICATE-----
|
|
INVALID
|
|
-----END CERTIFICATE-----
|
|
SONAR_HOST_URL: https://localhost:4443
|
|
with:
|
|
args: -Dsonar.login=admin -Dsonar.password=admin
|
|
projectBaseDir: ./test/example-project
|
|
- name: Assert failure of previous step
|
|
if: steps.invalid_ssl_certificate.outcome == 'success'
|
|
run: exit 1
|
|
- name: Clear imported SSL certificates
|
|
run: |
|
|
rm -f ~/.sonar/ssl/truststore.p12
|
|
- name: Run action with the wrong SSL certificate
|
|
id: wrong_ssl_certificate
|
|
continue-on-error: true
|
|
uses: ./
|
|
env:
|
|
SONAR_ROOT_CERT: |
|
|
-----BEGIN CERTIFICATE-----
|
|
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
|
|
-----END CERTIFICATE-----
|
|
SONAR_HOST_URL: https://localhost:4443
|
|
with:
|
|
args: -Dsonar.login=admin -Dsonar.password=admin
|
|
projectBaseDir: ./test/example-project
|
|
- name: Assert failure of previous step
|
|
if: steps.wrong_ssl_certificate.outcome == 'success'
|
|
run: exit 1 |