René's URL Explorer Experiment


Title: fix(cli): tag an image's Features build per workspace in up by aledbf · Pull Request #72 · spin-stack/devcontainer-cli · GitHub

Open Graph Title: fix(cli): tag an image's Features build per workspace in up by aledbf · Pull Request #72 · spin-stack/devcontainer-cli

X Title: fix(cli): tag an image's Features build per workspace in up by aledbf · Pull Request #72 · spin-stack/devcontainer-cli

Description: Cause TestE2E_CABundle/container failed when another run of it shared the Docker daemon: up ran a postCreateCommand pointing at the other run's TLS server and nonce. It isn't the workspace basename. folderImageName hashes the full path (vsc--), the same as TS getFolderImageName, and t.TempDir paths differ between runs. The collision comes from the product: up of an image configuration with Features called extendImageWithFeatures with no names, so it tagged the build -features, for example mcr.microsoft.com/devcontainers/base:ubuntu-features. Every workspace on that image shared the tag. One run's build retagged it before the other ran docker run, so the container started from the wrong image and its metadata label carried the wrong lifecycle commands. TS tags it ${getFolderImageName(common)}-features (containerFeatures.ts, extendImage), and our build already uses folder+"-features". Only up diverged. Fix fix(cli): fromImage passes folderImageName(workspaceFolder) + "-features", which matches TS. The hermetic regression test TestUpImageFeaturesTagsFolderImage fails before the change (tags = [alpine:3-features]) and passes after. There's a migration note in docs/migration.md because image tags are a public contract. test(cli): three other e2e tests could collide under concurrency: TestE2E_ComposeBuildLabel: Compose takes the project and image name from the workspace basename, and t.TempDir makes it 001 in every run. TestE2E_SiblingDockerignore: used the fixed tag e2e-dockerignore:test, which another run's cleanup could remove. TestE2E_BuildUpExec_*: used the repo fixture folder directly, so runs from one checkout shared a container (both match it by its local_folder label). Workspaces now get a unique basename (ws-), the fixtures are copied into one, and the dockerignore image name is unique. Evidence Two concurrent TestE2E_CABundle runs (separate TMPDIR): Before: reproduced on the first attempt. Run 1 (server 172.17.0.5, nonce 03cedd…) failed in container with postCreateCommand … https://172.17.0.8:8443/5640088059827986, which is run 2's server and nonce. Both logs show naming to mcr.microsoft.com/devcontainers/base:ubuntu-features. After: both pass, tagging vsc-ws-25330079-eb42…-features and vsc-ws-2525456359-b1dd…-features. Two concurrent full -run '^TestE2E' suites after the change: both pass. Validation (local) go vet ./internal/cli/, go tool task lint: pass. go tool task test:race: pass with TMPDIR=/dev/shm/…. With the default /tmp, TestOpen* and TestComputeWorkspaceConfigOutsideARepository fail before and after this change, because this machine has a stray empty /tmp/.git. go tool task test:e2e: all 13 pass. go tool task parity:contract: 114 matched. Two read-configuration.features-configuration-local-feature-* cases fail identically without this change, for local environment reasons (the same /tmp/.git, or unnormalized paths when TMPDIR is outside /tmp). PARITY_COMMAND=up task parity:runtime: up.image-with-features-success and up.image-with-git-feature-success matched. The 22 failures don't go through this path; they're /tmp/parity-* workspaces under the stray /tmp/.git plus cleanup timeouts. I'm leaving runtime parity to CI. 🤖 Generated with Claude Code

Open Graph Description: Cause TestE2E_CABundle/container failed when another run of it shared the Docker daemon: up ran a postCreateCommand pointing at the other run's TLS server and nonce. It isn't the workspace ...

X Description: Cause TestE2E_CABundle/container failed when another run of it shared the Docker daemon: up ran a postCreateCommand pointing at the other run's TLS server and nonce. It isn't the wo...

Opengraph URL: https://github.com/spin-stack/devcontainer-cli/pull/72

X: @github

direct link

Domain: github.com

