Overhaul download py (#855)

* Add translations for ps1/maspsx compiler set

* Tell clang to compile and not link to remove need for lld binary

* Assume msdos assembler lives on PATH

* Overhaul download.py

* Attempt to fix docker ci

* Appease black

* Whoops, don't forget to detach

* Fix path to download.py

* fix perms (hack?)

* Add --platforms and --compilers args to download.py

* Try out --compiler dir arg for docker in ci

* Try to ignore that 500 error about image manifests

* it's --compilerS-dir

* Try again

* Try building our own podman (fallback to vfs when rootless)

* install distro 'podman' to get configuration (fixes fuse)

* mount /dev/fuse in ci

* dumb bugfix, .download_cache

* split compilers config out of download.py

* update poetry.lock

* Add psyq3.3 + psyq4.4 and migrate psyq4.3 scratches to psyq4.4

* docker_entrypoint.sh cleanup

* Try to protect against 'locating item named "manifest" for image with ID'

* better podman sanity check

* appease black

* use 'requests.get()' to grab remote image digest

* Update compilers repo to 'decompme/compilers'

* Fix description for psyq3.6
This commit is contained in:
Mark Street
2023-09-20 08:37:35 +01:00
committed by GitHub
parent 45e8a90784
commit 4a2eabb345
14 changed files with 760 additions and 1107 deletions
+15 -3
View File
@@ -52,6 +52,10 @@ jobs:
libnl-route-3-dev \
libncurses5 \
protobuf-compiler
- name: Install msdos assembler
run: |-
wget https://github.com/OmniBlade/binutils-gdb/releases/download/omf-build/omftools.tar.gz
sudo tar xvzf omftools.tar.gz -C /usr/bin jwasm omf-nm omf-objdump
- name: Install apt dependencies (cached)
uses: awalsh128/cache-apt-pkgs-action@v1
with:
@@ -164,14 +168,19 @@ jobs:
-t decompme_backend \
--build-arg ENABLE_GC_WII_SUPPORT=YES \
--build-arg ENABLE_PS1_SUPPORT=YES \
--build-arg ENABLE_SATURN_SUPPORT=YES
--build-arg ENABLE_SATURN_SUPPORT=YES \
--build-arg ENABLE_MSDOS_SUPPORT=YES
- name: Run tests
run: |-
mkdir -p sandbox && chmod 777 sandbox
mkdir -p local_files && chmod 777 local_files
docker run \
mkdir -p compilers && chmod 777 compilers
container_id=$(docker run \
--detach \
-v $(pwd):/decomp.me \
-v $(pwd)/local_files:/local_files \
-v $(pwd)/compilers:/compilers \
--device /dev/fuse \
--security-opt apparmor=unconfined \
--security-opt seccomp=unconfined \
--entrypoint /bin/bash \
@@ -181,8 +190,11 @@ jobs:
-e USE_SANDBOX_JAIL=on \
-e SANDBOX_DISABLE_PROC=true \
-e TIMEOUT_SCALE_FACTOR=10 \
decompme_backend -c 'cd /decomp.me/backend && \
decompme_backend -c 'podman system service --time=0 unix:///tmp/podman.sock')
docker exec ${container_id} /bin/bash -c 'cd /decomp.me/backend && \
poetry install && \
poetry run compilers/download.py --compilers-dir ${COMPILER_BASE_PATH} --podman && \
poetry run python manage.py test'
frontend_lint:
+73 -11
View File
@@ -31,28 +31,87 @@ RUN git clone "https://github.com/google/nsjail" --recursive --branch 3.1 /nsjai
&& make
FROM ubuntu:22.04 as podman
ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get update && apt-get install -y \
build-essential \
git \
golang-go \
libassuan-dev \
libbtrfs-dev \
libc6-dev \
libdevmapper-dev \
libglib2.0-dev \
libgpg-error-dev \
libgpgme-dev \
libprotobuf-c-dev \
libprotobuf-dev \
libseccomp-dev \
libselinux1-dev \
libsystemd-dev
WORKDIR /root
ENV BUILD_DIR=/build
RUN mkdir -p ${BUILD_DIR}
ARG CONMON_VERSION=v2.1.8
RUN git clone https://github.com/containers/conmon && \
cd conmon && \
git checkout ${CONMON_VERSION} && \
export GOCACHE="$(mktemp -d)" && \
make && \
make podman PREFIX=${BUILD_DIR}/usr/local
ARG RUNC_VERSION=v1.1.9
RUN git clone https://github.com/opencontainers/runc runc && \
cd runc && \
git checkout ${RUNC_VERSION} && \
make BUILDTAGS="selinux seccomp" && \
mkdir -p ${BUILD_DIR}/usr/bin && \
cp runc ${BUILD_DIR}/usr/bin/runc
ARG PODMAN_VERSION=v4.6.2
RUN git clone https://github.com/containers/podman && \
cd podman && \
git checkout ${PODMAN_VERSION} && \
make BUILDTAGS="selinux seccomp" PREFIX=/usr && \
make install PREFIX=/build/usr
FROM base AS build
RUN apt-get -y update && apt-get install -y \
binutils-aarch64-linux-gnu \
binutils-djgpp \
binutils-mips-linux-gnu \
binutils-powerpc-linux-gnu \
binutils-aarch64-linux-gnu \
binutils-sh-elf \
binutils-djgpp \
ca-certificates \
curl \
gcc-mips-linux-gnu \
git \
iptables \
libc6-dev-i386 \
libdevmapper1.02.1 \
libgpgme11 \
libnl-route-3-200 \
libprotobuf-dev \
libtinfo5 \
netcat \
podman \
unzip \
wget \
libtinfo5 \
libc6-dev-i386 \
&& rm -rf /var/lib/apt/lists/*
# replace podman with newer version
COPY --from=podman /build/usr /usr
RUN curl -sSL https://install.python-poetry.org/ | \
POETRY_VERSION=1.3.1 POETRY_HOME=/etc/poetry python3.10 -
POETRY_VERSION=1.4.2 POETRY_HOME=/etc/poetry python3.10 -
COPY --from=nsjail /nsjail/nsjail /bin/nsjail
@@ -92,8 +151,12 @@ COPY --from=devkitpro/devkitppc:20210726 /opt/devkitpro/devkitPPC/bin/powerpc* /
# nds specifics
COPY --from=devkitpro/devkitarm:20210726 /opt/devkitpro/devkitARM/bin/arm* /usr/bin/
# download compilers
COPY compilers/download.py /compilers/
# msdos specific
RUN if [ "${ENABLE_MSDOS_SUPPORT}" = "YES" ]; then \
wget "https://github.com/OmniBlade/binutils-gdb/releases/download/omf-build/omftools.tar.gz" && \
tar xvzf omftools.tar.gz -C /usr/bin jwasm omf-nm omf-objdump && \
rm omftools.tar.gz; \
fi
ARG ENABLE_GBA_SUPPORT
ARG ENABLE_N64_SUPPORT
@@ -109,10 +172,6 @@ ENV ENABLE_SATURN_SUPPORT=${ENABLE_SATURN_SUPPORT}
ENV ENABLE_MSDOS_SUPPORT=${ENABLE_MSDOS_SUPPORT}
ENV ENABLE_WIN9X_SUPPORT=${ENABLE_WIN9X_SUPPORT}
RUN python3.10 -m pip install requests tqdm \
&& python3.10 /compilers/download.py \
&& rm -rf /compilers/download_cache/
RUN mkdir -p /etc/fonts
WORKDIR /backend
@@ -126,6 +185,9 @@ RUN useradd --create-home user \
&& mkdir -p "${WINEPREFIX}" \
&& chown user:user "${WINEPREFIX}"
# FIXME: how to properly configure subuids/subgids for podman?
RUN echo -e "" >/etc/subgid && echo -e "" >/etc/subuid
# switch to non-root user
USER user
+8
View File
@@ -0,0 +1,8 @@
n64:
- ido5.3
- ido7.1
- gcc2.7.2kmc
- gcc2.8.1pm
switch:
- clang-4.0.1
- clang-8.0.0
+141
View File
@@ -0,0 +1,141 @@
gba:
- agbcc
- agbccpp
gc_wii:
- mwcc_233_144
- mwcc_233_159
- mwcc_233_163
- mwcc_233_163n
- mwcc_242_81
- mwcc_247_92
- mwcc_247_105
- mwcc_247_107
- mwcc_247_108
- mwcc_41_60831
- mwcc_41_60126
- mwcc_42_142
- mwcc_43_151
- mwcc_43_172
- mwcc_43_213
- mwcc_242_81r
- mwcc_233_163e
- mwcc_42_127
n64:
- gcc2.7.2kmc
- gcc2.7.2sn
- gcc2.7.2snew
- gcc2.8.1pm
- gcc2.8.1sn
- ido5.3
- ido5.3_c++
- ido6.0
- ido7.1
- mips_pro_744
- egcs_1.1.2-4
- gcc4.4.0-mips64-elf
n3ds:
- armcc_40_771
- armcc_40_821
- armcc_41_561
- armcc_41_713
- armcc_41_791
- armcc_41_894
- armcc_41_921
- armcc_41_1049
- armcc_41_1440
- armcc_41_1454
- armcc_504_82
nds_arm9:
- mwcc_20_72
- mwcc_20_79
- mwcc_20_82
- mwcc_20_84
- mwcc_20_87
- mwcc_30_114
- mwcc_30_123
- mwcc_30_126
- mwcc_30_131
- mwcc_30_133
- mwcc_30_134
- mwcc_30_136
- mwcc_30_137
- mwcc_30_138
- mwcc_30_139
- mwcc_40_1018
- mwcc_40_1024
- mwcc_40_1026
- mwcc_40_1027
- mwcc_40_1028
- mwcc_40_1034
- mwcc_40_1036
- mwcc_40_1051
switch:
- clang-3.9.1
- clang-4.0.1
- clang-8.0.0
ps1:
- psyq3.3
- psyq3.5
- psyq3.6
- psyq4.0
- psyq4.1
- psyq4.3
- psyq4.4
- psyq4.5
- psyq4.6
- gcc2.6.3-psx
- gcc2.6.3-mipsel
- gcc2.7.1-mipsel
- gcc2.7.2-mipsel
- gcc2.7.2.1-mipsel
- gcc2.7.2.2-mipsel
- gcc2.7.2.3-mipsel
- gcc2.8.0-mipsel
- gcc2.8.1-mipsel
- gcc2.91.66-mipsel
- gcc2.95.2-mipsel
ps2:
- ee-gcc2.9-990721
- ee-gcc2.9-991111
- ee-gcc2.9-991111a
- ee-gcc2.9-991111-01
- ee-gcc2.95.2-273a
- ee-gcc2.95.2-274
- ee-gcc2.95.3-107
- ee-gcc2.95.3-114
- ee-gcc2.95.3-136
- ee-gcc2.96
- ee-gcc3.2-040921
- mwcps2-2.3-991202
- mwcps2-3.0b22-011126
- mwcps2-3.0b22-020123
- mwcps2-3.0b22-020716
- mwcps2-3.0b22-020926
saturn:
- cygnus-2.7-96Q3
macosx:
- gcc-5026
- gcc-5363
- gcc-5370
- gcc3-1041
msdos:
- wcc10.5
- wcc10.5a
- wcc10.6
- wcc11.0
win9x:
- msvc4.0
- msvc4.2
- msvc6.0
- msvc6.3
- msvc6.4
- msvc6.5
- msvc6.5pp
- msvc6.6
- msvc7.0
- msvc7.1
File diff suppressed because it is too large Load Diff
+19 -5
View File
@@ -283,19 +283,19 @@ ARMCC_504_82 = ArmccCompiler(
CLANG_391 = ClangCompiler(
id="clang-3.9.1",
platform=SWITCH,
cc='TOOLROOT="$COMPILER_DIR" "$COMPILER_DIR"/bin/clang++ -target aarch64-linux-elf --sysroot="$COMPILER_DIR"/botw-lib-musl-25ed8669943bee65a650700d340e451eda2a26ba -D_LIBCPP_HAS_MUSL_LIBC -fuse-ld=lld -mcpu=cortex-a57+fp+simd+crypto+crc -mno-implicit-float -fstandalone-debug -fPIC -Wl,-Bsymbolic-functions -shared -stdlib=libc++ -nostdlib $COMPILER_FLAGS -o "$OUTPUT" "$INPUT"',
cc='TOOLROOT="$COMPILER_DIR" "$COMPILER_DIR"/bin/clang++ -c -target aarch64-linux-elf --sysroot="$COMPILER_DIR"/botw-lib-musl-25ed8669943bee65a650700d340e451eda2a26ba -D_LIBCPP_HAS_MUSL_LIBC -mcpu=cortex-a57+fp+simd+crypto+crc -mno-implicit-float -fstandalone-debug -fPIC -Wl,-Bsymbolic-functions -shared -stdlib=libc++ -nostdlib $COMPILER_FLAGS -o "$OUTPUT" "$INPUT"',
)
CLANG_401 = ClangCompiler(
id="clang-4.0.1",
platform=SWITCH,
cc='TOOLROOT="$COMPILER_DIR" "$COMPILER_DIR"/bin/clang++ -target aarch64-linux-elf --sysroot="$COMPILER_DIR"/botw-lib-musl-25ed8669943bee65a650700d340e451eda2a26ba -fuse-ld=lld -mcpu=cortex-a57+fp+simd+crypto+crc -mno-implicit-float -fstandalone-debug -fPIC -Wl,-Bsymbolic-functions -shared -stdlib=libc++ -nostdlib $COMPILER_FLAGS -o "$OUTPUT" "$INPUT"',
cc='TOOLROOT="$COMPILER_DIR" "$COMPILER_DIR"/bin/clang++ -c -target aarch64-linux-elf --sysroot="$COMPILER_DIR"/botw-lib-musl-25ed8669943bee65a650700d340e451eda2a26ba -mcpu=cortex-a57+fp+simd+crypto+crc -mno-implicit-float -fstandalone-debug -fPIC -Wl,-Bsymbolic-functions -shared -stdlib=libc++ -nostdlib $COMPILER_FLAGS -o "$OUTPUT" "$INPUT"',
)
CLANG_800 = ClangCompiler(
id="clang-8.0.0",
platform=SWITCH,
cc='TOOLROOT="$COMPILER_DIR" "$COMPILER_DIR"/bin/clang++ -target aarch64-linux-elf --sysroot="$COMPILER_DIR"/botw-lib-musl-25ed8669943bee65a650700d340e451eda2a26ba -fuse-ld=lld -mcpu=cortex-a57+fp+simd+crypto+crc -mno-implicit-float -fstandalone-debug -fPIC -Wl,-Bsymbolic-functions -shared -stdlib=libc++ -nostdlib $COMPILER_FLAGS -o "$OUTPUT" "$INPUT"',
cc='TOOLROOT="$COMPILER_DIR" "$COMPILER_DIR"/bin/clang++ -c -target aarch64-linux-elf --sysroot="$COMPILER_DIR"/botw-lib-musl-25ed8669943bee65a650700d340e451eda2a26ba -mcpu=cortex-a57+fp+simd+crypto+crc -mno-implicit-float -fstandalone-debug -fPIC -Wl,-Bsymbolic-functions -shared -stdlib=libc++ -nostdlib $COMPILER_FLAGS -o "$OUTPUT" "$INPUT"',
)
# PS1
@@ -307,6 +307,12 @@ PSYQ_MSDOS_CC = (
)
PSYQ_CC = 'cpp -P "$INPUT" | unix2dos | ${WINE} ${COMPILER_DIR}/CC1PSX.EXE -quiet ${COMPILER_FLAGS} -o "$OUTPUT".s && ${WINE} ${COMPILER_DIR}/ASPSX.EXE -quiet "$OUTPUT".s -o "$OUTPUT".obj && ${COMPILER_DIR}/psyq-obj-parser "$OUTPUT".obj -o "$OUTPUT"'
PSYQ33 = GCCPS1Compiler(
id="psyq3.3",
platform=PS1,
cc=PSYQ_MSDOS_CC,
)
PSYQ35 = GCCPS1Compiler(
id="psyq3.5",
platform=PS1,
@@ -337,6 +343,12 @@ PSYQ43 = GCCPS1Compiler(
cc=PSYQ_CC,
)
PSYQ44 = GCCPS1Compiler(
id="psyq4.4",
platform=PS1,
cc=PSYQ_CC,
)
PSYQ45 = GCCPS1Compiler(
id="psyq4.5",
platform=PS1,
@@ -1137,11 +1149,13 @@ _all_compilers: List[Compiler] = [
CLANG_401,
CLANG_800,
# PS1
PSYQ33,
PSYQ35,
PSYQ36,
PSYQ40,
PSYQ41,
PSYQ43,
PSYQ44,
PSYQ45,
PSYQ46,
GCC263_PSX,
@@ -1361,12 +1375,12 @@ _all_presets = [
),
Preset(
"Legacy of Kain: Soul Reaver",
PSYQ43,
PSYQ44,
"-O2 -G65536",
),
Preset(
"Metal Gear Solid",
PSYQ43,
PSYQ44,
"-O2 -G8",
),
Preset(
@@ -0,0 +1,37 @@
import django.db.migrations.operations.special
from django.apps.registry import Apps
from django.db import migrations
from django.db.backends.base.schema import BaseDatabaseSchemaEditor
def rename_compilers(apps: Apps, schema_editor: BaseDatabaseSchemaEditor) -> None:
"""
Migrate the compiler ID 'psyq4.3' to 'psyq4.4'
"""
compiler_map = {
"psyq4.3": "psyq4.4",
}
Scratch = apps.get_model("coreapp", "Scratch")
for row in (
Scratch.objects.only("compiler")
.filter(platform="ps1")
.filter(compiler="psyq4.3")
):
if row.compiler in compiler_map:
row.compiler = compiler_map[row.compiler]
row.save(update_fields=["compiler"])
class Migration(migrations.Migration):
dependencies = [
("coreapp", "0036_fix_compiler_gah"),
]
operations = [
migrations.RunPython(
code=rename_compilers,
reverse_code=django.db.migrations.operations.special.RunPython.noop,
)
]
+3 -3
View File
@@ -45,9 +45,9 @@ MSDOS = Platform(
name="Microsoft DOS",
description="x86",
arch="i686",
assemble_cmd='${COMPILER_BASE_PATH}/msdos/i386_tools/jwasm -c -Fo"$OUTPUT" "$INPUT"',
objdump_cmd="${COMPILER_BASE_PATH}/msdos/i386_tools/omf-objdump",
nm_cmd="${COMPILER_BASE_PATH}/msdos/i386_tools/omf-nm",
assemble_cmd='jwasm -c -Fo"$OUTPUT" "$INPUT"',
objdump_cmd="omf-objdump",
nm_cmd="omf-nm",
asm_prelude="""
.386P
.model FLAT
-1
View File
@@ -4,5 +4,4 @@ DEBUG="on"
ALLOWED_HOSTS="backend,localhost,127.0.0.1"
USE_SANDBOX_JAIL="on"
SANDBOX_DISABLE_PROC="true"
COMPILER_BASE_PATH=/compilers
MEDIA_URL=http://localhost/media/
+10 -6
View File
@@ -6,17 +6,21 @@ DB_PORT=${DATABASE_PORT:-5432}
BE_HOST=${BACKEND_HOST:-0.0.0.0}
BE_PORT=${BACKEND_PORT:-8000}
poetry config virtualenvs.path /backend/virtualenvs
poetry install
podman system service --time=0 unix:///tmp/podman.sock &
poetry run /backend/compilers/download.py --podman
skill podman
until nc -z ${DB_HOST} ${DB_PORT} > /dev/null; do
echo "Waiting for database to become available on ${DB_HOST}:${DB_PORT}..."
sleep 1
done
poetry config virtualenvs.path /backend/virtualenvs
poetry install
poetry run /backend/manage.py migrate
poetry run /backend/manage.py loaddata /backend/db.json
poetry run /backend/manage.py runserver ${BE_HOST}:${BE_PORT}
+104 -9
View File
@@ -469,14 +469,14 @@ testing = ["coverage[toml] (>=5.0a4)", "pytest (>=4.6.11)"]
[[package]]
name = "django-filter"
version = "23.2"
version = "23.3"
description = "Django-filter is a reusable Django application for allowing users to filter querysets dynamically."
category = "main"
optional = false
python-versions = ">=3.7"
files = [
{file = "django-filter-23.2.tar.gz", hash = "sha256:2fe15f78108475eda525692813205fa6f9e8c1caf1ae65daa5862d403c6dbf00"},
{file = "django_filter-23.2-py3-none-any.whl", hash = "sha256:d12d8e0fc6d3eb26641e553e5d53b191eb8cec611427d4bdce0becb1f7c172b5"},
{file = "django-filter-23.3.tar.gz", hash = "sha256:015fe155582e1805b40629344e4a6cf3cc40450827d294d040b4b8c1749a9fa6"},
{file = "django_filter-23.3-py3-none-any.whl", hash = "sha256:65bc5d1d8f4fff3aaf74cb5da537b6620e9214fb4b3180f6c560776b1b6dccd0"},
]
[package.dependencies]
@@ -595,6 +595,28 @@ compatible-mypy = ["mypy (>=1.4.0,<1.5.0)"]
coreapi = ["coreapi (>=2.0.0)"]
markdown = ["types-Markdown (>=0.1.5)"]
[[package]]
name = "docker"
version = "6.1.3"
description = "A Python library for the Docker Engine API."
category = "main"
optional = false
python-versions = ">=3.7"
files = [
{file = "docker-6.1.3-py3-none-any.whl", hash = "sha256:aecd2277b8bf8e506e484f6ab7aec39abe0038e29fa4a6d3ba86c3fe01844ed9"},
{file = "docker-6.1.3.tar.gz", hash = "sha256:aa6d17830045ba5ef0168d5eaa34d37beeb113948c413affe1d5991fc11f9a20"},
]
[package.dependencies]
packaging = ">=14.0"
pywin32 = {version = ">=304", markers = "sys_platform == \"win32\""}
requests = ">=2.26.0"
urllib3 = ">=1.26.0"
websocket-client = ">=0.32.0"
[package.extras]
ssh = ["paramiko (>=2.4.3)"]
[[package]]
name = "drf-extensions"
version = "0.7.1"
@@ -926,7 +948,7 @@ files = [
name = "packaging"
version = "23.1"
description = "Core utilities for Python packages"
category = "dev"
category = "main"
optional = false
python-versions = ">=3.7"
files = [
@@ -1057,6 +1079,24 @@ files = [
docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.1)", "sphinx-autodoc-typehints (>=1.24)"]
test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4)", "pytest-cov (>=4.1)", "pytest-mock (>=3.11.1)"]
[[package]]
name = "podman"
version = "4.6.0"
description = "Bindings for Podman RESTful API"
category = "main"
optional = false
python-versions = ">=3.6"
files = [
{file = "podman-4.6.0-py3-none-any.whl", hash = "sha256:83bed3d57762bf9df4f703558c303ef019626ad895ba19f876d2e0cca5588e0b"},
{file = "podman-4.6.0.tar.gz", hash = "sha256:cf1d009a6a5aed36e4daec61c2e95a49d10b19c5422330ffacb6846c68d18885"},
]
[package.dependencies]
pyxdg = ">=0.26"
requests = ">=2.24"
tomli = {version = ">=1.2.3", markers = "python_version < \"3.11\""}
urllib3 = "*"
[[package]]
name = "psycopg2-binary"
version = "2.9.7"
@@ -1217,6 +1257,42 @@ files = [
{file = "pytz-2023.3.post1.tar.gz", hash = "sha256:7b4fddbeb94a1eba4b557da24f19fdf9db575192544270a9101d8509f9f43d7b"},
]
[[package]]
name = "pywin32"
version = "306"
description = "Python for Window Extensions"
category = "main"
optional = false
python-versions = "*"
files = [
{file = "pywin32-306-cp310-cp310-win32.whl", hash = "sha256:06d3420a5155ba65f0b72f2699b5bacf3109f36acbe8923765c22938a69dfc8d"},
{file = "pywin32-306-cp310-cp310-win_amd64.whl", hash = "sha256:84f4471dbca1887ea3803d8848a1616429ac94a4a8d05f4bc9c5dcfd42ca99c8"},
{file = "pywin32-306-cp311-cp311-win32.whl", hash = "sha256:e65028133d15b64d2ed8f06dd9fbc268352478d4f9289e69c190ecd6818b6407"},
{file = "pywin32-306-cp311-cp311-win_amd64.whl", hash = "sha256:a7639f51c184c0272e93f244eb24dafca9b1855707d94c192d4a0b4c01e1100e"},
{file = "pywin32-306-cp311-cp311-win_arm64.whl", hash = "sha256:70dba0c913d19f942a2db25217d9a1b726c278f483a919f1abfed79c9cf64d3a"},
{file = "pywin32-306-cp312-cp312-win32.whl", hash = "sha256:383229d515657f4e3ed1343da8be101000562bf514591ff383ae940cad65458b"},
{file = "pywin32-306-cp312-cp312-win_amd64.whl", hash = "sha256:37257794c1ad39ee9be652da0462dc2e394c8159dfd913a8a4e8eb6fd346da0e"},
{file = "pywin32-306-cp312-cp312-win_arm64.whl", hash = "sha256:5821ec52f6d321aa59e2db7e0a35b997de60c201943557d108af9d4ae1ec7040"},
{file = "pywin32-306-cp37-cp37m-win32.whl", hash = "sha256:1c73ea9a0d2283d889001998059f5eaaba3b6238f767c9cf2833b13e6a685f65"},
{file = "pywin32-306-cp37-cp37m-win_amd64.whl", hash = "sha256:72c5f621542d7bdd4fdb716227be0dd3f8565c11b280be6315b06ace35487d36"},
{file = "pywin32-306-cp38-cp38-win32.whl", hash = "sha256:e4c092e2589b5cf0d365849e73e02c391c1349958c5ac3e9d5ccb9a28e017b3a"},
{file = "pywin32-306-cp38-cp38-win_amd64.whl", hash = "sha256:e8ac1ae3601bee6ca9f7cb4b5363bf1c0badb935ef243c4733ff9a393b1690c0"},
{file = "pywin32-306-cp39-cp39-win32.whl", hash = "sha256:e25fd5b485b55ac9c057f67d94bc203f3f6595078d1fb3b458c9c28b7153a802"},
{file = "pywin32-306-cp39-cp39-win_amd64.whl", hash = "sha256:39b61c15272833b5c329a2989999dcae836b1eed650252ab1b7bfbe1d59f30f4"},
]
[[package]]
name = "pyxdg"
version = "0.28"
description = "PyXDG contains implementations of freedesktop.org standards in python."
category = "main"
optional = false
python-versions = "*"
files = [
{file = "pyxdg-0.28-py2.py3-none-any.whl", hash = "sha256:bdaf595999a0178ecea4052b7f4195569c1ff4d344567bccdc12dfdf02d545ab"},
{file = "pyxdg-0.28.tar.gz", hash = "sha256:3267bb3074e934df202af2ee0868575484108581e6f3cb006af1da35395e88b4"},
]
[[package]]
name = "pyyaml"
version = "6.0.1"
@@ -1425,14 +1501,14 @@ tests = ["coverage (>=6.0.0)", "flake8", "mypy", "pytest (>=4.6)", "pytest-cov",
[[package]]
name = "sentry-sdk"
version = "1.30.0"
version = "1.31.0"
description = "Python client for Sentry (https://sentry.io)"
category = "main"
optional = false
python-versions = "*"
files = [
{file = "sentry-sdk-1.30.0.tar.gz", hash = "sha256:7dc873b87e1faf4d00614afd1058bfa1522942f33daef8a59f90de8ed75cd10c"},
{file = "sentry_sdk-1.30.0-py2.py3-none-any.whl", hash = "sha256:2e53ad63f96bb9da6570ba2e755c267e529edcf58580a2c0d2a11ef26e1e678b"},
{file = "sentry-sdk-1.31.0.tar.gz", hash = "sha256:6de2e88304873484207fed836388e422aeff000609b104c802749fd89d56ba5b"},
{file = "sentry_sdk-1.31.0-py2.py3-none-any.whl", hash = "sha256:64a7141005fb775b9db298a30de93e3b83e0ddd1232dc6f36eb38aebc1553291"},
]
[package.dependencies]
@@ -1442,10 +1518,12 @@ urllib3 = {version = ">=1.26.11", markers = "python_version >= \"3.6\""}
[package.extras]
aiohttp = ["aiohttp (>=3.5)"]
arq = ["arq (>=0.23)"]
asyncpg = ["asyncpg (>=0.23)"]
beam = ["apache-beam (>=2.12)"]
bottle = ["bottle (>=0.12.13)"]
celery = ["celery (>=3)"]
chalice = ["chalice (>=1.16.0)"]
clickhouse-driver = ["clickhouse-driver (>=0.2.0)"]
django = ["django (>=1.8)"]
falcon = ["falcon (>=1.4)"]
fastapi = ["fastapi (>=0.79.0)"]
@@ -1536,7 +1614,7 @@ files = [
name = "tomli"
version = "2.0.1"
description = "A lil' TOML parser"
category = "dev"
category = "main"
optional = false
python-versions = ">=3.7"
files = [
@@ -1755,6 +1833,23 @@ files = [
[package.extras]
watchmedo = ["PyYAML (>=3.10)"]
[[package]]
name = "websocket-client"
version = "1.6.3"
description = "WebSocket client for Python with low level API options"
category = "main"
optional = false
python-versions = ">=3.8"
files = [
{file = "websocket-client-1.6.3.tar.gz", hash = "sha256:3aad25d31284266bcfcfd1fd8a743f63282305a364b8d0948a43bd606acc652f"},
{file = "websocket_client-1.6.3-py3-none-any.whl", hash = "sha256:6cfc30d051ebabb73a5fa246efdcc14c8fbebbd0330f8984ac3bb6d9edd2ad03"},
]
[package.extras]
docs = ["Sphinx (>=6.0)", "sphinx-rtd-theme (>=1.1.0)"]
optional = ["python-socks", "wsaccel"]
test = ["websockets"]
[[package]]
name = "wrapt"
version = "1.15.0"
@@ -1843,4 +1938,4 @@ files = [
[metadata]
lock-version = "2.0"
python-versions = "^3.9"
content-hash = "1d087268e1ab077362bdc212b25e10fec9d759ea431f9e6007d1f8032a4a8dd1"
content-hash = "11efb2fa54db10150e87ddaffe1517605cdcb6fe3cfc5be82c534ce958dff517"
+2
View File
@@ -28,6 +28,8 @@ sentry-sdk = "^1.21.1"
django-session-timeout = "^0.1.0"
django = "^4.2"
requests = "^2.29.0"
docker = "6.1.3"
podman = "4.6.0"
[tool.poetry.group.dev.dependencies]
black = "^23.3.0"
+14 -12
View File
@@ -30,19 +30,21 @@ services:
- setuid
- setgid
- setfcap
devices:
- "/dev/fuse:/dev/fuse"
env_file:
- backend/docker.dev.env
- backend/docker.dev.env
ports:
- "8000:8000"
- "8000:8000"
security_opt:
- apparmor=unconfined
- seccomp=unconfined
volumes:
- ./backend:/backend
- ./backend:/backend
tmpfs:
# Use a separate tmpfs to prevent a rogue jailed process
# from filling /tmp on the parent container
- /sandbox/tmp:exec,uid=1000,gid=1000,size=64M,mode=0700
# Use a separate tmpfs to prevent a rogue jailed process
# from filling /tmp on the parent container
- /sandbox/tmp:exec,uid=1000,gid=1000,size=64M,mode=0700
frontend:
build: frontend
environment:
@@ -50,14 +52,14 @@ services:
INTERNAL_API_BASE: http://backend:8000/api
FRONTEND_USE_IMAGE_PROXY: "off"
ports:
- "8080:8080"
- "8080:8080"
volumes:
- ./frontend:/frontend
- .env:/.env
- ./frontend:/frontend
- .env:/.env
nginx:
image: nginx:1.22-alpine
ports:
- "80:80"
- "80:80"
volumes:
- ./nginx:/etc/nginx/conf.d
- ./backend/media:/media
- ./nginx:/etc/nginx/conf.d
- ./backend/media:/media
@@ -117,13 +117,29 @@
"gcc-5026": "GCC 4.0.0 (Xcode 2.1) (C)",
"gcc-5026-cpp": "GCC 4.0.0 (Xcode 2.1) (C++)",
"gcc3-1041": "GCC 3.1 (Mac OS 10.1.4) (C)",
"gcc2.6.3-psx": "gcc 2.6.3-psx + maspsx",
"gcc2.6.3-mipsel": "gcc 2.6.3 + maspsx",
"gcc2.7.1-mipsel": "gcc 2.7.1 + maspsx",
"gcc2.7.2-mipsel": "gcc 2.7.2 + maspsx",
"gcc2.7.2.1-mipsel": "gcc 2.7.2.1 + maspsx",
"gcc2.7.2.2-mipsel": "gcc 2.7.2.2 + maspsx",
"gcc2.7.2.3-mipsel": "gcc 2.7.2.3 + maspsx",
"gcc2.8.0-mipsel": "gcc 2.8.0 + maspsx",
"gcc2.8.1-mipsel": "gcc 2.8.1 + maspsx",
"gcc2.91.66-mipsel": "gcc 2.91.66 + maspsx",
"gcc2.95.2-mipsel": "gcc 2.95.2 + maspsx",
"psyq3.3": "PSYQ3.3 (gcc 2.6.0 + aspsx 2.21)",
"psyq3.5": "PSYQ3.5 (gcc 2.6.0 + aspsx 2.34)",
"psyq3.6": "PSYQ3.6 (gcc 2.6.3 + aspsx 2.34)",
"psyq4.0": "PSYQ4.0 (gcc 2.7.2)",
"psyq4.1": "PSYQ4.1 (gcc 2.7.2)",
"psyq4.3": "PSYQ4.3 (gcc 2.8.1)",
"psyq4.5": "PSYQ4.5 (gcc 2.91.66)",
"psyq4.6": "PSYQ4.6 (gcc 2.95.2)",
"psyq3.6": "PSYQ3.6 (gcc 2.7.2 + aspsx 2.34)",
"psyq4.0": "PSYQ4.0 (gcc 2.7.2 + aspsx 2.56)",
"psyq4.1": "PSYQ4.1 (gcc 2.7.2 + aspsx 2.67)",
"psyq4.3": "PSYQ4.3 (gcc 2.8.0 + aspsx 2.77)",
"psyq4.4": "PSYQ4.4 (gcc 2.8.1 + aspsx 2.79)",
"psyq4.5": "PSYQ4.5 (gcc 2.91.66 + aspsx 2.81)",
"psyq4.6": "PSYQ4.6 (gcc 2.95.2 + aspsx 2.86)",
"wcc10.5": "Watcom Optimizing C i386 Compiler 10.5",
"wpp10.5": "Watcom Optimizing C++ i386 Compiler 10.5",
"wcc10.5a": "Watcom Optimizing C i386 Compiler 10.5a",