Skip to content

fix: strip ports and digests from service aliases - #1820

Merged
firecow merged 1 commit into
firecow:masterfrom
bidord:fix/service-aliases
Apr 3, 2026
Merged

fix: strip ports and digests from service aliases#1820
firecow merged 1 commit into
firecow:masterfrom
bidord:fix/service-aliases

Conversation

@bidord

@bidord bidord commented Apr 2, 2026

Copy link
Copy Markdown
Contributor

Context

Service aliases containing registry ports (:443) or image digests (@sha256:...) are not stripped correctly, causing healthcheck failures.

See both examples below.

$ npx gitlab-ci-local --version
4.70.0

Job with a service name that includes a registry port

.gitlab-ci.yml

registry-port:
  services:
    - registry-1.docker.io:443/library/nginx:1.29.7
  image: docker.io/curlimages/curl:8.18.0
  script: curl -sS http://registry-1.docker.io-library-nginx/
Output
$ npx gitlab-ci-local registry-port
parsing and downloads finished in 32 ms.
json schema validated in 151 ms
registry-port starting docker.io/curlimages/curl:8.18.0 (test)
registry-port copied to docker volumes in 613 ms
registry-port started service image: registry-1.docker.io:443/library/nginx:1.29.7 with aliases: registry-1.docker.io:443-library-nginx, registry-1.docker.io:443__library__nginx in 477 ms
registry-port > still running...
registry-port > still running...
registry-port > still running...
registry-port service image: registry-1.docker.io:443/library/nginx:1.29.7 healthcheck failed
registry-port   Command failed with exit code 143: docker run --rm --name=gcl-wait-for-it-555055-0-80 --network 95cdffa9e5b4bdf5f8da2596af5a7a4bbc26b40e6c015387101bad1e44ddeae2 docker.io/sumina46/wait-for-it:latest registry-1.docker.io:443__library__nginx:80 -t 30
registry-port   wait-for-it.sh: waiting 30 seconds for registry-1.docker.io:443__library__nginx
registry-port   nc: bad port '443__library__nginx'
registry-port   nc: bad port '443__library__nginx'
registry-port   nc: bad port '443__library__nginx'
registry-port   nc: bad port '443__library__nginx'
registry-port   nc: bad port '443__library__nginx'
registry-port   nc: bad port '443__library__nginx'
registry-port   nc: bad port '443__library__nginx'
registry-port   nc: bad port '443__library__nginx'
registry-port   nc: bad port '443__library__nginx'
registry-port   nc: bad port '443__library__nginx'
registry-port   nc: bad port '443__library__nginx'
registry-port   nc: bad port '443__library__nginx'
registry-port   nc: bad port '443__library__nginx'
registry-port   nc: bad port '443__library__nginx'
registry-port   nc: bad port '443__library__nginx'
registry-port   nc: bad port '443__library__nginx'
registry-port   nc: bad port '443__library__nginx'
registry-port   nc: bad port '443__library__nginx'
registry-port   nc: bad port '443__library__nginx'
registry-port   nc: bad port '443__library__nginx'
registry-port   nc: bad port '443__library__nginx'
registry-port   nc: bad port '443__library__nginx'
registry-port   nc: bad port '443__library__nginx'
registry-port   nc: bad port '443__library__nginx'
registry-port   nc: bad port '443__library__nginx'
registry-port   nc: bad port '443__library__nginx'
registry-port   nc: bad port '443__library__nginx'
registry-port   nc: bad port '443__library__nginx'
registry-port   nc: bad port '443__library__nginx'
registry-port   nc: bad port '443__library__nginx'
registry-port   wait-for-it.sh: timeout occurred after waiting 30 seconds for registry-1.docker.io:443__library__nginx
registry-port also see (/home/bidord/dev/tmp/.gitlab-ci-local/services-output/registry-port/registry-1.docker.io:443/library/nginx:1.29.7-0.log)
registry-port $ curl -sS http://registry-1.docker.io-library-nginx/
registry-port > curl: (6) Could not resolve host: registry-1.docker.io-library-nginx
registry-port finished in 33 s  FAIL 6

 FAIL  registry-port
  > curl: (6) Could not resolve host: registry-1.docker.io-library-nginx

Job with a service name that includes a Docker image digest

This is common when using Renovate's digest pinning.

.gitlab-ci.yml

image-digest:
  services:
    - docker.io/library/nginx@sha256:e7257f1ef28ba17cf7c248cb8ccf6f0c6e0228ab9c315c152f9c203cd34cf6d1
  image: docker.io/curlimages/curl:8.18.0
  script: curl -sS http://docker.io-library-nginx/
