diff --git a/.dockerignore b/.dockerignore index 982e411032c6..0cc03e22e444 100644 --- a/.dockerignore +++ b/.dockerignore @@ -46,7 +46,6 @@ dist /prof/ README.html .vs/ -EnemizerCLI/ /Players/ /SNI/ /sni-*/ diff --git a/.github/pyright-config.json b/.github/pyright-config.json index 64a46d80cceb..7bd4698c7496 100644 --- a/.github/pyright-config.json +++ b/.github/pyright-config.json @@ -2,11 +2,16 @@ "include": [ "../BizHawkClient.py", "../Patch.py", + "../rule_builder/cached_world.py", + "../rule_builder/field_resolvers.py", + "../rule_builder/options.py", + "../rule_builder/rules.py", "../test/param.py", "../test/general/test_groups.py", "../test/general/test_helpers.py", "../test/general/test_memory.py", "../test/general/test_names.py", + "../test/general/test_rule_builder.py", "../test/multiworld/__init__.py", "../test/multiworld/test_multiworlds.py", "../test/netutils/__init__.py", @@ -14,6 +19,7 @@ "../test/programs/test_multi_server.py", "../test/utils/__init__.py", "../test/webhost/test_descriptions.py", + "../test/webhost/test_suuid.py", "../worlds/AutoSNIClient.py", "type_check.py" ], diff --git a/.github/workflows/analyze-modified-files.yml b/.github/workflows/analyze-modified-files.yml index 862a050c517e..79c4f983a482 100644 --- a/.github/workflows/analyze-modified-files.yml +++ b/.github/workflows/analyze-modified-files.yml @@ -14,6 +14,8 @@ env: BEFORE: ${{ github.event.before }} AFTER: ${{ github.event.after }} +permissions: {} + jobs: flake8-or-mypy: strategy: @@ -25,7 +27,7 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6.0.2 - name: "Determine modified files (pull_request)" if: github.event_name == 'pull_request' @@ -50,7 +52,7 @@ jobs: run: | echo "diff=." >> $GITHUB_ENV - - uses: actions/setup-python@v5 + - uses: actions/setup-python@v6.2.0 if: env.diff != '' with: python-version: '3.11' diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 9f7b9ef2f0a3..8ed0c3523c33 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1,4 +1,5 @@ -# This workflow will build a release-like distribution when manually dispatched +# This workflow will build a release-like distribution when manually dispatched: +# a Windows x64 7zip, a Windows x64 Installer, a Linux AppImage and a Linux binary .tar.gz. name: Build @@ -24,10 +25,10 @@ env: # NOTE: since appimage/appimagetool and appimage/type2-runtime does not have tags anymore, # we check the sha256 and require manual intervention if it was updated. APPIMAGE_FORK: 'PopTracker' - APPIMAGETOOL_VERSION: 'r-2025-10-19' - APPIMAGETOOL_X86_64_HASH: '9493a6b253a01f84acb9c624c38810ecfa11d99daa829b952b0bff43113080f9' - APPIMAGE_RUNTIME_VERSION: 'r-2025-08-11' - APPIMAGE_RUNTIME_X86_64_HASH: 'e70ffa9b69b211574d0917adc482dd66f25a0083427b5945783965d55b0b0a8b' + APPIMAGETOOL_VERSION: 'r-2025-11-18' + APPIMAGETOOL_X86_64_HASH: '4577a452b30af2337123fbb383aea154b618e51ad5448c3b62085cbbbfbfd9a2' + APPIMAGE_RUNTIME_VERSION: 'r-2025-11-07' + APPIMAGE_RUNTIME_X86_64_HASH: '27ddd3f78e483fc5f7856e413d7c17092917f8c35bfe3318a0d378aa9435ad17' permissions: # permissions required for attestation id-token: 'write' @@ -40,9 +41,9 @@ jobs: runs-on: windows-latest steps: # - copy code below to release.yml - - - uses: actions/checkout@v4 + - uses: actions/checkout@v6.0.2 - name: Install python - uses: actions/setup-python@v5 + uses: actions/setup-python@v6.2.0 with: python-version: '~3.12.7' check-latest: true @@ -50,7 +51,7 @@ jobs: run: | Invoke-WebRequest -Uri https://github.com/Ijwu/Enemizer/releases/download/${Env:ENEMIZER_VERSION}/win-x64.zip -OutFile enemizer.zip Expand-Archive -Path enemizer.zip -DestinationPath EnemizerCLI -Force - choco install innosetup --version=6.2.2 --allow-downgrade + choco install innosetup --version=6.7.0 --allow-downgrade - name: Build run: | python -m pip install --upgrade pip @@ -81,7 +82,7 @@ jobs: # - copy code above to release.yml - - name: Attest Build if: ${{ github.event_name == 'workflow_dispatch' }} - uses: actions/attest-build-provenance@v2 + uses: actions/attest@v4.1.0 with: subject-path: | build/exe.*/ArchipelagoLauncher.exe @@ -109,18 +110,17 @@ jobs: cp Players/Templates/VVVVVV.yaml Players/ timeout 30 ./ArchipelagoGenerate - name: Store 7z - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v7.0.0 with: - name: ${{ env.ZIP_NAME }} path: dist/${{ env.ZIP_NAME }} - compression-level: 0 # .7z is incompressible by zip + archive: false if-no-files-found: error retention-days: 7 # keep for 7 days, should be enough - name: Store Setup - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v7.0.0 with: - name: ${{ env.SETUP_NAME }} path: setups/${{ env.SETUP_NAME }} + archive: false if-no-files-found: error retention-days: 7 # keep for 7 days, should be enough @@ -128,14 +128,14 @@ jobs: runs-on: ubuntu-22.04 steps: # - copy code below to release.yml - - - uses: actions/checkout@v4 + - uses: actions/checkout@v6.0.2 - name: Install base dependencies run: | sudo apt update sudo apt -y install build-essential p7zip xz-utils wget libglib2.0-0 sudo apt -y install python3-gi libgirepository1.0-dev # should pull dependencies for gi installation below - name: Get a recent python - uses: actions/setup-python@v5 + uses: actions/setup-python@v6.2.0 with: python-version: '~3.12.7' check-latest: true @@ -172,7 +172,7 @@ jobs: # - copy code above to release.yml - - name: Attest Build if: ${{ github.event_name == 'workflow_dispatch' }} - uses: actions/attest-build-provenance@v2 + uses: actions/attest@v4.1.0 with: subject-path: | build/exe.*/ArchipelagoLauncher @@ -203,17 +203,17 @@ jobs: cp Players/Templates/VVVVVV.yaml Players/ timeout 30 ./ArchipelagoGenerate - name: Store AppImage - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v7.0.0 with: - name: ${{ env.APPIMAGE_NAME }} path: dist/${{ env.APPIMAGE_NAME }} + archive: false + # TODO: decide if we want to also upload the zsync if-no-files-found: error retention-days: 7 - name: Store .tar.gz - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v7.0.0 with: - name: ${{ env.TAR_NAME }} path: dist/${{ env.TAR_NAME }} - compression-level: 0 # .gz is incompressible by zip + archive: false if-no-files-found: error retention-days: 7 diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 3abbb5f6449f..5751dce8571a 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -17,17 +17,26 @@ on: paths: - '**.py' - '**.js' - - '.github/workflows/codeql-analysis.yml' + - '.github/workflows/*.yml' + - '.github/workflows/*.yaml' + - '**/action.yml' + - '**/action.yaml' pull_request: # The branches below must be a subset of the branches above branches: [ main ] paths: - '**.py' - '**.js' - - '.github/workflows/codeql-analysis.yml' + - '.github/workflows/*.yml' + - '.github/workflows/*.yaml' + - '**/action.yml' + - '**/action.yaml' schedule: - cron: '44 8 * * 1' +permissions: + security-events: write + jobs: analyze: name: Analyze @@ -36,18 +45,17 @@ jobs: strategy: fail-fast: false matrix: - language: [ 'javascript', 'python' ] - # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python' ] + language: [ 'javascript', 'python', 'actions' ] # Learn more: # https://docs.github.com/en/free-pro-team@latest/github/finding-security-vulnerabilities-and-errors-in-your-code/configuring-code-scanning#changing-the-languages-that-are-analyzed steps: - name: Checkout repository - uses: actions/checkout@v4 + uses: actions/checkout@v6.0.2 # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL - uses: github/codeql-action/init@v3 + uses: github/codeql-action/init@v4.35.1 with: languages: ${{ matrix.language }} # If you wish to specify custom queries, you can do so here or in a config file. @@ -58,7 +66,7 @@ jobs: # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). # If this step fails, then you should remove it and run the build manually (see below) - name: Autobuild - uses: github/codeql-action/autobuild@v3 + uses: github/codeql-action/autobuild@v4.35.1 # â„šī¸ Command-line programs to run using the OS shell. # 📚 https://git.io/JvXDl @@ -72,4 +80,4 @@ jobs: # make release - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@v3 + uses: github/codeql-action/analyze@v4.35.1 diff --git a/.github/workflows/ctest.yml b/.github/workflows/ctest.yml index 610f6d747779..1a39afa11dc7 100644 --- a/.github/workflows/ctest.yml +++ b/.github/workflows/ctest.yml @@ -24,6 +24,8 @@ on: - '**/CMakeLists.txt' - '.github/workflows/ctest.yml' +permissions: {} + jobs: ctest: runs-on: ${{ matrix.os }} @@ -35,7 +37,7 @@ jobs: os: [ubuntu-latest, windows-latest] steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6.0.2 - uses: ilammy/msvc-dev-cmd@0b201ec74fa43914dc39ae48a89fd1d8cb592756 if: startsWith(matrix.os,'windows') - uses: Bacondish2023/setup-googletest@49065d1f7a6d21f6134864dd65980fe5dbe06c73 diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index cf9ce08faf38..231fb59dc556 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -11,7 +11,7 @@ on: - "!.github/workflows/**" - ".github/workflows/docker.yml" branches: - - "*" + - "main" tags: - "v?[0-9]+.[0-9]+.[0-9]*" workflow_dispatch: @@ -19,6 +19,8 @@ on: env: REGISTRY: ghcr.io +permissions: {} + jobs: prepare: runs-on: ubuntu-latest @@ -29,7 +31,7 @@ jobs: package-name: ${{ steps.package.outputs.name }} steps: - name: Checkout repository - uses: actions/checkout@v4 + uses: actions/checkout@v6.0.2 - name: Set lowercase image name id: image @@ -43,7 +45,7 @@ jobs: - name: Extract metadata id: meta - uses: docker/metadata-action@v5 + uses: docker/metadata-action@v6.0.0 with: images: ${{ env.REGISTRY }}/${{ steps.image.outputs.name }} tags: | @@ -92,13 +94,13 @@ jobs: cache-scope: arm64 steps: - name: Checkout repository - uses: actions/checkout@v4 + uses: actions/checkout@v6.0.2 - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 + uses: docker/setup-buildx-action@4d04d5d9486b7bd6fa91e7baf45bbb4f8b9deedd # v4.0.0 - name: Log in to GitHub Container Registry - uses: docker/login-action@v3 + uses: docker/login-action@b45d80f862d83dbcd57f89517bcf500b2ab88fb2 # v4.0.0 with: registry: ${{ env.REGISTRY }} username: ${{ github.actor }} @@ -115,7 +117,7 @@ jobs: echo "tags=$(IFS=','; echo "${suffixed[*]}")" >> $GITHUB_OUTPUT - name: Build and push Docker image - uses: docker/build-push-action@v5 + uses: docker/build-push-action@v7.0.0 with: context: . file: ./Dockerfile @@ -135,7 +137,7 @@ jobs: packages: write steps: - name: Log in to GitHub Container Registry - uses: docker/login-action@v3 + uses: docker/login-action@b45d80f862d83dbcd57f89517bcf500b2ab88fb2 # v4.0.0 with: registry: ${{ env.REGISTRY }} username: ${{ github.actor }} diff --git a/.github/workflows/label-pull-requests.yml b/.github/workflows/label-pull-requests.yml index 1675c942bddb..341735e5dd1a 100644 --- a/.github/workflows/label-pull-requests.yml +++ b/.github/workflows/label-pull-requests.yml @@ -14,7 +14,7 @@ jobs: name: 'Apply content-based labels' runs-on: ubuntu-latest steps: - - uses: actions/labeler@v5 + - uses: actions/labeler@v6.0.1 with: sync-labels: false peer_review: diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index e7a4be9cdf68..ca155031c673 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -12,10 +12,10 @@ env: # NOTE: since appimage/appimagetool and appimage/type2-runtime does not have tags anymore, # we check the sha256 and require manual intervention if it was updated. APPIMAGE_FORK: 'PopTracker' - APPIMAGETOOL_VERSION: 'r-2025-10-19' - APPIMAGETOOL_X86_64_HASH: '9493a6b253a01f84acb9c624c38810ecfa11d99daa829b952b0bff43113080f9' - APPIMAGE_RUNTIME_VERSION: 'r-2025-08-11' - APPIMAGE_RUNTIME_X86_64_HASH: 'e70ffa9b69b211574d0917adc482dd66f25a0083427b5945783965d55b0b0a8b' + APPIMAGETOOL_VERSION: 'r-2025-11-18' + APPIMAGETOOL_X86_64_HASH: '4577a452b30af2337123fbb383aea154b618e51ad5448c3b62085cbbbfbfd9a2' + APPIMAGE_RUNTIME_VERSION: 'r-2025-11-07' + APPIMAGE_RUNTIME_X86_64_HASH: '27ddd3f78e483fc5f7856e413d7c17092917f8c35bfe3318a0d378aa9435ad17' permissions: # permissions required for attestation id-token: 'write' @@ -29,7 +29,7 @@ jobs: - name: Set env run: echo "RELEASE_VERSION=${GITHUB_REF#refs/*/}" >> $GITHUB_ENV # tag x.y.z will become "Archipelago x.y.z" - name: Create Release - uses: softprops/action-gh-release@975c1b265e11dd76618af1c374e7981f9a6ff44a + uses: softprops/action-gh-release@b4309332981a82ec1c5618f44dd2e27cc8bfbfda # v3.0.0 with: draft: true # don't publish right away, especially since windows build is added by hand prerelease: false @@ -48,9 +48,9 @@ jobs: shell: bash run: echo "RELEASE_VERSION=${GITHUB_REF#refs/*/}" >> $GITHUB_ENV # - code below copied from build.yml - - - uses: actions/checkout@v4 + - uses: actions/checkout@v6.0.2 - name: Install python - uses: actions/setup-python@v5 + uses: actions/setup-python@v6.2.0 with: python-version: '~3.12.7' check-latest: true @@ -88,7 +88,7 @@ jobs: echo "SETUP_NAME=$SETUP_NAME" >> $Env:GITHUB_ENV # - code above copied from build.yml - - name: Attest Build - uses: actions/attest-build-provenance@v2 + uses: actions/attest@v4.1.0 with: subject-path: | build/exe.*/ArchipelagoLauncher.exe @@ -97,13 +97,15 @@ jobs: build/exe.*/ArchipelagoServer.exe setups/* - name: Add to Release - uses: softprops/action-gh-release@975c1b265e11dd76618af1c374e7981f9a6ff44a + uses: softprops/action-gh-release@b4309332981a82ec1c5618f44dd2e27cc8bfbfda # v3.0.0 with: draft: true # see above prerelease: false name: Archipelago ${{ env.RELEASE_VERSION }} files: | setups/* + fail_on_unmatched_files: true + overwrite_files: false # Windows release is usually built by hand env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} @@ -114,14 +116,14 @@ jobs: - name: Set env run: echo "RELEASE_VERSION=${GITHUB_REF#refs/*/}" >> $GITHUB_ENV # - code below copied from build.yml - - - uses: actions/checkout@v4 + - uses: actions/checkout@v6.0.2 - name: Install base dependencies run: | sudo apt update sudo apt -y install build-essential p7zip xz-utils wget libglib2.0-0 sudo apt -y install python3-gi libgirepository1.0-dev # should pull dependencies for gi installation below - name: Get a recent python - uses: actions/setup-python@v5 + uses: actions/setup-python@v6.2.0 with: python-version: '~3.12.7' check-latest: true @@ -157,7 +159,7 @@ jobs: echo "TAR_NAME=$TAR_NAME" >> $GITHUB_ENV # - code above copied from build.yml - - name: Attest Build - uses: actions/attest-build-provenance@v2 + uses: actions/attest@v4.1.0 with: subject-path: | build/exe.*/ArchipelagoLauncher @@ -165,12 +167,14 @@ jobs: build/exe.*/ArchipelagoServer dist/* - name: Add to Release - uses: softprops/action-gh-release@975c1b265e11dd76618af1c374e7981f9a6ff44a + uses: softprops/action-gh-release@b4309332981a82ec1c5618f44dd2e27cc8bfbfda # v3.0.0 with: draft: true # see above prerelease: false name: Archipelago ${{ env.RELEASE_VERSION }} files: | dist/* + fail_on_unmatched_files: true + overwrite_files: false # should never happen; avoids accidentally changing a release env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/scan-build.yml b/.github/workflows/scan-build.yml index ac842070625f..64f51af4a258 100644 --- a/.github/workflows/scan-build.yml +++ b/.github/workflows/scan-build.yml @@ -28,12 +28,14 @@ on: - 'requirements.txt' - '.github/workflows/scan-build.yml' +permissions: {} + jobs: scan-build: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6.0.2 with: submodules: recursive - name: Install newer Clang @@ -45,7 +47,7 @@ jobs: run: | sudo apt install clang-tools-19 - name: Get a recent python - uses: actions/setup-python@v5 + uses: actions/setup-python@v6.2.0 with: python-version: '3.11' - name: Install dependencies @@ -59,7 +61,9 @@ jobs: scan-build-19 --status-bugs -o scan-build-reports -disable-checker deadcode.DeadStores python setup.py build -y - name: Store report if: failure() - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v7.0.0 with: name: scan-build-reports path: scan-build-reports + compression-level: 9 # highly compressible + if-no-files-found: error diff --git a/.github/workflows/strict-type-check.yml b/.github/workflows/strict-type-check.yml index 2ccdad8d11af..4a876bf98ebf 100644 --- a/.github/workflows/strict-type-check.yml +++ b/.github/workflows/strict-type-check.yml @@ -14,13 +14,15 @@ on: - ".github/workflows/strict-type-check.yml" - "**.pyi" +permissions: {} + jobs: pyright: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6.0.2 - - uses: actions/setup-python@v5 + - uses: actions/setup-python@v6.2.0 with: python-version: "3.11" diff --git a/.github/workflows/unittests.yml b/.github/workflows/unittests.yml index b08b389005ec..cfffa6cc4a51 100644 --- a/.github/workflows/unittests.yml +++ b/.github/workflows/unittests.yml @@ -29,6 +29,8 @@ on: - '!.github/workflows/**' - '.github/workflows/unittests.yml' +permissions: {} + jobs: unit: runs-on: ${{ matrix.os }} @@ -51,9 +53,9 @@ jobs: os: macos-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6.0.2 - name: Set up Python ${{ matrix.python.version }} - uses: actions/setup-python@v5 + uses: actions/setup-python@v6.2.0 with: python-version: ${{ matrix.python.version }} - name: Install dependencies @@ -78,9 +80,9 @@ jobs: - {version: '3.13'} # current steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6.0.2 - name: Set up Python ${{ matrix.python.version }} - uses: actions/setup-python@v5 + uses: actions/setup-python@v6.2.0 with: python-version: ${{ matrix.python.version }} - name: Install dependencies diff --git a/.gitignore b/.gitignore index 3bb4e68c9924..8f9ed6df14fe 100644 --- a/.gitignore +++ b/.gitignore @@ -45,6 +45,7 @@ EnemizerCLI/ /SNI/ /sni-*/ /appimagetool* +/VC_redist.x64.exe /host.yaml /options.yaml /config.yaml @@ -63,7 +64,10 @@ Output Logs/ /installdelete.iss /data/user.kv /datapackage +/datapackage_export.json /custom_worlds +# stubgen output +/out/ # Byte-compiled / optimized / DLL files __pycache__/ diff --git a/.run/Build APWorld.run.xml b/.run/Build APWorlds.run.xml similarity index 78% rename from .run/Build APWorld.run.xml rename to .run/Build APWorlds.run.xml index db6a305e7bb3..cf85521e720e 100644 --- a/.run/Build APWorld.run.xml +++ b/.run/Build APWorlds.run.xml @@ -1,5 +1,5 @@ - +