Compare commits
9 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
13990a6956 | ||
|
|
66a0baa492 | ||
|
|
884b79409b | ||
|
|
f885e52a75 | ||
|
|
2af7c4bea3 | ||
|
|
0c0f3958d9 | ||
|
|
8c8682dac7 | ||
|
|
bfafdf2896 | ||
|
|
aecaf43ae5 |
@@ -1,4 +1,4 @@
|
|||||||
load("github.com/SonarSource/cirrus-modules@v2", "load_features")
|
load("github.com/SonarSource/cirrus-modules@v3", "load_features")
|
||||||
|
|
||||||
def main(ctx):
|
def main(ctx):
|
||||||
return load_features(ctx)
|
return load_features(ctx)
|
||||||
|
|||||||
@@ -15,7 +15,6 @@ vm_instance_template: &VM_TEMPLATE
|
|||||||
image: docker-builder-v*
|
image: docker-builder-v*
|
||||||
type: t2.small
|
type: t2.small
|
||||||
region: eu-central-1
|
region: eu-central-1
|
||||||
subnet_id: ${CIRRUS_AWS_SUBNET}
|
|
||||||
disk: 10
|
disk: 10
|
||||||
cpu: 4
|
cpu: 4
|
||||||
memory: 16G
|
memory: 16G
|
||||||
|
|||||||
117
.github/workflows/qa.yml
vendored
117
.github/workflows/qa.yml
vendored
@@ -8,6 +8,22 @@ on:
|
|||||||
types: [opened, synchronize, reopened]
|
types: [opened, synchronize, reopened]
|
||||||
|
|
||||||
jobs:
|
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:
|
argsInputTest:
|
||||||
name: >
|
name: >
|
||||||
'args' input
|
'args' input
|
||||||
@@ -19,9 +35,10 @@ jobs:
|
|||||||
- name: Run action with args
|
- name: Run action with args
|
||||||
uses: ./
|
uses: ./
|
||||||
with:
|
with:
|
||||||
args: -Dsonar.someArg=aValue -Dsonar.scanner.dumpToFile=./output.properties
|
args: -Dsonar.someArg=aValue
|
||||||
env:
|
env:
|
||||||
SONAR_HOST_URL: http://not_actually_used
|
SONAR_HOST_URL: http://not_actually_used
|
||||||
|
SONAR_SCANNER_JSON_PARAMS: '{"sonar.scanner.internal.dumpToFile": "./output.properties"}'
|
||||||
- name: Assert
|
- name: Assert
|
||||||
run: |
|
run: |
|
||||||
./test/assertFileContains ./output.properties "sonar.someArg=aValue"
|
./test/assertFileContains ./output.properties "sonar.someArg=aValue"
|
||||||
@@ -37,10 +54,10 @@ jobs:
|
|||||||
- name: Run action with projectBaseDir
|
- name: Run action with projectBaseDir
|
||||||
uses: ./
|
uses: ./
|
||||||
with:
|
with:
|
||||||
args: -Dsonar.scanner.dumpToFile=./output.properties
|
|
||||||
projectBaseDir: ./baseDir
|
projectBaseDir: ./baseDir
|
||||||
env:
|
env:
|
||||||
SONAR_HOST_URL: http://not_actually_used
|
SONAR_HOST_URL: http://not_actually_used
|
||||||
|
SONAR_SCANNER_JSON_PARAMS: '{"sonar.scanner.internal.dumpToFile": "./output.properties"}'
|
||||||
- name: Assert
|
- name: Assert
|
||||||
run: |
|
run: |
|
||||||
./test/assertFileContains ./output.properties "sonar.projectBaseDir=.*/baseDir"
|
./test/assertFileContains ./output.properties "sonar.projectBaseDir=.*/baseDir"
|
||||||
@@ -58,9 +75,9 @@ jobs:
|
|||||||
continue-on-error: true
|
continue-on-error: true
|
||||||
env:
|
env:
|
||||||
SONAR_HOST_URL: http://not_actually_used
|
SONAR_HOST_URL: http://not_actually_used
|
||||||
|
SONAR_SCANNER_JSON_PARAMS: '{"sonar.scanner.internal.dumpToFile": "./output.properties"}'
|
||||||
with:
|
with:
|
||||||
projectBaseDir: ./test/gradle-project
|
projectBaseDir: ./test/gradle-project
|
||||||
args: -Dsonar.scanner.dumpToFile=./output.properties
|
|
||||||
- name: Assert
|
- name: Assert
|
||||||
run: |
|
run: |
|
||||||
./test/assertFileExists ./output.properties
|
./test/assertFileExists ./output.properties
|
||||||
@@ -78,9 +95,9 @@ jobs:
|
|||||||
continue-on-error: true
|
continue-on-error: true
|
||||||
env:
|
env:
|
||||||
SONAR_HOST_URL: http://not_actually_used
|
SONAR_HOST_URL: http://not_actually_used
|
||||||
|
SONAR_SCANNER_JSON_PARAMS: '{"sonar.scanner.internal.dumpToFile": "./output.properties"}'
|
||||||
with:
|
with:
|
||||||
projectBaseDir: ./test/gradle-project
|
projectBaseDir: ./test/gradle-project
|
||||||
args: -Dsonar.scanner.dumpToFile=./output.properties
|
|
||||||
- name: Assert
|
- name: Assert
|
||||||
run: |
|
run: |
|
||||||
./test/assertFileExists ./output.properties
|
./test/assertFileExists ./output.properties
|
||||||
@@ -98,9 +115,9 @@ jobs:
|
|||||||
continue-on-error: true
|
continue-on-error: true
|
||||||
env:
|
env:
|
||||||
SONAR_HOST_URL: http://not_actually_used
|
SONAR_HOST_URL: http://not_actually_used
|
||||||
|
SONAR_SCANNER_JSON_PARAMS: '{"sonar.scanner.internal.dumpToFile": "./output.properties"}'
|
||||||
with:
|
with:
|
||||||
projectBaseDir: ./test/maven-project
|
projectBaseDir: ./test/maven-project
|
||||||
args: -Dsonar.scanner.dumpToFile=./output.properties
|
|
||||||
- name: Assert
|
- name: Assert
|
||||||
run: |
|
run: |
|
||||||
./test/assertFileExists ./output.properties
|
./test/assertFileExists ./output.properties
|
||||||
@@ -145,11 +162,97 @@ jobs:
|
|||||||
token: ${{ secrets.GITHUB_TOKEN }}
|
token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
- name: Run action with debug mode
|
- name: Run action with debug mode
|
||||||
uses: ./
|
uses: ./
|
||||||
with:
|
|
||||||
args: -Dsonar.scanner.dumpToFile=./output.properties
|
|
||||||
env:
|
env:
|
||||||
RUNNER_DEBUG: 1
|
RUNNER_DEBUG: 1
|
||||||
SONAR_HOST_URL: http://not_actually_used
|
SONAR_HOST_URL: http://not_actually_used
|
||||||
|
SONAR_SCANNER_JSON_PARAMS: '{"sonar.scanner.internal.dumpToFile": "./output.properties"}'
|
||||||
- name: Assert
|
- name: Assert
|
||||||
run: |
|
run: |
|
||||||
./test/assertFileContains ./output.properties "sonar.verbose=true"
|
./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 }}-sonar
|
||||||
|
- name: Run action on sample project
|
||||||
|
id: runTest
|
||||||
|
uses: ./
|
||||||
|
env:
|
||||||
|
SONAR_HOST_URL: http://sonarqube: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
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
- name: Run action with SSL certificate
|
||||||
|
uses: ./
|
||||||
|
env:
|
||||||
|
SONAR_ROOT_CERT: |
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
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
|
||||||
|
Fct6d1S08JAosVnZcP2P7Yz+TbmDRtsqCgk=
|
||||||
|
-----END CERTIFICATE-----
|
||||||
|
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.scanner.truststorePassword=changeit"
|
||||||
|
|||||||
2
.github/workflows/update-tags.yml
vendored
2
.github/workflows/update-tags.yml
vendored
@@ -16,7 +16,7 @@ jobs:
|
|||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: Parse semver
|
- name: Parse semver
|
||||||
uses: madhead/semver-utils@40bbdc6e50b258c09f35f574e83c51f60d2ce3a2 # v4.0.0
|
uses: madhead/semver-utils@v4
|
||||||
id: version
|
id: version
|
||||||
with:
|
with:
|
||||||
version: ${{ github.ref_name }}
|
version: ${{ github.ref_name }}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
FROM sonarsource/sonar-scanner-cli:10.0
|
FROM sonarsource/sonar-scanner-cli:11.1
|
||||||
|
|
||||||
LABEL version="2.1.0" \
|
LABEL version="3.1.0" \
|
||||||
repository="https://github.com/sonarsource/sonarqube-scan-action" \
|
repository="https://github.com/sonarsource/sonarqube-scan-action" \
|
||||||
homepage="https://github.com/sonarsource/sonarqube-scan-action" \
|
homepage="https://github.com/sonarsource/sonarqube-scan-action" \
|
||||||
maintainer="SonarSource" \
|
maintainer="SonarSource" \
|
||||||
|
|||||||
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).
|
||||||
10
cleanup.sh
10
cleanup.sh
@@ -2,12 +2,12 @@
|
|||||||
|
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
if [ ! -d "${INPUT_PROJECTBASEDIR%/}/.scannerwork" ]; then
|
# Reset all files permissions to the default Runner user and group to allow the follow up steps (mainly cache) to access all files.
|
||||||
echo ".scannerwork directory not found; nothing to clean up."
|
|
||||||
exit
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
# Assume that the first (non-hidden) file in the project directory is one from the project, and not one written by the scanner
|
||||||
_tmp_file=$(ls "${INPUT_PROJECTBASEDIR%/}/" | head -1)
|
_tmp_file=$(ls "${INPUT_PROJECTBASEDIR%/}/" | head -1)
|
||||||
|
echo "Reading permissions from $_tmp_file"
|
||||||
PERM=$(stat -c "%u:%g" "${INPUT_PROJECTBASEDIR%/}/$_tmp_file")
|
PERM=$(stat -c "%u:%g" "${INPUT_PROJECTBASEDIR%/}/$_tmp_file")
|
||||||
|
|
||||||
chown -R $PERM "${INPUT_PROJECTBASEDIR%/}/.scannerwork/"
|
echo "Applying permissions $PERM to all files in the project base directory"
|
||||||
|
chown -R "$PERM" "${INPUT_PROJECTBASEDIR%/}/"
|
||||||
|
|||||||
@@ -1,6 +1,10 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
set -e
|
set -eo pipefail
|
||||||
|
|
||||||
|
echo "::warning title=Docker removed in the next major version::Users on the master branch of this GitHub action will be upgraded automatically on December 9th to its next major version, which replaces Docker with a composite action, executing in the runner environment. Self-hosted runners analyzing JS/TS code against SonarQube 10.2 and below will need to have Node JS installed."
|
||||||
|
|
||||||
|
declare -a args=()
|
||||||
|
|
||||||
if [[ -z "${SONAR_TOKEN}" ]]; then
|
if [[ -z "${SONAR_TOKEN}" ]]; then
|
||||||
echo "============================ WARNING ============================"
|
echo "============================ WARNING ============================"
|
||||||
@@ -9,10 +13,15 @@ if [[ -z "${SONAR_TOKEN}" ]]; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ -n "${SONAR_ROOT_CERT}" ]]; then
|
if [[ -n "${SONAR_ROOT_CERT}" ]]; then
|
||||||
echo "Adding custom root certificate to java certificate store"
|
echo "Adding custom root certificate to the scanner truststore"
|
||||||
rm -f /tmp/tmpcert.pem
|
rm -f /tmp/tmpcert.pem
|
||||||
echo "${SONAR_ROOT_CERT}" > /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
|
# we can't use the default "sonar" password as keytool requires a password with at least 6 characters
|
||||||
|
args+=("-Dsonar.scanner.truststorePassword=changeit")
|
||||||
|
mkdir -p $SONAR_USER_HOME/ssl
|
||||||
|
keytool -storetype PKCS12 -keystore $SONAR_USER_HOME/ssl/truststore.p12 -storepass changeit -noprompt -trustcacerts -importcert -alias sonarqube -file /tmp/tmpcert.pem
|
||||||
|
# for older SQ versions < 10.6
|
||||||
|
export SONAR_SCANNER_OPTS="${SONAR_SCANNER_OPTS:-} -Djavax.net.ssl.trustStore=$SONAR_USER_HOME/ssl/truststore.p12 -Djavax.net.ssl.trustStorePassword=changeit"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ -f "${INPUT_PROJECTBASEDIR%/}/pom.xml" ]]; then
|
if [[ -f "${INPUT_PROJECTBASEDIR%/}/pom.xml" ]]; then
|
||||||
@@ -25,12 +34,14 @@ if [[ -f "${INPUT_PROJECTBASEDIR%/}/build.gradle" || -f "${INPUT_PROJECTBASEDIR
|
|||||||
to get more accurate results."
|
to get more accurate results."
|
||||||
fi
|
fi
|
||||||
|
|
||||||
debug_flag=''
|
|
||||||
if [[ "$RUNNER_DEBUG" == '1' ]]; then
|
if [[ "$RUNNER_DEBUG" == '1' ]]; then
|
||||||
debug_flag='--debug'
|
args+=("--debug")
|
||||||
fi
|
fi
|
||||||
|
|
||||||
unset JAVA_HOME
|
unset JAVA_HOME
|
||||||
|
|
||||||
sonar-scanner $debug_flag -Dsonar.projectBaseDir=${INPUT_PROJECTBASEDIR} ${INPUT_ARGS}
|
args+=("-Dsonar.projectBaseDir=${INPUT_PROJECTBASEDIR}")
|
||||||
|
|
||||||
|
sonar-scanner "${args[@]}" ${INPUT_ARGS}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user