# Run sent to worker: doanac-reckless == 2026-03-20 14:56:36.489885: Setting up runner on worker == 2026-03-20 14:56:39.001351: Steps to recreate inside simulator wget -O simulate.sh https://api.gavelci.us/projects/jobserv/builds/509/runs/flake8//.simulate.sh # wget'ing the file may require the --header flag if the # jobserv API requires authentication. sh ./simulate.sh == 2026-03-20 14:56:40.711729: Pulling container: python:3.11-alpine3.19 3.11-alpine3.19: Pulling from library/python Digest: sha256:135b0db9b7c3e33d654ba8893b63cbe9394768cc64fc2a2f283148125ae8aa1f Status: Image is up to date for python:3.11-alpine3.19 docker.io/library/python:3.11-alpine3.19 == 2026-03-20 14:56:45.124635: Preparing bind mounts 2026-03-20 14:56:45.695124: INFO Default docker configuration detected 2026-03-20 14:56:46.275034: INFO Creating secret: githubtok 2026-03-20 14:56:46.870008: INFO Creating secret: webhook-key 2026-03-20 14:56:47.422851: INFO Creating secret: milosz == 2026-03-20 14:56:48.595145: Creating container .netrc file 2026-03-20 14:56:49.151241: INFO Creating token for jobserv run access 2026-03-20 14:56:49.739003: INFO Creating a github token entry == 2026-03-20 14:56:50.550105: Preparing script == 2026-03-20 14:56:51.490412: Cloning git repository 2026-03-20 14:56:51.748246: INFO Clone_url: https://github.com/foundriesio/jobserv.git 2026-03-20 14:56:52.413184: INFO Checking to see if https://github.com/foundriesio/jobserv.git requires authentication. 2026-03-20 14:56:53.154686: INFO Server does not appear to need credentials for cloning 2026-03-20 14:56:53.478803: INFO Adding githubtok to .gitconfig 2026-03-20 14:56:53.930121: INFO Git install supports submodules Cloning into '/srv/gavelci-worker/runs/tmpmaochx96/repo'... 2026-03-20 14:56:55.823791: INFO Checking out: b50363ca31610551d4f04e0150fea5fc679c075e Switched to branch 'jobserv-run' == 2026-03-20 14:56:57.291351: Setting up container environment 2026-03-20 14:56:57.537574: INFO Container environment variables: GH_PRNUM=158 GH_OWNER=foundriesio GH_REPO=jobserv GH_BRANCH=master GH_STATUS_URL=https://api.github.com/repos/foundriesio/jobserv/statuses/b50363ca31610551d4f04e0150fea5fc679c075e GH_TARGET_REPO=https://github.com/foundriesio/jobserv.git GIT_URL=https://github.com/foundriesio/jobserv.git GIT_SHA_BASE=3e977a1a81ca12ef84539f44180597b212964c56 GIT_OLD_SHA=3e977a1a81ca12ef84539f44180597b212964c56 GIT_SHA=b50363ca31610551d4f04e0150fea5fc679c075e H_PROJECT=jobserv H_BUILD=509 H_RUN=flake8 H_RUN_URL=https://api.gavelci.us/projects/jobserv/builds/509/runs/flake8/ H_WORKER=doanac-reckless == 2026-03-20 14:56:57.985477: Running script inside container 2026-03-20 14:56:58.221882: INFO Running with --memory=14639596339 WARNING: Your kernel does not support swap limit capabilities or the cgroup is not mounted. Memory limited without swap. + apk add musl-dev gcc fetch https://dl-cdn.alpinelinux.org/alpine/v3.19/main/x86_64/APKINDEX.tar.gz fetch https://dl-cdn.alpinelinux.org/alpine/v3.19/community/x86_64/APKINDEX.tar.gz (1/14) Upgrading musl (1.2.4_git20230717-r4 -> 1.2.4_git20230717-r5) (2/14) Installing libgcc (13.2.1_git20231014-r0) (3/14) Installing jansson (2.14-r4) (4/14) Installing libstdc++ (13.2.1_git20231014-r0) (5/14) Installing zstd-libs (1.5.5-r8) (6/14) Installing binutils (2.41-r1) (7/14) Installing libgomp (13.2.1_git20231014-r0) (8/14) Installing libatomic (13.2.1_git20231014-r0) (9/14) Installing gmp (6.3.0-r0) (10/14) Installing isl26 (0.26-r1) (11/14) Installing mpfr4 (4.2.1-r0) (12/14) Installing mpc1 (1.3.1-r1) (13/14) Installing gcc (13.2.1_git20231014-r0) (14/14) Installing musl-dev (1.2.4_git20230717-r5) Executing busybox-1.36.1-r19.trigger OK: 166 MiB in 50 packages + pip3 install -r ./requirements-lint.txt Collecting black==26.3.1 (from -r ./requirements-lint.txt (line 1)) Downloading black-26.3.1-py3-none-any.whl.metadata (91 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 91.9/91.9 kB 667.9 kB/s eta 0:00:00 Collecting flake8==7.3.0 (from -r ./requirements-lint.txt (line 2)) Downloading flake8-7.3.0-py2.py3-none-any.whl.metadata (3.8 kB) Collecting flake8-junit-report==2.1.0 (from -r ./requirements-lint.txt (line 3)) Downloading flake8-junit-report-2.1.0.tar.gz (3.1 kB) Preparing metadata (setup.py): started Preparing metadata (setup.py): finished with status 'done' Collecting click>=8.0.0 (from black==26.3.1->-r ./requirements-lint.txt (line 1)) Downloading click-8.3.1-py3-none-any.whl.metadata (2.6 kB) Collecting mypy-extensions>=0.4.3 (from black==26.3.1->-r ./requirements-lint.txt (line 1)) Downloading mypy_extensions-1.1.0-py3-none-any.whl.metadata (1.1 kB) Collecting packaging>=22.0 (from black==26.3.1->-r ./requirements-lint.txt (line 1)) Downloading packaging-26.0-py3-none-any.whl.metadata (3.3 kB) Collecting pathspec>=1.0.0 (from black==26.3.1->-r ./requirements-lint.txt (line 1)) Downloading pathspec-1.0.4-py3-none-any.whl.metadata (13 kB) Collecting platformdirs>=2 (from black==26.3.1->-r ./requirements-lint.txt (line 1)) Downloading platformdirs-4.9.4-py3-none-any.whl.metadata (4.7 kB) Collecting pytokens~=0.4.0 (from black==26.3.1->-r ./requirements-lint.txt (line 1)) Downloading pytokens-0.4.1-cp311-cp311-musllinux_1_2_x86_64.whl.metadata (3.8 kB) Collecting mccabe<0.8.0,>=0.7.0 (from flake8==7.3.0->-r ./requirements-lint.txt (line 2)) Downloading mccabe-0.7.0-py2.py3-none-any.whl.metadata (5.0 kB) Collecting pycodestyle<2.15.0,>=2.14.0 (from flake8==7.3.0->-r ./requirements-lint.txt (line 2)) Downloading pycodestyle-2.14.0-py2.py3-none-any.whl.metadata (4.5 kB) Collecting pyflakes<3.5.0,>=3.4.0 (from flake8==7.3.0->-r ./requirements-lint.txt (line 2)) Downloading pyflakes-3.4.0-py2.py3-none-any.whl.metadata (3.5 kB) Downloading black-26.3.1-py3-none-any.whl (207 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 207.5/207.5 kB 1.8 MB/s eta 0:00:00 Downloading flake8-7.3.0-py2.py3-none-any.whl (57 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 57.9/57.9 kB 524.4 kB/s eta 0:00:00 Downloading click-8.3.1-py3-none-any.whl (108 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 108.3/108.3 kB 873.3 kB/s eta 0:00:00 Downloading mccabe-0.7.0-py2.py3-none-any.whl (7.3 kB) Downloading mypy_extensions-1.1.0-py3-none-any.whl (5.0 kB) Downloading packaging-26.0-py3-none-any.whl (74 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 74.4/74.4 kB 758.6 kB/s eta 0:00:00 Downloading pathspec-1.0.4-py3-none-any.whl (55 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 55.2/55.2 kB 432.8 kB/s eta 0:00:00 Downloading platformdirs-4.9.4-py3-none-any.whl (21 kB) Downloading pycodestyle-2.14.0-py2.py3-none-any.whl (31 kB) Downloading pyflakes-3.4.0-py2.py3-none-any.whl (63 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 63.6/63.6 kB 389.6 kB/s eta 0:00:00 Downloading pytokens-0.4.1-cp311-cp311-musllinux_1_2_x86_64.whl (264 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 264.1/264.1 kB 2.3 MB/s eta 0:00:00 Building wheels for collected packages: flake8-junit-report Building wheel for flake8-junit-report (setup.py): started Building wheel for flake8-junit-report (setup.py): finished with status 'done' Created wheel for flake8-junit-report: filename=flake8_junit_report-2.1.0-py3-none-any.whl size=3736 sha256=cdb998545b9517ba75ecc9fab5796f6cf0a1e62488342fbcf50eba2730cb479d Stored in directory: /root/.cache/pip/wheels/61/49/33/d490b7f9a42bd5abfb880d2af6c9e97ab4c0e6eb3441a38c19 Successfully built flake8-junit-report Installing collected packages: flake8-junit-report, pytokens, pyflakes, pycodestyle, platformdirs, pathspec, packaging, mypy-extensions, mccabe, click, flake8, black Successfully installed black-26.3.1 click-8.3.1 flake8-7.3.0 flake8-junit-report-2.1.0 mccabe-0.7.0 mypy-extensions-1.1.0 packaging-26.0 pathspec-1.0.4 platformdirs-4.9.4 pycodestyle-2.14.0 pyflakes-3.4.0 pytokens-0.4.1 WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv [notice] A new release of pip is available: 24.0 -> 26.0.1 [notice] To update, run: pip install --upgrade pip + black --check --diff ./jobserv ./runner ./tests ./jobserv_worker.py --- /repo/jobserv/worker_jwt.py 2026-03-20 14:56:56.402533+00:00 +++ /repo/jobserv/worker_jwt.py 2026-03-20 14:57:37.737218+00:00 @@ -102,11 +102,13 @@ return WorkerJWT(name, allowed) def worker_create_jwt(name: str, key: EllipticCurvePrivateKey, expires=None) -> str: h = hashlib.sha256() - h.update(key.public_key().public_bytes(Encoding.DER, PublicFormat.SubjectPublicKeyInfo)) + h.update( + key.public_key().public_bytes(Encoding.DER, PublicFormat.SubjectPublicKeyInfo) + ) headers = {"kid": h.hexdigest()} if expires is None: expires = time.time() + (60 * 60 * 24) worker = { would reformat /repo/jobserv/worker_jwt.py --- /repo/tests/test_worker_jwt.py 2026-03-20 14:56:56.402533+00:00 +++ /repo/tests/test_worker_jwt.py 2026-03-20 14:57:38.215549+00:00 @@ -8,11 +8,16 @@ import jwt from cryptography.hazmat.primitives.serialization import Encoding import jobserv.worker_jwt -from jobserv.worker_jwt import _keyid, create_keypair, worker_from_jwt, worker_create_jwt +from jobserv.worker_jwt import ( + _keyid, + create_keypair, + worker_from_jwt, + worker_create_jwt, +) def create_jwt(orgs): k, cert = create_keypair(orgs) fname = os.path.join(jobserv.worker_jwt.WORKER_JWTS_DIR, _keyid(cert)) would reformat /repo/tests/test_worker_jwt.py Oh no! 💥 💔 💥 2 files would be reformatted, 61 files would be left unchanged. Script completed with error(s) == 2026-03-20 14:57:47.219946: Finding artifacts to upload Uploading 0 items 0 bytes == 2026-03-20 14:57:47.679070: Runner has completed ________ | o o| Thumbs Down |___/\_|________ | _____|__| | | || |______| | | | | | | | | |_| |_|