Compare commits
34 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
94d4f8ac4a | ||
|
|
13990a6956 | ||
|
|
66a0baa492 | ||
|
|
884b79409b | ||
|
|
f885e52a75 | ||
|
|
2af7c4bea3 | ||
|
|
0c0f3958d9 | ||
|
|
8c8682dac7 | ||
|
|
bfafdf2896 | ||
|
|
aecaf43ae5 | ||
|
|
540792c588 | ||
|
|
e56fc172a4 | ||
|
|
94ac847096 | ||
|
|
86fe817756 | ||
|
|
44de84c3e8 | ||
|
|
8c56bc3994 | ||
|
|
e4c4bdc17f | ||
|
|
16be80a080 | ||
|
|
968b486245 | ||
|
|
320b72385a | ||
|
|
fed3555e67 | ||
|
|
9bea6a46af | ||
|
|
d3ca1743de | ||
|
|
0c14a18753 | ||
|
|
f8003d5a3a | ||
|
|
04623c1cb1 | ||
|
|
be64f35726 | ||
|
|
6abcb2537c | ||
|
|
53c3e3207f | ||
|
|
9ad16418d1 | ||
|
|
74e7b4f998 | ||
|
|
1b9d398800 | ||
|
|
ccaf9efb11 | ||
|
|
69c1a75940 |
4
.cirrus/wss-unified-agent.config
Normal file
4
.cirrus/wss-unified-agent.config
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
docker.projectNameFormat=repositoryNameAndTag
|
||||||
|
docker.scanImages=true
|
||||||
|
wss.url=https://saas-eu.whitesourcesoftware.com/agent
|
||||||
|
productName=GitHubAction/SonarQubeScanAction
|
||||||
2
.github/CODEOWNERS
vendored
2
.github/CODEOWNERS
vendored
@@ -1 +1 @@
|
|||||||
.github/CODEOWNERS @sonarsource/sonarqube-team
|
.github/CODEOWNERS @sonarsource/analysis-experience-squad
|
||||||
|
|||||||
271
.github/workflows/qa.yml
vendored
271
.github/workflows/qa.yml
vendored
@@ -1,18 +1,277 @@
|
|||||||
name: QA
|
name: QA
|
||||||
|
|
||||||
on: [push, pull_request]
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- master
|
||||||
|
pull_request:
|
||||||
|
types: [opened, synchronize, reopened]
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
run_qa:
|
noInputsTest:
|
||||||
|
name: >
|
||||||
|
No inputs
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
token: ${{ secrets.GITHUB_TOKEN }}
|
token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
- run: ./test/run-qa.sh
|
- name: Run action with args
|
||||||
timeout-minutes: 5
|
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"
|
||||||
|
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:
|
services:
|
||||||
sonarqube:
|
sonarqube:
|
||||||
image: sonarqube:8.9-community
|
image: sonarqube:lts-community
|
||||||
ports:
|
ports:
|
||||||
- 9000:9000
|
- 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
|
||||||
|
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
|
||||||
6
.github/workflows/update-tags.yml
vendored
6
.github/workflows/update-tags.yml
vendored
@@ -13,10 +13,10 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: Parse semver
|
- name: Parse semver
|
||||||
uses: madhead/semver-utils@latest
|
uses: madhead/semver-utils@v4
|
||||||
id: version
|
id: version
|
||||||
with:
|
with:
|
||||||
version: ${{ github.ref_name }}
|
version: ${{ github.ref_name }}
|
||||||
@@ -24,7 +24,7 @@ jobs:
|
|||||||
- name: Update tags
|
- name: Update tags
|
||||||
run: |
|
run: |
|
||||||
TAGS='v${{ steps.version.outputs.major }} v${{ steps.version.outputs.major }}.${{ steps.version.outputs.minor }}'
|
TAGS='v${{ steps.version.outputs.major }} v${{ steps.version.outputs.major }}.${{ steps.version.outputs.minor }}'
|
||||||
|
|
||||||
for t in $TAGS; do
|
for t in $TAGS; do
|
||||||
git tag -f "$t"
|
git tag -f "$t"
|
||||||
git push origin ":$t" 2>/dev/null || true
|
git push origin ":$t" 2>/dev/null || true
|
||||||
|
|||||||
17
Dockerfile
17
Dockerfile
@@ -1,17 +0,0 @@
|
|||||||
FROM sonarsource/sonar-scanner-cli:5.0
|
|
||||||
|
|
||||||
LABEL version="2.0.0" \
|
|
||||||
repository="https://github.com/sonarsource/sonarqube-scan-action" \
|
|
||||||
homepage="https://github.com/sonarsource/sonarqube-scan-action" \
|
|
||||||
maintainer="SonarSource" \
|
|
||||||
com.github.actions.name="SonarQube Scan" \
|
|
||||||
com.github.actions.description="Scan your code with SonarQube to detect Bugs, Vulnerabilities and Code Smells in up to 27 programming languages!" \
|
|
||||||
com.github.actions.icon="check" \
|
|
||||||
com.github.actions.color="green"
|
|
||||||
|
|
||||||
|
|
||||||
COPY entrypoint.sh /entrypoint.sh
|
|
||||||
RUN chmod +x /entrypoint.sh
|
|
||||||
COPY cleanup.sh /cleanup.sh
|
|
||||||
RUN chmod +x /cleanup.sh
|
|
||||||
ENTRYPOINT ["/entrypoint.sh"]
|
|
||||||
43
README.md
43
README.md
@@ -1,10 +1,13 @@
|
|||||||
# Scan your code with SonarQube [](https://github.com/SonarSource/sonarqube-scan-action/actions/workflows/qa.yml)
|
# Scan your code with SonarQube [](https://github.com/SonarSource/sonarqube-scan-action/actions/workflows/qa.yml)
|
||||||
|
|
||||||
Using this GitHub Action, scan your code with [SonarQube](https://www.sonarqube.org/) to detects Bugs, Vulnerabilities and Code Smells in up to 27 programming languages!
|
This SonarSource project, available as a GitHub Action, scans your projects with SonarQube, and helps developers produce
|
||||||
|
[Clean Code](https://www.sonarsource.com/solutions/clean-code/?utm_medium=referral&utm_source=github&utm_campaign=clean-code&utm_content=sonarqube-scan-action).
|
||||||
|
|
||||||
<img src="./images/SonarQube-72px.png">
|
<img src="./images/SonarQube-72px.png">
|
||||||
|
|
||||||
SonarQube is the leading product for Continuous Code Quality & Code Security. It supports most popular programming languages, including Java, JavaScript, TypeScript, C#, Python, C, C++, and many more.
|
[SonarQube](https://www.sonarsource.com/products/sonarqube/) is a widely used static analysis solution for continuous code quality and security inspection.
|
||||||
|
It helps developers identify and fix issues in their code that could lead to bugs, vulnerabilities, or decreased development velocity.
|
||||||
|
SonarQube supports the most popular programming languages, including Java, JavaScript, TypeScript, C#, Python, C, C++, and [many more](https://www.sonarsource.com/knowledge/languages/).
|
||||||
|
|
||||||
## Requirements
|
## Requirements
|
||||||
|
|
||||||
@@ -14,13 +17,13 @@ Read more information on how to analyze your code [here](https://docs.sonarqube.
|
|||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
Project metadata, including the location to the sources to be analyzed, must be declared in the file `sonar-project.properties` in the base directory:
|
Project metadata, including the location of the sources to be analyzed, must be declared in the file `sonar-project.properties` in the base directory:
|
||||||
|
|
||||||
```properties
|
```properties
|
||||||
sonar.projectKey=<replace with the key generated when setting up the project on SonarQube>
|
sonar.projectKey=<replace with the key generated when setting up the project on SonarQube>
|
||||||
|
|
||||||
# relative paths to source directories. More details and properties are described
|
# relative paths to source directories. More details and properties are described
|
||||||
# in https://docs.sonarqube.org/latest/project-administration/narrowing-the-focus/
|
# at https://docs.sonarqube.org/latest/project-administration/narrowing-the-focus/
|
||||||
sonar.sources=.
|
sonar.sources=.
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -43,36 +46,36 @@ jobs:
|
|||||||
sonarqube:
|
sonarqube:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
# Disabling shallow clone is recommended for improving relevancy of reporting
|
# Disabling shallow clones is recommended for improving the relevancy of reporting
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
- name: SonarQube Scan
|
- name: SonarQube Scan
|
||||||
uses: sonarsource/sonarqube-scan-action@master
|
uses: sonarsource/sonarqube-scan-action@<action version> # Ex: v2.1.0, See the latest version at https://github.com/marketplace/actions/official-sonarqube-scan
|
||||||
env:
|
env:
|
||||||
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
|
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
|
||||||
SONAR_HOST_URL: ${{ secrets.SONAR_HOST_URL }}
|
SONAR_HOST_URL: ${{ vars.SONAR_HOST_URL }}
|
||||||
```
|
```
|
||||||
|
|
||||||
If your source code file names contain special characters that are not covered by the locale range of `en_US.UTF-8`, you can configure your desired locale like this:
|
If your source code file names contain special characters that are not covered by the locale range of `en_US.UTF-8`, you can configure your desired locale like this:
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
- name: SonarQube Scan
|
- name: SonarQube Scan
|
||||||
uses: sonarsource/sonarqube-scan-action@master
|
uses: sonarsource/sonarqube-scan-action@<action version> # Ex: v2.1.0, See the latest version at https://github.com/marketplace/actions/official-sonarqube-scan
|
||||||
env:
|
env:
|
||||||
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
|
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
|
||||||
SONAR_HOST_URL: ${{ secrets.SONAR_HOST_URL }}
|
SONAR_HOST_URL: ${{ vars.SONAR_HOST_URL }}
|
||||||
LC_ALL: "ru_RU.UTF-8"
|
LC_ALL: "ru_RU.UTF-8"
|
||||||
```
|
```
|
||||||
|
|
||||||
If your SonarQube server uses a self-signed certificate, you can pass a root certificate (in PEM format) to the java certificate store:
|
If your SonarQube server uses a self-signed certificate, you can pass a root certificate (in PEM format) to the Java certificate store:
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
- name: SonarQube Scan
|
- name: SonarQube Scan
|
||||||
uses: sonarsource/sonarqube-scan-action@master
|
uses: sonarsource/sonarqube-scan-action@<action version> # Ex: v2.1.0, See the latest version at https://github.com/marketplace/actions/official-sonarqube-scan
|
||||||
env:
|
env:
|
||||||
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
|
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
|
||||||
SONAR_HOST_URL: ${{ secrets.SONAR_HOST_URL }}
|
SONAR_HOST_URL: ${{ vars.SONAR_HOST_URL }}
|
||||||
SONAR_ROOT_CERT: ${{ secrets.SONAR_ROOT_CERT }}
|
SONAR_ROOT_CERT: ${{ secrets.SONAR_ROOT_CERT }}
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -80,7 +83,7 @@ You can change the analysis base directory by using the optional input `projectB
|
|||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
- name: SonarQube Scan
|
- name: SonarQube Scan
|
||||||
uses: sonarsource/sonarqube-scan-action@master
|
uses: sonarsource/sonarqube-scan-action@<action version> # Ex: v2.1.0, See the latest version at https://github.com/marketplace/actions/official-sonarqube-scan
|
||||||
with:
|
with:
|
||||||
projectBaseDir: app/src
|
projectBaseDir: app/src
|
||||||
```
|
```
|
||||||
@@ -89,7 +92,7 @@ In case you need to add additional analysis parameters, and you do not wish to s
|
|||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
- name: SonarQube Scan
|
- name: SonarQube Scan
|
||||||
uses: sonarsource/sonarqube-scan-action@master
|
uses: sonarsource/sonarqube-scan-action@<action version> # Ex: v2.1.0, See the latest version at https://github.com/marketplace/actions/official-sonarqube-scan
|
||||||
with:
|
with:
|
||||||
projectBaseDir: app/src
|
projectBaseDir: app/src
|
||||||
args: >
|
args: >
|
||||||
@@ -103,7 +106,7 @@ More information about possible analysis parameters can be found in [the documen
|
|||||||
### Environment variables
|
### Environment variables
|
||||||
|
|
||||||
- `SONAR_TOKEN` – **Required** this is the token used to authenticate access to SonarQube. You can read more about security tokens [here](https://docs.sonarqube.org/latest/user-guide/user-token/). You can set the `SONAR_TOKEN` environment variable in the "Secrets" settings page of your repository, or you can add them at the level of your GitHub organization (recommended).
|
- `SONAR_TOKEN` – **Required** this is the token used to authenticate access to SonarQube. You can read more about security tokens [here](https://docs.sonarqube.org/latest/user-guide/user-token/). You can set the `SONAR_TOKEN` environment variable in the "Secrets" settings page of your repository, or you can add them at the level of your GitHub organization (recommended).
|
||||||
- `SONAR_HOST_URL` – **Required** this tells the scanner where SonarQube is hosted. You can set the `SONAR_HOST_URL` environment variable in the "Secrets" settings page of your repository, or you can add them at the level of your GitHub organization (recommended).
|
- `SONAR_HOST_URL` – **Required** this tells the scanner where SonarQube is hosted. You can set the `SONAR_HOST_URL` environment variable in the "Variables" settings page of your repository, or you can add them at the level of your GitHub organization (recommended).
|
||||||
- `SONAR_ROOT_CERT` – Holds an additional root certificate (in PEM format) that is used to validate the SonarQube server certificate. You can set the `SONAR_ROOT_CERT` environment variable in the "Secrets" settings page of your repository, or you can add them at the level of your GitHub organization (recommended).
|
- `SONAR_ROOT_CERT` – Holds an additional root certificate (in PEM format) that is used to validate the SonarQube server certificate. You can set the `SONAR_ROOT_CERT` environment variable in the "Secrets" settings page of your repository, or you can add them at the level of your GitHub organization (recommended).
|
||||||
|
|
||||||
## Alternatives for Java, .NET, and C/C++ projects
|
## Alternatives for Java, .NET, and C/C++ projects
|
||||||
@@ -113,14 +116,12 @@ This GitHub Action will not work for all technologies. If you are in one of the
|
|||||||
* Your code is built with Maven. Read the documentation about our [Scanner for Maven](https://redirect.sonarsource.com/doc/install-configure-scanner-maven.html).
|
* Your code is built with Maven. Read the documentation about our [Scanner for Maven](https://redirect.sonarsource.com/doc/install-configure-scanner-maven.html).
|
||||||
* Your code is built with Gradle. Read the documentation about our [Scanner for Gradle](https://redirect.sonarsource.com/doc/gradle.html).
|
* Your code is built with Gradle. Read the documentation about our [Scanner for Gradle](https://redirect.sonarsource.com/doc/gradle.html).
|
||||||
* You want to analyze a .NET solution. Read the documentation about our [Scanner for .NET](https://redirect.sonarsource.com/doc/install-configure-scanner-msbuild.html).
|
* You want to analyze a .NET solution. Read the documentation about our [Scanner for .NET](https://redirect.sonarsource.com/doc/install-configure-scanner-msbuild.html).
|
||||||
* You want to analyze C/C++ code. Read the documentation on [analyzing C/C++ code](https://docs.sonarqube.org/latest/analysis/languages/cfamily/).
|
* You want to analyze C or C++ code. Starting from SonarQube 10.6, this GitHub Action will scan C and C++ out of the box. If you want to have better control over the scan configuration/setup, you can switch to the [SonarQube C and C++](https://github.com/SonarSource/sonarqube-github-c-cpp) GitHub Action.
|
||||||
|
|
||||||
## Have question or feedback?
|
## Have questions or feedback?
|
||||||
|
|
||||||
To provide feedback (requesting a feature or reporting a bug) please post on the [SonarSource Community Forum](https://community.sonarsource.com/tags/c/help/sq/github-actions).
|
To provide feedback (requesting a feature or reporting a bug) please post on the [SonarSource Community Forum](https://community.sonarsource.com/tags/c/help/sq/github-actions).
|
||||||
|
|
||||||
## License
|
## License
|
||||||
|
|
||||||
The Dockerfile and associated scripts and documentation in this project are released under the LGPLv3 License.
|
Container images built with this project include third-party materials.
|
||||||
|
|
||||||
Container images built with this project include third party materials.
|
|
||||||
|
|||||||
13
SECURITY.md
Normal file
13
SECURITY.md
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
# Reporting Security Issues
|
||||||
|
|
||||||
|
A mature software vulnerability treatment process is a cornerstone of a robust information security management system. Contributions from the community play an important role in the evolution and security of our products, and in safeguarding the security and privacy of our users.
|
||||||
|
|
||||||
|
If you believe you have discovered a security vulnerability in Sonar's products, we encourage you to report it immediately.
|
||||||
|
|
||||||
|
To responsibly report a security issue, please email us at [security@sonarsource.com](mailto:security@sonarsource.com). Sonar’s security team will acknowledge your report, guide you through the next steps, or request additional information if necessary. Customers with a support contract can also report the vulnerability directly through the support channel.
|
||||||
|
|
||||||
|
For security vulnerabilities found in third-party libraries, please also contact the library's owner or maintainer directly.
|
||||||
|
|
||||||
|
## Responsible Disclosure Policy
|
||||||
|
|
||||||
|
For more information about disclosing a security vulnerability to Sonar, please refer to our community post: [Responsible Vulnerability Disclosure](https://community.sonarsource.com/t/responsible-vulnerability-disclosure/9317).
|
||||||
38
action.yml
38
action.yml
@@ -4,11 +4,6 @@ description: >
|
|||||||
branding:
|
branding:
|
||||||
icon: check
|
icon: check
|
||||||
color: green
|
color: green
|
||||||
runs:
|
|
||||||
using: docker
|
|
||||||
image: Dockerfile
|
|
||||||
entrypoint: "/entrypoint.sh"
|
|
||||||
post-entrypoint: "/cleanup.sh"
|
|
||||||
inputs:
|
inputs:
|
||||||
args:
|
args:
|
||||||
description: Additional arguments to the sonar-scanner
|
description: Additional arguments to the sonar-scanner
|
||||||
@@ -16,4 +11,35 @@ inputs:
|
|||||||
projectBaseDir:
|
projectBaseDir:
|
||||||
description: Set the sonar.projectBaseDir analysis property
|
description: Set the sonar.projectBaseDir analysis property
|
||||||
required: false
|
required: false
|
||||||
default: .
|
scannerVersion:
|
||||||
|
description: Version of the Sonar Scanner CLI to use
|
||||||
|
required: false
|
||||||
|
default: 6.2.1.4610
|
||||||
|
runs:
|
||||||
|
using: "composite"
|
||||||
|
steps:
|
||||||
|
- name: Sanity checks
|
||||||
|
run: ${GITHUB_ACTION_PATH}/sanity-checks.sh
|
||||||
|
shell: bash
|
||||||
|
env:
|
||||||
|
INPUT_PROJECTBASEDIR: ${{ inputs.projectBaseDir }}
|
||||||
|
- name: Load Sonar Scanner CLI from cache
|
||||||
|
id: sonar-scanner-cli
|
||||||
|
uses: actions/cache@v4.0.2
|
||||||
|
with:
|
||||||
|
path: ${{ runner.temp }}/sonar-scanner-cli-${{ inputs.scannerVersion }}-${{ runner.os }}-${{ runner.arch }}
|
||||||
|
key: sonar-scanner-cli-${{ inputs.scannerVersion }}-${{ runner.os }}-${{ runner.arch }}
|
||||||
|
- name: Install Sonar Scanner CLI
|
||||||
|
if: steps.sonar-scanner-cli.outputs.cache-hit != 'true'
|
||||||
|
run: ${GITHUB_ACTION_PATH}/install-sonar-scanner-cli.sh
|
||||||
|
shell: bash
|
||||||
|
env:
|
||||||
|
INPUT_SCANNERVERSION: ${{ inputs.scannerVersion }}
|
||||||
|
- name: Add SonarScanner CLI to the PATH
|
||||||
|
run: echo "${RUNNER_TEMP}/sonar-scanner-cli-${{ inputs.scannerVersion }}-${{ runner.os }}-${{ runner.arch }}/bin" >> $GITHUB_PATH
|
||||||
|
shell: bash
|
||||||
|
- name: Run SonarScanner
|
||||||
|
run: ${GITHUB_ACTION_PATH}/run-sonar-scanner.sh ${{ inputs.args }}
|
||||||
|
shell: bash
|
||||||
|
env:
|
||||||
|
INPUT_PROJECTBASEDIR: ${{ inputs.projectBaseDir }}
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
set -e
|
|
||||||
|
|
||||||
_tmp_file=$(ls "${INPUT_PROJECTBASEDIR}/" | head -1)
|
|
||||||
PERM=$(stat -c "%u:%g" "${INPUT_PROJECTBASEDIR}/$_tmp_file")
|
|
||||||
|
|
||||||
chown -R $PERM "${INPUT_PROJECTBASEDIR}/"
|
|
||||||
@@ -1,36 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
set -e
|
|
||||||
|
|
||||||
if [[ -z "${SONAR_TOKEN}" ]]; then
|
|
||||||
echo "============================ WARNING ============================"
|
|
||||||
echo "Running this GitHub Action without SONAR_TOKEN is not recommended"
|
|
||||||
echo "============================ WARNING ============================"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ -z "${SONAR_HOST_URL}" ]]; then
|
|
||||||
echo "This GitHub Action requires the SONAR_HOST_URL env variable."
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ -n "${SONAR_ROOT_CERT}" ]]; then
|
|
||||||
echo "Adding custom root certificate to java certificate store"
|
|
||||||
rm -f /tmp/tmpcert.pem
|
|
||||||
echo "${SONAR_ROOT_CERT}" > /tmp/tmpcert.pem
|
|
||||||
keytool -keystore /etc/ssl/certs/java/cacerts -storepass changeit -noprompt -trustcacerts -importcert -alias sonarqube -file /tmp/tmpcert.pem
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ -f "${INPUT_PROJECTBASEDIR%/}pom.xml" ]]; then
|
|
||||||
echo "Maven project detected. You should run the goal 'org.sonarsource.scanner.maven:sonar' during build rather than using this GitHub Action."
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ -f "${INPUT_PROJECTBASEDIR%/}build.gradle" ]]; then
|
|
||||||
echo "Gradle project detected. You should use the SonarQube plugin for Gradle during build rather than using this GitHub Action."
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
unset JAVA_HOME
|
|
||||||
|
|
||||||
sonar-scanner -Dsonar.projectBaseDir=${INPUT_PROJECTBASEDIR} ${INPUT_ARGS}
|
|
||||||
|
|
||||||
34
install-sonar-scanner-cli.sh
Executable file
34
install-sonar-scanner-cli.sh
Executable file
@@ -0,0 +1,34 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
set -eou pipefail
|
||||||
|
|
||||||
|
#See https://docs.github.com/en/actions/writing-workflows/choosing-what-your-workflow-does/store-information-in-variables#default-environment-variables
|
||||||
|
|
||||||
|
WGET=wget
|
||||||
|
if [[ "$RUNNER_OS" == "Linux" && "$RUNNER_ARCH" == "X64" ]]; then
|
||||||
|
FLAVOR="linux-x64"
|
||||||
|
elif [[ "$RUNNER_OS" == "Linux" && "$RUNNER_ARCH" == "ARM64" ]]; then
|
||||||
|
FLAVOR="linux-aarch64"
|
||||||
|
elif [[ "$RUNNER_OS" == "Windows" && "$RUNNER_ARCH" == "X64" ]]; then
|
||||||
|
FLAVOR="windows-x64"
|
||||||
|
WGET="C:\\msys64\\usr\\bin\\wget.exe"
|
||||||
|
elif [[ "$RUNNER_OS" == "macOS" && "$RUNNER_ARCH" == "X64" ]]; then
|
||||||
|
FLAVOR="macosx-x64"
|
||||||
|
elif [[ "$RUNNER_OS" == "macOS" && "$RUNNER_ARCH" == "ARM64" ]]; then
|
||||||
|
FLAVOR="macosx-aarch64"
|
||||||
|
else
|
||||||
|
echo "$RUNNER_OS $RUNNER_ARCH not supported"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
set -x
|
||||||
|
|
||||||
|
mkdir -p $RUNNER_TEMP/sonarscanner
|
||||||
|
cd $RUNNER_TEMP/sonarscanner
|
||||||
|
|
||||||
|
$WGET --no-verbose --user-agent="sonarqube-scan-action" https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-$INPUT_SCANNERVERSION-$FLAVOR.zip
|
||||||
|
|
||||||
|
unzip -q sonar-scanner-cli-$INPUT_SCANNERVERSION-$FLAVOR.zip
|
||||||
|
|
||||||
|
# Folder name should correspond to the directory cached by the actions/cache
|
||||||
|
mv sonar-scanner-$INPUT_SCANNERVERSION-$FLAVOR $RUNNER_TEMP/sonar-scanner-cli-$INPUT_SCANNERVERSION-$RUNNER_OS-$RUNNER_ARCH
|
||||||
41
run-sonar-scanner.sh
Executable file
41
run-sonar-scanner.sh
Executable file
@@ -0,0 +1,41 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
set -eo pipefail
|
||||||
|
|
||||||
|
if [[ "$RUNNER_OS" == "Windows" ]]; then
|
||||||
|
SCANNER_BIN="sonar-scanner.bat"
|
||||||
|
else
|
||||||
|
SCANNER_BIN="sonar-scanner"
|
||||||
|
fi
|
||||||
|
|
||||||
|
scanner_args=()
|
||||||
|
if [[ ${SONARCLOUD_URL} ]]; then
|
||||||
|
scanner_args+=("-Dsonar.scanner.sonarcloudUrl=${SONARCLOUD_URL}")
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ "$RUNNER_DEBUG" == '1' ]]; then
|
||||||
|
scanner_args+=('--debug')
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ -n "${INPUT_PROJECTBASEDIR}" ]]; then
|
||||||
|
scanner_args+=("-Dsonar.projectBaseDir=${INPUT_PROJECTBASEDIR}")
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ -n "${SONAR_ROOT_CERT}" ]]; then
|
||||||
|
echo "Adding SSL certificate to the Scanner truststore"
|
||||||
|
rm -f $RUNNER_TEMP/tmpcert.pem
|
||||||
|
echo "${SONAR_ROOT_CERT}" > $RUNNER_TEMP/tmpcert.pem
|
||||||
|
# Use keytool for now, as SonarQube 11.6 won't support openssl generated keystores
|
||||||
|
# keytool require a password > 6 characters, so we wan't use the default password 'sonar'
|
||||||
|
store_pass=changeit
|
||||||
|
mkdir -p ~/.sonar/ssl
|
||||||
|
keytool -storetype PKCS12 -keystore ~/.sonar/ssl/truststore.p12 -storepass $store_pass -noprompt -trustcacerts -importcert -alias sonar -file $RUNNER_TEMP/tmpcert.pem
|
||||||
|
scanner_args+=("-Dsonar.scanner.truststorePassword=$store_pass")
|
||||||
|
fi
|
||||||
|
|
||||||
|
scanner_args+=("$@")
|
||||||
|
|
||||||
|
set -ux
|
||||||
|
|
||||||
|
$SCANNER_BIN "${scanner_args[@]}"
|
||||||
|
|
||||||
18
sanity-checks.sh
Executable file
18
sanity-checks.sh
Executable file
@@ -0,0 +1,18 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
set -eo pipefail
|
||||||
|
|
||||||
|
if [[ -z "${SONAR_TOKEN}" ]]; then
|
||||||
|
echo "::warning title=SonarScanner::Running this GitHub Action without SONAR_TOKEN is not recommended"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ -f "${INPUT_PROJECTBASEDIR%/}/pom.xml" ]]; then
|
||||||
|
echo "::warning title=SonarScanner::Maven project detected. Sonar recommends running the 'org.sonarsource.scanner.maven:sonar-maven-plugin:sonar' goal during the build process instead of using this GitHub Action
|
||||||
|
to get more accurate results."
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ -f "${INPUT_PROJECTBASEDIR%/}/build.gradle" || -f "${INPUT_PROJECTBASEDIR%/}/build.gradle.kts" ]]; then
|
||||||
|
echo "::warning title=SonarScanner::Gradle project detected. Sonar recommends using the SonarQube plugin for Gradle during the build process instead of using this GitHub Action
|
||||||
|
to get more accurate results."
|
||||||
|
fi
|
||||||
|
|
||||||
10
test/assertFileContains
Executable file
10
test/assertFileContains
Executable file
@@ -0,0 +1,10 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
error() { echo -e "\\e[31m✗ $*\\e[0m"; }
|
||||||
|
|
||||||
|
assertFileExists $1
|
||||||
|
|
||||||
|
if ! grep -q $2 $1; then
|
||||||
|
error "'$2' not found in '$1'"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
8
test/assertFileExists
Executable file
8
test/assertFileExists
Executable file
@@ -0,0 +1,8 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
error() { echo -e "\\e[31m✗ $*\\e[0m"; }
|
||||||
|
|
||||||
|
if [ ! -f $1 ]; then
|
||||||
|
error "File '$1' not found"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
0
test/gradle-project-kotlin/build.gradle.kts
Normal file
0
test/gradle-project-kotlin/build.gradle.kts
Normal file
112
test/run-qa.sh
112
test/run-qa.sh
@@ -1,112 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
# Helper functions for coloring output.
|
|
||||||
info() { echo -e "\\e[36m$*\\e[0m"; }
|
|
||||||
error() { echo -e "\\e[31m✗ $*\\e[0m"; }
|
|
||||||
success() { echo -e "\\e[32m✔ $*\\e[0m"; }
|
|
||||||
|
|
||||||
# Helper function to check if SonarQube is up and running.
|
|
||||||
check_sq_is_up() {
|
|
||||||
local statusCall="$(curl --silent --user admin:admin http://127.0.0.1:9000/api/system/status)"
|
|
||||||
local status="$(jq -r '.status' <<< "$statusCall")"
|
|
||||||
if [[ ! $? -eq 0 ]]; then
|
|
||||||
error "Failed to check if SonarQube is up and running."
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
echo $status;
|
|
||||||
}
|
|
||||||
|
|
||||||
_current_perm=$(stat -c "%u:%g" $(pwd))
|
|
||||||
|
|
||||||
info "Build scanner action..."
|
|
||||||
docker build --no-cache -t sonarsource/sonarqube-scan-action .
|
|
||||||
if [[ ! $? -eq 0 ]]; then
|
|
||||||
error "Failed to build the scanner action."
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
success "Scanner action built."
|
|
||||||
|
|
||||||
info "Find the network SonarQube is running on..."
|
|
||||||
network=$(docker network ls -f 'name=github_network' --format "{{.Name}}")
|
|
||||||
if [[ $network != "github_network_"* ]]; then
|
|
||||||
error "Failed to find the local Docker network."
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
success "Found the network ($network)."
|
|
||||||
|
|
||||||
info "Wait until SonarQube is up..."
|
|
||||||
sleep 10
|
|
||||||
isUp=$(check_sq_is_up)
|
|
||||||
until [[ "$isUp" == "UP" ]]; do
|
|
||||||
sleep 1
|
|
||||||
isUp=$(check_sq_is_up)
|
|
||||||
done
|
|
||||||
success "SonarQube is up and running."
|
|
||||||
|
|
||||||
info "Generate a new token..."
|
|
||||||
tokenCall=$(curl --silent --user admin:admin -d "name=token" http://127.0.0.1:9000/api/user_tokens/generate)
|
|
||||||
token="$(jq -r '.token' <<< "$tokenCall")"
|
|
||||||
if [[ -z "$token" ]]; then
|
|
||||||
error "Failed to generate a new token."
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
success "New token generated."
|
|
||||||
|
|
||||||
info "Test fail-fast if SONAR_TOKEN is omitted..."
|
|
||||||
docker run -v `pwd`:/github/workspace/ --workdir /github/workspace --network $network sonarsource/sonarqube-scan-action
|
|
||||||
if [[ $? -eq 0 ]]; then
|
|
||||||
error "Should have failed fast."
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
success "Correctly failed fast."
|
|
||||||
|
|
||||||
info "Test fail-fast if SONAR_HOST_URL is omitted..."
|
|
||||||
docker run -v `pwd`:/github/workspace/ --workdir /github/workspace --network $network --env SONAR_TOKEN=$token sonarsource/sonarqube-scan-action
|
|
||||||
if [[ $? -eq 0 ]]; then
|
|
||||||
error "Should have failed fast."
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
success "Correctly failed fast."
|
|
||||||
|
|
||||||
info "Test fail-fast on Gradle project..."
|
|
||||||
pushd test/gradle-project/
|
|
||||||
docker run -v `pwd`:/github/workspace/ --workdir /github/workspace --network $network --env SONAR_TOKEN=$token --env SONAR_HOST_URL='http://sonarqube:9000' sonarsource/sonarqube-scan-action
|
|
||||||
if [[ $? -eq 0 ]]; then
|
|
||||||
error "Should have failed fast."
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
popd
|
|
||||||
success "Correctly failed fast."
|
|
||||||
|
|
||||||
info "Test fail-fast on Maven project..."
|
|
||||||
pushd test/maven-project/
|
|
||||||
docker run -v `pwd`:/github/workspace/ --workdir /github/workspace --network $network --env SONAR_TOKEN=$token --env SONAR_HOST_URL='http://sonarqube:9000' sonarsource/sonarqube-scan-action
|
|
||||||
if [[ $? -eq 0 ]]; then
|
|
||||||
error "Should have failed fast."
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
popd
|
|
||||||
success "Correctly failed fast."
|
|
||||||
|
|
||||||
info "Analyze project..."
|
|
||||||
cd test/example-project/
|
|
||||||
docker run -v `pwd`:/github/workspace/ --workdir /github/workspace --network $network --env INPUT_PROJECTBASEDIR=/github/workspace --env SONAR_TOKEN=$token --env SONAR_HOST_URL='http://sonarqube:9000' sonarsource/sonarqube-scan-action
|
|
||||||
docker run -v `pwd`:/github/workspace/ --workdir /github/workspace --network $network --env INPUT_PROJECTBASEDIR=/github/workspace --entrypoint /cleanup.sh sonarsource/sonarqube-scan-action
|
|
||||||
if [[ ! $? -eq 0 ]]; then
|
|
||||||
error "Couldn't run the analysis."
|
|
||||||
exit 1
|
|
||||||
elif [[ ! -f ".scannerwork/report-task.txt" ]]; then
|
|
||||||
error "Couldn't find the report task file. Analysis failed."
|
|
||||||
exit 1
|
|
||||||
elif [ ! "$(stat -c "%u:%g" ".scannerwork/report-task.txt")" == "$_current_perm" ]; then
|
|
||||||
error "File permissions differ from desired once"
|
|
||||||
error "desired: $_current_perm"
|
|
||||||
error "actual: $(stat -c "%u:%g" ".scannerwork/report-task.txt")"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
success "Analysis successful."
|
|
||||||
|
|
||||||
echo "" # new line
|
|
||||||
echo "============================"
|
|
||||||
echo "" # new line
|
|
||||||
success "QA successful!"
|
|
||||||
Reference in New Issue
Block a user