From d99d0bbada0d7996d2814e44335d79a82760401f Mon Sep 17 00:00:00 2001 From: Tom Kerr Date: Mon, 10 Jun 2024 19:24:05 +0100 Subject: [PATCH 1/4] feat: auto upload to aiarena workflow --- .github/workflows/ladder_zip.yml | 7 +- README.md | 40 ++++++++- config.yml | 5 +- poetry.lock | 150 ++++++++++++++++++++++++++++++- pyproject.toml | 1 + scripts/upload_to_ai_arena.py | 78 ++++++++++++++++ 6 files changed, 274 insertions(+), 7 deletions(-) create mode 100644 scripts/upload_to_ai_arena.py diff --git a/.github/workflows/ladder_zip.yml b/.github/workflows/ladder_zip.yml index f07951f..1842f9c 100644 --- a/.github/workflows/ladder_zip.yml +++ b/.github/workflows/ladder_zip.yml @@ -1,6 +1,6 @@ on: push: - branches: [ main ] + branches: [ main, feat/upload-to-aiarena ] jobs: build: @@ -35,3 +35,8 @@ jobs: with: name: ladder-zip path: out + - name: Upload to AIArena + env: + UPLOAD_API_TOKEN: ${{ secrets.UPLOAD_API_TOKEN }} + UPLOAD_BOT_ID: ${{ secrets.UPLOAD_BOT_ID }} + run: poetry run python scripts/upload_to_ai_arena.py diff --git a/README.md b/README.md index 3649c29..491cc90 100644 --- a/README.md +++ b/README.md @@ -81,11 +81,43 @@ If everything has worked thus far, open up `bot/main.py` and delve into the ex An `ares-sc2` bot is a [python-sc2](https://github.com/BurnySc2/python-sc2) bot by default, meaning any examples or documentation from that repository equally relevant here. -### Uploading to [AiArena](https://www.sc2ai.com/) - -Included in the repository is a convenient script named `scripts/create_ladder_zip.py`. However, it is important to note that the AIarena ladder infrastructure operates specifically on Linux-based systems. Due to the dependency of ares-sc2 on cython, it is necessary to execute this script on a Linux environment in order to generate Linux binaries. +## Uploading to [AiArena](https://www.sc2ai.com/) + +### Generating a ladder zip +Included in the repository is a convenient script named `scripts/create_ladder_zip.py`. +However, it is important to note that the AIarena ladder infrastructure operates specifically +on Linux-based systems. Due to the dependency of ares-sc2 on cython, it is necessary to execute +this script on a Linux environment in order to generate Linux binaries. + +To streamline this process, a GitHub workflow has been integrated into this repository when +pushing to `main` on your GitHub repository (if you previously created a template +from the [starter-bot](https://github.com/AresSC2/ares-sc2-starter-bot)). +Upon each push to the main branch, the `create_ladder_zip.py` script is automatically +executed on a Debian-based system. As a result, a compressed artifact +named `ladder-zip.zip` is generated, facilitating the subsequent upload to AIarena. +To access the generated file, navigate to the Actions tab, click on an Action and refer to the +Artifacts section. Please note this may take a few minutes after pusing to the `main` branch. + +Ladder zips can also be built on a debian based OS, with docker or via WSL. + +### Auto upload to aiarena +There is an optional step in the Github workflow that allows the `ladder-zip.zip` artifact to +automatically be uploaded to the [AiArena ladder](https://www.sc2ai.com) which is disabled by default. +Please follow these steps to enable it: +1. Set `AutoUploadToAiarena: True` in `config.yml` +2. Go to [AiArena ladder](https://www.sc2ai.com) and set up an account if you do not already have one. +3. If required set up a new bot via the AiArena website. +4. Go to the profile of your bot, and take note of your bot id. It will be present in the URL. +5. Next go to Profile -> View API Token, save this token string somewhere. +6. Now go to the Github repo for your bot, navigate to `Settings -> Secrets and variables -> Actions` +7. Under Repository secrets create two new secrets, ensure secret names are exactly as specified here: +``` +Name: UPLOAD_API_TOKEN Secret: +Name: UPLOAD_BOT_ID Secret: +``` -To streamline this process, a GitHub workflow has been integrated into this repository when pushing to `main` on your GitHub repository (if you previously created a template from the [starter-bot](https://github.com/AresSC2/ares-sc2-starter-bot)). Upon each push to the main branch, the `create_ladder_zip.py` script is automatically executed on a Debian-based system. As a result, a compressed artifact named `ladder-zip.zip` is generated, facilitating the subsequent upload to AIarena. To access the generated file, navigate to the Actions tab, click on an Action and refer to the Artifacts section. Please note this may take a few minutes after pusing to the `main` branch. +Now on your next push to `main` a ladder zip artifact will be built and automatically shipped +to aiarena. Feel free to amend this workflow to suit your preferences as required. --- # Additional diff --git a/config.yml b/config.yml index cccdcb3..29a33a6 100644 --- a/config.yml +++ b/config.yml @@ -2,9 +2,12 @@ # Use this to override those values # Can add own unique config options here if desired -# Custom values not used by ares +# Set custom values here for your bot MyBotName: MyBotName MyBotRace: Random +# setting ture allows auto upload to aiareana (https://aiarena.net/) on push to `main` branch +# see tutorial on readme before setting to True +AutoUploadToAiarena: True ######################## UseData: False diff --git a/poetry.lock b/poetry.lock index cfda28e..809033e 100644 --- a/poetry.lock +++ b/poetry.lock @@ -218,6 +218,116 @@ url = "https://github.com/august-k/python-sc2" reference = "develop" resolved_reference = "7dc97b2bbe44b4894373ba7c2caad2d2f5bec403" +[[package]] +name = "certifi" +version = "2024.6.2" +description = "Python package for providing Mozilla's CA Bundle." +optional = false +python-versions = ">=3.6" +files = [ + {file = "certifi-2024.6.2-py3-none-any.whl", hash = "sha256:ddc6c8ce995e6987e7faf5e3f1b02b302836a0e5d98ece18392cb1a36c72ad56"}, + {file = "certifi-2024.6.2.tar.gz", hash = "sha256:3cd43f1c6fa7dedc5899d69d3ad0398fd018ad1a17fba83ddaf78aa46c747516"}, +] + +[[package]] +name = "charset-normalizer" +version = "3.3.2" +description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." +optional = false +python-versions = ">=3.7.0" +files = [ + {file = "charset-normalizer-3.3.2.tar.gz", hash = "sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9063e24fdb1e498ab71cb7419e24622516c4a04476b17a2dab57e8baa30d6e03"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6897af51655e3691ff853668779c7bad41579facacf5fd7253b0133308cf000d"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1d3193f4a680c64b4b6a9115943538edb896edc190f0b222e73761716519268e"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd70574b12bb8a4d2aaa0094515df2463cb429d8536cfb6c7ce983246983e5a6"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8465322196c8b4d7ab6d1e049e4c5cb460d0394da4a27d23cc242fbf0034b6b5"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a9a8e9031d613fd2009c182b69c7b2c1ef8239a0efb1df3f7c8da66d5dd3d537"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:beb58fe5cdb101e3a055192ac291b7a21e3b7ef4f67fa1d74e331a7f2124341c"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e06ed3eb3218bc64786f7db41917d4e686cc4856944f53d5bdf83a6884432e12"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:2e81c7b9c8979ce92ed306c249d46894776a909505d8f5a4ba55b14206e3222f"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:572c3763a264ba47b3cf708a44ce965d98555f618ca42c926a9c1616d8f34269"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-win32.whl", hash = "sha256:3d47fa203a7bd9c5b6cee4736ee84ca03b8ef23193c0d1ca99b5089f72645c73"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:10955842570876604d404661fbccbc9c7e684caf432c09c715ec38fbae45ae09"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:802fe99cca7457642125a8a88a084cef28ff0cf9407060f7b93dca5aa25480db"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:573f6eac48f4769d667c4442081b1794f52919e7edada77495aaed9236d13a96"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:549a3a73da901d5bc3ce8d24e0600d1fa85524c10287f6004fbab87672bf3e1e"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f27273b60488abe721a075bcca6d7f3964f9f6f067c8c4c605743023d7d3944f"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ceae2f17a9c33cb48e3263960dc5fc8005351ee19db217e9b1bb15d28c02574"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:65f6f63034100ead094b8744b3b97965785388f308a64cf8d7c34f2f2e5be0c4"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:753f10e867343b4511128c6ed8c82f7bec3bd026875576dfd88483c5c73b2fd8"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4a78b2b446bd7c934f5dcedc588903fb2f5eec172f3d29e52a9096a43722adfc"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e537484df0d8f426ce2afb2d0f8e1c3d0b114b83f8850e5f2fbea0e797bd82ae"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:eb6904c354526e758fda7167b33005998fb68c46fbc10e013ca97f21ca5c8887"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:deb6be0ac38ece9ba87dea880e438f25ca3eddfac8b002a2ec3d9183a454e8ae"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:4ab2fe47fae9e0f9dee8c04187ce5d09f48eabe611be8259444906793ab7cbce"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:80402cd6ee291dcb72644d6eac93785fe2c8b9cb30893c1af5b8fdd753b9d40f"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-win32.whl", hash = "sha256:7cd13a2e3ddeed6913a65e66e94b51d80a041145a026c27e6bb76c31a853c6ab"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:663946639d296df6a2bb2aa51b60a2454ca1cb29835324c640dafb5ff2131a77"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0b2b64d2bb6d3fb9112bafa732def486049e63de9618b5843bcdd081d8144cd8"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:ddbb2551d7e0102e7252db79ba445cdab71b26640817ab1e3e3648dad515003b"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:55086ee1064215781fff39a1af09518bc9255b50d6333f2e4c74ca09fac6a8f6"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8f4a014bc36d3c57402e2977dada34f9c12300af536839dc38c0beab8878f38a"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a10af20b82360ab00827f916a6058451b723b4e65030c5a18577c8b2de5b3389"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8d756e44e94489e49571086ef83b2bb8ce311e730092d2c34ca8f7d925cb20aa"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:90d558489962fd4918143277a773316e56c72da56ec7aa3dc3dbbe20fdfed15b"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6ac7ffc7ad6d040517be39eb591cac5ff87416c2537df6ba3cba3bae290c0fed"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:7ed9e526742851e8d5cc9e6cf41427dfc6068d4f5a3bb03659444b4cabf6bc26"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:8bdb58ff7ba23002a4c5808d608e4e6c687175724f54a5dade5fa8c67b604e4d"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:6b3251890fff30ee142c44144871185dbe13b11bab478a88887a639655be1068"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:b4a23f61ce87adf89be746c8a8974fe1c823c891d8f86eb218bb957c924bb143"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:efcb3f6676480691518c177e3b465bcddf57cea040302f9f4e6e191af91174d4"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-win32.whl", hash = "sha256:d965bba47ddeec8cd560687584e88cf699fd28f192ceb452d1d7ee807c5597b7"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:96b02a3dc4381e5494fad39be677abcb5e6634bf7b4fa83a6dd3112607547001"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:95f2a5796329323b8f0512e09dbb7a1860c46a39da62ecb2324f116fa8fdc85c"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c002b4ffc0be611f0d9da932eb0f704fe2602a9a949d1f738e4c34c75b0863d5"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a981a536974bbc7a512cf44ed14938cf01030a99e9b3a06dd59578882f06f985"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3287761bc4ee9e33561a7e058c72ac0938c4f57fe49a09eae428fd88aafe7bb6"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:42cb296636fcc8b0644486d15c12376cb9fa75443e00fb25de0b8602e64c1714"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0a55554a2fa0d408816b3b5cedf0045f4b8e1a6065aec45849de2d6f3f8e9786"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:c083af607d2515612056a31f0a8d9e0fcb5876b7bfc0abad3ecd275bc4ebc2d5"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:87d1351268731db79e0f8e745d92493ee2841c974128ef629dc518b937d9194c"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:bd8f7df7d12c2db9fab40bdd87a7c09b1530128315d047a086fa3ae3435cb3a8"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:c180f51afb394e165eafe4ac2936a14bee3eb10debc9d9e4db8958fe36afe711"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:8c622a5fe39a48f78944a87d4fb8a53ee07344641b0562c540d840748571b811"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-win32.whl", hash = "sha256:db364eca23f876da6f9e16c9da0df51aa4f104a972735574842618b8c6d999d4"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-win_amd64.whl", hash = "sha256:86216b5cee4b06df986d214f664305142d9c76df9b6512be2738aa72a2048f99"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:6463effa3186ea09411d50efc7d85360b38d5f09b870c48e4600f63af490e56a"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6c4caeef8fa63d06bd437cd4bdcf3ffefe6738fb1b25951440d80dc7df8c03ac"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:37e55c8e51c236f95b033f6fb391d7d7970ba5fe7ff453dad675e88cf303377a"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb69256e180cb6c8a894fee62b3afebae785babc1ee98b81cdf68bbca1987f33"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ae5f4161f18c61806f411a13b0310bea87f987c7d2ecdbdaad0e94eb2e404238"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b2b0a0c0517616b6869869f8c581d4eb2dd83a4d79e0ebcb7d373ef9956aeb0a"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:45485e01ff4d3630ec0d9617310448a8702f70e9c01906b0d0118bdf9d124cf2"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eb00ed941194665c332bf8e078baf037d6c35d7c4f3102ea2d4f16ca94a26dc8"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2127566c664442652f024c837091890cb1942c30937add288223dc895793f898"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a50aebfa173e157099939b17f18600f72f84eed3049e743b68ad15bd69b6bf99"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:4d0d1650369165a14e14e1e47b372cfcb31d6ab44e6e33cb2d4e57265290044d"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:923c0c831b7cfcb071580d3f46c4baf50f174be571576556269530f4bbd79d04"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:06a81e93cd441c56a9b65d8e1d043daeb97a3d0856d177d5c90ba85acb3db087"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-win32.whl", hash = "sha256:6ef1d82a3af9d3eecdba2321dc1b3c238245d890843e040e41e470ffa64c3e25"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:eb8821e09e916165e160797a6c17edda0679379a4be5c716c260e836e122f54b"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c235ebd9baae02f1b77bcea61bce332cb4331dc3617d254df3323aa01ab47bd4"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5b4c145409bef602a690e7cfad0a15a55c13320ff7a3ad7ca59c13bb8ba4d45d"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:68d1f8a9e9e37c1223b656399be5d6b448dea850bed7d0f87a8311f1ff3dabb0"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22afcb9f253dac0696b5a4be4a1c0f8762f8239e21b99680099abd9b2b1b2269"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e27ad930a842b4c5eb8ac0016b0a54f5aebbe679340c26101df33424142c143c"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1f79682fbe303db92bc2b1136016a38a42e835d932bab5b3b1bfcfbf0640e519"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b261ccdec7821281dade748d088bb6e9b69e6d15b30652b74cbbac25e280b796"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:122c7fa62b130ed55f8f285bfd56d5f4b4a5b503609d181f9ad85e55c89f4185"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d0eccceffcb53201b5bfebb52600a5fb483a20b61da9dbc885f8b103cbe7598c"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9f96df6923e21816da7e0ad3fd47dd8f94b2a5ce594e00677c0013018b813458"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:7f04c839ed0b6b98b1a7501a002144b76c18fb1c1850c8b98d458ac269e26ed2"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:34d1c8da1e78d2e001f363791c98a272bb734000fcef47a491c1e3b0505657a8"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-win32.whl", hash = "sha256:aed38f6e4fb3f5d6bf81bfa990a07806be9d83cf7bacef998ab1a9bd660a581f"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:b01b88d45a6fcb69667cd6d2f7a9aeb4bf53760d7fc536bf679ec94fe9f3ff3d"}, + {file = "charset_normalizer-3.3.2-py3-none-any.whl", hash = "sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc"}, +] + [[package]] name = "click" version = "8.1.7" @@ -755,6 +865,27 @@ files = [ {file = "PyYAML-6.0.tar.gz", hash = "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2"}, ] +[[package]] +name = "requests" +version = "2.32.3" +description = "Python HTTP for Humans." +optional = false +python-versions = ">=3.8" +files = [ + {file = "requests-2.32.3-py3-none-any.whl", hash = "sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6"}, + {file = "requests-2.32.3.tar.gz", hash = "sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760"}, +] + +[package.dependencies] +certifi = ">=2017.4.17" +charset-normalizer = ">=2,<4" +idna = ">=2.5,<4" +urllib3 = ">=1.21.1,<3" + +[package.extras] +socks = ["PySocks (>=1.5.6,!=1.5.7)"] +use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] + [[package]] name = "s2clientprotocol" version = "5.0.12.91115.0" @@ -886,6 +1017,23 @@ notebook = ["ipywidgets (>=6)"] slack = ["slack-sdk"] telegram = ["requests"] +[[package]] +name = "urllib3" +version = "2.2.1" +description = "HTTP library with thread-safe connection pooling, file post, and more." +optional = false +python-versions = ">=3.8" +files = [ + {file = "urllib3-2.2.1-py3-none-any.whl", hash = "sha256:450b20ec296a467077128bff42b73080516e71b56ff59a60a02bef2232c4fa9d"}, + {file = "urllib3-2.2.1.tar.gz", hash = "sha256:d0570876c61ab9e520d776c38acbbb5b05a776d3f9ff98a5c8fd5162a444cf19"}, +] + +[package.extras] +brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)"] +h2 = ["h2 (>=4,<5)"] +socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] +zstd = ["zstandard (>=0.18.0)"] + [[package]] name = "win32-setctime" version = "1.1.0" @@ -1006,4 +1154,4 @@ multidict = ">=4.0" [metadata] lock-version = "2.0" python-versions = ">=3.11, <3.12" -content-hash = "f119db2c5c88b86947e95e3066d786aef999d4befed225deeb82f6bad187ca3d" +content-hash = "ae9f731d3dc99b173dba6fbb4590445234370e1e9cf21273e79307d38bf8b6d4" diff --git a/pyproject.toml b/pyproject.toml index 39effa5..5156410 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -11,6 +11,7 @@ ares-sc2 = { path = "ares-sc2", develop = false } python = ">=3.11, <3.12" black = "^23.1.0" isort = "^5.12.0" +requests = "^2.32.3" [build-system] requires = ["poetry-core"] diff --git a/scripts/upload_to_ai_arena.py b/scripts/upload_to_ai_arena.py new file mode 100644 index 0000000..eaf1224 --- /dev/null +++ b/scripts/upload_to_ai_arena.py @@ -0,0 +1,78 @@ +from os import path, environ +from typing import Union + +import requests +import yaml +from loguru import logger + +API_TOKEN_ENV: str = "UPLOAD_API_TOKEN" +BOT_ID_ENV: str = "UPLOAD_BOT_ID" +CONFIG_FILE: str = "config.yml" +AUTO_UPLOAD_TO_AIARENA: str = "AutoUploadToAiarena" +MY_BOT_NAME: str = "MyBotName" +ZIPFILE_NAME: str = "bot.zip" + +TOKEN: str = environ.get(API_TOKEN_ENV) +BOT_ID: str = environ.get(BOT_ID_ENV) +URL: str = f"https://aiarena.net/api/bots/{BOT_ID}/" + + +def get_bot_description() -> str: + """ + Generate bot description + REPLACE WITH OWN LOGIC HERE + By default, attempts to get bot name from config + and generate a basic description. + """ + bot_name: str = "MyBot" + if name := retrieve_value_from_config(MY_BOT_NAME): + bot_name = name + + return ( + f"# {bot_name}\n\n" "Made with [ares-sc2](https://github.com/AresSC2/ares-sc2)" + ) + +def retrieve_value_from_config(string: str) -> Union[str, bool, None]: + __user_config_location__: str = path.abspath(".") + user_config_path: str = path.join(__user_config_location__, CONFIG_FILE) + # attempt to get race and bot name from config file if they exist + if path.isfile(user_config_path): + with open(user_config_path) as config_file: + config: dict = yaml.safe_load(config_file) + if string in config: + return config[string] + + + +if __name__ == "__main__": + can_upload: bool = False + if upload := retrieve_value_from_config(AUTO_UPLOAD_TO_AIARENA): + can_upload = upload + + if not can_upload: + logger.info( + "Auto update to aiarena not enabled, please set " + "AutoUploadToAiarena option in config to `True`" + ) + + else: + logger.info("Uploading bot") + with open(ZIPFILE_NAME, "rb") as bot_zip: + request_headers = { + "Authorization": f"Token {TOKEN}", + } + request_data = { + "bot_zip_publicly_downloadable": True, + "bot_data_publicly_downloadable": False, + "bot_data_enabled": False, + "wiki_article_content": get_bot_description(), + } + request_files = { + "bot_zip": bot_zip, + } + logger.info(URL) + response = requests.patch( + URL, headers=request_headers, data=request_data, files=request_files + ) + logger.info(response) + logger.info(response.content) From cc7e801fcf92065396fdf1db39ba0c99f102216c Mon Sep 17 00:00:00 2001 From: Tom Kerr Date: Mon, 10 Jun 2024 19:27:55 +0100 Subject: [PATCH 2/4] test turning auto upload off --- config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config.yml b/config.yml index 29a33a6..04bc45d 100644 --- a/config.yml +++ b/config.yml @@ -7,7 +7,7 @@ MyBotName: MyBotName MyBotRace: Random # setting ture allows auto upload to aiareana (https://aiarena.net/) on push to `main` branch # see tutorial on readme before setting to True -AutoUploadToAiarena: True +AutoUploadToAiarena: False ######################## UseData: False From 4e25ed80a407eec8ecb94b767fb6b2c90545d874 Mon Sep 17 00:00:00 2001 From: Tom Kerr Date: Mon, 10 Jun 2024 19:34:41 +0100 Subject: [PATCH 3/4] docs: update readme --- README.md | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/README.md b/README.md index 491cc90..0e754ae 100644 --- a/README.md +++ b/README.md @@ -100,24 +100,24 @@ Artifacts section. Please note this may take a few minutes after pusing to the  Ladder zips can also be built on a debian based OS, with docker or via WSL. -### Auto upload to aiarena -There is an optional step in the Github workflow that allows the `ladder-zip.zip` artifact to -automatically be uploaded to the [AiArena ladder](https://www.sc2ai.com) which is disabled by default. -Please follow these steps to enable it: -1. Set `AutoUploadToAiarena: True` in `config.yml` -2. Go to [AiArena ladder](https://www.sc2ai.com) and set up an account if you do not already have one. -3. If required set up a new bot via the AiArena website. -4. Go to the profile of your bot, and take note of your bot id. It will be present in the URL. -5. Next go to Profile -> View API Token, save this token string somewhere. -6. Now go to the Github repo for your bot, navigate to `Settings -> Secrets and variables -> Actions` -7. Under Repository secrets create two new secrets, ensure secret names are exactly as specified here: -``` -Name: UPLOAD_API_TOKEN Secret: -Name: UPLOAD_BOT_ID Secret: -``` - -Now on your next push to `main` a ladder zip artifact will be built and automatically shipped -to aiarena. Feel free to amend this workflow to suit your preferences as required. +### Upload to aiarena +The GitHub workflow includes an optional step to automatically upload the ladder-zip.zip artifact from +the previous step to the [AiArena ladder](https://www.sc2ai.com/). This feature is disabled by default. +To enable it, follow these steps: + +1. Set `AutoUploadToAiarena: True` in `config.yml`. +2. Visit the AiArena ladder and create an account if you don't have one. +3. If necessary, set up a new bot via the AiArena website. +4. Navigate to your bot's profile and note your bot ID, which can be found in the URL. +5. Go to `Profile -> View API Token` and save the token string. +6. In your bot's GitHub repository, navigate to `Settings -> Secrets and variables -> Actions`. +7. Create two new secrets with the following exact names, using the api token and bot id from earlier: + +UPLOAD_API_TOKEN:
+UPLOAD_BOT_ID: + +After completing these steps, the next push to the main branch will build the ladder zip artifact +and automatically upload it to AiArena. You can customize this workflow as needed. --- # Additional From 7040029f30866c1513d532aa6055cabc3e17a9ae Mon Sep 17 00:00:00 2001 From: Tom Kerr Date: Mon, 10 Jun 2024 19:35:38 +0100 Subject: [PATCH 4/4] update workflow file --- .github/workflows/ladder_zip.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ladder_zip.yml b/.github/workflows/ladder_zip.yml index 1842f9c..ab2fd47 100644 --- a/.github/workflows/ladder_zip.yml +++ b/.github/workflows/ladder_zip.yml @@ -1,6 +1,6 @@ on: push: - branches: [ main, feat/upload-to-aiarena ] + branches: [ main ] jobs: build: