Jobs will run on a partially matching tag?

I have my runner setup with ubuntu and ubuntu-noble tags. I have a workflow that says run-on: ubuntu-noble, but when it runs its actually running on the container image of the ubuntu tag. Is this an issue with the tag matching? or an issue with how i’ve setup my runner tags? Because i am attempting to use a self built and self hosted container image for jobs (see this thread also: Docker registry doesn't work with implicit latest tag?)

runner in gitea:

runner config.yaml:

labels: ["debian:host", "ubuntu:docker://node:16-bullseye", "ubuntu-noble:docker://my.gitea.domain/owner_name/ubuntu-noble:0.1.0"]

triggering the job that uses ubuntu-noble:

linux-runner(version:v0.2.6) received task 100 of job 90, be triggered by event: release
workflow prepared
evaluating expression 'success()'
expression 'success()' evaluated to 'true'
🚀  Start image=node:16-bullseye
  🐳  docker pull image=node:16-bullseye platform= username= forcePull=false
  🐳  docker pull node:16-bullseye
Image exists? false
pulling image '' ()
Pulling from library/node :: 16-bullseye
Pulling fs layer :: 5dea071bb978

is this a bug? or am i doing something wrong? any information would be greatly appreciated.

Ok maybe this node:16-bulleye is some default image used? because i literally removed it as an option (it was the default ubuntu option) and the job still runs on this for some reason. No idea whats going on?

ok, the above link to the code does seem to be a hardcoded default that returns if no matching label is found?

In the code i can also see some reference to cfg.Container.Options but it doesn’t seem to actually be used? or show what options are available.

I think this is confirming im doing something wrong, but what i want to do just isnt documented ANYWHERE.

I think i have to actually put a registry address if i want to use custom images, but i cant figure out where to do that? again no documentation for this option :frowning:

so if i use:

runs-on: debian
  image: python:latest

it actually pulls down the correct image for the job now. Why does that work, but trying to use python:docker://python:latest in the config.yaml on the runner DOESN’T work??