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