From e61059660ca00ba69d1721b7d48653c52848bece Mon Sep 17 00:00:00 2001 From: Johannes Schindelin Date: Wed, 14 Jul 2021 11:50:33 +0000 Subject: ci: run `make sparse` as part of the GitHub workflow Occasionally we receive reviews after patches were integrated, where `sparse` (https://sparse.docs.kernel.org/en/latest/ has more information on that project) identified problems such as file-local variables or functions being declared as global. By running `sparse` as part of our Continuous Integration, we can catch such things much earlier. Even better: developers who activated GitHub Actions on their forks can catch such issues before even sending their patches to the Git mailing list. This addresses https://github.com/gitgitgadget/git/issues/345 Note: Not even Ubuntu 20.04 ships with a new enough version of `sparse` to accommodate Git's needs. The symptom looks like this: add-interactive.c:537:51: error: Using plain integer as NULL pointer To counter that, we download and install the custom-built `sparse` package from the Azure Pipeline that we specifically created to address this issue. Signed-off-by: Johannes Schindelin Signed-off-by: Junio C Hamano diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 73856ba..1b5c039 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -350,6 +350,27 @@ jobs: - uses: actions/checkout@v1 - run: ci/install-dependencies.sh - run: ci/run-static-analysis.sh + sparse: + needs: ci-config + if: needs.ci-config.outputs.enabled == 'yes' + env: + jobname: sparse + runs-on: ubuntu-20.04 + steps: + - name: Download a current `sparse` package + # Ubuntu's `sparse` version is too old for us + uses: git-for-windows/get-azure-pipelines-artifact@v0 + with: + repository: git/git + definitionId: 10 + artifact: sparse-20.04 + - name: Install the current `sparse` package + run: sudo dpkg -i sparse-20.04/sparse_*.deb + - name: Install other dependencies + run: | + sudo apt-get install -q -y libssl-dev libcurl4-openssl-dev libexpat-dev gettext zlib1g-dev + - uses: actions/checkout@v2 + - run: make sparse documentation: needs: ci-config if: needs.ci-config.outputs.enabled == 'yes' -- cgit v0.10.2-6-g49f6 From 8231c841ff7f213a86aa1fa890ea213f2dc630be Mon Sep 17 00:00:00 2001 From: Jeff King Date: Mon, 26 Jul 2021 13:53:39 -0400 Subject: ci: run "apt-get update" before "apt-get install" The "sparse" workflow runs "apt-get install" to pick up a few necessary packages. But it needs to run "apt-get update" first, or it risks trying to download an old package version that no longer exists. And in fact this happens now, with output like: 2021-07-26T17:40:51.2551880Z E: Failed to fetch http://security.ubuntu.com/ubuntu/pool/main/c/curl/libcurl4-openssl-dev_7.68.0-1ubuntu2.5_amd64.deb 404 Not Found [IP: 52.147.219.192 80] 2021-07-26T17:40:51.2554304Z E: Unable to fetch some archives, maybe run apt-get update or try with --fix-missing? Our other ci jobs don't suffer from this; they rely on scripts in ci/, and ci/install-dependencies does the appropriate "apt-get update". Signed-off-by: Jeff King Acked-by: Johannes Schindelin Signed-off-by: Junio C Hamano diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 1b5c039..0187888 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -368,6 +368,7 @@ jobs: run: sudo dpkg -i sparse-20.04/sparse_*.deb - name: Install other dependencies run: | + sudo apt-get update -q && sudo apt-get install -q -y libssl-dev libcurl4-openssl-dev libexpat-dev gettext zlib1g-dev - uses: actions/checkout@v2 - run: make sparse -- cgit v0.10.2-6-g49f6 From 27f45ccf336d70e9078075eb963fb92541da8690 Mon Sep 17 00:00:00 2001 From: Jeff King Date: Mon, 26 Jul 2021 14:22:27 -0400 Subject: ci/install-dependencies: handle "sparse" job package installs This just matches the style/location of the package installation for other jobs. There should be no functional change. I did flip the order of the options and command-name ("-y update" instead of "update -y") for consistency with other lines in the same file. Note also that we have to reorder the dependency install with the "checkout" action, so that we actually have the "ci" scripts available. Signed-off-by: Jeff King Acked-by: Johannes Schindelin Signed-off-by: Junio C Hamano diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 0187888..224c46b 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -366,11 +366,9 @@ jobs: artifact: sparse-20.04 - name: Install the current `sparse` package run: sudo dpkg -i sparse-20.04/sparse_*.deb - - name: Install other dependencies - run: | - sudo apt-get update -q && - sudo apt-get install -q -y libssl-dev libcurl4-openssl-dev libexpat-dev gettext zlib1g-dev - uses: actions/checkout@v2 + - name: Install other dependencies + run: ci/install-dependencies.sh - run: make sparse documentation: needs: ci-config diff --git a/ci/install-dependencies.sh b/ci/install-dependencies.sh index 67852d0..5772081 100755 --- a/ci/install-dependencies.sh +++ b/ci/install-dependencies.sh @@ -65,6 +65,11 @@ StaticAnalysis) sudo apt-get -q -y install coccinelle libcurl4-openssl-dev libssl-dev \ libexpat-dev gettext make ;; +sparse) + sudo apt-get -q update -q + sudo apt-get -q -y install libssl-dev libcurl4-openssl-dev \ + libexpat-dev gettext zlib1g-dev + ;; Documentation) sudo apt-get -q update sudo apt-get -q -y install asciidoc xmlto docbook-xsl-ns make -- cgit v0.10.2-6-g49f6