Output
$ npx gitlab-ci-local image-digest
parsing and downloads finished in 27 ms.
json schema validated in 158 ms
image-digest starting docker.io/curlimages/curl:8.18.0 (test)
image-digest copied to docker volumes in 564 ms
image-digest started service image: docker.io/library/nginx@sha256:e7257f1ef28ba17cf7c248cb8ccf6f0c6e0228ab9c315c152f9c203cd34cf6d1 with aliases: docker.io-library-nginx@sha256, docker.io__library__nginx@sha256 in 470 ms
image-digest > still running...
image-digest > still running...
image-digest > still running...
image-digest service image: docker.io/library/nginx@sha256:e7257f1ef28ba17cf7c248cb8ccf6f0c6e0228ab9c315c152f9c203cd34cf6d1 healthcheck failed
image-digest   Command failed with exit code 143: docker run --rm --name=gcl-wait-for-it-122775-0-80 --network 9770fa5610032724d4fdc9b969b2b3f77698a18c622e3ef264739fdb49f29398 docker.io/sumina46/wait-for-it:latest docker.io__library__nginx@sha256:80 -t 30
image-digest   wait-for-it.sh: waiting 30 seconds for docker.io__library__nginx@sha256:80
image-digest   nc: bad address 'docker.io__library__nginx@sha256'
image-digest   nc: bad address 'docker.io__library__nginx@sha256'
image-digest   nc: bad address 'docker.io__library__nginx@sha256'
image-digest   nc: bad address 'docker.io__library__nginx@sha256'
image-digest   nc: bad address 'docker.io__library__nginx@sha256'
image-digest   nc: bad address 'docker.io__library__nginx@sha256'
image-digest   nc: bad address 'docker.io__library__nginx@sha256'
image-digest   nc: bad address 'docker.io__library__nginx@sha256'
image-digest   nc: bad address 'docker.io__library__nginx@sha256'
image-digest   nc: bad address 'docker.io__library__nginx@sha256'
image-digest   nc: bad address 'docker.io__library__nginx@sha256'
image-digest   nc: bad address 'docker.io__library__nginx@sha256'
image-digest   nc: bad address 'docker.io__library__nginx@sha256'
image-digest   nc: bad address 'docker.io__library__nginx@sha256'
image-digest   nc: bad address 'docker.io__library__nginx@sha256'
image-digest   nc: bad address 'docker.io__library__nginx@sha256'
image-digest   nc: bad address 'docker.io__library__nginx@sha256'
image-digest   nc: bad address 'docker.io__library__nginx@sha256'
image-digest   nc: bad address 'docker.io__library__nginx@sha256'
image-digest   nc: bad address 'docker.io__library__nginx@sha256'
image-digest   nc: bad address 'docker.io__library__nginx@sha256'
image-digest   nc: bad address 'docker.io__library__nginx@sha256'
image-digest   nc: bad address 'docker.io__library__nginx@sha256'
image-digest   nc: bad address 'docker.io__library__nginx@sha256'
image-digest   nc: bad address 'docker.io__library__nginx@sha256'
image-digest   nc: bad address 'docker.io__library__nginx@sha256'
image-digest   nc: bad address 'docker.io__library__nginx@sha256'
image-digest   nc: bad address 'docker.io__library__nginx@sha256'
image-digest   nc: bad address 'docker.io__library__nginx@sha256'
image-digest   nc: bad address 'docker.io__library__nginx@sha256'
image-digest   wait-for-it.sh: timeout occurred after waiting 30 seconds for docker.io__library__nginx@sha256:80
image-digest also see (/home/bidord/dev/tmp/.gitlab-ci-local/services-output/image-digest/docker.io/library/nginx@sha256:e7257f1ef28ba17cf7c248cb8ccf6f0c6e0228ab9c315c152f9c203cd34cf6d1-0.log)
image-digest $ curl -sS http://docker.io-library-nginx/
image-digest > curl: (6) Could not resolve host: docker.io-library-nginx
image-digest finished in 33 s  FAIL 6

 FAIL  image-digest
  > curl: (6) Could not resolve host: docker.io-library-nginx

Change

  • Normalize service alias inference with 2 new utility functions Utils.getAllServiceAliases() and Utils.getServiceAlias()
  • Use them in job.ts to fix the issue
  • Add unit tests for new utility functions
  • Add Docker tests (same as the above examples)

Summary by cubic

