Test CI #2177
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: | | |
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-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 | |
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/[email protected] | |
with: | |
image: "screamshotter_ci:latest" | |
build_deb: | |
name: Build debian package | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: | |
os: ['focal', 'jammy'] | |
include: | |
- os: focal | |
version: '20.04' | |
- os: jammy | |
version: '22.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/[email protected] | |
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'] | |
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 docker image | |
uses: ishworkh/[email protected] | |
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: 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 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 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 | |
- name: Download 22.04 debian artifact | |
uses: actions/download-artifact@v4 | |
with: | |
name: debian-22.04 | |
- name: Attach debian packages as release binaries | |
uses: skx/github-action-publish-binaries@master | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
with: | |
args: '*.deb' |