Skip to content

Test coverage

Test coverage #145

Workflow file for this run

name: Test coverage
on:
schedule:
- cron: "0 22 * * 5"
jobs:
test:
name: test
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 20
- name: Install JS dependencies
run: yarn install --immutable
- name: Run JS tests with coverage
run: |
yarn test-js --coverage
mv coverage/js/cobertura-coverage.xml coverage/cobertura-coverage.xml
- name: Install Python requirements
run: |
sudo pip3 install -r requirements.txt
- name: Install Python dependencies
run: sudo pip3 install coverage
- name: Run Python tests with coverage
run: |
SECRET_KEY=simplesecretkey coverage run --source=. -m unittest discover tests
coverage xml -o coverage/coverage.xml
coverage html -d coverage/python
- name: Zip coverage report
run: |
zip -r coverage/cobertura-coverage.zip coverage/cobertura-coverage.xml coverage/coverage.xml
- name: Upload coverage report
if: always()
uses: actions/upload-artifact@v4
with:
name: charmhubio-coverage
path: coverage
retention-days: 1
publish-coverage-report:
name: publish-coverage-report
runs-on: ubuntu-latest
needs: test
continue-on-error: true
steps:
- uses: actions/checkout@v4
with:
ref: gh-pages
token: ${{ secrets.GITHUB_TOKEN }}
- name: Cleanup coverage directory
run: |
rm -rf coverage
mkdir coverage
- name: Download coverage report artifact
uses: actions/download-artifact@v4
with:
name: charmhubio-coverage
path: coverage
# user git configs are needed for git commands to work
# actual authentication is done using secrets.GITHUB_TOKEN with write permission
- name: Set Git User
run: |
git config --global user.email "[email protected]"
git config --global user.name "GitHub Action"
- name: Push coverage Report
timeout-minutes: 3
run: |
git add .
git commit -m "workflow: update coverage report"
# In case of another action job pushing to gh-pages while we are rebasing for the current job
while true; do
git pull --rebase
if [ $? -ne 0 ]; then
echo "Failed to rebase. Please review manually."
exit 1
fi
git push
if [ $? -eq 0 ]; then
echo "Successfully pushed HTML report to repo."
exit 0
fi
done
- name: Output Report URL as Worfklow Annotation
run: |
FULL_HTML_REPORT_URL=https://canonical.github.io/charmhub.io/coverage
echo "::notice title=Published Playwright Test Report::$FULL_HTML_REPORT_URL"
tics-report:
runs-on: ubuntu-latest
needs: publish-coverage-report
steps:
- uses: actions/checkout@v4
- name: Download coverage report artifact
uses: actions/download-artifact@v4
with:
name: charmhubio-coverage
path: coverage
- name: Install Python requirements
run: |
sudo pip3 install -r requirements.txt
- name: Install Python dependencies
run: sudo pip3 install pylint
- name: Install JS dependencies
run: yarn install
- name: Produce TICS report
shell: bash
run: |
set -x
export TICSAUTHTOKEN=${{ secrets.TICS_AUTH_TOKEN }}
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/" > install_tics.sh
. ./install_tics.sh
TICSQServer -project charmhub.io -tmpdir /tmp/tics -branchdir .