Compare commits

..

48 commits

Author SHA1 Message Date
SonarTech
ba3875ecf6
BUILD-8875 Migrate to standardized GitHub runner names (#108) 2025-08-27 10:15:57 +02:00
Samir M
13a24e453e BUILD-8073 Migrate public repositories workflows to large runners 2025-05-16 16:48:24 +02:00
Pierre
3f80f38bc6
SQSCANGHA-90 remove mend dead conf (#105) 2025-04-24 11:54:02 +02:00
Pavel Mikula
b42848bfda
SCSCANGHA-40 Autoclose issues created by Jira integration (#104) 2025-03-10 10:44:35 +01:00
Matteo Bianchi
ffc3010689
Add a link to the sonarqube-scan-action marketplace entry (#103)
Co-authored-by: Julien HENRY <julien.henry@sonarsource.com>
2025-02-27 14:59:31 +01:00
Julien HENRY
91eed767a5
SCSCANGHA-39 Redirect to the SonarQube Scan Action v5.0.0 2025-02-27 09:28:32 +01:00
Pierre
f1700773eb
SCSCANGHA-37 Update CODEOWNERS (#100) 2025-02-07 16:38:10 +01:00
Antonio Aversa
02ef91109b Shorten description and remove mend docker check 2024-12-05 09:25:27 +01:00
Antonio Aversa
4afec8845b SCSCANGHA-28 Rebranding 2024-12-05 09:04:52 +01:00
Antonio Aversa
48d9e10f8a SCSCANGHA-25 Replace the Docker action by a composite action forwarding to the SonarQube action 2024-12-05 09:04:52 +01:00
Pavel Mikula
982992a35a Add Jira integration 2024-12-02 15:56:47 +01:00
Evgeny Mandrikov
9f9bba2c7a
Recommend to not use this action for analysis of Dart code 2024-10-11 15:21:47 +02:00
Julien HENRY
383f7e52ea SCSCANGHA-24 Update the Docker base image to the latest minor 11.1 2024-10-04 09:56:32 +02:00
Samir M
2900b02098 BUILD-6088 Fix bad link in SECURITY.md file 2024-10-03 13:51:46 +02:00
Istvan Bodo
eb21172326
SCSCANGHA-23 Update scanner cli to v11.0 (#90) 2024-08-20 10:54:41 +02:00
Pierre
f5003fc968 Revert "test QA with no GITHUB_TOKEN permissions"
This reverts commit 3bf6e4b720.
2024-07-24 18:16:38 +02:00
Pierre
3bf6e4b720 test QA with no GITHUB_TOKEN permissions 2024-07-24 18:10:13 +02:00
antoine.vinot
b7cc8bf200 NO-JIRA Bump cirrus module version 2024-07-12 11:36:08 +02:00
Piotr Idzik
f4a7a62a43
NO-JIRA Prevent globbing and word splitting (#84)
* Prevent globbing and word splitting

* Revert changes in `entrypoint.sh`
2024-07-12 10:29:30 +02:00
csaba-feher-sonarsource
e44258b109
Revert "SCSCANGHA-16 Support passing args with spaces (#79)" (#83)
This reverts commit d08d592c0b.
2024-06-13 14:34:22 +02:00
antoine.vinot
13d84ab51e SCSCANGHA-18 Add workflow to automate tags creation upon release 2024-05-23 17:12:11 +02:00
Bogdana
4006f663ec SC-6818 drop GH token from README 2024-05-23 12:02:13 +02:00
antoine.vinot
9c11606f13 Use a placeholder for the action version in README 2024-05-23 11:59:20 +02:00
Istvan Bodo
d08d592c0b
SCSCANGHA-16 Support passing args with spaces (#79) 2024-05-23 10:49:51 +02:00
antoine.vinot
a69a8edf1d SCSCANGHA-5 Update the base image 2024-05-22 11:47:40 +02:00
antoine.vinot
f1d5a2ae70 SCSCANGHA-13 Warning instead of failure for Maven/Gradle projects 2024-05-22 10:30:42 +02:00
Istvan Bodo
714bd356bf
SCSCANGHA-15 Add test for scanner debug logging (#77) 2024-05-22 09:56:47 +02:00
Ari Becker
1373cf75e2
SCSCANGHA-14 Enable debug logging when GitHub Actions debug logging is enabled (#43) 2024-05-21 13:50:39 +02:00
antoine.vinot
49689c4407 SCSCANGHA-9 Enable Mend scan 2024-05-20 16:59:00 +02:00
antoine.vinot
3da91d8a6a SCSCANGHA-6 Fix main branch name in GitHub workflow 2024-05-16 14:19:51 +02:00
antoine.vinot
0861f01544 SCSCANGHA-6 Add Github Actions tests 2024-05-16 13:03:48 +02:00
Marharyta
19888635fa
SCSCANGHA-3 Update the condition to detect "build.gradle.kts" files (#71) 2024-05-08 10:35:05 +02:00
Alex Odoux
6bbd64e0cb
makes sonarsource/analysis-experience-squad the code owner (#66) 2024-04-02 08:17:58 +02:00
Claire Villard
76ec6e7459
SC-12363 Improve the SonarCloud intro in README.md 2024-03-19 16:13:40 +01:00
Francisco Robles Martín
44eed6088a docs: update checkout GitHub Action to the latest version 2024-02-06 14:27:44 -06:00
Duarte Meneses
49e6cd3b18 Update README.md about manually cleaning the work directory 2023-12-12 15:31:38 -06:00
Cody Simms
5f0b535692 Check for existance of .scannerwork in cleanup script 2023-12-12 15:22:55 -06:00
Cody Simms
fb9ead3f76 chown only .scannerwork 2023-12-12 15:22:55 -06:00
Cody Simms
e2a1ee7c31
Fix permissions of .scannerwork directory (#57) 2023-12-08 14:57:12 -06:00
David Cho-Lerat
5ee47de3c9
Update README with new Clean Code wording and link from Marketing (#56) 2023-09-19 10:37:06 +02:00
bogdanakushnir
c25d2e7e3d
SC-9154 Update links in README 2023-09-08 15:23:53 +02:00
Nawar Hamo
a244ec8e13
SC-9154 Update SonarCloud GitHub Action docs (#54) 2023-09-05 15:32:55 +02:00
Nawar Hamo
4b4d7634da
Update scanner cli version to 5.0 (#51) 2023-08-03 15:37:56 +02:00
Tom
9c0534dd12 Delete .travis.yml 2023-05-11 10:53:12 +02:00
bogdanakushnir
5875562561
SC-6662 update README to use v3 of actions 2023-04-20 12:31:51 +03:00
Antonio García Jiménez
db501078e9
SC-4361 Update sonar-scanner-cli to v4.8 (#47) 2023-03-03 08:53:16 +01:00
Nawar Hamo
cb201f3b2d
update README to mention GH action for C and C++ (#38) 2022-11-21 15:36:58 +01:00
Nawar Hamo
bc5ac1002a
update README to mention GH action for C and C++ (#37) 2022-11-21 14:37:11 +01:00
21 changed files with 413 additions and 119 deletions

2
.github/CODEOWNERS vendored
View file

@ -1 +1 @@
.github/CODEOWNERS @sonarsource/sonarcloud .github/CODEOWNERS @sonarsource/orchestration-processing-squad

7
.github/PULL_REQUEST_TEMPLATE.md vendored Normal file
View file

@ -0,0 +1,7 @@
Part of
<!--
Only for standalone PRs without Jira issue in the PR title:
* Replace this comment with Epic ID to create a new Task in Jira
* Replace this comment with Issue ID to create a new Sub-Task in Jira
* Ignore or delete this note to create a new Task in Jira without a parent
-->

28
.github/workflows/PullRequestClosed.yml vendored Normal file
View file

@ -0,0 +1,28 @@
name: Pull Request Closed
on:
pull_request:
types: [closed]
jobs:
PullRequestClosed_job:
name: Pull Request Closed
runs-on: github-ubuntu-latest-s
permissions:
id-token: write
pull-requests: read
# For external PR, ticket should be moved manually
if: |
github.event.pull_request.head.repo.full_name == github.repository
steps:
- id: secrets
uses: SonarSource/vault-action-wrapper@v3
with:
secrets: |
development/kv/data/jira user | JIRA_USER;
development/kv/data/jira token | JIRA_TOKEN;
- uses: sonarsource/gh-action-lt-backlog/PullRequestClosed@v2
with:
github-token: ${{secrets.GITHUB_TOKEN}}
jira-user: ${{ fromJSON(steps.secrets.outputs.vault).JIRA_USER }}
jira-token: ${{ fromJSON(steps.secrets.outputs.vault).JIRA_TOKEN }}

View file

@ -0,0 +1,29 @@
name: Pull Request Created
on:
pull_request:
types: ["opened"]
jobs:
PullRequestCreated_job:
name: Pull Request Created
runs-on: github-ubuntu-latest-s
permissions:
id-token: write
# For external PR, ticket should be created manually
if: |
github.event.pull_request.head.repo.full_name == github.repository
steps:
- id: secrets
uses: SonarSource/vault-action-wrapper@v3
with:
secrets: |
development/github/token/{REPO_OWNER_NAME_DASH}-jira token | GITHUB_TOKEN;
development/kv/data/jira user | JIRA_USER;
development/kv/data/jira token | JIRA_TOKEN;
- uses: sonarsource/gh-action-lt-backlog/PullRequestCreated@v2
with:
github-token: ${{ fromJSON(steps.secrets.outputs.vault).GITHUB_TOKEN }}
jira-user: ${{ fromJSON(steps.secrets.outputs.vault).JIRA_USER }}
jira-token: ${{ fromJSON(steps.secrets.outputs.vault).JIRA_TOKEN }}
jira-project: SCSCANGHA

28
.github/workflows/RequestReview.yml vendored Normal file
View file

@ -0,0 +1,28 @@
name: Request review
on:
pull_request:
types: ["review_requested"]
jobs:
RequestReview_job:
name: Request review
runs-on: github-ubuntu-latest-s
permissions:
id-token: write
# For external PR, ticket should be moved manually
if: |
github.event.pull_request.head.repo.full_name == github.repository
steps:
- id: secrets
uses: SonarSource/vault-action-wrapper@v3
with:
secrets: |
development/github/token/{REPO_OWNER_NAME_DASH}-jira token | GITHUB_TOKEN;
development/kv/data/jira user | JIRA_USER;
development/kv/data/jira token | JIRA_TOKEN;
- uses: sonarsource/gh-action-lt-backlog/RequestReview@v2
with:
github-token: ${{ fromJSON(steps.secrets.outputs.vault).GITHUB_TOKEN }}
jira-user: ${{ fromJSON(steps.secrets.outputs.vault).JIRA_USER }}
jira-token: ${{ fromJSON(steps.secrets.outputs.vault).JIRA_TOKEN }}

30
.github/workflows/SubmitReview.yml vendored Normal file
View file

@ -0,0 +1,30 @@
name: Submit Review
on:
pull_request_review:
types: [submitted]
jobs:
SubmitReview_job:
name: Submit Review
runs-on: github-ubuntu-latest-s
permissions:
id-token: write
pull-requests: read
# For external PR, ticket should be moved manually
if: |
github.event.pull_request.head.repo.full_name == github.repository
&& (github.event.review.state == 'changes_requested'
|| github.event.review.state == 'approved')
steps:
- id: secrets
uses: SonarSource/vault-action-wrapper@v3
with:
secrets: |
development/kv/data/jira user | JIRA_USER;
development/kv/data/jira token | JIRA_TOKEN;
- uses: sonarsource/gh-action-lt-backlog/SubmitReview@v2
with:
github-token: ${{secrets.GITHUB_TOKEN}}
jira-user: ${{ fromJSON(steps.secrets.outputs.vault).JIRA_USER }}
jira-token: ${{ fromJSON(steps.secrets.outputs.vault).JIRA_TOKEN }}

101
.github/workflows/qa.yml vendored Normal file
View file

@ -0,0 +1,101 @@
name: QA
on:
push:
branches:
- master
pull_request:
types: [opened, synchronize, reopened]
jobs:
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_TOKEN: FAKE_TOKEN
- 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_TOKEN: FAKE_TOKEN
- name: Assert
run: |
./test/assertFileContains ./output.properties "sonar.projectBaseDir=.*/baseDir"
scannerVersionTest:
name: >
'scannerVersion' input
runs-on: github-ubuntu-latest-s # 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: github-ubuntu-latest-s # 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

32
.github/workflows/update-tags.yml vendored Normal file
View file

@ -0,0 +1,32 @@
name: Update Tags
on:
push:
tags:
- v*.*.*
jobs:
generate:
runs-on: github-ubuntu-latest-s
permissions:
contents: write
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Parse semver
uses: madhead/semver-utils@40bbdc6e50b258c09f35f574e83c51f60d2ce3a2 # v4.0.0
id: version
with:
version: ${{ github.ref_name }}
- name: Update tags
run: |
TAGS='v${{ steps.version.outputs.major }} v${{ steps.version.outputs.major }}.${{ steps.version.outputs.minor }}'
for t in $TAGS; do
git tag -f "$t"
git push origin ":$t" 2>/dev/null || true
git push origin "$t"
done

View file

@ -1,11 +0,0 @@
# any language
language: python
services:
- docker
script:
- docker -v
- docker build --no-cache -t sonarsource/sonarcloud-github-action .
- docker image ls sonarsource/sonarcloud-github-action
- docker history sonarsource/sonarcloud-github-action

View file

@ -1,28 +0,0 @@
FROM sonarsource/sonar-scanner-cli:4.7
LABEL version="0.0.1" \
repository="https://github.com/sonarsource/sonarcloud-github-action" \
homepage="https://github.com/sonarsource/sonarcloud-github-action" \
maintainer="SonarSource" \
com.github.actions.name="SonarCloud Scan" \
com.github.actions.description="Scan your code with SonarCloud to detect bugs, vulnerabilities and code smells in more than 25 programming languages." \
com.github.actions.icon="check" \
com.github.actions.color="green"
ARG SONAR_SCANNER_HOME=/opt/sonar-scanner
ARG NODEJS_HOME=/opt/nodejs
ENV PATH=${PATH}:${SONAR_SCANNER_HOME}/bin:${NODEJS_HOME}/bin
# set up local envs in order to allow for special chars (non-asci) in filenames
ENV LC_ALL="C.UTF-8"
WORKDIR /opt
# https://help.github.com/en/actions/creating-actions/dockerfile-support-for-github-actions#user
USER root
# Prepare entrypoint
COPY entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]

135
README.md
View file

@ -1,112 +1,151 @@
# Scan your code with SonarCloud # Scan your code with SonarQube Cloud [![QA](https://github.com/SonarSource/sonarcloud-github-action/actions/workflows/qa.yml/badge.svg)](https://github.com/SonarSource/sonarcloud-github-action/actions/workflows/qa.yml)
Using this GitHub Action, scan your code with [SonarCloud](https://sonarcloud.io/) to detects bugs, vulnerabilities and code smells in more than 20 programming languages! > [!WARNING]
> This action is deprecated and will be removed in a future release.
> Please use the `sonarqube-scan-action` action instead.
> The `sonarqube-scan-action` is a drop-in replacement for this action, you can find it [here](https://github.com/marketplace/actions/official-sonarqube-scan).
<img src="./images/SonarCloud-72px.png"> This SonarSource project, available as a GitHub Action, scans your projects with SonarQube [Cloud](https://www.sonarsource.com/products/sonarcloud/).
SonarCloud is the leading product for Continuous Code Quality & Code Security online, totally free for open-source projects. It supports all major programming languages, including Java, JavaScript, TypeScript, C#, C/C++ and many more. If your code is closed source, SonarCloud also offers a paid plan to run private analyses. ![Logo](./images/SQ_Logo_Cloud_Dark_Backgrounds.png#gh-dark-mode-only)
![Logo](./images/SQ_Logo_Cloud_Light_Backgrounds.png#gh-light-mode-only)
SonarQube [Cloud](https://www.sonarsource.com/products/sonarcloud/) (formerly SonarCloud) is a widely used static analysis solution for continuous code quality and security inspection.
It helps developers detect coding issues in 30+ languages, frameworks, and IaC platforms, including Java, JavaScript, TypeScript, C#, Python, C, C++, and [many more](https://www.sonarsource.com/knowledge/languages/).
The solution also provides fix recommendations leveraging AI with Sonar's AI CodeFix capability.
## Requirements ## Requirements
* Have an account on SonarCloud. [Sign up for free now](https://sonarcloud.io/sessions/init/github) if it's not already the case! * Create your account on SonarQube Cloud. [Sign up for free](https://www.sonarsource.com/products/sonarcloud/signup/?utm_medium=referral&utm_source=github&utm_campaign=sc-signup&utm_content=signup-sonarcloud-listing-x-x&utm_term=ww-psp-x) now if it's not already the case!
* The repository to analyze is set up on SonarCloud. [Set it up](https://sonarcloud.io/projects/create) in just one click. * The repository to analyze is set up on SonarQube Cloud. [Set it up](https://sonarcloud.io/projects/create) in just one click.
## 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.organization=<replace with your SonarCloud organization key> sonar.organization=<replace with your SonarQube Cloud organization key>
sonar.projectKey=<replace with the key generated when setting up the project on SonarCloud> sonar.projectKey=<replace with the key generated when setting up the project on SonarQube Cloud>
# relative paths to source directories. More details and properties are described # relative paths to source directories. More details and properties are described
# in https://sonarcloud.io/documentation/project-administration/narrowing-the-focus/ # at https://docs.sonarsource.com/sonarqube-cloud/advanced-setup/analysis-scope/
sonar.sources=. sonar.sources=.
``` ```
The workflow, usually declared in `.github/workflows/build.yml`, looks like: The workflow, usually declared under `.github/workflows`, looks like:
```yaml ```yaml
on: on:
# Trigger analysis when pushing in master or pull requests, and when creating # Trigger analysis when pushing to your main branches, and when creating a pull request.
# a pull request.
push: push:
branches: branches:
- main
- master - master
- develop
- 'releases/**'
pull_request: pull_request:
types: [opened, synchronize, reopened] types: [opened, synchronize, reopened]
name: Main Workflow name: Main Workflow
jobs: jobs:
sonarcloud: sonarqube:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v2 - 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: SonarCloud Scan - name: SonarQube Scan
uses: sonarsource/sonarcloud-github-action@master uses: sonarsource/sonarcloud-github-action@<action version> # Ex: v4.0.0, See the latest version at https://github.com/marketplace/actions/sonarcloud-scan
env: env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
``` ```
## Action parameters
You can change the analysis base directory by using the optional input `projectBaseDir` like this: You can change the analysis base directory by using the optional input `projectBaseDir` like this:
```yaml ```yaml
uses: sonarsource/sonarcloud-github-action@master - uses: sonarsource/sonarcloud-github-action@<action version>
with: with:
projectBaseDir: my-custom-directory projectBaseDir: app/src
``` ```
In case you need to add additional analysis parameters, you can use the `args` option: In case you need to specify the version of the Sonar Scanner, you can use the `scannerVersion` option:
```yaml ```yaml
- name: Analyze with SonarCloud - uses: sonarsource/sonarcloud-github-action@<action version>
uses: sonarsource/sonarcloud-github-action@master
with: with:
projectBaseDir: my-custom-directory scannerVersion: 6.2.0.4584
```
In case you need to add additional analysis parameters, and you do not wish to set them in the `sonar-project.properties` file, you can use the `args` option:
```yaml
- uses: sonarsource/sonarcloud-github-action@<action version>
with:
projectBaseDir: app/src
args: > args: >
-Dsonar.organization=my-organization -Dsonar.organization=my-organization
-Dsonar.projectKey=my-projectkey -Dsonar.projectKey=my-projectkey
-Dsonar.python.coverage.reportPaths=coverage.xml -Dsonar.python.coverage.reportPaths=coverage.xml
-Dsonar.sources=lib/ -Dsonar.sources=lib/
-Dsonar.test.exclusions=tests/**
-Dsonar.tests=tests/ -Dsonar.tests=tests/
-Dsonar.test.exclusions=tests/**
-Dsonar.verbose=true -Dsonar.verbose=true
``` ```
More information about possible analysis parameters is found in the documentation at: You can also specify the URL where to retrieve the SonarScanner CLI from.
https://docs.sonarcloud.io/advanced-setup/analysis-parameters The specified URL overrides the default address: `https://binaries.sonarsource.com/Distribution/sonar-scanner-cli`.
This can be useful when the runner executing the action is self-hosted and has regulated or no access to the Internet:
See also example configurations at: ```yaml
https://github.com/sonarsource/sonarcloud-github-action-samples/ - uses: sonarsource/sonarcloud-github-action@<action version>
with:
scannerBinariesUrl: https://my.custom.binaries.url.com/Distribution/sonar-scanner-cli/
```
### Secrets More information about possible analysis parameters can be found in the [Analysis parameters page](https://docs.sonarsource.com/sonarqube-cloud/advanced-setup/analysis-parameters/) of the SonarQube Cloud documentation.
- `SONAR_TOKEN` **Required** this is the token used to authenticate access to SonarCloud. You can generate a token on your [Security page in SonarCloud](https://sonarcloud.io/account/security/). You can set the `SONAR_TOKEN` environment variable in the "Secrets" settings page of your repository. ### Environment variables
- `SONAR_TOKEN` **Required** this is the token used to authenticate access to SonarQube. You can read more about security tokens in the [documentation](https://docs.sonarsource.com/sonarqube-cloud/managing-your-account/managing-tokens/). 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).
- *`GITHUB_TOKEN` Provided by Github (see [Authenticating with the GITHUB_TOKEN](https://help.github.com/en/actions/automating-your-workflow-with-github-actions/authenticating-with-the-github_token)).* - *`GITHUB_TOKEN` Provided by Github (see [Authenticating with the GITHUB_TOKEN](https://help.github.com/en/actions/automating-your-workflow-with-github-actions/authenticating-with-the-github_token)).*
- `SONAR_ROOT_CERT` Holds an additional certificate (in PEM format) that is used to validate the certificate of a secured proxy to SonarQube Cloud. 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).
## Example of pull request analysis Here is an example of how you can pass a certificate (in PEM format) to the Scanner truststore:
<img src="./images/SonarCloud-analysis-in-Checks.png"> ```yaml
- uses: sonarsource/sonarcloud-github-action@<action version>
env:
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
SONAR_ROOT_CERT: ${{ secrets.SONAR_ROOT_CERT }}
```
## Do not use this GitHub action if you are in the following situations 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:
* Your code is built with Maven: run 'org.sonarsource.scanner.maven:sonar' during the build ```yaml
* Your code is built with Gradle: use the SonarQube plugin for Gradle during the build - uses: sonarsource/sonarcloud-github-action@<action version>
* You want to analyze a .NET solution: Follow our interactive tutorial for Github Actions after importing your project directly in SonarCloud env:
* You want to analyze C or C++ code: rely on our [Travis-CI extension](https://docs.travis-ci.com/user/sonarcloud/) and look at [our sample projects](https://github.com/orgs/sonarsource-cfamily-examples/repositories?language=&q=-sc&type=all) SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
* You want to analyze C, C++, or Objective-C code on `windows-latest`: see [this guide](https://community.sonarsource.com/t/sonarcloud-with-msbuild-build-wrapper-on-github-actions/35607) contributed on our community forum LC_ALL: "ru_RU.UTF-8"
```
## Have question or feedback? ## Alternatives for Java, .NET, and C/C++ projects
To provide feedback (requesting a feature or reporting a bug) please post on the [SonarSource Community Forum](https://community.sonarsource.com/) with the tag `sonarcloud`. This GitHub Action will not work for all technologies. If you are in one of the following situations, you should use the following alternatives:
* Your code is built with Maven. Read the documentation about our [SonarScanner for Maven](https://docs.sonarsource.com/sonarqube-cloud/advanced-setup/ci-based-analysis/sonarscanner-for-maven/).
* Your code is built with Gradle. Read the documentation about our [SonarScanner for Gradle](https://docs.sonarsource.com/sonarqube-cloud/advanced-setup/ci-based-analysis/sonarscanner-for-gradle/).
* You want to analyze a .NET solution. Read the documentation about our [SonarScanner for .NET](https://docs.sonarsource.com/sonarqube-cloud/advanced-setup/ci-based-analysis/sonarscanner-for-dotnet/introduction/).
* 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 Cloud Scan for C and C++](https://github.com/marketplace/actions/sonarcloud-scan-for-c-and-c) GitHub Action - look at [our sample C and C++ project](https://github.com/sonarsource-cfamily-examples?q=gh-actions-sc&type=all&language=&sort=).
## 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/sc/9/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.
[![Build Status](https://travis-ci.com/SonarSource/sonarcloud-github-action.svg?branch=master)](https://travis-ci.com/SonarSource/sonarcloud-github-action)

13
SECURITY.md Normal file
View 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). Sonars 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).

View file

@ -1,18 +1,37 @@
name: SonarCloud Scan name: SonarQube Cloud Scan
description: > description: >
Scan your code with SonarCloud to detect bugs, vulnerabilities and code smells Scan your code with SonarQube Cloud to detect coding issues in 30+
in more than 25 programming languages. languages. (Formerly SonarCloud)
branding: branding:
icon: check icon: check
color: green color: green
runs:
using: docker
image: Dockerfile
inputs: inputs:
args: args:
description: Additional arguments to the sonarcloud scanner description: Additional arguments to the Sonar Scanner CLI
required: false required: false
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
# to be kept in sync with the default version in the sonarqube-scan-action
default: 7.0.2.4839
scannerBinariesUrl:
description: URL to download the Sonar Scanner CLI binaries from
required: false
default: https://binaries.sonarsource.com/Distribution/sonar-scanner-cli
runs:
using: "composite"
steps:
- name: Deprecation warning
shell: bash
run: |
echo "::warning title=SonarScanner::This action is deprecated and will be removed in a future release. Please use the sonarqube-scan-action action instead. The sonarqube-scan-action is a drop-in replacement for this action."
- name: SonarQube Cloud Scan
uses: SonarSource/sonarqube-scan-action@v5.0.0
with:
args: ${{ inputs.args }}
projectBaseDir: ${{ inputs.projectBaseDir }}
scannerVersion: ${{ inputs.scannerVersion }}
scannerBinariesUrl: ${{ inputs.scannerBinariesUrl }}

View file

@ -1,24 +0,0 @@
#!/bin/bash
set -e
if [[ -z "${SONAR_TOKEN}" ]]; then
echo "Set the SONAR_TOKEN env variable."
exit 1
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
if [[ -z "${SONARCLOUD_URL}" ]]; then
SONARCLOUD_URL="https://sonarcloud.io"
fi
unset JAVA_HOME
sonar-scanner -Dsonar.projectBaseDir=${INPUT_PROJECTBASEDIR} -Dsonar.host.url=${SONARCLOUD_URL} ${INPUT_ARGS}

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 94 KiB

13
test/assertFileContains Executable file
View file

@ -0,0 +1,13 @@
#!/bin/bash
set -eo pipefail
error() { echo -e "\\e[31m✗ $*\\e[0m"; }
. ${BASH_SOURCE%/*}/assertFileExists $1
if ! grep -q $2 $1; then
error "'$2' not found in '$1'"
cat $1
exit 1
fi

8
test/assertFileDoesntExist Executable file
View file

@ -0,0 +1,8 @@
#!/bin/bash
error() { echo -e "\\e[31m✗ $*\\e[0m"; }
if [ -f $1 ]; then
error "File '$1' found"
exit 1
fi

10
test/assertFileExists Executable file
View file

@ -0,0 +1,10 @@
#!/bin/bash
set -eo pipefail
error() { echo -e "\\e[31m✗ $*\\e[0m"; }
if [ ! -f $1 ]; then
error "File '$1' not found"
exit 1
fi