From 041ccd24ef69902cb608657c35a35627c5417429 Mon Sep 17 00:00:00 2001 From: Max Mehl Date: Tue, 16 Jan 2024 14:28:45 +0100 Subject: [PATCH] add CI tests and publishing workflows --- .gitea/actions/poetrybuild/action.yaml | 13 ++++ .gitea/workflows/publish.yaml | 18 ++++++ .gitea/workflows/test.yaml | 90 ++++++++++++++++++++++++++ tests/.gitignore | 1 + tests/seafile_mirror.conf.yaml | 18 ++++++ 5 files changed, 140 insertions(+) create mode 100644 .gitea/actions/poetrybuild/action.yaml create mode 100644 .gitea/workflows/publish.yaml create mode 100644 .gitea/workflows/test.yaml create mode 100644 tests/.gitignore create mode 100644 tests/seafile_mirror.conf.yaml diff --git a/.gitea/actions/poetrybuild/action.yaml b/.gitea/actions/poetrybuild/action.yaml new file mode 100644 index 0000000..e21cd60 --- /dev/null +++ b/.gitea/actions/poetrybuild/action.yaml @@ -0,0 +1,13 @@ +# SPDX-FileCopyrightText: 2023 DB Systel GmbH +# +# SPDX-License-Identifier: Apache-2.0 + +name: "Reusable Poetry build workflow" +runs: + using: "composite" + steps: + - name: Install dependencies + run: | + pip install poetry + poetry install --no-interaction + shell: bash diff --git a/.gitea/workflows/publish.yaml b/.gitea/workflows/publish.yaml new file mode 100644 index 0000000..55a5e05 --- /dev/null +++ b/.gitea/workflows/publish.yaml @@ -0,0 +1,18 @@ +# SPDX-FileCopyrightText: 2023 Max Mehl +# +# SPDX-License-Identifier: Apache-2.0 + +name: Python package +on: + push: + tags: + - "v*.*.*" +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Build and publish to pypi + uses: https://github.com/JRubics/poetry-publish@v1.17 + with: + pypi_token: ${{ secrets.PYPI_TOKEN }} diff --git a/.gitea/workflows/test.yaml b/.gitea/workflows/test.yaml new file mode 100644 index 0000000..c888af8 --- /dev/null +++ b/.gitea/workflows/test.yaml @@ -0,0 +1,90 @@ +# SPDX-FileCopyrightText: 2023 DB Systel GmbH +# SPDX-FileCopyrightText: 2023 Max Mehl +# +# SPDX-License-Identifier: Apache-2.0 + +name: Test suites + +on: + push: + branches: + - main + pull_request: + +jobs: + # Test building the package and installing it via pip3 + test-build-install: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Install poetry + run: pip install poetry + - name: Build package + run: poetry build + - name: Install package + run: pip3 install dist/seafile_mirror-*.tar.gz + - name: Run package + run: seafile-mirror --help + + # Run tool and sync a test library + selftest: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Install dependencies + uses: ./.gitea/actions/poetrybuild + - name: Install seaf-cli + run: | + apt-get update + apt-get install -y seafile-cli + - name: Configure seaf-cli and start daemon + run: | + seaf-cli init -d /tmp + seaf-cli start + - name: Fill configuration for test library + run: | + sed -i "s|__seafile_server__|${{ secrets.SEAFILE_SERVER }}|" tests/seafile_mirror.conf.yaml + sed -i "s|__seafile_user__|${{ secrets.SEAFILE_USER }}|" tests/seafile_mirror.conf.yaml + sed -i "s|__seafile_pass__|${{ secrets.SEAFILE_PASS }}|" tests/seafile_mirror.conf.yaml + - name: Sync the library + run: poetry run seafile-mirror -c tests -v + - name: Attempt to find expected string in library + run: grep "__ci_test_expect__" tests/ci-test/testfile.txt + + # PYLINT / BLACK / ISORT / MYPY + pylint: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - name: Install dependencies + uses: ./.gitea/actions/poetrybuild + - name: Lint with pylint + run: poetry run pylint seafile_mirror + + formatting: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - name: Install dependencies + uses: ./.gitea/actions/poetrybuild + - name: Test formatting with isort and black + run: | + poetry run isort --check seafile_mirror/ + poetry run black . + + mypy: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - name: Install dependencies + uses: ./.gitea/actions/poetrybuild + - name: Test typing with mypy + run: poetry run mypy + + # REUSE COMPLIANCE + reuse: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Check REUSE Compliance + uses: https://github.com/fsfe/reuse-action@v2 diff --git a/tests/.gitignore b/tests/.gitignore new file mode 100644 index 0000000..83855e6 --- /dev/null +++ b/tests/.gitignore @@ -0,0 +1 @@ +ci-test/ diff --git a/tests/seafile_mirror.conf.yaml b/tests/seafile_mirror.conf.yaml new file mode 100644 index 0000000..55c10d3 --- /dev/null +++ b/tests/seafile_mirror.conf.yaml @@ -0,0 +1,18 @@ +# SPDX-FileCopyrightText: 2023 Max Mehl +# +# SPDX-License-Identifier: Apache-2.0 + +# Configuration file for seafile-mirror which will be filled in and applied in +# the CI test +- server: __seafile_server__ + user: __seafile_user__ + password: __seafile_pass__ + # The default resync interval + resync_interval_days: 7 + # Define the libraries which shall be synced + libs: + - name: ci-test + # ID of the Seafile library (can be seen in the web UI) + id: 558667f5-cee2-443d-8f8e-668e70a23e9f + # local directory where the mirror shall be created + dir: tests/ci-test