Skip to content

Test CI

Test CI #1096

Workflow file for this run

# 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 * * *'
env:
DEBIAN_FRONTEND: noninteractive
jobs:
flake8:
name: Check python linting
runs-on: ubuntu-18.04
steps:
- uses: actions/checkout@v3
- name: Set up Python 3.6
uses: actions/setup-python@v4
with:
python-version: '3.6' # lint with minimal version supported (3.6 in 18.04)
- name: Install dependencies
run: |
echo "${{ github.event_name }}! ${{ github.event.action }}"
python -m pip install --upgrade pip
python -m pip install flake8
if [ -f requirements.txt ]; then pip install -r requirements.txt; fi
- name: Lint with flake8
run: |
flake8 src
eslint:
runs-on: ubuntu-18.04
name: Check javascript linting
env:
PUPPETEER_SKIP_CHROMIUM_DOWNLOAD: 1
steps:
- uses: actions/checkout@v3
- name: Setup node
uses: actions/setup-node@v1
with:
node-version: 14
- name: Install dependencies
run: |
npm ci
- name: Lint with eslint
run: |
npm run lint
test:
name: Python Unittests
runs-on: ${{ matrix.os }}
needs: [flake8, eslint]
strategy:
matrix:
os: ['ubuntu-18.04', 'ubuntu-20.04', 'ubuntu-22.04']
include:
- os: 'ubuntu-18.04'
python-version: '3.6' # default python version in 18.04
- 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
steps:
- uses: actions/checkout@v3
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python-version }}
- 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-20.04
needs: [test]
steps:
- uses: actions/checkout@v3
- name: Set up Docker Buildx
id: buildx
uses: docker/setup-buildx-action@v1
- name: Build Docker image
run: |
docker build -t screamshotter_ci:latest .
- name: Upload image
uses: ishworkh/docker-image-artifact-upload@v1
with:
image: "screamshotter_ci:latest"
build_deb_18_04:
name: Build 18.04 package
runs-on: ubuntu-latest
container: ubuntu:bionic
env:
LANG: C.UTF-8
needs: [test]
steps:
- uses: actions/checkout@v3
- name: Prepare debian 18.04 versioning
run: |
sed -i 's/+dev/.ubuntu18.04~dev'$GITHUB_RUN_ID'/' debian/changelog
sed -i 's/screamshotter (\([0-9]\+\.[0-9]\+\.[0-9]\+\)\(.*\)) RELEASED;/screamshotter (\1.ubuntu18.04\2) bionic;/' debian/changelog
- name: Install build dependencies
run: |
apt-get update -q
apt-get install -q -y dpkg-dev debhelper dh-virtualenv git python3 python3-venv python3-dev libgtk-3-0 libasound2 libgbm1 libxshmfence1
- name: Building package debian 18.04
run: |
dpkg-buildpackage -uc -us -b
- name: Archive package artifact
uses: actions/upload-artifact@v2
with:
name: debian-18-04
path: |
/home/runner/work/screamshotter/*.deb
build_deb_20_04:
name: Build 20.04 package
runs-on: ubuntu-latest
container: ubuntu:focal
needs: [test]
env:
LANG: C.UTF-8
steps:
- uses: actions/checkout@v3
- name: Prepare debian 20.04 versioning
run: |
sed -i 's/+dev/.ubuntu20.04~dev'$GITHUB_RUN_ID'/' debian/changelog
sed -i 's/screamshotter (\([0-9]\+\.[0-9]\+\.[0-9]\+\)\(.*\)) RELEASED;/screamshotter (\1.ubuntu20.04\2) focal;/' debian/changelog
- name: Install build dependencies
run: |
apt-get update -q
apt-get install -q -y software-properties-common
add-apt-repository ppa:jyrki-pulliainen/dh-virtualenv
apt-get install -q -y dpkg-dev debhelper dh-virtualenv git python3 python3-venv python3-dev libgtk-3-0 libasound2 libgbm1 libxshmfence1
- name: Building package debian 20.04
run: |
dpkg-buildpackage -uc -us -b
- name: Archive package artifact
uses: actions/upload-artifact@v2
with:
name: debian-20-04
path: |
/home/runner/work/screamshotter/*.deb
build_deb_22_04:
name: Build 22.04 package
runs-on: ubuntu-latest
container: ubuntu:jammy
needs: [test]
env:
LANG: C.UTF-8
steps:
- uses: actions/checkout@v3
- name: Prepare debian 22.04 versioning
run: |
sed -i 's/+dev/.ubuntu22.04~dev'$GITHUB_RUN_ID'/' debian/changelog
sed -i 's/screamshotter (\([0-9]\+\.[0-9]\+\.[0-9]\+\)\(.*\)) RELEASED;/screamshotter (\1.ubuntu22.04\2) jammy;/' debian/changelog
- name: Install build dependencies
run: |
apt-get update -q
apt-get install -q -y dpkg-dev debhelper dh-virtualenv git python3 python3-venv python3-dev libgtk-3-0 libasound2 libgbm1 libxshmfence1
- name: Building package debian 20.04
run: |
dpkg-buildpackage -uc -us -b
- name: Archive package artifact
uses: actions/upload-artifact@v2
with:
name: debian-22-04
path: |
/home/runner/work/screamshotter/*.deb
e2e_docker_image:
name: Tests E2E docker
runs-on: ubuntu-20.04
needs: [build_docker_image]
steps:
- name: Download image
uses: ishworkh/docker-image-artifact-download@v1
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@v4
with:
python-version: 3.6
- 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";
exit 1;
fi
- name: Archive result artifact
uses: actions/upload-artifact@v2
with:
name: result-docker
path: |
/home/runner/work/screamshotter/screamshotter/google.png
e2e_deb_18_04:
name: Tests E2E 18.04
runs-on: ubuntu-18.04
needs: [ build_deb_18_04 ]
steps:
- uses: actions/download-artifact@v2
with:
name: debian-18-04
- 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@v4
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";
exit 1;
fi
- name: Archive result artifact
uses: actions/upload-artifact@v2
with:
name: result-18-04
path: |
/home/runner/work/screamshotter/screamshotter/google.png
e2e_deb_20_04:
name: Tests E2E 20.04
runs-on: ubuntu-20.04
needs: [ build_deb_20_04 ]
steps:
- uses: actions/download-artifact@v2
with:
name: debian-20-04
- 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@v4
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";
exit 1;
fi
- name: Archive result artifact
uses: actions/upload-artifact@v2
with:
name: result-20-04
path: |
/home/runner/work/screamshotter/screamshotter/google.png
e2e_deb_22_04:
name: Tests E2E 22.04
runs-on: ubuntu-22.04
needs: [ build_deb_22_04 ]
steps:
- uses: actions/download-artifact@v2
with:
name: debian-22-04
- 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@v4
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";
exit 1;
fi
- name: Archive result artifact
uses: actions/upload-artifact@v2
with:
name: result-22-04
path: |
/home/runner/work/screamshotter/screamshotter/google.png
deploy:
name: Publish (on release only)
runs-on: ubuntu-18.04
needs: [ e2e_docker_image, e2e_deb_18_04, e2e_deb_20_04, e2e_deb_22_04 ]
if: ${{ github.event_name == 'release' && github.event.action == 'created' }}
steps:
- name: Download 18.04 debian artifact
uses: actions/download-artifact@v2
with:
name: debian-18-04
- name: Download 20.04 debian artifact
uses: actions/download-artifact@v2
with:
name: debian-20-04
# - name: Download 22.04 debian artifact
# uses: actions/download-artifact@v2
# with:
# name: debian-22-04
- name: Download docker image
uses: ishworkh/docker-image-artifact-download@v1
with:
image: "screamshotter_ci:latest"
- name: Attach debian packages as release binaries
uses: skx/github-action-publish-binaries@master
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
args: '*.deb'
- name: Login to Docker Hub
uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKER_LOGIN }}
password: ${{ secrets.DOCKER_PASSWORD }}
- name: Publish Docker image (tag, v2, latest or dev)
run: |
if [[ "${{ github.ref }}" == *"dev"* ]]; then
export DOCKER_TAG=dev
else
docker tag screamshotter_ci:latest makinacorpus/screamshotter:v${{github.ref_name}}
docker push makinacorpus/screamshotter:v${{github.ref_name}}
docker tag screamshotter_ci:latest makinacorpus/screamshotter:v2
docker push makinacorpus/screamshotter:v2
export DOCKER_TAG=latest
fi
docker tag screamshotter_ci:latest makinacorpus/screamshotter:$DOCKER_TAG
docker push makinacorpus/screamshotter:$DOCKER_TAG
- 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 bionic_dev -C /srv/packages
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
else
ssh -p ${{ secrets.SSH_PORT }} -o StrictHostKeyChecking=no ${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }} make bionic_main -C /srv/packages
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
fi