diff --git a/.github/workflows/build_docs_gallery.yml b/.github/workflows/build_docs_gallery.yml index 5b7450fac..2dfc94459 100644 --- a/.github/workflows/build_docs_gallery.yml +++ b/.github/workflows/build_docs_gallery.yml @@ -7,8 +7,8 @@ jobs: Test-MSS-docs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v4 - - uses: prefix-dev/setup-pixi@a09b6247153796b190642a2b53fac4241043cf6f # v0.10.0 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v4 + - uses: prefix-dev/setup-pixi@d3f436a425481402e6a95a1d1fc10331c708cd9e # v0.10.2 with: pixi-version: latest cache: true diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 16c727fa8..f13c463a6 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -17,8 +17,8 @@ jobs: runs-on: ubuntu-latest timeout-minutes: 10 steps: - - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v4 - - uses: prefix-dev/setup-pixi@a09b6247153796b190642a2b53fac4241043cf6f # v0.10.0 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v4 + - uses: prefix-dev/setup-pixi@d3f436a425481402e6a95a1d1fc10331c708cd9e # v0.10.2 with: pixi-version: latest cache: true @@ -30,8 +30,8 @@ jobs: runs-on: ubuntu-latest timeout-minutes: 10 steps: - - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v4 - - uses: prefix-dev/setup-pixi@a09b6247153796b190642a2b53fac4241043cf6f # v0.10.0 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v4 + - uses: prefix-dev/setup-pixi@d3f436a425481402e6a95a1d1fc10331c708cd9e # v0.10.2 with: pixi-version: latest cache: true @@ -43,8 +43,8 @@ jobs: runs-on: ubuntu-latest timeout-minutes: 10 steps: - - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v4 - - uses: prefix-dev/setup-pixi@a09b6247153796b190642a2b53fac4241043cf6f # v0.10.0 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v4 + - uses: prefix-dev/setup-pixi@d3f436a425481402e6a95a1d1fc10331c708cd9e # v0.10.2 with: pixi-version: latest cache: true @@ -56,7 +56,7 @@ jobs: runs-on: ubuntu-latest timeout-minutes: 10 steps: - - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v4 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v4 - name: Check for CRLF in the repository run: | files_with_crlf="$(git ls-files --eol | awk '$1 ~ "crlf"')" @@ -67,7 +67,7 @@ jobs: runs-on: ubuntu-latest timeout-minutes: 10 steps: - - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v4 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v4 - name: Check for whitespace issues in the repository # The two example.txt files need to be excluded because whitespace at EOL is part # of their format and they fail to parse otherwise. @@ -85,9 +85,9 @@ jobs: ensure-sha-pinned-actions: runs-on: ubuntu-latest steps: - - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v4 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v4 - name: Ensure SHA pinned actions - uses: zgosalvez/github-actions-ensure-sha-pinned-actions@3db98c0363e2fa5df3e1c4c471777a7c10b24cc9 # v3 + uses: zgosalvez/github-actions-ensure-sha-pinned-actions@c5fc58bd0be7a4b94b73ce40250322d5b838a108 # v3 with: allowlist: | Open-MSS/ diff --git a/.github/workflows/readthedocs_basics.yml b/.github/workflows/readthedocs_basics.yml index 73feeae3d..1c35de0ba 100644 --- a/.github/workflows/readthedocs_basics.yml +++ b/.github/workflows/readthedocs_basics.yml @@ -7,8 +7,8 @@ jobs: Test-RTFD: runs-on: ubuntu-latest steps: - - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v4 - - uses: prefix-dev/setup-pixi@a09b6247153796b190642a2b53fac4241043cf6f # v0.10.0 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v4 + - uses: prefix-dev/setup-pixi@d3f436a425481402e6a95a1d1fc10331c708cd9e # v0.10.2 with: pixi-version: latest cache: true diff --git a/.github/workflows/testing-all-oses.yml b/.github/workflows/testing-all-oses.yml index 6275a917f..1b4546788 100644 --- a/.github/workflows/testing-all-oses.yml +++ b/.github/workflows/testing-all-oses.yml @@ -18,10 +18,10 @@ jobs: strategy: fail-fast: false matrix: - os: ["macos-14", "macos-15", "ubuntu-latest"] + os: ["macos-14", "macos-15", "macos-26", "ubuntu-latest", "ubuntu-24.04-arm"] steps: - - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v4 - - uses: prefix-dev/setup-pixi@a09b6247153796b190642a2b53fac4241043cf6f # v0.10.0 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v4 + - uses: prefix-dev/setup-pixi@d3f436a425481402e6a95a1d1fc10331c708cd9e # v0.10.2 with: pixi-version: latest cache: true @@ -31,7 +31,7 @@ jobs: run: pixi run -e dev env QT_QPA_PLATFORM=offscreen pytest -v -n logical --durations=20 --cov=mslib tests - run: pixi run -e dev coverage xml - name: Send coverage to Coveralls (parallel) - uses: coverallsapp/github-action@5cbfd81b66ca5d10c19b062c04de0199c215fb6e # v2.3.7 + uses: coverallsapp/github-action@8d6379e14d29928660c4ba802d8e85393440b329 # v2.3.8 with: fail-on-error: false debug: true @@ -45,7 +45,7 @@ jobs: if: ${{ always() }} steps: - name: Close parallel build - uses: coverallsapp/github-action@5cbfd81b66ca5d10c19b062c04de0199c215fb6e # v2.3.7 + uses: coverallsapp/github-action@8d6379e14d29928660c4ba802d8e85393440b329 # v2.3.8 with: fail-on-error: false parallel-finished: true diff --git a/.github/workflows/update-pixi-lockfile.yml b/.github/workflows/update-pixi-lockfile.yml index 713d23527..ff23d905f 100644 --- a/.github/workflows/update-pixi-lockfile.yml +++ b/.github/workflows/update-pixi-lockfile.yml @@ -15,11 +15,11 @@ jobs: matrix: base_branch: ["develop", "stable"] steps: - - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v4 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v4 with: ref: ${{ matrix.base_branch }} - name: Generate new lockfile - uses: prefix-dev/setup-pixi@a09b6247153796b190642a2b53fac4241043cf6f # v0.10.0 + uses: prefix-dev/setup-pixi@d3f436a425481402e6a95a1d1fc10331c708cd9e # v0.10.2 with: pixi-version: latest run-install: false diff --git a/.gitignore b/.gitignore index 5588100d0..d15820b0a 100644 --- a/.gitignore +++ b/.gitignore @@ -24,4 +24,5 @@ tutorials/recordings tutorials/cursor_image.png # pixi environments .pixi +.pixi-* .coverage diff --git a/.vibepod/overlay/Dockerfile b/.vibepod/overlay/Dockerfile new file mode 100644 index 000000000..b216afee1 --- /dev/null +++ b/.vibepod/overlay/Dockerfile @@ -0,0 +1,60 @@ +# overlay: pixi for different architectures +# initial version https://www.fz-juelich.de/de/blogs/programmiere/lokale-ki-gestuetzte-pdf-verarbeitung-vibepod-pi-lm-studio-und-pixi +# +# FROM-less Dockerfile fragment; VibePod prepends the base image's `FROM ` + +ENV PIXI_HOME=/opt/pixi + +# Download pixi binaries + official SHA256 checksums via Docker ADD (no curl/wget +# needed, so this also works on minimal base images). +# +# Both linux-aarch64 and linux-64 are fetched: ADD cannot branch on the build +# architecture (BuildKit's TARGETARCH says arm64/amd64, while pixi's release +# assets are named aarch64/x86_64, and a FROM-less fragment cannot use a helper +# stage to translate). The RUN below picks the matching tarball and deletes the +# other, so the extra ~32 MB is download-only and never lands in a layer. +ADD https://github.com/prefix-dev/pixi/releases/latest/download/pixi-aarch64-unknown-linux-musl.tar.gz /tmp/pixi-aarch64.tar.gz +ADD https://github.com/prefix-dev/pixi/releases/latest/download/pixi-aarch64-unknown-linux-musl.tar.gz.sha256 /tmp/pixi-aarch64.sha256 +ADD https://github.com/prefix-dev/pixi/releases/latest/download/pixi-x86_64-unknown-linux-musl.tar.gz /tmp/pixi-x86_64.tar.gz +ADD https://github.com/prefix-dev/pixi/releases/latest/download/pixi-x86_64-unknown-linux-musl.tar.gz.sha256 /tmp/pixi-x86_64.sha256 + +# Verify the checksum of this architecture's tarball with sha256sum -c, then +# extract it to $PIXI_HOME/bin. An unrecognised `uname -m` aborts the build +# rather than producing an image without pixi. +RUN set -ex && \ +cd /tmp && \ +case "$(uname -m)" in \ + aarch64|arm64) PIXI_ARCH=aarch64 ;; \ + x86_64|amd64) PIXI_ARCH=x86_64 ;; \ + *) echo "unsupported architecture: $(uname -m)" >&2; exit 1 ;; \ +esac && \ +sed "s|pixi-${PIXI_ARCH}-unknown-linux-musl.tar.gz|/tmp/pixi-${PIXI_ARCH}.tar.gz|g" \ + "pixi-${PIXI_ARCH}.sha256" | sha256sum -c - && \ +mkdir -p ${PIXI_HOME}/bin && \ +tar xzf "/tmp/pixi-${PIXI_ARCH}.tar.gz" -C ${PIXI_HOME}/bin && \ +chmod +x ${PIXI_HOME}/bin/pixi && \ +rm -f /tmp/pixi-aarch64.tar.gz /tmp/pixi-aarch64.sha256 \ + /tmp/pixi-x86_64.tar.gz /tmp/pixi-x86_64.sha256 + +ENV PATH=/opt/pixi/bin:$PATH +RUN pixi --version + +# Create vp_pixi project at /opt/vp_pixi (/opt to avoid overwriting user pixi installations) +RUN mkdir -p /opt/vp_pixi +WORKDIR /opt/vp_pixi +RUN pixi init + +ENV PATH=/opt/vp_pixi/.pixi/envs/default/bin:$PATH + +# Idea from Claude to use RUN to change the config.toml +# Keep workspace environments off the bind-mounted `.pixi`, which the host may +# have populated for a different platform (e.g. macOS arm64 Mach-O binaries). +# The directory is named after `uname -m`, so each architecture gets its own +# tree (/workspace/.pixi-linux-aarch64, /workspace/.pixi-linux-x86_64) and a +# workspace shared between an aarch64 and a linux-64 container never mixes them. +# `detached-environments` only accepts an absolute path, so this relies on the +# workspace being mounted at /workspace. A bad value makes pixi fall back to +# `.pixi` after printing an error, so the build echoes what it wrote. +RUN printf 'detached-environments = "/workspace/.pixi-linux-%s"\n' "$(uname -m)" \ + > ${PIXI_HOME}/config.toml && \ + cat ${PIXI_HOME}/config.toml diff --git a/mslib/mscolab/blueprints/auth/templates/auth/user/reset_password.html b/mslib/mscolab/blueprints/auth/templates/auth/user/reset_password.html index b1dad1f70..964cbea22 100644 --- a/mslib/mscolab/blueprints/auth/templates/auth/user/reset_password.html +++ b/mslib/mscolab/blueprints/auth/templates/auth/user/reset_password.html @@ -28,12 +28,12 @@