react-profiling0
react-import-mapreact,react-dom,react-dom/client,react-dom/profiling,react-is,react-reconciler,react/compiler-runtime,react/jsx-dev-runtime,react/jsx-runtime,scheduler@d5750093facf
route-pattern/:user_id/:repository/pull/:id/files(.:format)
route-controllerpull_requests
route-actionfiles
fetch-noncev2:3b9db4bb-c818-2389-5e45-46ea606fd755
current-catalog-service-hashae870bc5e265a340912cde392f23dad3671a0a881730ffdadd82f2f57d81641b
request-idA49E:3AEF98:122998:197819:6AF6EA6D
html-safe-nonce06cb7644e7769faf76f65ed4f3da4d85fcb81ea26bf0a563678c04355075656e
visitor-payloadeyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJBNDlFOjNBRUY5ODoxMjI5OTg6MTk3ODE5OjZBRjZFQTZEIiwidmlzaXRvcl9pZCI6IjQ4ODE3NzYyMzI2MzE4MjI5NTgiLCJyZWdpb25fZWRnZSI6ImlhZCIsInJlZ2lvbl9yZW5kZXIiOiJpYWQifQ==
visitor-hmac5631805ee6f242441afb309077cc3355e9e32e733d964d0b8afc4ec65cc3e949
hovercard-subject-tagpull_request:5290205297
github-keyboard-shortcutsrepository,pull-request-list,pull-request-conversation,pull-request-files-changed,copilot
google-site-verificationApib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I
octolytics-urlhttps://collector.github.com/github/collect
analytics-location///pull_requests/show/files
fb:app_id1401488693436528
apple-itunes-appapp-id=1477376905, app-argument=https://github.com/spin-stack/devcontainer-cli/pull/72/files
twitter:imagehttps://avatars.githubusercontent.com/u/161571?s=400&v=4
twitter:cardsummary_large_image
og:imagehttps://avatars.githubusercontent.com/u/161571?s=400&v=4
og:image:altCause TestE2E_CABundle/container failed when another run of it shared the Docker daemon: up ran a postCreateCommand pointing at the other run's TLS server and nonce. It isn't the workspace ...
og:site_nameGitHub
og:typeobject
hostnamegithub.com
expected-hostnamegithub.com
None19e5351f91f68268b5c88c922504b59eeb230085b5d92546247a28dff0c02812
turbo-cache-controlno-preview
diff-viewunified
go-importgithub.com/spin-stack/devcontainer-cli git https://github.com/spin-stack/devcontainer-cli.git
octolytics-dimension-user_id253817182
octolytics-dimension-user_loginspin-stack
octolytics-dimension-repository_id1297553254
octolytics-dimension-repository_nwospin-stack/devcontainer-cli
octolytics-dimension-repository_publictrue
octolytics-dimension-repository_is_forkfalse
octolytics-dimension-repository_network_root_id1297553254
octolytics-dimension-repository_network_root_nwospin-stack/devcontainer-cli
turbo-body-classeslogged-out env-production page-responsive full-width
disable-turbotrue
browser-stats-urlhttps://api.github.com/_private/browser/stats
browser-errors-urlhttps://api.github.com/_private/browser/errors
release25a4eb53c5e867cec09489ddfc8dc9916f51d01e
ui-targetfull
theme-color#1e2327
color-schemelight dark

Links:

