diff --git a/.github/workflows/container.yml b/.github/workflows/container.yml index 576437c..97f98c3 100644 --- a/.github/workflows/container.yml +++ b/.github/workflows/container.yml @@ -25,7 +25,7 @@ jobs: path: | ~/.local/share/containers ~/.config/containers - key: ${{ runner.os }} + key: ${{ runner.os }}-${{ hashFiles('**/*.Dockerfile', 'build_image.sh', 'VERSION') }} - name: Login to Container Registry uses: redhat-actions/podman-login@v1 with: diff --git a/resource/runner/framework/rootfs/.gitignore b/resource/runner/framework/rootfs/.gitignore index 5ff7aef..9722b50 100644 --- a/resource/runner/framework/rootfs/.gitignore +++ b/resource/runner/framework/rootfs/.gitignore @@ -1,2 +1,3 @@ /full -/run \ No newline at end of file +/run +*.tar diff --git a/resource/runner/framework/template/go.mk b/resource/runner/framework/template/go.mk index 37bebcf..5083376 100644 --- a/resource/runner/framework/template/go.mk +++ b/resource/runner/framework/template/go.mk @@ -1,2 +1,2 @@ -GO=/usr/local/go/bin/go +GO=/usr/bin/go GO_BUILD_FLAGS=-trimpath \ No newline at end of file diff --git a/resource/runner/framework/template/nodejs.mk b/resource/runner/framework/template/nodejs.mk new file mode 100644 index 0000000..dd2b111 --- /dev/null +++ b/resource/runner/framework/template/nodejs.mk @@ -0,0 +1 @@ +NODEJS=/usr/bin/node \ No newline at end of file diff --git a/resource/runner/framework/template/rust.mk b/resource/runner/framework/template/rust.mk index eda5a2d..35a9c6f 100644 --- a/resource/runner/framework/template/rust.mk +++ b/resource/runner/framework/template/rust.mk @@ -1,2 +1,2 @@ -RUSTC = /root/.cargo/bin/rustc +RUSTC = /usr/bin/rustc RUSTFLAGS = -C opt-level=2 -W warnings \ No newline at end of file diff --git a/resource/runner/problem/example/config.json b/resource/runner/problem/example/config.json index e08ef81..ea808b8 100644 --- a/resource/runner/problem/example/config.json +++ b/resource/runner/problem/example/config.json @@ -27,7 +27,7 @@ "Lang" : "pypy3", "Judge" : {"Type": "default", "Script": "", "Cmp": "NCMP"}, "Runtime": { - "Run": {"TimeLimit": 1000, "MemoryLimit": 80, "NProcLimit": 1} + "Run": {"TimeLimit": 1000, "MemoryLimit": 70, "NProcLimit": 1} } }, { diff --git a/resource/runner/problem/example/judge/custom.Makefile b/resource/runner/problem/example/judge/custom.Makefile index 4e867ea..03ed373 100644 --- a/resource/runner/problem/example/judge/custom.Makefile +++ b/resource/runner/problem/example/judge/custom.Makefile @@ -36,6 +36,7 @@ compile: judge: # !! Rename on *.out.usr or *.judge is not allowed !! # 自定义评测方式 - sed '/gadgets/d' $(PREFIX)/user/$(TEST_NUM).out.usr >$(PREFIX)/user/$(TEST_NUM).out.usr1 + # 特别注意:整个文件系统为 readonly filesystem,临时文件只能放在 /tmp 下 + sed '/gadgets/d' $(PREFIX)/user/$(TEST_NUM).out.usr > /tmp/$(TEST_NUM).out.usr1 # 评测结果要求符合 testlib 的格式 -> $(TEST_NUM).judge - $(NCMP) $(PREFIX)/problem/data/input/$(TEST_NUM).input $(PREFIX)/user/$(TEST_NUM).out.usr1 $(PREFIX)/problem/data/output/$(TEST_NUM).output $(PREFIX)/user/$(TEST_NUM).judge -appes + $(NCMP) $(PREFIX)/problem/data/input/$(TEST_NUM).input /tmp/$(TEST_NUM).out.usr1 $(PREFIX)/problem/data/output/$(TEST_NUM).output $(PREFIX)/user/$(TEST_NUM).judge -appes diff --git a/resource/runner/problem/example/std/ans.c b/resource/runner/problem/example/std/ans.c new file mode 100644 index 0000000..a864eb0 --- /dev/null +++ b/resource/runner/problem/example/std/ans.c @@ -0,0 +1,7 @@ +#include +int main() { + long long a, b; + scanf("%lld%lld", &a, &b); + printf("%lld\n", a + b); + return 0; +} diff --git a/resource/runner/problem/example/std/ans.cpp b/resource/runner/problem/example/std/ans.cpp new file mode 100644 index 0000000..68eb291 --- /dev/null +++ b/resource/runner/problem/example/std/ans.cpp @@ -0,0 +1,8 @@ +#include +using namespace std; +int main() { + long long a, b; + cin >> a >> b; + cout << a + b << endl; + return 0; +} \ No newline at end of file diff --git a/resource/runner/problem/example/std/ans.py b/resource/runner/problem/example/std/ans.py new file mode 100644 index 0000000..52ff06f --- /dev/null +++ b/resource/runner/problem/example/std/ans.py @@ -0,0 +1 @@ +print(sum(map(int, input().strip().split()))) diff --git a/resource/runner/problem/example/std/ans.rs b/resource/runner/problem/example/std/ans.rs new file mode 100644 index 0000000..8382f42 --- /dev/null +++ b/resource/runner/problem/example/std/ans.rs @@ -0,0 +1,15 @@ +use std::io; + +fn main() { + let mut input = String::new(); + io::stdin().read_line(&mut input).unwrap(); + + let nums: Vec = input + .trim() + .split_whitespace() + .map(|num| num.parse().unwrap()) + .collect(); + + let sum = nums[0] + nums[1]; + println!("{}", sum); +} diff --git a/resource/runner/scripts/debian-full.Dockerfile b/resource/runner/scripts/debian-full.Dockerfile index 78d5888..1e1497d 100644 --- a/resource/runner/scripts/debian-full.Dockerfile +++ b/resource/runner/scripts/debian-full.Dockerfile @@ -1,20 +1,15 @@ FROM docker.io/library/debian:bookworm-slim WORKDIR /woj -# Install dependencies & languages: c/cpp/python3/pypy3 -RUN apt-get update && apt-get upgrade -y && apt-get install -y software-properties-common \ +# RUN sed -i 's/deb.debian.org/mirrors.tuna.tsinghua.edu.cn/g' /etc/apt/sources.list.d/debian.sources + +# Install dependencies & languages: c/cpp/python3/pypy3/go/rust/nodejs +RUN apt-get update && apt-get upgrade -y \ && apt-get install -y \ git parallel wget curl \ autoconf bison cmake flex gperf libnl-route-3-dev libprotobuf-dev libtool m4 make pkg-config protobuf-compiler \ - gcc g++ clang \ - python3 pypy3 \ + gcc g++ clang python3 pypy3 golang-go rustc nodejs \ && apt-get clean && rm -rf /var/lib/apt/lists -# Install golang -RUN wget https://go.dev/dl/go1.22.1.linux-amd64.tar.gz && rm -rf /usr/local/go && tar -C /usr/local -xzf go1.22.1.linux-amd64.tar.gz && rm go1.22.1.linux-amd64.tar.gz -# Install Rust -RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y -# Setup PATH -ENV PATH=/usr/local/go/bin:/root/.cargo/bin:$PATH # Copy source code RUN mkdir -p /woj/framework && mkdir -p /woj/problem