fix release #2337
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# This workflow will install Python dependencies, run tests and lint with a variety of Python versions | |
# For more information see: https://help.github.com/actions/language-and-framework-guides/using-python-with-github-actions | |
name: Test CI | |
on: | |
pull_request: | |
push: | |
branches: | |
- master | |
release: | |
types: | |
- created | |
schedule: | |
- cron: '0 15 * * *' | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.ref }} | |
cancel-in-progress: true | |
env: | |
DEBIAN_FRONTEND: noninteractive | |
jobs: | |
flake8: | |
name: Check python linting | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Set up Python 3.8 | |
uses: actions/setup-python@v5 | |
with: | |
python-version: '3.8' # lint with minimal version supported (3.8 in 20.04) | |
- name: Install dependencies | |
run: | | |
python -m pip install flake8 -c requirements-dev.txt | |
- name: Lint with flake8 | |
run: | | |
flake8 src | |
eslint: | |
runs-on: ubuntu-latest | |
name: Check javascript linting | |
env: | |
PUPPETEER_SKIP_CHROMIUM_DOWNLOAD: 1 | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Setup node | |
uses: actions/setup-node@v4 | |
with: | |
node-version: 20 | |
- name: Install dependencies | |
run: | | |
npm ci | |
- name: Lint with eslint | |
run: | | |
npm run lint | |
test: | |
name: Python Unittests | |
runs-on: ${{ matrix.os }} | |
strategy: | |
matrix: | |
os: ['ubuntu-20.04', 'ubuntu-22.04'] | |
include: | |
- os: 'ubuntu-20.04' | |
python-version: '3.8' # default python version in 20.04 | |
- os: 'ubuntu-22.04' | |
python-version: '3.10' # default python version in 22.04 | |
- os: 'ubuntu-24.04' | |
python-version: '3.12' # default python version in 22.04 | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Set up Python ${{ matrix.python-version }} | |
uses: actions/setup-python@v5 | |
with: | |
python-version: ${{ matrix.python-version }} | |
cache: pip | |
- name: Install dependencies | |
run: | | |
sudo apt-get update -q | |
sudo apt-get -q -y install nodejs npm ca-certificates | |
python -m pip install --upgrade pip setuptools wheel | |
pip install -r requirements.txt -U | |
pip install -r requirements-dev.txt | |
npm ci | |
- name: Test with coverage | |
run: | | |
cd src | |
coverage run ./manage.py test | |
coverage run -a ./manage.py test --settings screamshotter.settings.test_timeout screenshotter.tests.CaptureTestCase.test_timeout_screenshot | |
- name: Coverage upload | |
run: | | |
pip install codecov | |
cd src | |
codecov | |
build_docker_image: | |
name: Build docker image | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Set up Docker Buildx | |
id: buildx | |
uses: docker/setup-buildx-action@v3 | |
- name: Build Docker image | |
run: | | |
docker build -t screamshotter_ci:latest . | |
- name: Upload image | |
uses: ishworkh/docker-image-artifact-upload@v2.1.0 | |
with: | |
image: "screamshotter_ci:latest" | |
build_deb: | |
name: Build debian package | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: | |
os: ['focal', 'jammy', 'noble'] | |
include: | |
- os: focal | |
version: '20.04' | |
- os: jammy | |
version: '22.04' | |
- os: noble | |
version: '24.04' | |
env: | |
DISTRO: 'ubuntu:${{ matrix.os }}' | |
CODE: ${{ matrix.version }} | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Prepare versioning | |
run: | | |
sed -i 's/+dev/.ubuntu'$CODE'~dev'$GITHUB_RUN_ID'/' debian/changelog | |
sed -i 's/screamshotter (\([0-9]\+\.[0-9]\+\.[0-9]\+\)\(.*\)) RELEASED;/screamshotter (\1.ubuntu'$CODE'\2) focal;/' debian/changelog | |
- name: Build package | |
run: | | |
make build_deb | |
cp ./dpkg/*.deb /home/runner/work/screamshotter/ | |
- name: Archive package artifact | |
uses: actions/upload-artifact@v4 | |
with: | |
name: debian-${{ matrix.version }} | |
path: | | |
/home/runner/work/screamshotter/*.deb | |
e2e_docker_image: | |
name: Tests E2E docker | |
runs-on: ubuntu-latest | |
needs: [build_docker_image] | |
steps: | |
- name: Download image | |
uses: ishworkh/docker-image-artifact-download@v2.1.0 | |
with: | |
image: "screamshotter_ci:latest" | |
- name: Launch service | |
run: | | |
docker run -d -p 8000:8000 screamshotter_ci:latest | |
echo "Waiting for container..." | |
while ! nc -z "127.0.0.1" "8000"; do | |
sleep 0.1 | |
done | |
- name: E2E test | |
run: | | |
sleep 2 | |
curl -d url=https://google.com http://localhost:8000 > google.png | |
- uses: actions/setup-python@v5 | |
with: | |
python-version: 3.8 | |
- name: Check result | |
run: | | |
pip install filetype | |
if filetype -f google.png |grep -q 'image/png'; then | |
echo "File is PNG"; | |
exit 0; | |
else | |
echo "File is not PNG"; | |
filetype -f google.png; | |
exit 1; | |
fi | |
- name: Archive result artifact | |
uses: actions/upload-artifact@v4 | |
with: | |
name: result-docker | |
path: | | |
/home/runner/work/screamshotter/screamshotter/google.png | |
e2e_deb: | |
name: Tests E2E debian packages | |
runs-on: ubuntu-${{ matrix.version }} | |
needs: [ build_deb ] | |
strategy: | |
matrix: | |
version: ['20.04', '22.04', '24.04'] | |
steps: | |
- uses: actions/download-artifact@v4 | |
with: | |
name: debian-${{ matrix.version }} | |
- name: Install package | |
run: | | |
sudo apt-get install -y /home/runner/work/screamshotter/screamshotter/*.deb | |
- name: E2E test | |
run: | | |
curl -d url=https://google.com http://localhost:8000 > google.png | |
- uses: actions/setup-python@v5 | |
with: | |
python-version: 3.8 | |
- name: Check result | |
run: | | |
pip install filetype | |
if filetype -f google.png |grep -q 'image/png'; then | |
echo "File is PNG"; | |
exit 0; | |
else | |
echo "File is not PNG"; | |
filetype -f google.png; | |
exit 1; | |
fi | |
- name: Archive result artifact | |
uses: actions/upload-artifact@v4 | |
with: | |
name: result-${{ matrix.version }} | |
path: | | |
/home/runner/work/screamshotter/screamshotter/google.png | |
deploy: | |
name: Publish (on release only) | |
runs-on: ubuntu-latest | |
needs: [ flake8, eslint, test, e2e_docker_image, e2e_deb ] | |
if: ${{ github.event_name == 'release' && github.event.action == 'created' }} | |
steps: | |
- name: Download 20.04 debian artifact | |
uses: actions/download-artifact@v4 | |
with: | |
name: 'debian-20.04' | |
- name: Download 22.04 debian artifact | |
uses: actions/download-artifact@v4 | |
with: | |
name: debian-22.04 | |
- name: Download 24.04 debian artifact | |
uses: actions/download-artifact@v4 | |
with: | |
name: debian-24.04 | |
- name: Download docker image | |
uses: ishworkh/docker-image-artifact-download@v2.1.0 | |
with: | |
image: "screamshotter_ci:latest" | |
- name: Login to Docker Hub | |
uses: docker/login-action@v3 | |
with: | |
username: ${{ secrets.DOCKER_LOGIN }} | |
password: ${{ secrets.DOCKER_PASSWORD }} | |
- name: Login to GitHub Container Registry | |
uses: docker/login-action@v3 | |
with: | |
registry: ghcr.io | |
username: ${{ github.repository_owner }} | |
password: ${{ secrets.GITHUB_TOKEN }} | |
- name: Set up Docker Buildx | |
id: buildx | |
uses: docker/setup-buildx-action@v3 | |
- name: Extract metadata | |
id: meta | |
uses: docker/metadata-action@v5 | |
with: | |
images: | | |
makinacorpus/convertit | |
ghcr.io/makinacorpus/convertit | |
- name: Build and push image | |
uses: docker/build-push-action@v6 | |
with: | |
push: true | |
provenance: mode=max | |
sbom: true | |
builder: ${{ steps.buildx.outputs.name }} | |
tags: ${{ steps.meta.outputs.tags }} | |
- name: Install SSH key | |
uses: shimataro/ssh-key-action@v2 | |
with: | |
key: ${{ secrets.SSH_PRIVATE_KEY }} | |
known_hosts: ${{ secrets.SSH_KNOWN_HOSTS }} | |
# - name: Publish debian packages | |
# run: | | |
# if [[ "${{ github.ref }}" == *"dev"* ]]; then | |
# export DEB_COMPONENT=dev | |
# else | |
# export DEB_COMPONENT=main | |
# fi | |
# echo "${{ github.ref }} : Publishing as $DEB_COMPONENT package" | |
# scp -P ${{ secrets.SSH_PORT }} -o StrictHostKeyChecking=no /home/runner/work/screamshotter/screamshotter/screamshotter_*_amd64.deb ${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }}:/srv/packages/incoming/$DEB_COMPONENT/ | |
# if [[ "${{ github.ref }}" == *"dev"* ]]; then | |
# ssh -p ${{ secrets.SSH_PORT }} -o StrictHostKeyChecking=no ${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }} make focal_dev -C /srv/packages | |
# ssh -p ${{ secrets.SSH_PORT }} -o StrictHostKeyChecking=no ${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }} make jammy_dev -C /srv/packages | |
# ssh -p ${{ secrets.SSH_PORT }} -o StrictHostKeyChecking=no ${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }} make noble_dev -C /srv/packages | |
# else | |
# ssh -p ${{ secrets.SSH_PORT }} -o StrictHostKeyChecking=no ${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }} make focal_main -C /srv/packages | |
# ssh -p ${{ secrets.SSH_PORT }} -o StrictHostKeyChecking=no ${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }} make jammy_main -C /srv/packages | |
# ssh -p ${{ secrets.SSH_PORT }} -o StrictHostKeyChecking=no ${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }} make noble_main -C /srv/packages | |
# fi | |
- name: Attach debian packages as release binaries | |
uses: AButler/upload-release-assets@v3.0 | |
with: | |
files: "*.deb" | |
repo-token: ${{ secrets.GITHUB_TOKEN }} |