diff --git a/.github/workflows/tiobe-tics-cron.yaml b/.github/workflows/tiobe-tics-cron.yaml new file mode 100644 index 00000000..957962e9 --- /dev/null +++ b/.github/workflows/tiobe-tics-cron.yaml @@ -0,0 +1,88 @@ +name: Tiobe TICS nightly report + +on: + schedule: + # Runs every midnight + - cron: '0 0 * * *' + pull_request: + paths: + - .github/workflows/tiobe-tics-cron.yaml + + +permissions: + contents: read + +jobs: + TICS: + permissions: + contents: read + runs-on: ubuntu-latest + + steps: + - name: Checking out repo + uses: actions/checkout@v4 + + - uses: actions/setup-python@v5 + with: + python-version: '3.12' + + - name: Install Python dependencies + run: | + # pylint and flake8 are required by TICSQServer. + pip install pylint flake8 + pip install -r test/performance/requirements-test.txt + + - name: Install Go + uses: actions/setup-go@v5 + with: + go-version: "1.22" + + - name: go mod download + run: go mod download + + - name: Run Tests with Coverage + run: | + set -eux -o pipefail + + # TICS requires us to have the test results in cobertura xml format under the + # directory used below + sudo make go.coverage + go install github.com/boumenot/gocover-cobertura@latest + mkdir -p .coverage + gocover-cobertura < coverage.txt > .coverage/coverage.xml + + - name: Build Project + run: | + set -eux -o pipefail + + # We load the dqlite libs here instead of doing through make because TICS + # will try to build parts of the project itself + sudo add-apt-repository -y ppa:dqlite/dev + sudo apt install libdqlite1.17-dev + + # We need to have our project built + sudo make clean + sudo make -j static + + - name: Install and Run TICS + env: + # Performance tests are importing a local test_util module. Needed for pylint. + PYTHONPATH: "${{ env.GITHUB_WORKSPACE }}/test/performance/tests/" + + # TICSQServer will try to build the project. We need a few environment variables + # for it to succeed. Based on make static / "hack/static-dqlite.sh". + PATH: "${PATH}:${{ env.GITHUB_WORKSPACE }}/hack/.deps/static/musl/bin" + CC: "musl-gcc" + CGO_CFLAGS: "-I${{ env.GITHUB_WORKSPACE }}/hack/.deps/static/include" + CGO_LDFLAGS: "-L${{ env.GITHUB_WORKSPACE }}/hack/.deps/static/lib -luv -ldqlite -llz4 -lsqlite3 -Wl,-z,stack-size=1048576" + run: | + export TICSAUTHTOKEN=${{ secrets.TICSAUTHTOKEN }} + + # NOTE(aznashwan): TiCS install script doesn't define defaults; cannot '-u' + set -ex -o pipefail + + # Install the TICS and staticcheck + go install honnef.co/go/tools/cmd/staticcheck@v0.5.1 + . <(curl --silent --show-error 'https://canonical.tiobe.com/tiobeweb/TICS/api/public/v1/fapi/installtics/Script?cfg=default&platform=linux&url=https://canonical.tiobe.com/tiobeweb/TICS/') + + TICSQServer -project ${{ github.event.repository.name }} -tmpdir /tmp/tics -branchdir "$GITHUB_WORKSPACE" diff --git a/Makefile b/Makefile index 5ffd5108..39329186 100644 --- a/Makefile +++ b/Makefile @@ -13,6 +13,9 @@ go.vet: go.test: $(DQLITE_BUILD_SCRIPTS_DIR)/static-go-test.sh -v -p 1 ./... +go.coverage: + $(DQLITE_BUILD_SCRIPTS_DIR)/static-go-test.sh -v -p 1 ./... -coverprofile=coverage.txt --cover --coverpkg=./... + go.bench: $(DQLITE_BUILD_SCRIPTS_DIR)/static-go-test.sh -v -p 1 ./... -run "^$$" -bench "Benchmark" -benchmem -count $(BENCH_COUNT)