diff --git a/.github/workflows/coverity.yml b/.github/workflows/coverity.yml index d4cef73b365..4f7f74d54b2 100644 --- a/.github/workflows/coverity.yml +++ b/.github/workflows/coverity.yml @@ -40,7 +40,7 @@ name: Apache Cloudberry Coverity Scan on: schedule: - - cron: "0 0 * * *" + - cron: "0 0 * * 1" workflow_dispatch: permissions: @@ -62,7 +62,8 @@ jobs: uses: actions/checkout@v4 with: fetch-depth: 1 - + submodules: true + - name: Environment Initialization run: | if ! su - gpadmin -c "/tmp/init_system.sh"; then @@ -72,6 +73,7 @@ jobs: - name: Download Coverity build tool run: | + set -euox pipefail wget -c -N https://scan.coverity.com/download/linux64 --post-data "token=${{ secrets.COVERITY_SCAN_TOKEN }}&project=apache%2Fcloudberry" -O coverity_tool.tar.gz mkdir -p coverity_tool tar xzf coverity_tool.tar.gz --strip 1 -C coverity_tool @@ -79,8 +81,8 @@ jobs: - name: Build with Coverity build tool run: | + set -euox pipefail WORKSPACE="${GITHUB_WORKSPACE}" - sudo rm -rf /usr/local/cloudberry-db sudo chmod a+w /usr/local mkdir -p /usr/local/cloudberry-db/lib sudo cp /usr/local/xerces-c/lib/libxerces-c.so \ @@ -90,7 +92,6 @@ jobs: su - gpadmin -c "cd $WORKSPACE" export LD_LIBRARY_PATH=/usr/local/cloudberry-db/lib:LD_LIBRARY_PATH export PATH=$WORKSPACE/coverity_tool/bin:$PATH - git submodule update --init ./configure --prefix=/usr/local/cloudberry-db \ --disable-external-fts \ --enable-gpcloud \ diff --git a/.github/workflows/sonarqube.yml b/.github/workflows/sonarqube.yml new file mode 100644 index 00000000000..6dcbb3eae4e --- /dev/null +++ b/.github/workflows/sonarqube.yml @@ -0,0 +1,120 @@ +# -------------------------------------------------------------------- +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed +# with this work for additional information regarding copyright +# ownership. The ASF licenses this file to You under the Apache +# License, Version 2.0 (the "License"); you may not use this file +# except in compliance with the License. You may obtain a copy of the +# License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. See the License for the specific language governing +# permissions and limitations under the License. +# +# -------------------------------------------------------------------- +# GitHub Actions Workflow: Apache Cloudberry SonarQube Pipeline +# -------------------------------------------------------------------- +# Description: +# +# This workflow performs scheduled SonarQube analysis for Cloudberry. +# +# Workflow Overview: +# 1. **Check Skip**: +# - workflow run currently is limited to "apache" GitHub organization +# +# 2. **scan Job**: +# - performs scan and upload result to https://sonarcloud.io/project/overview?id=apache_cloudberry +# Triggers: +# - Weekly schedule +# - optional manual dispatch. +# +# Notes: +# - SONARCLOUD_TOKEN secret is provided by the ASF Infra team +# -------------------------------------------------------------------- +name: Apache Cloudberry SonarQube Cloud Analysis + +on: + schedule: + - cron: "0 0 * * 1" + workflow_dispatch: + +permissions: + contents: read + +jobs: + sonarqube-analysis: + runs-on: ubuntu-22.04 + if: ${{ github.repository_owner == 'apache' }} + + container: + image: apache/incubator-cloudberry:cbdb-build-rocky9-latest + options: >- + --user root + -h cdw + env: + BUILD_WRAPPER_OUT_DIR: build_wrapper_output_directory # Directory where build-wrapper output will be placed + + steps: + - name: Checkout Apache Cloudberry + uses: actions/checkout@v4 + with: + fetch-depth: 0 # Shallow clones should be disabled for a better relevancy of analysis + submodules: true + + - name: Environment Initialization + run: | + if ! su - gpadmin -c "/tmp/init_system.sh"; then + echo "::error::Container initialization failed" + exit 1 + fi + + - name: Install Build Wrapper + uses: SonarSource/sonarqube-scan-action/install-build-wrapper@v5 + + - name: Run Build Wrapper + run: | + set -euox pipefail + sudo chmod a+w /usr/local + mkdir -p /usr/local/cloudberry-db/lib + sudo cp /usr/local/xerces-c/lib/libxerces-c.so \ + /usr/local/xerces-c/lib/libxerces-c-3.3.so \ + /usr/local/cloudberry-db/lib + sudo chown -R gpadmin:gpadmin /usr/local/cloudberry-db + export LD_LIBRARY_PATH=/usr/local/cloudberry-db/lib:LD_LIBRARY_PATH + ./configure --prefix=/usr/local/cloudberry-db \ + --disable-external-fts \ + --enable-gpcloud \ + --enable-ic-proxy \ + --enable-orafce \ + --enable-orca \ + --enable-pax \ + --enable-pxf \ + --enable-tap-tests \ + --with-gssapi \ + --with-ldap \ + --with-libxml \ + --with-lz4 \ + --with-openssl \ + --with-pam \ + --with-perl \ + --with-pgport=5432 \ + --with-python \ + --with-pythonsrc-ext \ + --with-ssl=openssl \ + --with-uuid=e2fs \ + --with-includes=/usr/local/xerces-c/include \ + --with-libraries=/usr/local/cloudberry-db/lib + build-wrapper-linux-x86-64 --out-dir ${{ env.BUILD_WRAPPER_OUT_DIR }} make -j$(nproc) + + - name: SonarQube Scan + uses: SonarSource/sonarqube-scan-action@v5 + env: + SONAR_TOKEN: ${{ secrets.SONARCLOUD_TOKEN }} + with: + args: > + --define sonar.cfamily.compile-commands="${{ env.BUILD_WRAPPER_OUT_DIR }}/compile_commands.json" diff --git a/README.md b/README.md index 6d0dd20b290..7ef437e2147 100644 --- a/README.md +++ b/README.md @@ -23,7 +23,9 @@ Coverity Scan Build Status - + + SonarQube Cloud + --------- ## Introduction diff --git a/sonar-project.properties b/sonar-project.properties new file mode 100644 index 00000000000..2b24b1a0427 --- /dev/null +++ b/sonar-project.properties @@ -0,0 +1,12 @@ +sonar.projectKey=apache_cloudberry +sonar.organization=apache + +# This is the name and version displayed in the SonarCloud UI. +sonar.projectName=Apache Cloudberry +sonar.projectVersion=Main + +# Path is relative to the sonar-project.properties file. Replace "\" by "/" on Windows. +sonar.sources=. + +# Encoding of the source code. Default is default system encoding +#sonar.sourceEncoding=UTF-8