define and use pinned requirements #12
Workflow file for this run
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: CI workflow | |
on: | |
pull_request: | |
paths-ignore: | |
- 'docs/**' | |
push: | |
branches: | |
- master | |
paths-ignore: | |
- 'docs/**' | |
release: | |
types: | |
- created | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.ref }} | |
cancel-in-progress: true | |
env: | |
DEBIAN_FRONTEND: noninteractive | |
LANG: C.UTF-8 | |
jobs: | |
flake8: | |
runs-on: ubuntu-latest | |
continue-on-error: true | |
name: Check flake8 rules | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: actions/setup-python@v4 | |
with: | |
python-version: '3.8' | |
- name: Install flake8 | |
run: pip install flake8 | |
- run: flake8 convertit | |
isort: | |
runs-on: ubuntu-latest | |
continue-on-error: true | |
name: Check isort rules | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: actions/setup-python@v4 | |
with: | |
python-version: '3.8' | |
- name: Install isort | |
run: pip install isort | |
- run: isort -c convertit | |
build: | |
runs-on: ubuntu-latest | |
continue-on-error: true | |
strategy: | |
matrix: | |
version: ['24.04', '22.04', '20.04', docker] | |
include: | |
- version: '24.04' | |
distro: noble | |
- version: '22.04' | |
distro: jammy | |
- version: '20.04' | |
distro: focal | |
- version: docker | |
distro: docker image | |
name: Build ${{ matrix.distro }} | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Prepare debian versioning | |
if: ${{ matrix.version != 'docker' }} | |
run: | | |
sed -i 's/+dev/.ubuntu${{ matrix.version }}~dev'$GITHUB_RUN_ID'/' debian/changelog | |
sed -i 's/convertit (\([0-9]\+\.[0-9]\+\.[0-9]\+\)\(.*\)) RELEASED;/convertit (\1.ubuntu${{ matrix.version }}\2) ${{ matrix.distro }};/' debian/changelog | |
- name: Building package | |
if: ${{ matrix.version != 'docker' }} | |
run: | | |
DISTRO=ubuntu:${{ matrix.distro }} make build_deb | |
cp ./dpkg/*.deb /home/runner/work/convertit/ | |
- name: Archive package artifact | |
if: ${{ matrix.version != 'docker' }} | |
uses: actions/upload-artifact@v4 | |
with: | |
name: debian-${{ matrix.distro }} | |
path: | | |
/home/runner/work/convertit/*.deb | |
- name: Set up Docker Buildx | |
if: ${{ matrix.version == 'docker' }} | |
id: buildx | |
uses: docker/setup-buildx-action@v3 | |
- name: Build Docker image | |
if: ${{ matrix.version == 'docker' }} | |
run: | | |
docker build -t convertit:latest . | |
- name: Upload image | |
if: ${{ matrix.version == 'docker' }} | |
uses: ishworkh/docker-image-artifact-upload@v1 | |
with: | |
image: "convertit:latest" | |
e2e: | |
strategy: | |
matrix: | |
distro: [ noble, jammy, focal, docker ] | |
include: | |
- distro: noble | |
version: '24.04' | |
- distro: jammy | |
version: '22.04' | |
- distro: focal | |
version: '20.04' | |
- distro: docker | |
version: latest | |
name: Test ${{ matrix.distro }} | |
runs-on: ubuntu-${{ matrix.version }} | |
needs: [ build ] | |
steps: | |
- uses: actions/download-artifact@v4 | |
if: ${{ matrix.distro != 'docker' }} | |
with: | |
name: debian-${{ matrix.distro }} | |
- name: Download image | |
if: ${{ matrix.distro == 'docker' }} | |
uses: ishworkh/docker-image-artifact-download@v1 | |
with: | |
image: "convertit:latest" | |
- name: Install package | |
if: ${{ matrix.distro != 'docker' }} | |
run: | | |
sudo apt-get -qq update | |
sudo apt-get -yqq install /home/runner/work/convertit/convertit/*.deb || exit 0; | |
- name: Run docker image | |
if: ${{ matrix.distro == 'docker' }} | |
run: | | |
docker run -p 6543:6543 -d convertit:latest | |
s | |
- name: Test ODT / PDF conversion | |
run: | | |
wget -O myfile.pdf "http://localhost:6543/?url=https://file-examples.com/wp-content/storage/2017/10/file-sample_100kB.odt&from=application/vnd.oasis.opendocument.text" | |
if file -b --mime-type ./myfile.pdf |grep -q 'application/pdf'; then | |
echo "File is PDF"; | |
exit 0; | |
else | |
echo "File is not PDF"; | |
file -b -f ./myfile.pdf; | |
exit 1; | |
fi | |
- name: Test ODT / DOC conversion | |
run: | | |
wget -O myfile.doc "http://localhost:6543/?url=https://file-examples.com/wp-content/storage/2017/10/file-sample_100kB.odt&from=application/vnd.oasis.opendocument.text&to=application/msword" | |
if file -b --mime-type ./myfile.doc |grep -q 'application/msword'; then | |
echo "File is DOC"; | |
exit 0; | |
else | |
echo "File is not DOC"; | |
file -b -f ./myfile.doc; | |
exit 1; | |
fi | |
- name: Test SVG / PNG conversion | |
run: | | |
wget -O myfile.png "http://localhost:6543/?url=https://upload.wikimedia.org/wikipedia/commons/3/30/Vector-based_example.svg&from=image/svg%2Bxml&to=image/png" | |
if file -b --mime-type ./myfile.png |grep -q 'image/png'; then | |
echo "File is PNG"; | |
exit 0; | |
else | |
echo "File is not PNG"; | |
file -b -f ./myfile.png; | |
exit 1; | |
fi | |
- name: Test SVG / PDF conversion | |
run: | | |
wget -O myfile.pdf "http://localhost:6543/?url=https://upload.wikimedia.org/wikipedia/commons/3/30/Vector-based_example.svg&from=image/svg%2Bxml&to=application/pdf" | |
if file -b --mime-type ./myfile.pdf |grep -q 'application/pdf'; then | |
echo "File is PDF"; | |
exit 0; | |
else | |
echo "File is not PDF"; | |
file -b -f ./myfile.pdf; | |
exit 1; | |
fi | |
deploy: | |
name: Publish (on release only) | |
runs-on: ubuntu-latest | |
needs: [ flake8, isort, e2e ] | |
if: ${{ github.event_name == 'release' && github.event.action == 'created' }} | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Download 24.04 debian artifact | |
uses: actions/download-artifact@v4 | |
with: | |
name: debian-noble | |
- name: Download 22.04 debian artifact | |
uses: actions/download-artifact@v4 | |
with: | |
name: debian-jammy | |
- name: Download 20.04 debian artifact | |
uses: actions/download-artifact@v4 | |
with: | |
name: debian-focal | |
- name: Download docker image | |
uses: ishworkh/docker-image-artifact-download@v1 | |
with: | |
image: "convertit: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@v3 | |
with: | |
username: ${{ secrets.DOCKER_LOGIN }} | |
password: ${{ secrets.DOCKER_PASSWORD }} | |
- name: Publish Docker image (v2 and latest) | |
run: | | |
if [[ "${{ github.ref }}" == *"dev"* ]]; then | |
export DOCKER_TAG=dev | |
else | |
docker tag convertit:latest makinacorpus/convertit:$(cat VERSION) | |
docker push makinacorpus/convertit:$(cat VERSION) | |
export DOCKER_TAG=latest | |
fi | |
docker tag convertit:latest makinacorpus/convertit:$DOCKER_TAG | |
docker push makinacorpus/convertit:$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/convertit/convertit/convertit_*_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 | |
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 | |
fi |