From 86a64570c56c14740987a08b62717447f7e84d06 Mon Sep 17 00:00:00 2001 From: Max Mehl Date: Tue, 16 Jan 2024 14:28:45 +0100 Subject: [PATCH 1/3] add CI tests and publishing workflows --- .gitea/actions/poetrybuild/action.yaml | 19 +++++++++ .gitea/workflows/linting.yaml | 41 +++++++++++++++++++ .gitea/workflows/publish.yaml | 18 +++++++++ .gitea/workflows/reuse.yaml | 19 +++++++++ .gitea/workflows/selftests.yaml | 55 ++++++++++++++++++++++++++ .gitignore | 1 + tests/seafile_mirror.conf.yaml | 18 +++++++++ 7 files changed, 171 insertions(+) create mode 100644 .gitea/actions/poetrybuild/action.yaml create mode 100644 .gitea/workflows/linting.yaml create mode 100644 .gitea/workflows/publish.yaml create mode 100644 .gitea/workflows/reuse.yaml create mode 100644 .gitea/workflows/selftests.yaml 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..5dd150b --- /dev/null +++ b/.gitea/actions/poetrybuild/action.yaml @@ -0,0 +1,19 @@ +# SPDX-FileCopyrightText: 2023 DB Systel GmbH +# +# SPDX-License-Identifier: Apache-2.0 + +name: "Reusable Poetry build workflow" +inputs: + poetry_install_args: + default: "" + description: "Value for additional poetry install arguments" + required: false + +runs: + using: "composite" + steps: + - name: Install poetry + run: pip install poetry + - name: Install poetry package + run: poetry install --no-interaction ${{ inputs.poetry_install_args }} + shell: bash diff --git a/.gitea/workflows/linting.yaml b/.gitea/workflows/linting.yaml new file mode 100644 index 0000000..06fceab --- /dev/null +++ b/.gitea/workflows/linting.yaml @@ -0,0 +1,41 @@ +# SPDX-FileCopyrightText: 2023 Max Mehl +# +# SPDX-License-Identifier: Apache-2.0 + +name: Python Linters + +on: + push: + branches: + - main + pull_request: + +jobs: + 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 diff --git a/.gitea/workflows/publish.yaml b/.gitea/workflows/publish.yaml new file mode 100644 index 0000000..6dadbd0 --- /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/reuse.yaml b/.gitea/workflows/reuse.yaml new file mode 100644 index 0000000..294f650 --- /dev/null +++ b/.gitea/workflows/reuse.yaml @@ -0,0 +1,19 @@ +# SPDX-FileCopyrightText: 2023 Max Mehl +# +# SPDX-License-Identifier: Apache-2.0 + +name: REUSE Compliance + +on: + push: + branches: + - main + pull_request: + +jobs: + 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/.gitea/workflows/selftests.yaml b/.gitea/workflows/selftests.yaml new file mode 100644 index 0000000..4cf007f --- /dev/null +++ b/.gitea/workflows/selftests.yaml @@ -0,0 +1,55 @@ +# SPDX-FileCopyrightText: 2023 DB Systel GmbH +# SPDX-FileCopyrightText: 2023 Max Mehl +# +# SPDX-License-Identifier: Apache-2.0 + +name: Selftests + +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 + test-sync: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Install dependencies + uses: ./.gitea/actions/poetrybuild + # using minimal set of dependencies + with: + poetry_install_args: "--without dev" + - 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 diff --git a/.gitignore b/.gitignore index 7841608..77169b0 100755 --- a/.gitignore +++ b/.gitignore @@ -8,3 +8,4 @@ venv/ /seafile_mirror.conf.yaml __pycache__/ *.log +tests/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 -- 2.36.6 From 60455082c2cc441fda4a26d0c6758bfef0120408 Mon Sep 17 00:00:00 2001 From: Max Mehl Date: Tue, 16 Jan 2024 15:47:32 +0100 Subject: [PATCH 2/3] fix pylint by igoring some errors --- seafile_mirror/seafile_mirror.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/seafile_mirror/seafile_mirror.py b/seafile_mirror/seafile_mirror.py index c4866ea..b6e1eb4 100755 --- a/seafile_mirror/seafile_mirror.py +++ b/seafile_mirror/seafile_mirror.py @@ -50,7 +50,7 @@ parser.add_argument( ) -def main(): +def main(): # pylint: disable=too-many-locals, too-many-statements """Main function""" args = parser.parse_args() # Set files depending on configdir -- 2.36.6 From 4250475933ca89fbde9ff0cc4c08d750f99c14ba Mon Sep 17 00:00:00 2001 From: Max Mehl Date: Tue, 16 Jan 2024 15:59:08 +0100 Subject: [PATCH 3/3] add version command --- .gitea/workflows/selftests.yaml | 4 +++- seafile_mirror/__init__.py | 7 +++++++ seafile_mirror/seafile_mirror.py | 2 ++ 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/.gitea/workflows/selftests.yaml b/.gitea/workflows/selftests.yaml index 4cf007f..2fffda0 100644 --- a/.gitea/workflows/selftests.yaml +++ b/.gitea/workflows/selftests.yaml @@ -24,7 +24,9 @@ jobs: - name: Install package run: pip3 install dist/seafile_mirror-*.tar.gz - name: Run package - run: seafile-mirror --help + run: | + seafile-mirror --version + seafile-mirror --help # Run tool and sync a test library test-sync: diff --git a/seafile_mirror/__init__.py b/seafile_mirror/__init__.py index b504590..5470ef7 100755 --- a/seafile_mirror/__init__.py +++ b/seafile_mirror/__init__.py @@ -1,3 +1,10 @@ # SPDX-FileCopyrightText: 2023 Max Mehl # # SPDX-License-Identifier: Apache-2.0 + + +"""Global init file""" + +from importlib.metadata import version + +__version__ = version("seafile-mirror") diff --git a/seafile_mirror/seafile_mirror.py b/seafile_mirror/seafile_mirror.py index b6e1eb4..ceecb18 100755 --- a/seafile_mirror/seafile_mirror.py +++ b/seafile_mirror/seafile_mirror.py @@ -14,6 +14,7 @@ from time import sleep import yaml +from . import __version__ from ._cachedb import db_read from ._helpers import convert_bytes, findstring, get_lock from ._seafile import ( @@ -48,6 +49,7 @@ parser.add_argument( default=False, help="Print and log DEBUG messages", ) +parser.add_argument("--version", action="version", version="%(prog)s " + __version__) def main(): # pylint: disable=too-many-locals, too-many-statements -- 2.36.6