Skip to contenthttps://github.com/spin-stack/devcontainer-cli/pull/72/files#start-of-content
https://github.com/
Sign inhttps://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Fspin-stack%2Fdevcontainer-cli%2Fpull%2F72%2Ffiles
GitHubRepository hosting, code review, and collaborationhttps://github.com/platform
CopilotAI coding agent for tasks, projects, and automated workhttps://github.com/features/copilot
ActionsCI/CD and automationhttps://github.com/features/actions
Code QualityQuality analysis, fixes, and enforcementhttps://github.com/features/code-quality
CodespacesCloud development environmentshttps://github.com/features/codespaces
Code SecurityVulnerability detection and remediationhttps://github.com/security/advanced-security/code-security
Secret ProtectionSecret scanning and leak preventionhttps://github.com/security/advanced-security/secret-protection
All Featureshttps://github.com/features
Documentationhttps://docs.github.com/en
Traininghttps://learn.github.com/skills
Certificationshttps://learn.github.com/credentials
Build with Copilothttps://github.com/features/ai
Customize Copilothttps://docs.github.com/en/copilot/how-tos/copilot-on-github/customize-copilot/customize-copilot-overview
Integrationshttps://github.com/marketplace
Trending reposhttps://github.com/trending
GitHub Sponsorshttps://github.com/open-source/sponsors
Developer articleshttps://github.com/resources/articles
ChangelogYour source for the latest features, improvements, and fixes across GitHub products, all in one place.https://github.blog/changelog/
Enterpriseshttps://github.com/enterprise
Teamhttps://github.com/team
Startupshttps://github.com/enterprise/startups
Nonprofitshttps://github.com/solutions/industry/nonprofits
Healthcarehttps://github.com/solutions/industry/healthcare
Financial serviceshttps://github.com/solutions/industry/financial-services
Manufacturinghttps://github.com/solutions/industry/manufacturing
Governmenthttps://github.com/solutions/industry/government
See all industrieshttps://github.com/solutions/industry
Why GitHubhttps://github.com/why-github
Customer Storieshttps://github.com/customer-stories
Business insightshttps://github.com/solutions/executive-insights
Trust Centerhttps://github.com/trust-center
GitHub Advanced SecurityEnterprise-grade code securityhttps://github.com/security/advanced-security
Copilot for businessEnterprise-grade AI featureshttps://github.com/features/copilot/copilot-business
Premium SupportEnterprise-grade 24/7 supporthttps://github.com/enterprise/premium-support
Documentationhttps://docs.github.com/en
Resource centerhttps://github.com/resources
Bloghttps://github.blog/
Events & webinarshttps://github.com/resources/events
Community Forumhttps://github.com/orgs/community/discussions
Customer Storieshttps://github.com/customer-stories
Integrationshttps://github.com/marketplace
Customer supporthttps://help.github.com/
Traininghttps://learn.github.com/skills
GitHub Statushttps://www.githubstatus.com/
Abouthttps://github.com/about
Partnershttps://github.com/partners
Changeloghttps://github.blog/changelog/
GitHub UniverseThe event for developers, by developers — talks, workshops, and what’s next for GitHub.https://githubuniverse.com/
Pricinghttps://github.com/pricing
Sign inhttps://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Fspin-stack%2Fdevcontainer-cli%2Fpull%2F72%2Ffiles
Sign uphttps://github.com/signup?ref_cta=Sign+up&ref_loc=header+logged+out&ref_page=%2F%3Cuser-name%3E%2F%3Crepo-name%3E%2Fpull_requests%2Fshow%2Ffiles&source=header-repo&source_repo=spin-stack%2Fdevcontainer-cli
Reloadhttps://github.com/spin-stack/devcontainer-cli/pull/72/files
Reloadhttps://github.com/spin-stack/devcontainer-cli/pull/72/files
Reloadhttps://github.com/spin-stack/devcontainer-cli/pull/72/files
spin-stackhttps://github.com/spin-stack
devcontainer-clihttps://github.com/spin-stack/devcontainer-cli
Codehttps://github.com/spin-stack/devcontainer-cli
Issueshttps://github.com/spin-stack/devcontainer-cli/issues
Pull requests3 (3)https://github.com/spin-stack/devcontainer-cli/pulls
Actionshttps://github.com/spin-stack/devcontainer-cli/actions
Security and qualityhttps://github.com/spin-stack/devcontainer-cli/security
Insightshttps://github.com/spin-stack/devcontainer-cli/pulse
Sign up for GitHub https://github.com/signup?return_to=%2Fspin-stack%2Fdevcontainer-cli%2Fissues%2Fnew%2Fchoose
terms of servicehttps://docs.github.com/terms
privacy statementhttps://docs.github.com/privacy
Sign inhttps://github.com/login?return_to=%2Fspin-stack%2Fdevcontainer-cli%2Fissues%2Fnew%2Fchoose
aledbfhttps://github.com/aledbf
mainhttps://github.com/spin-stack/devcontainer-cli/tree/main
cabundle-e2e-isolationhttps://github.com/spin-stack/devcontainer-cli/tree/cabundle-e2e-isolation
Conversation 0 https://github.com/spin-stack/devcontainer-cli/pull/72
Commits 2 https://github.com/spin-stack/devcontainer-cli/pull/72/commits
Checks 13 https://github.com/spin-stack/devcontainer-cli/pull/72/checks
Files changed https://github.com/spin-stack/devcontainer-cli/pull/72/files
Please reload this pagehttps://github.com/spin-stack/devcontainer-cli/pull/72/files
fix(cli): tag an image's Features build per workspace in up https://github.com/spin-stack/devcontainer-cli/pull/72/files#top
Show all changes 2 commits https://github.com/spin-stack/devcontainer-cli/pull/72/files
34e6f3f fix(cli): tag an image's Features build per workspace in up aledbf Nov 13, 2026 https://github.com/spin-stack/devcontainer-cli/pull/72/commits/34e6f3f0f664e785fb70a864880d54226e086b16
038f8a4 test(cli): keep concurrent e2e runs off each other's Docker objects aledbf Nov 13, 2026 https://github.com/spin-stack/devcontainer-cli/pull/72/commits/038f8a4975692295847f46ceca9f4645028e542f
Clear filters https://github.com/spin-stack/devcontainer-cli/pull/72/files
Please reload this pagehttps://github.com/spin-stack/devcontainer-cli/pull/72/files
Please reload this pagehttps://github.com/spin-stack/devcontainer-cli/pull/72/files
migration.md https://github.com/spin-stack/devcontainer-cli/pull/72/files#diff-758ba107a728fccfdf0d098b2c06ded59127dd53ea287d630f72fb51040bc72d
dockerfile_build_held_test.go https://github.com/spin-stack/devcontainer-cli/pull/72/files#diff-0b5d75be38ebed01bf6db6ca5f304fb821bc7e3c106a79a38c543d4f97c21f3c
e2e_fixes_test.go https://github.com/spin-stack/devcontainer-cli/pull/72/files#diff-ee2cab93540339c54525749f8c4683273d436945aab65b75f9f64ae8ed806827
e2e_test.go https://github.com/spin-stack/devcontainer-cli/pull/72/files#diff-5113f7bf52ccd95cb27d0ff25ecee7fa79418904a4220ba3aae22e434bbef8c9
up.go https://github.com/spin-stack/devcontainer-cli/pull/72/files#diff-e4159340a020b2901eae16cf8957d0bea9af63523ad9754862feb45a400e2190
docs/migration.mdhttps://github.com/spin-stack/devcontainer-cli/pull/72/files#diff-758ba107a728fccfdf0d098b2c06ded59127dd53ea287d630f72fb51040bc72d
View file https://github.com/spin-stack/devcontainer-cli/blob/038f8a4975692295847f46ceca9f4645028e542f/docs/migration.md
Open in desktop https://desktop.github.com
https://github.co/hiddenchars
https://github.com/spin-stack/devcontainer-cli/pull/72/{{ revealButtonHref }}
https://github.com/spin-stack/devcontainer-cli/pull/72/files#diff-758ba107a728fccfdf0d098b2c06ded59127dd53ea287d630f72fb51040bc72d
https://github.com/spin-stack/devcontainer-cli/pull/72/files#diff-758ba107a728fccfdf0d098b2c06ded59127dd53ea287d630f72fb51040bc72d
internal/cli/dockerfile_build_held_test.gohttps://github.com/spin-stack/devcontainer-cli/pull/72/files#diff-0b5d75be38ebed01bf6db6ca5f304fb821bc7e3c106a79a38c543d4f97c21f3c
View file https://github.com/spin-stack/devcontainer-cli/blob/038f8a4975692295847f46ceca9f4645028e542f/internal/cli/dockerfile_build_held_test.go
Open in desktop https://desktop.github.com
https://github.co/hiddenchars
https://github.com/spin-stack/devcontainer-cli/pull/72/{{ revealButtonHref }}
https://github.com/spin-stack/devcontainer-cli/pull/72/files#diff-0b5d75be38ebed01bf6db6ca5f304fb821bc7e3c106a79a38c543d4f97c21f3c
https://github.com/spin-stack/devcontainer-cli/pull/72/files#diff-0b5d75be38ebed01bf6db6ca5f304fb821bc7e3c106a79a38c543d4f97c21f3c
internal/cli/e2e_fixes_test.gohttps://github.com/spin-stack/devcontainer-cli/pull/72/files#diff-ee2cab93540339c54525749f8c4683273d436945aab65b75f9f64ae8ed806827
View file https://github.com/spin-stack/devcontainer-cli/blob/038f8a4975692295847f46ceca9f4645028e542f/internal/cli/e2e_fixes_test.go
Open in desktop https://desktop.github.com
https://github.co/hiddenchars
https://github.com/spin-stack/devcontainer-cli/pull/72/{{ revealButtonHref }}
https://github.com/spin-stack/devcontainer-cli/pull/72/files#diff-ee2cab93540339c54525749f8c4683273d436945aab65b75f9f64ae8ed806827
https://github.com/spin-stack/devcontainer-cli/pull/72/files#diff-ee2cab93540339c54525749f8c4683273d436945aab65b75f9f64ae8ed806827
https://github.com/spin-stack/devcontainer-cli/pull/72/files#diff-ee2cab93540339c54525749f8c4683273d436945aab65b75f9f64ae8ed806827
https://github.com/spin-stack/devcontainer-cli/pull/72/files#diff-ee2cab93540339c54525749f8c4683273d436945aab65b75f9f64ae8ed806827
https://github.com/spin-stack/devcontainer-cli/pull/72/files#diff-ee2cab93540339c54525749f8c4683273d436945aab65b75f9f64ae8ed806827
internal/cli/e2e_test.gohttps://github.com/spin-stack/devcontainer-cli/pull/72/files#diff-5113f7bf52ccd95cb27d0ff25ecee7fa79418904a4220ba3aae22e434bbef8c9
View file https://github.com/spin-stack/devcontainer-cli/blob/038f8a4975692295847f46ceca9f4645028e542f/internal/cli/e2e_test.go
Open in desktop https://desktop.github.com
https://github.co/hiddenchars
https://github.com/spin-stack/devcontainer-cli/pull/72/{{ revealButtonHref }}
https://github.com/spin-stack/devcontainer-cli/pull/72/files#diff-5113f7bf52ccd95cb27d0ff25ecee7fa79418904a4220ba3aae22e434bbef8c9
https://github.com/spin-stack/devcontainer-cli/pull/72/files#diff-5113f7bf52ccd95cb27d0ff25ecee7fa79418904a4220ba3aae22e434bbef8c9
https://github.com/spin-stack/devcontainer-cli/pull/72/files#diff-5113f7bf52ccd95cb27d0ff25ecee7fa79418904a4220ba3aae22e434bbef8c9
https://github.com/spin-stack/devcontainer-cli/pull/72/files#diff-5113f7bf52ccd95cb27d0ff25ecee7fa79418904a4220ba3aae22e434bbef8c9
https://github.com/spin-stack/devcontainer-cli/pull/72/files#diff-5113f7bf52ccd95cb27d0ff25ecee7fa79418904a4220ba3aae22e434bbef8c9
internal/cli/up.gohttps://github.com/spin-stack/devcontainer-cli/pull/72/files#diff-e4159340a020b2901eae16cf8957d0bea9af63523ad9754862feb45a400e2190
View file https://github.com/spin-stack/devcontainer-cli/blob/038f8a4975692295847f46ceca9f4645028e542f/internal/cli/up.go
Open in desktop https://desktop.github.com
https://github.co/hiddenchars
https://github.com/spin-stack/devcontainer-cli/pull/72/{{ revealButtonHref }}
https://github.com/spin-stack/devcontainer-cli/pull/72/files#diff-e4159340a020b2901eae16cf8957d0bea9af63523ad9754862feb45a400e2190
https://github.com/spin-stack/devcontainer-cli/pull/72/files#diff-e4159340a020b2901eae16cf8957d0bea9af63523ad9754862feb45a400e2190
https://github.com/spin-stack/devcontainer-cli/pull/72/files#diff-e4159340a020b2901eae16cf8957d0bea9af63523ad9754862feb45a400e2190
Please reload this pagehttps://github.com/spin-stack/devcontainer-cli/pull/72/files
https://github.com
Termshttps://docs.github.com/site-policy/github-terms/github-terms-of-service
Privacyhttps://docs.github.com/site-policy/privacy-policies/github-privacy-statement
Securityhttps://github.com/security
Statushttps://www.githubstatus.com/
Communityhttps://github.community/
Docshttps://docs.github.com/
Contacthttps://support.github.com?tags=dotcom-footer

Viewport: width=device-width


URLs of crawlers that visited me.