Fix service alias generation by stripping registry ports, tags, and digests so health checks resolve correctly and services start as expected. This prevents failures with registry ports (e.g., :443) and digest-pinned images.

  • Bug Fixes
    • Centralized alias normalization in Utils.getAllServiceAliases and Utils.getServiceAlias (strip :port, :tag, @sha256:...; produce - and __ variants; honor custom aliases).
    • Updated job.ts to use these aliases for variable expansion and health checks.
    • Added unit tests for utils and integration tests for registry port and digest cases.

Written for commit 02ed47b. Summary will update on new commits.

@cubic-dev-ai cubic-dev-ai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No issues found across 5 files

@firecow firecow left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Solid fix. Strips registry ports and digests correctly from service aliases, deduplicates the alias logic, and has thorough test coverage.

@firecow
firecow merged commit 9bb356c into firecow:master Apr 3, 2026
14 checks passed
tmeijn pushed a commit to tmeijn/dotfiles that referenced this pull request Apr 7, 2026
This MR contains the following updates:

| Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Adoption](https://docs.renovatebot.com/merge-confidence/) | [Passing](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) |
|---|---|---|---|---|---|
| [npm:gitlab-ci-local](https://github.com/firecow/gitlab-ci-local) | `4.70.0` → `4.70.1` | ![age](https://developer.mend.io/api/mc/badges/age/npm/gitlab-ci-local/4.70.1?slim=true) | ![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/gitlab-ci-local/4.70.1?slim=true) | ![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/gitlab-ci-local/4.70.0/4.70.1?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/gitlab-ci-local/4.70.0/4.70.1?slim=true) |

MR created with the help of [el-capitano/tools/renovate-bot](https://gitlab.com/el-capitano/tools/renovate-bot).

**Proposed changes to behavior should be submitted there as MRs.**

---

### Release Notes

<details>
<summary>firecow/gitlab-ci-local (npm:gitlab-ci-local)</summary>

### [`v4.70.1`](https://github.com/firecow/gitlab-ci-local/releases/tag/4.70.1)

[Compare Source](firecow/gitlab-ci-local@4.70.0...4.70.1)

#### What's Changed

- fix: GCL\_ array env vars not splitting semicolon-separated values by [@&#8203;firecow](https://github.com/firecow) in [#&#8203;1778](firecow/gitlab-ci-local#1778)
- fix: strip ports and digests from service aliases by [@&#8203;bidord](https://github.com/bidord) in [#&#8203;1820](firecow/gitlab-ci-local#1820)
- fix: SonarCloud code smells by [@&#8203;firecow](https://github.com/firecow) in [#&#8203;1822](firecow/gitlab-ci-local#1822)
- chore(deps): update github/codeql-action action to v4.34.0 by [@&#8203;renovate](https://github.com/renovate)\[bot] in [#&#8203;1807](firecow/gitlab-ci-local#1807)
- chore(deps): update github/codeql-action action to v4.35.1 by [@&#8203;renovate](https://github.com/renovate)\[bot] in [#&#8203;1808](firecow/gitlab-ci-local#1808)
- chore(deps): lock file maintenance by [@&#8203;renovate](https://github.com/renovate)\[bot] in [#&#8203;1811](firecow/gitlab-ci-local#1811)
- build(deps): bump path-to-regexp from 0.1.12 to 0.1.13 in /examples/docker-compose-nodejs by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;1816](firecow/gitlab-ci-local#1816)
- chore(deps): update sonarsource/sonarqube-scan-action action to v7.1.0 by [@&#8203;renovate](https://github.com/renovate)\[bot] in [#&#8203;1818](firecow/gitlab-ci-local#1818)
- chore(deps): update dependency typescript to v6 by [@&#8203;renovate](https://github.com/renovate)\[bot] in [#&#8203;1812](firecow/gitlab-ci-local#1812)

#### New Contributors

- [@&#8203;bidord](https://github.com/bidord) made their first contribution in [#&#8203;1820](firecow/gitlab-ci-local#1820)

**Full Changelog**: <firecow/gitlab-ci-local@4.70.0...4.70.1>

</details>

---

### Configuration

📅 **Schedule**: (UTC)

- Branch creation
  - At any time (no schedule defined)
- Automerge
  - At any time (no schedule defined)

🚦 **Automerge**: Enabled.

♻ **Rebasing**: Whenever MR is behind base branch, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this MR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this MR, check this box

---

This MR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4xMDQuOCIsInVwZGF0ZWRJblZlciI6IjQzLjEwNC44IiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJSZW5vdmF0ZSBCb3QiLCJhdXRvbWF0aW9uOmJvdC1hdXRob3JlZCIsImRlcGVuZGVuY3ktdHlwZTo6cGF0Y2giXX0=-->
kevingerman pushed a commit to kevingerman/gitlab-ci-local that referenced this pull request Apr 10, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants