Support libraries in decomp.me #1103
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: PR | |
on: | |
push: | |
branches: | |
- main | |
pull_request: | |
jobs: | |
full_test_and_build: | |
name: full test and build | |
runs-on: ubuntu-22.04 | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Install poetry | |
run: pipx install poetry | |
- name: Setup Python 3.9 | |
uses: actions/setup-python@v4 | |
with: | |
python-version: 3.9 | |
cache: poetry | |
cache-dependency-path: backend/poetry.lock | |
- name: Install backend Python dependencies | |
run: cd backend && poetry install | |
- name: Install apt dependencies (initial) | |
run: |- | |
sudo dpkg --add-architecture i386 | |
sudo rm -f /etc/apt/sources.list.d/microsoft-prod.list | |
sudo apt-get update -qq | |
sudo apt-get install -yqq --allow-downgrades libc6:i386 libgcc-s1:i386 libstdc++6:i386 wine | |
sudo apt-get install \ | |
ca-certificates \ | |
curl \ | |
gnupg \ | |
lsb-release | |
sudo mkdir -p /etc/apt/keyrings | |
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg | |
echo \ | |
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \ | |
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null | |
sudo apt-get update -qq | |
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin | |
sudo apt-get install \ | |
binutils-aarch64-linux-gnu \ | |
binutils-mips-linux-gnu \ | |
binutils-powerpc-linux-gnu \ | |
binutils-sh-elf \ | |
binutils-djgpp \ | |
dos2unix \ | |
libprotobuf-dev \ | |
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: | |
packages: docker-ce docker-ce-cli containerd.io docker-compose-plugin binutils-aarch64-linux-gnu binutils-mips-linux-gnu binutils-powerpc-linux-gnu binutils-sh-elf dos2unix libprotobuf-dev libnl-route-3-dev libncurses5 protobuf-compiler wine software-properties-common | |
version: 1.0 | |
- name: Install DOSEMU | |
run: |- | |
sudo add-apt-repository -y ppa:dosemu2/ppa | |
sudo apt-get update | |
sudo apt-get install -y dosemu2 | |
- name: Install nsjail | |
run: |- | |
git clone --recursive --branch=3.1 https://github.com/google/nsjail | |
make -C nsjail | |
sudo cp nsjail/nsjail /usr/bin/ | |
- name: Cache compilers | |
uses: actions/cache@v3 | |
with: | |
path: backend/compilers/download_cache | |
key: ${{ runner.os }}-compilers-${{ hashFiles('backend/compilers/download.py') }} | |
- name: Download compilers | |
run: |- | |
cd backend | |
poetry run python3 compilers/download.py | |
- name: Download libraries | |
run: |- | |
cd backend | |
poetry run python3 libraries/download.py | |
- name: Install dkp dependencies (ppc) | |
run: |- | |
mkdir -p bin | |
docker run \ | |
-v $(pwd)/bin:/tmp/bin \ | |
--entrypoint /bin/sh \ | |
devkitpro/devkitppc:20210726 \ | |
-c "cp /opt/devkitpro/devkitPPC/bin/powerpc* /tmp/bin" | |
sudo mv bin/powerpc* /usr/bin/ | |
- name: Install dkp dependencies (arm) | |
run: |- | |
mkdir -p bin | |
docker run \ | |
-v $(pwd)/bin:/tmp/bin \ | |
--entrypoint /bin/sh \ | |
devkitpro/devkitarm:20210726 \ | |
-c "cp /opt/devkitpro/devkitARM/bin/arm* /tmp/bin" | |
sudo mv bin/arm* /usr/bin/ | |
- name: Install wibo | |
run: |- | |
wget https://github.com/decompals/WiBo/releases/download/0.5.2/wibo && chmod +x wibo && sudo cp wibo /usr/bin/ | |
- name: Run backend tests | |
run: |- | |
mkdir -p "${WINEPREFIX}" | |
wineboot --init | |
cd backend | |
poetry run python3 manage.py test | |
env: | |
SYSTEM_ENV: GITHUB_WORKFLOW | |
WINEPREFIX: /tmp/wine | |
TIMEOUT_SCALE_FACTOR: 10 | |
- name: Migrate backend | |
run: cd backend && poetry run python3 ./manage.py migrate | |
- name: Start backend | |
run: cd backend && poetry run python3 ./manage.py runserver > /dev/null 2>&1 & | |
- name: Setup Node.js 18 | |
uses: actions/setup-node@v3 | |
with: | |
node-version: 18 | |
cache: yarn | |
cache-dependency-path: frontend/yarn.lock | |
- name: Install frontend dependencies | |
run: cd frontend && yarn --frozen-lockfile | |
- name: Build frontend | |
run: cd frontend && yarn build | |
backend_test_windows: | |
name: backend tests (windows) | |
runs-on: windows-latest | |
defaults: | |
run: | |
shell: bash | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Install poetry | |
run: pipx install poetry | |
- name: Setup Python 3.9 | |
uses: actions/setup-python@v4 | |
with: | |
python-version: 3.9 | |
cache: poetry | |
cache-dependency-path: backend/poetry.lock | |
- name: Install Poetry | |
run: pip install --user poetry | |
- run: cd backend && poetry install | |
- name: Run tests | |
run: |- | |
cd backend | |
poetry run python manage.py test | |
env: | |
SYSTEM_ENV: GITHUB_WORKFLOW | |
TIMEOUT_SCALE_FACTOR: 10 | |
backend_test_docker: | |
name: backend tests (docker) | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Build decompme_backend image | |
run: |- | |
docker build backend \ | |
-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_MSDOS_SUPPORT=YES | |
- name: Run tests | |
run: |- | |
mkdir -p sandbox && chmod 777 sandbox | |
mkdir -p local_files && chmod 777 local_files | |
mkdir -p compilers && chmod 777 compilers | |
mkdir -p libraries && chmod 777 libraries | |
container_id=$(docker run \ | |
--detach \ | |
-v $(pwd):/decomp.me \ | |
-v $(pwd)/local_files:/local_files \ | |
-v $(pwd)/compilers:/compilers \ | |
-v $(pwd)/libraries:/libraries \ | |
--device /dev/fuse \ | |
--security-opt apparmor=unconfined \ | |
--security-opt seccomp=unconfined \ | |
--entrypoint /bin/bash \ | |
-e COMPILER_BASE_PATH=/compilers \ | |
-e LIBRARY_BASE_PATH=/libraries \ | |
-e WINEPREFIX=/tmp/wine \ | |
-e LOCAL_FILE_DIR=/local_files \ | |
-e USE_SANDBOX_JAIL=on \ | |
-e SANDBOX_DISABLE_PROC=true \ | |
-e TIMEOUT_SCALE_FACTOR=10 \ | |
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 libraries/download.py --libraries-dir ${LIBRARY_BASE_PATH} && \ | |
poetry run python manage.py test' | |
frontend_lint: | |
name: eslint & stylelint | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Setup Node.js 18 | |
uses: actions/setup-node@v3 | |
with: | |
node-version: 18 | |
cache: yarn | |
cache-dependency-path: frontend/yarn.lock | |
- name: Install frontend dependencies | |
run: cd frontend && yarn --frozen-lockfile | |
- run: cd frontend && yarn lint | |
mypy: | |
name: mypy | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Install poetry | |
run: pipx install poetry | |
- name: Setup Python 3.9 | |
uses: actions/setup-python@v4 | |
with: | |
python-version: 3.9 | |
cache: poetry | |
cache-dependency-path: backend/poetry.lock | |
- run: |- | |
cd backend | |
poetry install | |
poetry run mypy | |
black: | |
name: black | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: psf/black@stable | |
with: | |
src: "./backend" |