From 6e3c0b794bd4393168aec1d4b22031c12d51e7d0 Mon Sep 17 00:00:00 2001 From: Ivan Ho <38537881+hhkit@users.noreply.github.com> Date: Fri, 3 Jul 2026 13:35:24 +0100 Subject: [PATCH 01/10] upload to hotcrp CI --- .github/hotcrp.env | 6 ++ .github/workflows/build_paper.yml | 154 +++++++++++++++++------------- README.md | 26 +++++ tools/upload-to-hotcrp.sh | 135 ++++++++++++++++++++++++++ 4 files changed, 252 insertions(+), 69 deletions(-) create mode 100644 .github/hotcrp.env create mode 100755 tools/upload-to-hotcrp.sh diff --git a/.github/hotcrp.env b/.github/hotcrp.env new file mode 100644 index 0000000..e10a8e3 --- /dev/null +++ b/.github/hotcrp.env @@ -0,0 +1,6 @@ +# HotCRP submission settings. +# HOTCRP_TOKEN is intentionally not stored here. Configure it as a GitHub +# Actions repository secret, or provide it in the local environment. +HOTCRP_ACTION_UPLOAD_ENABLED=false +HOTCRP_SITE_URL=https://asplos26.hotcrp.com +HOTCRP_PID=TODO diff --git a/.github/workflows/build_paper.yml b/.github/workflows/build_paper.yml index 1257c71..13ceae5 100644 --- a/.github/workflows/build_paper.yml +++ b/.github/workflows/build_paper.yml @@ -4,9 +4,12 @@ name: Compile paper # https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#permissions permissions: write-all -# Controls when the action will run. Triggers the workflow on push or pull request -# events but only for the master branch -on: [push, pull_request] +# Controls when the action will run. Triggers the workflow on push, pull request, +# or a manual run from the GitHub Actions UI. +on: + push: + pull_request: + workflow_dispatch: # A workflow run is made up of one or more jobs that can run sequentially or in parallel jobs: @@ -15,79 +18,92 @@ jobs: # Steps represent a sequence of tasks that will be executed as part of the job steps: - # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - - uses: actions/checkout@v3 - - - name: Create .latexminted_config file - run: | - bash ./tools/create_latexminted_config.sh - make .latexminted_config - - # Uses the latest TeXLive distribution (currently with minted v3+) - - name: Compile paper - uses: xu-cheng/latex-action@master - with: - root_file: paper.tex - - # Uses the latest TeXLive distribution (currently with minted v3+) - - name: Compile submission - uses: xu-cheng/latex-action@master - with: - root_file: submission.tex - - - name: Release - if: ${{ github.event_name == 'push' }} - id: create_release - uses: softprops/action-gh-release@v1 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - with: - name: Release ${{ github.run_number }} - tag_name: release-${{ github.run_number }} - files: | - paper.pdf - submission.pdf + # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it + - uses: actions/checkout@v3 + + - name: Create .latexminted_config file + run: | + bash ./tools/create_latexminted_config.sh + make .latexminted_config + + # Uses the latest TeXLive distribution (currently with minted v3+) + - name: Compile paper + uses: xu-cheng/latex-action@master + with: + root_file: paper.tex + + # Uses the latest TeXLive distribution (currently with minted v3+) + - name: Compile submission + uses: xu-cheng/latex-action@master + with: + root_file: submission.tex + + - name: Release + if: ${{ github.event_name == 'push' }} + id: create_release + uses: softprops/action-gh-release@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + name: Release ${{ github.run_number }} + tag_name: release-${{ github.run_number }} + files: | + paper.pdf + submission.pdf + + - name: Set up Python for HotCRP response validation + if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/main' }} + uses: actions/setup-python@v5 + with: + python-version: "3.x" + + - name: Upload to HotCRP + if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/main' }} + env: + HOTCRP_TOKEN: ${{ secrets.HOTCRP_TOKEN }} + run: bash ./tools/upload-to-hotcrp.sh .github/hotcrp.env + build-texlive-2024: runs-on: ubuntu-latest # Steps represent a sequence of tasks that will be executed as part of the job steps: - # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - - uses: actions/checkout@v3 - - # Uses an older TeXLive distribution (with minted v2.9) - - name: Compile paper - uses: xu-cheng/latex-action@master - with: - docker_image: ghcr.io/xu-cheng/texlive-full:20240901 - root_file: paper.tex - - # Uses an older TeXLive distribution (with minted v2.9) - - name: Compile submission - uses: xu-cheng/latex-action@master - with: - docker_image: ghcr.io/xu-cheng/texlive-full:20240901 - root_file: submission.tex + # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it + - uses: actions/checkout@v3 + + # Uses an older TeXLive distribution (with minted v2.9) + - name: Compile paper + uses: xu-cheng/latex-action@master + with: + docker_image: ghcr.io/xu-cheng/texlive-full:20240901 + root_file: paper.tex + + # Uses an older TeXLive distribution (with minted v2.9) + - name: Compile submission + uses: xu-cheng/latex-action@master + with: + docker_image: ghcr.io/xu-cheng/texlive-full:20240901 + root_file: submission.tex build-texlive-2022: runs-on: ubuntu-latest # Steps represent a sequence of tasks that will be executed as part of the job steps: - # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - - uses: actions/checkout@v3 - - # Uses an older TeXLive distribution (with minted v2.6) - - name: Compile paper - uses: xu-cheng/latex-action@v3 - with: - docker_image: ghcr.io/xu-cheng/texlive-full:20221101 - root_file: paper.tex - latexmk_shell_escape: true - - # Uses an older TeXLive distribution (with minted v2.6) - - name: Compile submission - uses: xu-cheng/latex-action@v3 - with: - docker_image: ghcr.io/xu-cheng/texlive-full:20221101 - root_file: submission.tex - latexmk_shell_escape: true + # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it + - uses: actions/checkout@v3 + + # Uses an older TeXLive distribution (with minted v2.6) + - name: Compile paper + uses: xu-cheng/latex-action@v3 + with: + docker_image: ghcr.io/xu-cheng/texlive-full:20221101 + root_file: paper.tex + latexmk_shell_escape: true + + # Uses an older TeXLive distribution (with minted v2.6) + - name: Compile submission + uses: xu-cheng/latex-action@v3 + with: + docker_image: ghcr.io/xu-cheng/texlive-full:20221101 + root_file: submission.tex + latexmk_shell_escape: true diff --git a/README.md b/README.md index 7d3a444..8765208 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,7 @@ Download: [Paper (with comments)](../../releases/latest/download/paper.pdf) [Submission (without comments)](../../releases/latest/download/submission.pdf) | + ### Conference: ASPLOS - Abstract: 2025-08-13T23:59:00-05:00 @@ -67,3 +68,28 @@ git merge upstream/main ```bash tools/generate_lexers_json.py ``` + +## HotCRP CI/CD + +This repository has support for opt-in automatic submission of `submission.pdf` to HotCRP on every push to main. +This requires setting up the submission in HotCRP first. + +0. Assume the HotCRP site is hosted at https://asplos26.hotcrp.com +1. Create the paper submission on the HotCRP website. `HOTCRP_PID` is the paper's submission ID in the URL (eg. `https://asplos26.hotcrp.com/paper/HOTCRP_PID`) +2. Create an Authentication Token in HotCRP's **Account Settings**: (eg. `https://asplos26.hotcrp.com/profile/developer`) +3. Set up `.github/hotcrp.env` with the values from HotCRP, and set `HOTCRP_ACTION_UPLOAD_ENABLED=true` to enable uploading by GitHub Actions. + +```sh +HOTCRP_SITE_URL=https://asplos26.hotcrp.com +HOTCRP_PID=TODO +HOTCRP_ACTION_UPLOAD_ENABLED=true # This toggle enables the GitHub workflow +``` + +4. Lastly, add the `HOTCRP_TOKEN` repository secret in GitHub under **Settings -> Secrets and variables -> Actions**. + +The submission script can also be run locally instead of via GitHub actions. +Don't forget to provide the token in the environment. + +```sh +HOTCRP_TOKEN=... bash tools/upload-to-hotcrp.sh .github/hotcrp.env +``` diff --git a/tools/upload-to-hotcrp.sh b/tools/upload-to-hotcrp.sh new file mode 100755 index 0000000..e475e8b --- /dev/null +++ b/tools/upload-to-hotcrp.sh @@ -0,0 +1,135 @@ +#!/usr/bin/env bash +set -euo pipefail + +default_config_file=".github/hotcrp.env" +config_file="${1:-$default_config_file}" + +usage() { + cat <<'EOF' +Usage: + tools/upload-to-hotcrp.sh [CONFIG_FILE] + tools/upload-to-hotcrp.sh --help + +Uploads a paper PDF to the configured HotCRP submission. + +CONFIG_FILE is sourced as a shell env file. If omitted, .github/hotcrp.env is +sourced when it exists; otherwise existing environment variables are used. + +Required values: + HOTCRP_SITE_URL HotCRP site base URL, for example https://asplos26.hotcrp.com + HOTCRP_PID Numeric HotCRP paper ID + HOTCRP_TOKEN HotCRP API token + +GitHub Actions control: + HOTCRP_ACTION_UPLOAD_ENABLED + In GitHub Actions, must be exactly true to upload. + Defaults to false. + +Optional overrides: + HOTCRP_PDF PDF to upload. Defaults to submission.pdf. + +Local example: + HOTCRP_TOKEN=... tools/upload-to-hotcrp.sh .github/hotcrp.env + HOTCRP_SITE_URL=... HOTCRP_PID=123 HOTCRP_TOKEN=... tools/upload-to-hotcrp.sh +EOF +} + +die() { + printf 'error: %s\n' "$*" >&2 + exit 1 +} + +require_var() { + local name="$1" + local value="${!name:-}" + + if [ -z "$value" ] || [ "$value" = "TODO" ] || [ "$value" = "TODO_REPLACE_ME" ]; then + die "$name is not set. Update $config_file or provide it in the environment." + fi +} + +require_command() { + local name="$1" + + command -v "$name" >/dev/null 2>&1 || die "required command is not available: $name" +} + +case "${1:-}" in + -h|--help) + usage + exit 0 + ;; +esac + +if [ "$#" -gt 0 ] || [ -f "$config_file" ]; then + [ -f "$config_file" ] || die "missing HotCRP config file: $config_file" + + set -a + # shellcheck source=/dev/null + . "$config_file" + set +a +fi + +HOTCRP_ACTION_UPLOAD_ENABLED="${HOTCRP_ACTION_UPLOAD_ENABLED:-false}" +HOTCRP_PDF="${HOTCRP_PDF:-submission.pdf}" + +if [ "${GITHUB_ACTIONS:-false}" = "true" ] && [ "$HOTCRP_ACTION_UPLOAD_ENABLED" != "true" ]; then + printf 'HotCRP upload is disabled by %s; set HOTCRP_ACTION_UPLOAD_ENABLED=true to enable it.\n' "$config_file" + exit 0 +fi + +require_var HOTCRP_SITE_URL +require_var HOTCRP_PID +require_var HOTCRP_TOKEN + +require_command curl +require_command python3 +require_command zip + +HOTCRP_SITE_URL="${HOTCRP_SITE_URL%/}" + +case "$HOTCRP_PID" in + ''|*[!0-9]*) + die "HOTCRP_PID must be a numeric paper ID." + ;; +esac + +[ -f "$HOTCRP_PDF" ] || die "missing PDF to upload: $HOTCRP_PDF" + +workdir="$(mktemp -d)" +trap 'rm -rf "$workdir"' EXIT + +cp "$HOTCRP_PDF" "$workdir/submission.pdf" + +cat > "$workdir/data.json" < hotcrp-response.json + +python3 - <<'PY' +import json +import sys + +with open("hotcrp-response.json") as f: + response = json.load(f) + +print(json.dumps(response, indent=2)) + +if not response.get("ok") or not response.get("valid", False): + sys.exit("HotCRP upload failed") +PY From e124622d8245bf90d2af65fbb629ef9cae608387 Mon Sep 17 00:00:00 2001 From: Ivan Ho <38537881+hhkit@users.noreply.github.com> Date: Fri, 3 Jul 2026 14:26:02 +0100 Subject: [PATCH 02/10] PR comments --- .github/hotcrp.env | 6 +++--- README.md | 10 +++++----- tools/upload-to-hotcrp.sh | 6 +++++- 3 files changed, 13 insertions(+), 9 deletions(-) diff --git a/.github/hotcrp.env b/.github/hotcrp.env index e10a8e3..5b6e6c1 100644 --- a/.github/hotcrp.env +++ b/.github/hotcrp.env @@ -1,6 +1,6 @@ # HotCRP submission settings. # HOTCRP_TOKEN is intentionally not stored here. Configure it as a GitHub # Actions repository secret, or provide it in the local environment. -HOTCRP_ACTION_UPLOAD_ENABLED=false -HOTCRP_SITE_URL=https://asplos26.hotcrp.com -HOTCRP_PID=TODO +: "${HOTCRP_ACTION_UPLOAD_ENABLED:=false}" +: "${HOTCRP_SITE_URL:=https://TODO.hotcrp.com}" +: "${HOTCRP_PID:=TODO}" diff --git a/README.md b/README.md index 8765208..bca03ab 100644 --- a/README.md +++ b/README.md @@ -74,15 +74,15 @@ git merge upstream/main This repository has support for opt-in automatic submission of `submission.pdf` to HotCRP on every push to main. This requires setting up the submission in HotCRP first. -0. Assume the HotCRP site is hosted at https://asplos26.hotcrp.com +0. For this example, we will take `https://asplos26.hotcrp.com` as the HotCRP site. 1. Create the paper submission on the HotCRP website. `HOTCRP_PID` is the paper's submission ID in the URL (eg. `https://asplos26.hotcrp.com/paper/HOTCRP_PID`) 2. Create an Authentication Token in HotCRP's **Account Settings**: (eg. `https://asplos26.hotcrp.com/profile/developer`) -3. Set up `.github/hotcrp.env` with the values from HotCRP, and set `HOTCRP_ACTION_UPLOAD_ENABLED=true` to enable uploading by GitHub Actions. +3. Set up `.github/hotcrp.env` with the values from HotCRP, and set `HOTCRP_ACTION_UPLOAD_ENABLED:=true` to enable uploading by GitHub Actions. ```sh -HOTCRP_SITE_URL=https://asplos26.hotcrp.com -HOTCRP_PID=TODO -HOTCRP_ACTION_UPLOAD_ENABLED=true # This toggle enables the GitHub workflow +: "${HOTCRP_SITE_URL:=https://asplos26.hotcrp.com}" +: "${HOTCRP_PID:=67}" +: "${HOTCRP_ACTION_UPLOAD_ENABLED:=true}" ``` 4. Lastly, add the `HOTCRP_TOKEN` repository secret in GitHub under **Settings -> Secrets and variables -> Actions**. diff --git a/tools/upload-to-hotcrp.sh b/tools/upload-to-hotcrp.sh index e475e8b..e8477a2 100755 --- a/tools/upload-to-hotcrp.sh +++ b/tools/upload-to-hotcrp.sh @@ -14,6 +14,8 @@ Uploads a paper PDF to the configured HotCRP submission. CONFIG_FILE is sourced as a shell env file. If omitted, .github/hotcrp.env is sourced when it exists; otherwise existing environment variables are used. +Environment variables should take precedence over CONFIG_FILE defaults when +CONFIG_FILE uses Bash default assignments such as : "${HOTCRP_PID:=TODO}". Required values: HOTCRP_SITE_URL HotCRP site base URL, for example https://asplos26.hotcrp.com @@ -43,7 +45,7 @@ require_var() { local name="$1" local value="${!name:-}" - if [ -z "$value" ] || [ "$value" = "TODO" ] || [ "$value" = "TODO_REPLACE_ME" ]; then + if [ -z "$value" ] || [ "$value" = "TODO" ]; then die "$name is not set. Update $config_file or provide it in the environment." fi } @@ -114,6 +116,7 @@ EOF zip -q upload.zip data.json submission.pdf ) +# The actual upload curl -fsS \ -H "Authorization: bearer $HOTCRP_TOKEN" \ -H "Content-Type: application/zip" \ @@ -121,6 +124,7 @@ curl -fsS \ "$HOTCRP_SITE_URL/api/paper" \ > hotcrp-response.json +# Error reporting uses Python3's stdlib json to avoid installing extra packages in the container python3 - <<'PY' import json import sys From b6a6ce0fb00dd226fad697d13cc3b78af08c81e8 Mon Sep 17 00:00:00 2001 From: Ivan Ho <38537881+hhkit@users.noreply.github.com> Date: Fri, 3 Jul 2026 14:33:59 +0100 Subject: [PATCH 03/10] nit the AI's documentation --- tools/upload-to-hotcrp.sh | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/tools/upload-to-hotcrp.sh b/tools/upload-to-hotcrp.sh index e8477a2..047c309 100755 --- a/tools/upload-to-hotcrp.sh +++ b/tools/upload-to-hotcrp.sh @@ -10,25 +10,25 @@ Usage: tools/upload-to-hotcrp.sh [CONFIG_FILE] tools/upload-to-hotcrp.sh --help -Uploads a paper PDF to the configured HotCRP submission. +Uploads a paper PDF to the configured HotCRP submission, to be run from root of +the repository. -CONFIG_FILE is sourced as a shell env file. If omitted, .github/hotcrp.env is -sourced when it exists; otherwise existing environment variables are used. -Environment variables should take precedence over CONFIG_FILE defaults when -CONFIG_FILE uses Bash default assignments such as : "${HOTCRP_PID:=TODO}". +CONFIG_FILE is sourced as a shell env file, with .github/hotcrp as the default. +Environment variables take precedence over CONFIG_FILE defaults when CONFIG_FILE +uses Bash default assignments such as : "${HOTCRP_PID:=TODO}". Required values: - HOTCRP_SITE_URL HotCRP site base URL, for example https://asplos26.hotcrp.com - HOTCRP_PID Numeric HotCRP paper ID - HOTCRP_TOKEN HotCRP API token + HOTCRP_SITE_URL HotCRP site base URL, e.g. https://asplos26.hotcrp.com + HOTCRP_PID Numeric HotCRP paper ID + HOTCRP_TOKEN HotCRP API token GitHub Actions control: HOTCRP_ACTION_UPLOAD_ENABLED - In GitHub Actions, must be exactly true to upload. - Defaults to false. + In GitHub Actions, must be exactly true to upload. + Defaults to false. Optional overrides: - HOTCRP_PDF PDF to upload. Defaults to submission.pdf. + HOTCRP_PDF PDF to upload. Defaults to submission.pdf. Local example: HOTCRP_TOKEN=... tools/upload-to-hotcrp.sh .github/hotcrp.env @@ -67,7 +67,6 @@ if [ "$#" -gt 0 ] || [ -f "$config_file" ]; then [ -f "$config_file" ] || die "missing HotCRP config file: $config_file" set -a - # shellcheck source=/dev/null . "$config_file" set +a fi @@ -124,7 +123,8 @@ curl -fsS \ "$HOTCRP_SITE_URL/api/paper" \ > hotcrp-response.json -# Error reporting uses Python3's stdlib json to avoid installing extra packages in the container +# Error reporting uses Python3's stdlib json to avoid installing extra packages +# in the actions container python3 - <<'PY' import json import sys From 9ade05975acc3389596b72b0983afd53404b6526 Mon Sep 17 00:00:00 2001 From: Ivan Ho <38537881+hhkit@users.noreply.github.com> Date: Fri, 3 Jul 2026 14:35:44 +0100 Subject: [PATCH 04/10] proper? TODO check --- tools/upload-to-hotcrp.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/upload-to-hotcrp.sh b/tools/upload-to-hotcrp.sh index 047c309..57f7fbe 100755 --- a/tools/upload-to-hotcrp.sh +++ b/tools/upload-to-hotcrp.sh @@ -45,7 +45,7 @@ require_var() { local name="$1" local value="${!name:-}" - if [ -z "$value" ] || [ "$value" = "TODO" ]; then + if [ -z "$value" ] || [[ "$value" == *TODO* ]]; then die "$name is not set. Update $config_file or provide it in the environment." fi } From f039e49294fb9a045573eaa2d26bcdc4e469f38c Mon Sep 17 00:00:00 2001 From: Ivan Ho <38537881+hhkit@users.noreply.github.com> Date: Fri, 3 Jul 2026 14:49:23 +0100 Subject: [PATCH 05/10] fix paper on TeX Live 2025 --- paper.tex | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/paper.tex b/paper.tex index 1e3e7a9..1f06412 100644 --- a/paper.tex +++ b/paper.tex @@ -58,6 +58,14 @@ \usepackage{hyphenat} \usepackage[shortcuts]{extdash} +% TeX Live 2025+ leaves a conjecture counter defined before acmart creates its +% default theorem environments. Clear it so acmart can define conjecture itself. +\makeatletter +\@ifundefined{conjecture}{% + \expandafter\let\csname c@conjecture\endcsname\@undefined +}{} +\makeatother + \input{tex/setup.tex} \input{tex/acm.tex} From c8edc36530b54c5d9f2db5fc5853ddeb0ee41715 Mon Sep 17 00:00:00 2001 From: Ivan Ho <38537881+hhkit@users.noreply.github.com> Date: Fri, 3 Jul 2026 14:55:48 +0100 Subject: [PATCH 06/10] whitespace --- .github/workflows/build_paper.yml | 156 +++++++++++++++--------------- 1 file changed, 78 insertions(+), 78 deletions(-) diff --git a/.github/workflows/build_paper.yml b/.github/workflows/build_paper.yml index 13ceae5..75387b9 100644 --- a/.github/workflows/build_paper.yml +++ b/.github/workflows/build_paper.yml @@ -18,92 +18,92 @@ jobs: # Steps represent a sequence of tasks that will be executed as part of the job steps: - # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - - uses: actions/checkout@v3 - - - name: Create .latexminted_config file - run: | - bash ./tools/create_latexminted_config.sh - make .latexminted_config - - # Uses the latest TeXLive distribution (currently with minted v3+) - - name: Compile paper - uses: xu-cheng/latex-action@master - with: - root_file: paper.tex - - # Uses the latest TeXLive distribution (currently with minted v3+) - - name: Compile submission - uses: xu-cheng/latex-action@master - with: - root_file: submission.tex - - - name: Release - if: ${{ github.event_name == 'push' }} - id: create_release - uses: softprops/action-gh-release@v1 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - with: - name: Release ${{ github.run_number }} - tag_name: release-${{ github.run_number }} - files: | - paper.pdf - submission.pdf - - - name: Set up Python for HotCRP response validation - if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/main' }} - uses: actions/setup-python@v5 - with: - python-version: "3.x" - - - name: Upload to HotCRP - if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/main' }} - env: - HOTCRP_TOKEN: ${{ secrets.HOTCRP_TOKEN }} - run: bash ./tools/upload-to-hotcrp.sh .github/hotcrp.env + # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it + - uses: actions/checkout@v3 + + - name: Create .latexminted_config file + run: | + bash ./tools/create_latexminted_config.sh + make .latexminted_config + + # Uses the latest TeXLive distribution (currently with minted v3+) + - name: Compile paper + uses: xu-cheng/latex-action@master + with: + root_file: paper.tex + + # Uses the latest TeXLive distribution (currently with minted v3+) + - name: Compile submission + uses: xu-cheng/latex-action@master + with: + root_file: submission.tex + + - name: Release + if: ${{ github.event_name == 'push' }} + id: create_release + uses: softprops/action-gh-release@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + name: Release ${{ github.run_number }} + tag_name: release-${{ github.run_number }} + files: | + paper.pdf + submission.pdf + + - name: Set up Python for HotCRP response validation + if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/main' }} + uses: actions/setup-python@v5 + with: + python-version: "3.x" + + - name: Upload to HotCRP + if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/main' }} + env: + HOTCRP_TOKEN: ${{ secrets.HOTCRP_TOKEN }} + run: bash ./tools/upload-to-hotcrp.sh .github/hotcrp.env build-texlive-2024: runs-on: ubuntu-latest # Steps represent a sequence of tasks that will be executed as part of the job steps: - # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - - uses: actions/checkout@v3 - - # Uses an older TeXLive distribution (with minted v2.9) - - name: Compile paper - uses: xu-cheng/latex-action@master - with: - docker_image: ghcr.io/xu-cheng/texlive-full:20240901 - root_file: paper.tex - - # Uses an older TeXLive distribution (with minted v2.9) - - name: Compile submission - uses: xu-cheng/latex-action@master - with: - docker_image: ghcr.io/xu-cheng/texlive-full:20240901 - root_file: submission.tex + # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it + - uses: actions/checkout@v3 + + # Uses an older TeXLive distribution (with minted v2.9) + - name: Compile paper + uses: xu-cheng/latex-action@master + with: + docker_image: ghcr.io/xu-cheng/texlive-full:20240901 + root_file: paper.tex + + # Uses an older TeXLive distribution (with minted v2.9) + - name: Compile submission + uses: xu-cheng/latex-action@master + with: + docker_image: ghcr.io/xu-cheng/texlive-full:20240901 + root_file: submission.tex build-texlive-2022: runs-on: ubuntu-latest # Steps represent a sequence of tasks that will be executed as part of the job steps: - # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - - uses: actions/checkout@v3 - - # Uses an older TeXLive distribution (with minted v2.6) - - name: Compile paper - uses: xu-cheng/latex-action@v3 - with: - docker_image: ghcr.io/xu-cheng/texlive-full:20221101 - root_file: paper.tex - latexmk_shell_escape: true - - # Uses an older TeXLive distribution (with minted v2.6) - - name: Compile submission - uses: xu-cheng/latex-action@v3 - with: - docker_image: ghcr.io/xu-cheng/texlive-full:20221101 - root_file: submission.tex - latexmk_shell_escape: true + # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it + - uses: actions/checkout@v3 + + # Uses an older TeXLive distribution (with minted v2.6) + - name: Compile paper + uses: xu-cheng/latex-action@v3 + with: + docker_image: ghcr.io/xu-cheng/texlive-full:20221101 + root_file: paper.tex + latexmk_shell_escape: true + + # Uses an older TeXLive distribution (with minted v2.6) + - name: Compile submission + uses: xu-cheng/latex-action@v3 + with: + docker_image: ghcr.io/xu-cheng/texlive-full:20221101 + root_file: submission.tex + latexmk_shell_escape: true From aed75d6e4b8d7ba28c20e38d7530457a0c2700d7 Mon Sep 17 00:00:00 2001 From: Ivan Ho <38537881+hhkit@users.noreply.github.com> Date: Fri, 3 Jul 2026 14:56:37 +0100 Subject: [PATCH 07/10] codex tries to fix the paper build --- paper.tex | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/paper.tex b/paper.tex index 1f06412..cbf0e2a 100644 --- a/paper.tex +++ b/paper.tex @@ -58,12 +58,22 @@ \usepackage{hyphenat} \usepackage[shortcuts]{extdash} -% TeX Live 2025+ leaves a conjecture counter defined before acmart creates its -% default theorem environments. Clear it so acmart can define conjecture itself. +% TeX Live 2025+ thmtools aliases shared theorem counters before calling the +% original \newtheorem, which makes acmart's default theorem definitions fail. +% Defer the alias until after \newtheorem so acmart can create the environments. \makeatletter -\@ifundefined{conjecture}{% - \expandafter\let\csname c@conjecture\endcsname\@undefined -}{} +\renewcommand\thmt@autorefsetup{% + \expandafter\def\csname\thmt@envname autorefname\expandafter\endcsname + \expandafter{\thmt@thmname}% + \ifthmt@hassibling + \def\thmt@autoreffix{% + \@counteralias{\thmt@envname}{\thmt@sibling}% + \expandafter\global\expandafter\let\csname the\thmt@envname + \expandafter\endcsname\csname the\thmt@sibling\endcsname + \def\thmt@autoreffix{}% + }% + \fi +} \makeatother \input{tex/setup.tex} From b9d3d2ccb4a6211942a999011399b3e08831c927 Mon Sep 17 00:00:00 2001 From: Ivan Ho <38537881+hhkit@users.noreply.github.com> Date: Fri, 3 Jul 2026 14:57:53 +0100 Subject: [PATCH 08/10] no more dispatch --- .github/workflows/build_paper.yml | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/.github/workflows/build_paper.yml b/.github/workflows/build_paper.yml index 75387b9..348d21c 100644 --- a/.github/workflows/build_paper.yml +++ b/.github/workflows/build_paper.yml @@ -6,10 +6,7 @@ permissions: write-all # Controls when the action will run. Triggers the workflow on push, pull request, # or a manual run from the GitHub Actions UI. -on: - push: - pull_request: - workflow_dispatch: +on: [push, pull_request] # A workflow run is made up of one or more jobs that can run sequentially or in parallel jobs: From 06e418391f7218a2edb4e9eef880f34d0b666c57 Mon Sep 17 00:00:00 2001 From: Ivan Ho <38537881+hhkit@users.noreply.github.com> Date: Fri, 3 Jul 2026 15:00:50 +0100 Subject: [PATCH 09/10] removed comment delta --- .github/workflows/build_paper.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build_paper.yml b/.github/workflows/build_paper.yml index 348d21c..9c4242a 100644 --- a/.github/workflows/build_paper.yml +++ b/.github/workflows/build_paper.yml @@ -4,8 +4,8 @@ name: Compile paper # https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#permissions permissions: write-all -# Controls when the action will run. Triggers the workflow on push, pull request, -# or a manual run from the GitHub Actions UI. +# Controls when the action will run. Triggers the workflow on push or pull request +# events but only for the master branch on: [push, pull_request] # A workflow run is made up of one or more jobs that can run sequentially or in parallel From 9de19f0876979de6c1a1e821e3d464a33b43618d Mon Sep 17 00:00:00 2001 From: Ivan Ho <38537881+hhkit@users.noreply.github.com> Date: Fri, 3 Jul 2026 15:31:40 +0100 Subject: [PATCH 10/10] try to fix paper compile --- paper.tex | 22 ++++------------------ 1 file changed, 4 insertions(+), 18 deletions(-) diff --git a/paper.tex b/paper.tex index cbf0e2a..c364e29 100644 --- a/paper.tex +++ b/paper.tex @@ -52,29 +52,15 @@ \usepackage{etoolbox} \usepackage[acronym,shortcuts]{glossaries} \usepackage{amsmath} -\usepackage{thmtools} % required for autoref to lemmas \usepackage{algorithm} \usepackage[noend]{algpseudocode} \usepackage{hyphenat} \usepackage[shortcuts]{extdash} -% TeX Live 2025+ thmtools aliases shared theorem counters before calling the -% original \newtheorem, which makes acmart's default theorem definitions fail. -% Defer the alias until after \newtheorem so acmart can create the environments. -\makeatletter -\renewcommand\thmt@autorefsetup{% - \expandafter\def\csname\thmt@envname autorefname\expandafter\endcsname - \expandafter{\thmt@thmname}% - \ifthmt@hassibling - \def\thmt@autoreffix{% - \@counteralias{\thmt@envname}{\thmt@sibling}% - \expandafter\global\expandafter\let\csname the\thmt@envname - \expandafter\endcsname\csname the\thmt@sibling\endcsname - \def\thmt@autoreffix{}% - }% - \fi -} -\makeatother +% Load thmtools after acmart has created its built-in theorem environments. +% Newer thmtools aliases shared counters before \newtheorem, which collides +% with acmart's default conjecture/proposition/lemma definitions otherwise. +\AtEndPreamble{\usepackage{thmtools}} \input{tex/setup.tex} \input{tex/acm.tex}