Reset Password

{{form.hidden_tag()}} -
+
-
-
- +
+
+
{{form.password(class="form-control form-control-lg is-invalid")}}
@@ -44,8 +44,8 @@

Reset Password

{% endif %}
-
- +
+
{{form.confirm_password(class="form-control form-control-lg is-invalid")}}
diff --git a/mslib/mscolab/blueprints/auth/templates/auth/user/reset_request.html b/mslib/mscolab/blueprints/auth/templates/auth/user/reset_request.html index 32c28b41d..bdbac26bd 100644 --- a/mslib/mscolab/blueprints/auth/templates/auth/user/reset_request.html +++ b/mslib/mscolab/blueprints/auth/templates/auth/user/reset_request.html @@ -36,11 +36,11 @@

Recovering a lost MSColab password

{{form.hidden_tag()}}
-
+
-
-
+
+
{{form.email(class="form-control", placeholder="Email")}} diff --git a/mslib/mscolab/blueprints/chat/__init__.py b/mslib/mscolab/blueprints/chat/__init__.py index e0098d107..11870b206 100644 --- a/mslib/mscolab/blueprints/chat/__init__.py +++ b/mslib/mscolab/blueprints/chat/__init__.py @@ -33,7 +33,7 @@ from mslib.mscolab.auth import verify_user from mslib.mscolab.events import SocketEvents from mslib.mscolab.message_type import MessageType -from mslib.mscolab.utils import get_message_dict +from mslib.mscolab.utils import ATTACHMENTS_URL_PREFIX, get_message_dict CHAT_BP = Blueprint('chat', __name__) @@ -79,7 +79,7 @@ def message_attachment(): return "False" -@CHAT_BP.route('/uploads//', methods=["GET"]) +@CHAT_BP.route(f'/{ATTACHMENTS_URL_PREFIX}//', methods=["GET"]) def uploads(name=None, filename=None): base_path = current_app.config['UPLOAD_FOLDER'] if name is None: diff --git a/mslib/mscolab/blueprints/docs/templates/docs/index.html b/mslib/mscolab/blueprints/docs/templates/docs/index.html index 8d070121e..cdd0cd5f4 100644 --- a/mslib/mscolab/blueprints/docs/templates/docs/index.html +++ b/mslib/mscolab/blueprints/docs/templates/docs/index.html @@ -18,7 +18,7 @@ Mission Support System Collaboration Platform
- {% endblock %} diff --git a/mslib/mscolab/blueprints/docs/templates/theme.html b/mslib/mscolab/blueprints/docs/templates/theme.html index 05226bb30..93b31839c 100644 --- a/mslib/mscolab/blueprints/docs/templates/theme.html +++ b/mslib/mscolab/blueprints/docs/templates/theme.html @@ -17,7 +17,7 @@
- {% endblock %} diff --git a/mslib/mswms/blueprints/docs/templates/theme.html b/mslib/mswms/blueprints/docs/templates/theme.html index 05226bb30..93b31839c 100644 --- a/mslib/mswms/blueprints/docs/templates/theme.html +++ b/mslib/mswms/blueprints/docs/templates/theme.html @@ -17,7 +17,7 @@