From 0c079720513bd439889bd301a60b8d47979f03a7 Mon Sep 17 00:00:00 2001 From: adienakhmad Date: Wed, 19 Nov 2025 14:53:54 +0000 Subject: [PATCH] add scoring infra --- .gitignore | 3 +- WebApp/appsettings.Development.json | 2 +- WebApp/appsettings.json | 2 +- mise.toml | 92 +++++++++++++++++++++++++++++ 4 files changed, 96 insertions(+), 3 deletions(-) create mode 100644 mise.toml diff --git a/.gitignore b/.gitignore index 97b42be..ace0f70 100644 --- a/.gitignore +++ b/.gitignore @@ -8,4 +8,5 @@ **/obj/** **/node_modules/** **/**.suo -**/**.user \ No newline at end of file +**/**.user +/.contest diff --git a/WebApp/appsettings.Development.json b/WebApp/appsettings.Development.json index fed3597..c018443 100644 --- a/WebApp/appsettings.Development.json +++ b/WebApp/appsettings.Development.json @@ -9,7 +9,7 @@ "Kestrel": { "EndPoints": { "Http": { - "Url": "http://0.0.0.0:80" + "Url": "http://localhost:7007" } } } diff --git a/WebApp/appsettings.json b/WebApp/appsettings.json index fed3597..c018443 100644 --- a/WebApp/appsettings.json +++ b/WebApp/appsettings.json @@ -9,7 +9,7 @@ "Kestrel": { "EndPoints": { "Http": { - "Url": "http://0.0.0.0:80" + "Url": "http://localhost:7007" } } } diff --git a/mise.toml b/mise.toml new file mode 100644 index 0000000..2c79623 --- /dev/null +++ b/mise.toml @@ -0,0 +1,92 @@ +# Quick Guide +# - install mise +# - download the asset and extract them to ASSET_PATH_RO +# - mise trust mise.toml +# - mise run verify-asset +# - require hashdeep +# `hashdeep` package in debian +# or `md5deep` package in fedora +# or uncomment `tools."http:hashdeep"` below in windows +# - mise run serve +# - mise run arrange +# - mise run action +# - mise run assert +# - mise run bench + +[env] +ASSET_PATH_RO = "{{ [xdg_cache_home, 'stitch-a-ton', 'asset'] | join_path }}" +CONTEST_HOST = "http://localhost:7007" +CONTEST_API = "/api/image/generate" +CONTEST_OUTPUT = "{{ [cwd, '.contest'] | join_path }}" +DOTNET_ENVIRONMENT = "Production" +ANSWER_COMMIT_HASH = "89a07b40bf0414212c96945671a012035d375a25" + +[tools] +dotnet = "6" +xh = "latest" +uv = "latest" +k6 = "latest" + +# uncomment these if you're on windows +#[tools."http:hashdeep"] +#version = "4.4" + +#[tools."http:hashdeep".platforms] +#windows-x64 = {url = "https://github.com/jessek/hashdeep/releases/download/v4.4/md5deep-4.4.zip"} + +[tasks.setup] +run = ''' +{% if env.CONTEST_OUTPUT is not exists %} +mkdir .contest +{% endif %} +''' + +[tasks.verify-asset] +dir = "{{ env.ASSET_PATH_RO }}" +run = ''' +xh get https://null.formulatrix.dev/Contest/stitch-a-ton-answer/raw/commit/{{ env.ANSWER_COMMIT_HASH }}/asset.txt -o ../asset.txt +hashdeep -arbvk ../asset.txt . +''' + +[tasks.arrange] +depends = ['setup'] +dir = "{{ env.CONTEST_OUTPUT }}" +outputs = ['answer.json', 'action.py', 'assert.py', 'bench.js', 'fuzzy.json'] +run = ''' +xh get https://null.formulatrix.dev/Contest/stitch-a-ton-answer/raw/commit/{{ env.ANSWER_COMMIT_HASH }}/answer.json -o answer.json +xh get https://null.formulatrix.dev/Contest/stitch-a-ton-answer/raw/commit/{{ env.ANSWER_COMMIT_HASH }}/action.py -o action.py +xh get https://null.formulatrix.dev/Contest/stitch-a-ton-answer/raw/commit/{{ env.ANSWER_COMMIT_HASH }}/assert.py -o assert.py +xh get https://null.formulatrix.dev/Contest/stitch-a-ton-answer/raw/commit/{{ env.ANSWER_COMMIT_HASH }}/bench.js -o bench.js +xh get https://null.formulatrix.dev/Contest/stitch-a-ton-answer/raw/commit/{{ env.ANSWER_COMMIT_HASH }}/fuzzy.json -o fuzzy.json +''' + +[tasks.serve] +run = "dotnet run -c Release --no-launch-profile --urls {{env.CONTEST_HOST}} --project WebApp" + +[tasks.quick] +depends = ['arrange'] +dir = "{{ env.CONTEST_OUTPUT }}" +run = ''' +xh post {{env.CONTEST_HOST}}{{env.CONTEST_ENDPOINT}} canvas_rect=A1:H12 crop_offset:=[0,0] crop_size:=[1,1] output_scale:=0.25 -o quick.png +''' + +[tasks.action] +depends = ['arrange'] +dir = "{{ env.CONTEST_OUTPUT }}" +run = ''' +uv run --no-config --script {{ [env.CONTEST_OUTPUT, 'action.py'] | join_path }} +''' + +[tasks.assert] +depends = ['arrange'] +dir = "{{ env.CONTEST_OUTPUT }}" +run = ''' +uvx --no-config --with-requirements assert.py pytest assert.py +''' + +[tasks.bench] +depends = ['arrange'] +dir = "{{ env.CONTEST_OUTPUT }}" +run = ''' +k6 run -e TARGET_URL="{{ env.CONTEST_HOST }}{{ env.CONTEST_API }}" bench.js +'''