Skip to content

Test coverage

Test coverage #20

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: rocks-storefront-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: rocks-storefront-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 "github-action@example.com"
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/rocks-storefront/coverage
echo "::notice title=Published Playwright Test Report::$FULL_HTML_REPORT_URL"
tics-report:
runs-on: [self-hosted, reactive, amd64, large-tiobe, noble]
needs: publish-coverage-report
steps:
- name: Checkout the project
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Download coverage report artifact
uses: actions/download-artifact@v4
with:
name: rocks-storefront-coverage
path: cover
- name: Set up Python 3.10
uses: actions/setup-python@v4
with:
python-version: '3.10'
cache: 'pip'
- name: Install Python dependencies
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt
pip install pylint
- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version: '22'
cache: 'yarn'
- name: Install JavaScript dependencies
run: yarn install --immutable
- name: Produce TICS report
uses: tiobe/tics-github-action@v3
with:
mode: qserver
project: rocks-storefront
branchdir: .
viewerUrl: https://canonical.tiobe.com/tiobeweb/TICS/api/cfg?name=default
ticsAuthToken: ${{ secrets.TICSAUTHTOKEN }}
installTics: true