René's URL Explorer Experiment
Title: fix(features): keep JS property order in metadata, options and compose env by aledbf · Pull Request #75 · spin-stack/devcontainer-cli · GitHub
Open Graph Title: fix(features): keep JS property order in metadata, options and compose env by aledbf · Pull Request #75 · spin-stack/devcontainer-cli
X Title: fix(features): keep JS property order in metadata, options and compose env by aledbf · Pull Request #75 · spin-stack/devcontainer-cli
Description: What TS does
The reference CLI (v0.90.0) writes these objects as JavaScript enumerates them: integer-index keys ascending, then the others in the order each was first set.
devcontainer.metadata label: getDevcontainerMetadata puts the base image's entries in the label as JSON.parse read them from its label, and the config's entry is pick(devContainerConfig.raw, …). So each containerEnv keeps its own declaration order.
read-configuration featuresConfiguration: a Feature's value is the user's options object from devcontainer.json, or the dependsOn options.
features resolve-dependencies: installOrder[].options is features[0].value, the same object.
Compose override (generateFeaturesComposeOverrideContent, dockerCompose.ts): the override writes environment from Object.keys(mergedConfig.containerEnv). That object is Object.assign({}, ...entries.map(e => e.containerEnv)), so a key stays where it first appeared and takes the value of the last entry that sets it.
Before / after
Config: containerEnv: {"ZED":"1","10":"x","ALPHA":"2","2":"y"}; Feature options: {"zz":"1","10":"t","a":"b","2":"s"}; base image label: containerEnv: {"ZB":"1","10":"b","AB":"2","2":"a"}.
Place
Before (Go)
After (= TS)
label containerEnv (base entry)
{"10","2","AB","ZB"}
{"2","10","ZB","AB"}
label containerEnv (config entry)
{"10","2","ALPHA","ZED"}
{"2","10","ZED","ALPHA"}
featuresConfiguration value
{"2","10","a","zz"} (sorted)
{"2","10","zz","a"}
resolve-dependencies options
{"10","2","a","zz"}
{"2","10","zz","a"}
compose override environment (base ZB,10,AB + config ZED,AB,2,ALPHA)
10, 2, AB, ALPHA, ZB, ZED
2, 10, ZB, AB, ZED, ALPHA
How
The change reuses the #68 machinery and adds no second ordering mechanism:
imagemeta.Entry.ContainerEnvOrder is recorded on decode (jsonc.MemberNames). The config entries also set it, from cfg.ContainerEnvOrder (configMetadataEntry) and from the loader's order (configLabelEntry). It survives hostMetadataSubstitution, which round-trips the entries through maps. Entry.MarshalJSON writes containerEnv in features.PropertyOrder.
MergeConfiguration collects MergedConfig.ContainerEnvOrder with features.KeyOrder, which keeps the first position. The compose override iterates over that order.
The new features.JSValue(v, declared) returns toJS output with a map's keys in PropertyOrder. Feature.MarshalJSON uses it for value with ValueOrder, and resolve-dependencies uses it for options.
docs/DIVERGENCES.md: the label bullet now says that containerEnv keeps TS order.
Tests
Each of these fails before the fix.
ts-oracle (internal/imagemeta/testdata/ts-oracle/imagemeta.json, regenerated with task testdata:ts-oracle):
a getDevcontainerMetadataLabel case with per-entry containerEnv orders that include integer-like keys;
a new oracle function mergeConfigurationContainerEnv (Object.entries of the merged containerEnv) with a case where a key keeps its first position.
Unit tests:
TestFeatureMarshalJSONWritesTheValueInPropertyOrder
TestJSValueOrdersAMapsKeys
TestMetadataEntriesKeepTheContainerEnvOrder (configLabelEntry, host substitution, configMetadataEntry)
TestGenerateComposeFeaturesOverrideWritesTheMergedEnvInPropertyOrder (label decode, then merge, then override)
Parity cases (each fails against an origin/main binary and passes now):
contract read-configuration.features-configuration-value-key-order-success (key_order on the Feature's value)
contract features.resolve-dependencies-option-key-order-success (stdout_text, user options and dependsOn options)
runtime build.metadata-label-container-env-order-success (image label)
runtime up.compose-container-env-order-success (override environment, container label, image label)
TestEntryKeyOrdersNameEveryProperty now skips json:"-" fields; ContainerEnvOrder is not a label property.
Checks
go build ./...: pass
go test ./internal/features ./internal/imagemeta ./internal/config: pass. ./internal/cli: pass, except parity contract cases that fail only on this machine because a stray /tmp/.git makes Go put workspaceFolder at /workspaces/tmp. Those are the three read-configuration.features-configuration-* cases below, plus override-config-*, key-order and json-stringify-escapes. They all differ only on workspace.workspaceFolder.
go tool task lint: pass
BASE=origin/main go tool task mutate: after the second commit, 160 refused, 0 survived, 7 did not build. The first commit's CI mutate run found a survivor: deduplicating the merged order in MergeConfiguration was redundant with PropertyOrder. The second commit removes that step.
TMPDIR=/var/tmp/… go tool task test:race: pass, with two exceptions:
TestEntryKeyOrdersNameEveryProperty failed on the new json:"-" field. It is fixed in this PR, and go test -race ./internal/imagemeta passes.
TestMetadataInteropGoRoundTrip failed on docker inspect. Its fixed tag dcc-interop-rw006:test is shared with other agents on this Docker host. It passes when rerun alone.
go tool task testdata:ts-oracle:check: pass
go tool task parity:contract: pass, except the /tmp/.git cases read-configuration.features-configuration-local-feature-{key-order,metadata}-success and the new read-configuration.features-configuration-value-key-order-success. The new case fails for the same workspaceFolder reason and passes when its workspace is outside /tmp. CI has no /tmp/.git.
go tool task spec:compliance: pass
PARITY_COMMAND=build,up runtime parity (run with go test … -timeout 180m, because the task's 60m limit expired on this shared, loaded Docker host): 130 pass, 26 fail. Of the failures:
16 differ only on remoteWorkspaceFolder/workspaceFolder because of the local /tmp/.git (up.dotfiles-local-*, up.workspace-secrets, up.config-file-fspath-*, up.override-config-scheme, up.include-configurations-key-order, up.image-with-parallel-initialize-command, up.container-entrypoint-and-command, up.read-only-workspace-dockerfile).
The other 10 were timeouts or fixed-name compose projects colliding with other agents ("container is marked for removal", "No such container"). All 10 pass when rerun alone: up.compose-dockerfile-with-features-reuse-stopped-container-{with,without}-persisted-overrides, up.compose-with-name{,-custom-yaml,-devcontainer-env}, up.image, up.compose-dockerfile-with-features, up.compose-{dockerfile-without,image-with}-features-omit-config-remote-env-from-metadata, build.no-cache-features, build.cache-to-local.
The new build.metadata-label-container-env-order-success and up.compose-container-env-order-success pass.
go tool task test:e2e: pass
CI on this PR: every check passes, including e2e, parity, parity-runtime (0/1) and mutate.
🤖 Generated with Claude Code
Open Graph Description: What TS does
The reference CLI (v0.90.0) writes these objects as JavaScript enumerates them: integer-index keys ascending, then the others in the order each was first set.
devcontainer.metadata la...
X Description: What TS does
The reference CLI (v0.90.0) writes these objects as JavaScript enumerates them: integer-index keys ascending, then the others in the order each was first set.
devcontainer.metadata la...
Opengraph URL: https://github.com/spin-stack/devcontainer-cli/pull/75
X: @github
direct link
Domain: github.com
| react-profiling | 0 |
| react-import-map | react,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-controller | pull_requests |
| route-action | files |
| fetch-nonce | v2:f8c92cf2-ce4c-e1a4-4fcd-5f789ee85a42 |
| current-catalog-service-hash | ae870bc5e265a340912cde392f23dad3671a0a881730ffdadd82f2f57d81641b |
| request-id | D7A6:2EABB0:12D023:1A9D3D:6AF6EA76 |
| html-safe-nonce | 1ece885b0e7b3ed8b269d76f01b0afd60b14a535fcf9e0e339a6082dbbff2aea |
| visitor-payload | eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJEN0E2OjJFQUJCMDoxMkQwMjM6MUE5RDNEOjZBRjZFQTc2IiwidmlzaXRvcl9pZCI6IjYzNzg5NjE0MjkyNjAwNjk0OTUiLCJyZWdpb25fZWRnZSI6ImlhZCIsInJlZ2lvbl9yZW5kZXIiOiJpYWQifQ== |
| visitor-hmac | 2bdf6f9d7fc1e8e7cf3351b33b2e0f8747175058ff95095f2a78d0e8d601cf80 |
| hovercard-subject-tag | pull_request:5290713704 |
| github-keyboard-shortcuts | repository,pull-request-list,pull-request-conversation,pull-request-files-changed,copilot |
| google-site-verification | Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I |
| octolytics-url | https://collector.github.com/github/collect |
| analytics-location | ///pull_requests/show/files |
| fb:app_id | 1401488693436528 |
| apple-itunes-app | app-id=1477376905, app-argument=https://github.com/spin-stack/devcontainer-cli/pull/75/files |
| twitter:image | https://avatars.githubusercontent.com/u/161571?s=400&v=4 |
| twitter:card | summary_large_image |
| og:image | https://avatars.githubusercontent.com/u/161571?s=400&v=4 |
| og:image:alt | What TS does
The reference CLI (v0.90.0) writes these objects as JavaScript enumerates them: integer-index keys ascending, then the others in the order each was first set.
devcontainer.metadata la... |
| og:site_name | GitHub |
| og:type | object |
| hostname | github.com |
| expected-hostname | github.com |
| None | 19e5351f91f68268b5c88c922504b59eeb230085b5d92546247a28dff0c02812 |
| turbo-cache-control | no-preview |
| diff-view | unified |
| go-import | github.com/spin-stack/devcontainer-cli git https://github.com/spin-stack/devcontainer-cli.git |
| octolytics-dimension-user_id | 253817182 |
| octolytics-dimension-user_login | spin-stack |
| octolytics-dimension-repository_id | 1297553254 |
| octolytics-dimension-repository_nwo | spin-stack/devcontainer-cli |
| octolytics-dimension-repository_public | true |
| octolytics-dimension-repository_is_fork | false |
| octolytics-dimension-repository_network_root_id | 1297553254 |
| octolytics-dimension-repository_network_root_nwo | spin-stack/devcontainer-cli |
| turbo-body-classes | logged-out env-production page-responsive full-width |
| disable-turbo | true |
| browser-stats-url | https://api.github.com/_private/browser/stats |
| browser-errors-url | https://api.github.com/_private/browser/errors |
| release | 25a4eb53c5e867cec09489ddfc8dc9916f51d01e |
| ui-target | full |
| theme-color | #1e2327 |
| color-scheme | light dark |
Links:
| Skip to content | https://github.com/spin-stack/devcontainer-cli/pull/75/files#start-of-content |
| https://github.com/ |
| Sign in | https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Fspin-stack%2Fdevcontainer-cli%2Fpull%2F75%2Ffiles |
| GitHubRepository hosting, code review, and collaboration | https://github.com/platform |
| CopilotAI coding agent for tasks, projects, and automated work | https://github.com/features/copilot |
| ActionsCI/CD and automation | https://github.com/features/actions |
| Code QualityQuality analysis, fixes, and enforcement | https://github.com/features/code-quality |
| CodespacesCloud development environments | https://github.com/features/codespaces |
| Code SecurityVulnerability detection and remediation | https://github.com/security/advanced-security/code-security |
| Secret ProtectionSecret scanning and leak prevention | https://github.com/security/advanced-security/secret-protection |
| All Features | https://github.com/features |
| Documentation | https://docs.github.com/en |
| Training | https://learn.github.com/skills |
| Certifications | https://learn.github.com/credentials |
| Build with Copilot | https://github.com/features/ai |
| Customize Copilot | https://docs.github.com/en/copilot/how-tos/copilot-on-github/customize-copilot/customize-copilot-overview |
| Integrations | https://github.com/marketplace |
| Trending repos | https://github.com/trending |
| GitHub Sponsors | https://github.com/open-source/sponsors |
| Developer articles | https://github.com/resources/articles |
| ChangelogYour source for the latest features, improvements, and fixes across GitHub products, all in one place. | https://github.blog/changelog/ |
| Enterprises | https://github.com/enterprise |
| Team | https://github.com/team |
| Startups | https://github.com/enterprise/startups |
| Nonprofits | https://github.com/solutions/industry/nonprofits |
| Healthcare | https://github.com/solutions/industry/healthcare |
| Financial services | https://github.com/solutions/industry/financial-services |
| Manufacturing | https://github.com/solutions/industry/manufacturing |
| Government | https://github.com/solutions/industry/government |
| See all industries | https://github.com/solutions/industry |
| Why GitHub | https://github.com/why-github |
| Customer Stories | https://github.com/customer-stories |
| Business insights | https://github.com/solutions/executive-insights |
| Trust Center | https://github.com/trust-center |
| GitHub Advanced SecurityEnterprise-grade code security | https://github.com/security/advanced-security |
| Copilot for businessEnterprise-grade AI features | https://github.com/features/copilot/copilot-business |
| Premium SupportEnterprise-grade 24/7 support | https://github.com/enterprise/premium-support |
| Documentation | https://docs.github.com/en |
| Resource center | https://github.com/resources |
| Blog | https://github.blog/ |
| Events & webinars | https://github.com/resources/events |
| Community Forum | https://github.com/orgs/community/discussions |
| Customer Stories | https://github.com/customer-stories |
| Integrations | https://github.com/marketplace |
| Customer support | https://help.github.com/ |
| Training | https://learn.github.com/skills |
| GitHub Status | https://www.githubstatus.com/ |
| About | https://github.com/about |
| Partners | https://github.com/partners |
| Changelog | https://github.blog/changelog/ |
| GitHub UniverseThe event for developers, by developers — talks, workshops, and what’s next for GitHub. | https://githubuniverse.com/ |
| Pricing | https://github.com/pricing |
| Sign in | https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Fspin-stack%2Fdevcontainer-cli%2Fpull%2F75%2Ffiles |
| Sign up | https://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 |
| Reload | https://github.com/spin-stack/devcontainer-cli/pull/75/files |
| Reload | https://github.com/spin-stack/devcontainer-cli/pull/75/files |
| Reload | https://github.com/spin-stack/devcontainer-cli/pull/75/files |
| spin-stack | https://github.com/spin-stack |
| devcontainer-cli | https://github.com/spin-stack/devcontainer-cli |
| Code | https://github.com/spin-stack/devcontainer-cli |
| Issues | https://github.com/spin-stack/devcontainer-cli/issues |
| Pull requests3 (3) | https://github.com/spin-stack/devcontainer-cli/pulls |
| Actions | https://github.com/spin-stack/devcontainer-cli/actions |
| Security and quality | https://github.com/spin-stack/devcontainer-cli/security |
| Insights | https://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 service | https://docs.github.com/terms |
| privacy statement | https://docs.github.com/privacy |
| Sign in | https://github.com/login?return_to=%2Fspin-stack%2Fdevcontainer-cli%2Fissues%2Fnew%2Fchoose |
| aledbf | https://github.com/aledbf |
| main | https://github.com/spin-stack/devcontainer-cli/tree/main |
| sorted-keys-to-js-order | https://github.com/spin-stack/devcontainer-cli/tree/sorted-keys-to-js-order |
|
Conversation
0
| https://github.com/spin-stack/devcontainer-cli/pull/75 |
|
Commits
2
| https://github.com/spin-stack/devcontainer-cli/pull/75/commits |
|
Checks
13
| https://github.com/spin-stack/devcontainer-cli/pull/75/checks |
|
Files changed
| https://github.com/spin-stack/devcontainer-cli/pull/75/files |
| Please reload this page | https://github.com/spin-stack/devcontainer-cli/pull/75/files |
|
fix(features): keep JS property order in metadata, options and compose env
| https://github.com/spin-stack/devcontainer-cli/pull/75/files#top |
|
Show all changes
2 commits
| https://github.com/spin-stack/devcontainer-cli/pull/75/files |
|
b707e94
fix(features): keep JS property order in metadata, options and compos…
aledbf Nov 13, 2026
| https://github.com/spin-stack/devcontainer-cli/pull/75/commits/b707e940f7d05acbf8924fcde97ff8783fb9f606 |
|
f2eda73
refactor(imagemeta): leave the merged containerEnv order to PropertyO…
aledbf Nov 13, 2026
| https://github.com/spin-stack/devcontainer-cli/pull/75/commits/f2eda735982df186384cb166694fece8b52b3f4e |
|
Clear filters
| https://github.com/spin-stack/devcontainer-cli/pull/75/files |
| Please reload this page | https://github.com/spin-stack/devcontainer-cli/pull/75/files |
| Please reload this page | https://github.com/spin-stack/devcontainer-cli/pull/75/files |
|
DIVERGENCES.md
| https://github.com/spin-stack/devcontainer-cli/pull/75/files#diff-bfb44e0d8e054a7f0ba0b5f0e563b3721feb1274535a93974cda8294990b640d |
|
parity-matrix.yaml
| https://github.com/spin-stack/devcontainer-cli/pull/75/files#diff-dd6a00d02f71b8af40e9134f99072205175e8014a85550c5a476d653587e7d3e |
|
build.go
| https://github.com/spin-stack/devcontainer-cli/pull/75/files#diff-e5c5aee1b6ec3a6aeb2eb897d526ceadcb3d11b32b0beb145e3f33e5c7a11dd0 |
|
compose_override.go
| https://github.com/spin-stack/devcontainer-cli/pull/75/files#diff-b1fe7cdf2a24c1e322c928b2e3b6987ca675ce6ee514a458ef3f88be0b0ba3da |
|
compose_override_test.go
| https://github.com/spin-stack/devcontainer-cli/pull/75/files#diff-d864bc2d3834089385fc8ed554191fd14e43a5e1a68453d16b7a7db9ebdff96e |
|
features_resolve_deps.go
| https://github.com/spin-stack/devcontainer-cli/pull/75/files#diff-b2977a5fe5e783bf1c39669f0d00865c3dbb474ee5903589d090011e8c92e220 |
|
metadata_label.go
| https://github.com/spin-stack/devcontainer-cli/pull/75/files#diff-6d3784c17b99fb9397c8494b9eb41a3ea6665ae5ef10f5a606dbb4e5c024d731 |
|
metadata_label_test.go
| https://github.com/spin-stack/devcontainer-cli/pull/75/files#diff-962cded70d97c5778b872f325df50f0a748a0fbeb6fe908880d5db9ba367e6fe |
|
read_configuration.go
| https://github.com/spin-stack/devcontainer-cli/pull/75/files#diff-f2f569e7daee617737f15f7ab2227fa86789237ab01cf3a38b53cfdfde5f5555 |
|
up.go
| https://github.com/spin-stack/devcontainer-cli/pull/75/files#diff-e4159340a020b2901eae16cf8957d0bea9af63523ad9754862feb45a400e2190 |
|
jsobject.go
| https://github.com/spin-stack/devcontainer-cli/pull/75/files#diff-d4c25778a654fc435e7dd843c754f7b1cd5180f164db3b47771df0344fd2dbe4 |
|
jsobject_test.go
| https://github.com/spin-stack/devcontainer-cli/pull/75/files#diff-c04464bd1eefee5626c3e7904a697a1f0a52685027f752291a1f9d7deea1e47d |
|
types.go
| https://github.com/spin-stack/devcontainer-cli/pull/75/files#diff-b8690438462902d3ade7458c8e6ccc5e279259062dc5295dd3f30bda988859c3 |
|
types_order_test.go
| https://github.com/spin-stack/devcontainer-cli/pull/75/files#diff-a07e257c93eb6644363155a174e838894aa6cfe03a4257c4eed5de6f44876195 |
|
merge.go
| https://github.com/spin-stack/devcontainer-cli/pull/75/files#diff-f4f1a26a7d3da3160f14d6ce96246bfc2bfa1edb711240288fde8af64e681ded |
|
metadata.go
| https://github.com/spin-stack/devcontainer-cli/pull/75/files#diff-25acf0a3b57121d2d35e8b89d90b9ac1c4291b8f3209f9d5862f1a675ffe0b47 |
|
metadata_test.go
| https://github.com/spin-stack/devcontainer-cli/pull/75/files#diff-54be0dc27eb836ccbac02930bb9ff14c0bcfa794986060c4c3bfd3d4805b7e0e |
|
reference_oracle_test.go
| https://github.com/spin-stack/devcontainer-cli/pull/75/files#diff-890393d668a0d481f1d999d39e1376f6bb48a66e0123dc7f438e5607f827d43f |
|
imagemeta.json
| https://github.com/spin-stack/devcontainer-cli/pull/75/files#diff-99ff58de9f25c1abd3b7d1b3ee07135ccb4c8543d5a9b8aac6fbcb971a1626fd |
|
oracle.ts
| https://github.com/spin-stack/devcontainer-cli/pull/75/files#diff-2d5bc305815198e4593286fbe7f0840fae6d464138c581b356f2e62bfe791310 |
| docs/DIVERGENCES.md | https://github.com/spin-stack/devcontainer-cli/pull/75/files#diff-bfb44e0d8e054a7f0ba0b5f0e563b3721feb1274535a93974cda8294990b640d |
|
View file
| https://github.com/spin-stack/devcontainer-cli/blob/f2eda735982df186384cb166694fece8b52b3f4e/docs/DIVERGENCES.md |
|
Open in desktop
| https://desktop.github.com |
| https://github.co/hiddenchars |
| https://github.com/spin-stack/devcontainer-cli/pull/75/{{ revealButtonHref }} |
|
| https://github.com/spin-stack/devcontainer-cli/pull/75/files#diff-bfb44e0d8e054a7f0ba0b5f0e563b3721feb1274535a93974cda8294990b640d |
|
| https://github.com/spin-stack/devcontainer-cli/pull/75/files#diff-bfb44e0d8e054a7f0ba0b5f0e563b3721feb1274535a93974cda8294990b640d |
| docs/parity/parity-matrix.yaml | https://github.com/spin-stack/devcontainer-cli/pull/75/files#diff-dd6a00d02f71b8af40e9134f99072205175e8014a85550c5a476d653587e7d3e |
|
View file
| https://github.com/spin-stack/devcontainer-cli/blob/f2eda735982df186384cb166694fece8b52b3f4e/docs/parity/parity-matrix.yaml |
|
Open in desktop
| https://desktop.github.com |
| https://github.co/hiddenchars |
| https://github.com/spin-stack/devcontainer-cli/pull/75/{{ revealButtonHref }} |
|
| https://github.com/spin-stack/devcontainer-cli/pull/75/files#diff-dd6a00d02f71b8af40e9134f99072205175e8014a85550c5a476d653587e7d3e |
|
| https://github.com/spin-stack/devcontainer-cli/pull/75/files#diff-dd6a00d02f71b8af40e9134f99072205175e8014a85550c5a476d653587e7d3e |
|
| https://github.com/spin-stack/devcontainer-cli/pull/75/files#diff-dd6a00d02f71b8af40e9134f99072205175e8014a85550c5a476d653587e7d3e |
|
| https://github.com/spin-stack/devcontainer-cli/pull/75/files#diff-dd6a00d02f71b8af40e9134f99072205175e8014a85550c5a476d653587e7d3e |
|
| https://github.com/spin-stack/devcontainer-cli/pull/75/files#diff-dd6a00d02f71b8af40e9134f99072205175e8014a85550c5a476d653587e7d3e |
|
| https://github.com/spin-stack/devcontainer-cli/pull/75/files#diff-dd6a00d02f71b8af40e9134f99072205175e8014a85550c5a476d653587e7d3e |
|
| https://github.com/spin-stack/devcontainer-cli/pull/75/files#diff-dd6a00d02f71b8af40e9134f99072205175e8014a85550c5a476d653587e7d3e |
| internal/cli/build.go | https://github.com/spin-stack/devcontainer-cli/pull/75/files#diff-e5c5aee1b6ec3a6aeb2eb897d526ceadcb3d11b32b0beb145e3f33e5c7a11dd0 |
|
View file
| https://github.com/spin-stack/devcontainer-cli/blob/f2eda735982df186384cb166694fece8b52b3f4e/internal/cli/build.go |
|
Open in desktop
| https://desktop.github.com |
| https://github.co/hiddenchars |
| https://github.com/spin-stack/devcontainer-cli/pull/75/{{ revealButtonHref }} |
|
| https://github.com/spin-stack/devcontainer-cli/pull/75/files#diff-e5c5aee1b6ec3a6aeb2eb897d526ceadcb3d11b32b0beb145e3f33e5c7a11dd0 |
|
| https://github.com/spin-stack/devcontainer-cli/pull/75/files#diff-e5c5aee1b6ec3a6aeb2eb897d526ceadcb3d11b32b0beb145e3f33e5c7a11dd0 |
| internal/cli/compose_override.go | https://github.com/spin-stack/devcontainer-cli/pull/75/files#diff-b1fe7cdf2a24c1e322c928b2e3b6987ca675ce6ee514a458ef3f88be0b0ba3da |
|
View file
| https://github.com/spin-stack/devcontainer-cli/blob/f2eda735982df186384cb166694fece8b52b3f4e/internal/cli/compose_override.go |
|
Open in desktop
| https://desktop.github.com |
| https://github.co/hiddenchars |
| https://github.com/spin-stack/devcontainer-cli/pull/75/{{ revealButtonHref }} |
|
| https://github.com/spin-stack/devcontainer-cli/pull/75/files#diff-b1fe7cdf2a24c1e322c928b2e3b6987ca675ce6ee514a458ef3f88be0b0ba3da |
|
| https://github.com/spin-stack/devcontainer-cli/pull/75/files#diff-b1fe7cdf2a24c1e322c928b2e3b6987ca675ce6ee514a458ef3f88be0b0ba3da |
|
| https://github.com/spin-stack/devcontainer-cli/pull/75/files#diff-b1fe7cdf2a24c1e322c928b2e3b6987ca675ce6ee514a458ef3f88be0b0ba3da |
|
| https://github.com/spin-stack/devcontainer-cli/pull/75/files#diff-b1fe7cdf2a24c1e322c928b2e3b6987ca675ce6ee514a458ef3f88be0b0ba3da |
| internal/cli/compose_override_test.go | https://github.com/spin-stack/devcontainer-cli/pull/75/files#diff-d864bc2d3834089385fc8ed554191fd14e43a5e1a68453d16b7a7db9ebdff96e |
|
View file
| https://github.com/spin-stack/devcontainer-cli/blob/f2eda735982df186384cb166694fece8b52b3f4e/internal/cli/compose_override_test.go |
|
Open in desktop
| https://desktop.github.com |
| https://github.co/hiddenchars |
| https://github.com/spin-stack/devcontainer-cli/pull/75/{{ revealButtonHref }} |
|
| https://github.com/spin-stack/devcontainer-cli/pull/75/files#diff-d864bc2d3834089385fc8ed554191fd14e43a5e1a68453d16b7a7db9ebdff96e |
| internal/cli/features_resolve_deps.go | https://github.com/spin-stack/devcontainer-cli/pull/75/files#diff-b2977a5fe5e783bf1c39669f0d00865c3dbb474ee5903589d090011e8c92e220 |
|
View file
| https://github.com/spin-stack/devcontainer-cli/blob/f2eda735982df186384cb166694fece8b52b3f4e/internal/cli/features_resolve_deps.go |
|
Open in desktop
| https://desktop.github.com |
| https://github.co/hiddenchars |
| https://github.com/spin-stack/devcontainer-cli/pull/75/{{ revealButtonHref }} |
|
| https://github.com/spin-stack/devcontainer-cli/pull/75/files#diff-b2977a5fe5e783bf1c39669f0d00865c3dbb474ee5903589d090011e8c92e220 |
|
| https://github.com/spin-stack/devcontainer-cli/pull/75/files#diff-b2977a5fe5e783bf1c39669f0d00865c3dbb474ee5903589d090011e8c92e220 |
| internal/cli/metadata_label.go | https://github.com/spin-stack/devcontainer-cli/pull/75/files#diff-6d3784c17b99fb9397c8494b9eb41a3ea6665ae5ef10f5a606dbb4e5c024d731 |
|
View file
| https://github.com/spin-stack/devcontainer-cli/blob/f2eda735982df186384cb166694fece8b52b3f4e/internal/cli/metadata_label.go |
|
Open in desktop
| https://desktop.github.com |
| https://github.co/hiddenchars |
| https://github.com/spin-stack/devcontainer-cli/pull/75/{{ revealButtonHref }} |
|
| https://github.com/spin-stack/devcontainer-cli/pull/75/files#diff-6d3784c17b99fb9397c8494b9eb41a3ea6665ae5ef10f5a606dbb4e5c024d731 |
|
| https://github.com/spin-stack/devcontainer-cli/pull/75/files#diff-6d3784c17b99fb9397c8494b9eb41a3ea6665ae5ef10f5a606dbb4e5c024d731 |
|
| https://github.com/spin-stack/devcontainer-cli/pull/75/files#diff-6d3784c17b99fb9397c8494b9eb41a3ea6665ae5ef10f5a606dbb4e5c024d731 |
|
| https://github.com/spin-stack/devcontainer-cli/pull/75/files#diff-6d3784c17b99fb9397c8494b9eb41a3ea6665ae5ef10f5a606dbb4e5c024d731 |
|
| https://github.com/spin-stack/devcontainer-cli/pull/75/files#diff-6d3784c17b99fb9397c8494b9eb41a3ea6665ae5ef10f5a606dbb4e5c024d731 |
| internal/cli/metadata_label_test.go | https://github.com/spin-stack/devcontainer-cli/pull/75/files#diff-962cded70d97c5778b872f325df50f0a748a0fbeb6fe908880d5db9ba367e6fe |
|
View file
| https://github.com/spin-stack/devcontainer-cli/blob/f2eda735982df186384cb166694fece8b52b3f4e/internal/cli/metadata_label_test.go |
|
Open in desktop
| https://desktop.github.com |
| https://github.co/hiddenchars |
| https://github.com/spin-stack/devcontainer-cli/pull/75/{{ revealButtonHref }} |
|
| https://github.com/spin-stack/devcontainer-cli/pull/75/files#diff-962cded70d97c5778b872f325df50f0a748a0fbeb6fe908880d5db9ba367e6fe |
|
| https://github.com/spin-stack/devcontainer-cli/pull/75/files#diff-962cded70d97c5778b872f325df50f0a748a0fbeb6fe908880d5db9ba367e6fe |
|
| https://github.com/spin-stack/devcontainer-cli/pull/75/files#diff-962cded70d97c5778b872f325df50f0a748a0fbeb6fe908880d5db9ba367e6fe |
|
| https://github.com/spin-stack/devcontainer-cli/pull/75/files#diff-962cded70d97c5778b872f325df50f0a748a0fbeb6fe908880d5db9ba367e6fe |
| internal/cli/read_configuration.go | https://github.com/spin-stack/devcontainer-cli/pull/75/files#diff-f2f569e7daee617737f15f7ab2227fa86789237ab01cf3a38b53cfdfde5f5555 |
|
View file
| https://github.com/spin-stack/devcontainer-cli/blob/f2eda735982df186384cb166694fece8b52b3f4e/internal/cli/read_configuration.go |
|
Open in desktop
| https://desktop.github.com |
| https://github.co/hiddenchars |
| https://github.com/spin-stack/devcontainer-cli/pull/75/{{ revealButtonHref }} |
|
| https://github.com/spin-stack/devcontainer-cli/pull/75/files#diff-f2f569e7daee617737f15f7ab2227fa86789237ab01cf3a38b53cfdfde5f5555 |
|
| https://github.com/spin-stack/devcontainer-cli/pull/75/files#diff-f2f569e7daee617737f15f7ab2227fa86789237ab01cf3a38b53cfdfde5f5555 |
| internal/cli/up.go | https://github.com/spin-stack/devcontainer-cli/pull/75/files#diff-e4159340a020b2901eae16cf8957d0bea9af63523ad9754862feb45a400e2190 |
|
View file
| https://github.com/spin-stack/devcontainer-cli/blob/f2eda735982df186384cb166694fece8b52b3f4e/internal/cli/up.go |
|
Open in desktop
| https://desktop.github.com |
| https://github.co/hiddenchars |
| https://github.com/spin-stack/devcontainer-cli/pull/75/{{ revealButtonHref }} |
|
| https://github.com/spin-stack/devcontainer-cli/pull/75/files#diff-e4159340a020b2901eae16cf8957d0bea9af63523ad9754862feb45a400e2190 |
|
| https://github.com/spin-stack/devcontainer-cli/pull/75/files#diff-e4159340a020b2901eae16cf8957d0bea9af63523ad9754862feb45a400e2190 |
| internal/features/jsobject.go | https://github.com/spin-stack/devcontainer-cli/pull/75/files#diff-d4c25778a654fc435e7dd843c754f7b1cd5180f164db3b47771df0344fd2dbe4 |
|
View file
| https://github.com/spin-stack/devcontainer-cli/blob/f2eda735982df186384cb166694fece8b52b3f4e/internal/features/jsobject.go |
|
Open in desktop
| https://desktop.github.com |
| https://github.co/hiddenchars |
| https://github.com/spin-stack/devcontainer-cli/pull/75/{{ revealButtonHref }} |
|
| https://github.com/spin-stack/devcontainer-cli/pull/75/files#diff-d4c25778a654fc435e7dd843c754f7b1cd5180f164db3b47771df0344fd2dbe4 |
|
| https://github.com/spin-stack/devcontainer-cli/pull/75/files#diff-d4c25778a654fc435e7dd843c754f7b1cd5180f164db3b47771df0344fd2dbe4 |
| internal/features/jsobject_test.go | https://github.com/spin-stack/devcontainer-cli/pull/75/files#diff-c04464bd1eefee5626c3e7904a697a1f0a52685027f752291a1f9d7deea1e47d |
|
View file
| https://github.com/spin-stack/devcontainer-cli/blob/f2eda735982df186384cb166694fece8b52b3f4e/internal/features/jsobject_test.go |
|
Open in desktop
| https://desktop.github.com |
| https://github.co/hiddenchars |
| https://github.com/spin-stack/devcontainer-cli/pull/75/{{ revealButtonHref }} |
|
| https://github.com/spin-stack/devcontainer-cli/pull/75/files#diff-c04464bd1eefee5626c3e7904a697a1f0a52685027f752291a1f9d7deea1e47d |
| internal/features/types.go | https://github.com/spin-stack/devcontainer-cli/pull/75/files#diff-b8690438462902d3ade7458c8e6ccc5e279259062dc5295dd3f30bda988859c3 |
|
View file
| https://github.com/spin-stack/devcontainer-cli/blob/f2eda735982df186384cb166694fece8b52b3f4e/internal/features/types.go |
|
Open in desktop
| https://desktop.github.com |
| https://github.co/hiddenchars |
| https://github.com/spin-stack/devcontainer-cli/pull/75/{{ revealButtonHref }} |
|
| https://github.com/spin-stack/devcontainer-cli/pull/75/files#diff-b8690438462902d3ade7458c8e6ccc5e279259062dc5295dd3f30bda988859c3 |
|
| https://github.com/spin-stack/devcontainer-cli/pull/75/files#diff-b8690438462902d3ade7458c8e6ccc5e279259062dc5295dd3f30bda988859c3 |
| internal/features/types_order_test.go | https://github.com/spin-stack/devcontainer-cli/pull/75/files#diff-a07e257c93eb6644363155a174e838894aa6cfe03a4257c4eed5de6f44876195 |
|
View file
| https://github.com/spin-stack/devcontainer-cli/blob/f2eda735982df186384cb166694fece8b52b3f4e/internal/features/types_order_test.go |
|
Open in desktop
| https://desktop.github.com |
| https://github.co/hiddenchars |
| https://github.com/spin-stack/devcontainer-cli/pull/75/{{ revealButtonHref }} |
|
| https://github.com/spin-stack/devcontainer-cli/pull/75/files#diff-a07e257c93eb6644363155a174e838894aa6cfe03a4257c4eed5de6f44876195 |
| Please reload this page | https://github.com/spin-stack/devcontainer-cli/pull/75/files |
| Please reload this page | https://github.com/spin-stack/devcontainer-cli/pull/75/files |
|
| https://github.com |
| Terms | https://docs.github.com/site-policy/github-terms/github-terms-of-service |
| Privacy | https://docs.github.com/site-policy/privacy-policies/github-privacy-statement |
| Security | https://github.com/security |
| Status | https://www.githubstatus.com/ |
| Community | https://github.community/ |
| Docs | https://docs.github.com/ |
| Contact | https://support.github.com?tags=dotcom-footer |
Viewport: width=device-width
URLs of crawlers that visited me.