Skip to content

test(conformance): smoke Snap artifacts in Ubuntu VM - #2869

Draft
elezar wants to merge 7 commits into
mainfrom
2055-snap-pr-smoke/ek
Draft

test(conformance): smoke Snap artifacts in Ubuntu VM#2869
elezar wants to merge 7 commits into
mainfrom
2055-snap-pr-smoke/ek

Conversation

@elezar

@elezar elezar commented Aug 21, 2026

Copy link
Copy Markdown
Member

Summary

Add a VM-based Ubuntu Snap conformance smoke test for branch-built artifacts. It exercises the Snap and Docker-Snap lifecycle before a Release Dev publish, while documenting the temporary JWT bootstrap required by the current Snap package.

Related Issue

Related to #2055.

Changes

  • Add reusable single-architecture Snap packaging and package workflows for CI.
  • Provision Ubuntu test guests with snapd and Docker Snap, including Docker API readiness.
  • Install, connect, register, and smoke-test a candidate OpenShell Snap with the conformance CLI.
  • Generate the temporary gateway JWT bundle before Snap installation as an explicit package-bootstrap workaround.
  • Add gateway service and journal diagnostics for Snap interface-connection failures.

Testing

  • mise run pre-commit passes
  • Unit tests added/updated
  • E2E tests added/updated (if applicable) — local Ubuntu ARM64 VM smoke conformance passed with published Release Dev artifacts
  • GitHub Actions Conformance is in progress

Checklist

  • Follows Conventional Commits
  • Commits are signed off (DCO)
  • Architecture documentation updated

@elezar
elezar requested review from a team, derekwaynecarr, mrunalp and sjenning as code owners August 21, 2026 10:26
@elezar elezar added the test:snap Requires Snap packaging and gateway lifecycle smoke coverage label Aug 21, 2026
@elezar

elezar commented Aug 21, 2026

Copy link
Copy Markdown
Member Author

/ok-to-test d96c61a

@elezar
elezar force-pushed the 2055-snap-pr-smoke/ek branch from 7d50815 to 3bbf47e Compare August 21, 2026 14:51
@elezar
elezar force-pushed the 2055-snap-pr-smoke/ek branch 2 times, most recently from a66ebe5 to 3f771b4 Compare August 24, 2026 08:21
@elezar
elezar force-pushed the 2055-snap-pr-smoke/ek branch from 3f771b4 to 4a7c134 Compare August 24, 2026 11:45
@elezar
elezar force-pushed the 2055-snap-pr-smoke/ek branch from 4a7c134 to 4dfef75 Compare August 25, 2026 10:23
@elezar
elezar force-pushed the 2055-snap-pr-smoke/ek branch from 4dfef75 to e68f04a Compare August 25, 2026 13:35
@elezar
elezar force-pushed the 2055-snap-pr-smoke/ek branch from e68f04a to d8d5072 Compare August 25, 2026 13:36
@elezar
elezar force-pushed the 2055-snap-pr-smoke/ek branch from d8d5072 to 8e73cd6 Compare August 25, 2026 13:56
@elezar
elezar force-pushed the 2055-snap-pr-smoke/ek branch from 8e73cd6 to 0843e09 Compare August 25, 2026 14:02

@johntmyers johntmyers left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

gator-agent

PR Review Status

This project-valid Snap CI refactor has one blocking revision-coupling defect in Release Canary. The current-head Branch Checks, Helm Lint, and Snap Smoke are green, but the supported older-branch Release Dev path can fail before testing its artifact.

Action required: keep the executing canary workflow's repository revision checked out when loading the new local action, then push an update.

Blocking findings:

  • GATOR-0843e094-01: Release Canary can load the local smoke action from an artifact-producing revision that predates the action.

Carried findings:

  • None

Non-blocking suggestions:

  • Add test:snap to the opt-in test-label enumeration in CONTRIBUTING.md.
Gator metadata
  • Validation: Maintainer-authored CI/release improvement tied to the Snap gateway lifecycle work in #2055
  • Docs: CI.md and the release-canary skill are updated; CONTRIBUTING.md label discovery has a non-blocking omission
  • Checks: Current-head required checks are green
  • E2E: test:snap is applied and Snap Smoke passed for the current head
  • Head SHA: 0843e09412d63b951104f0562c99891db51df7f4
  • Base SHA: 0fce474c127057164e477111256fd2ceaa866a08
  • Merge base SHA: 0fce474c127057164e477111256fd2ceaa866a08
  • Patch ID: c48874d272e4b1f04374369f6990d77488e1e320
  • Gator payload: 7
  • Review mode: initial
  • Previous reviewed SHA: none
  • Review budget exhausted: no
  • Maintainer decision required: no
  • Next state: gator:in-review

Comment thread .github/workflows/release-canary.yml Outdated
@johntmyers johntmyers added the gator:in-review Gator is reviewing or awaiting PR review feedback label Aug 25, 2026
@elezar
elezar force-pushed the 2055-snap-pr-smoke/ek branch from 0843e09 to 2d6b888 Compare August 26, 2026 12:43

@johntmyers johntmyers left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

gator-agent

Re-check After Author Update

Thanks @elezar. I reviewed the new author-only delta: the Release Canary checkout now stays on the executing workflow revision while the existing run ID continues to select the Snap artifact, so GATOR-0843e094-01 is resolved. I also confirmed the test:snap documentation link was added to CONTRIBUTING.md. No blocking findings remain.

Current-head Branch Checks and the test:snap Branch E2E workflow are running, so Gator is moving to pipeline monitoring.

Blocking findings:

  • None

Carried findings:

  • None
Gator metadata
  • Validation: Maintainer-authored CI/release improvement tied to the Snap gateway lifecycle work in #2055
  • Docs: CI.md, the release-canary skill, and CONTRIBUTING.md cover the new Snap test path
  • Checks: Current-head required checks are queued or running; DCO and Helm Lint are green
  • E2E: test:snap is applied; current-head Branch E2E run 32970119053 is in progress
  • Head SHA: 2d6b888d9bcf2ed43676a22be72dff5bee9c8dbe
  • Base SHA: d3a417e422ba9830bf43402b2f008473be1da2b4
  • Merge base SHA: d3a417e422ba9830bf43402b2f008473be1da2b4
  • Patch ID: b541e60bd66472f2d7e0fda03d36443e4a79a1e5
  • Gator payload: 7
  • Review mode: follow_up
  • Previous reviewed SHA: 0843e09412d63b951104f0562c99891db51df7f4
  • Review budget exhausted: no
  • Maintainer decision required: no
  • Next state: gator:watch-pipeline

@johntmyers johntmyers added gator:watch-pipeline Gator is monitoring PR CI/CD status and removed gator:in-review Gator is reviewing or awaiting PR review feedback gator:watch-pipeline Gator is monitoring PR CI/CD status labels Aug 26, 2026
@johntmyers johntmyers added the gator:approval-needed Gator completed review; maintainer approval needed label Sep 1, 2026
@johntmyers johntmyers added gator:blocked Gator is blocked by process or repository gates and removed gator:approval-needed Gator completed review; maintainer approval needed labels Sep 3, 2026
Base automatically changed from 2055-snap-gateway-lifecycle/ek to main September 3, 2026 08:36
@elezar
elezar force-pushed the 2055-snap-pr-smoke/ek branch from 8df9f30 to 40099d6 Compare September 3, 2026 08:36
@johntmyers

Copy link
Copy Markdown
Collaborator

/ok to test 40099d6

@johntmyers johntmyers left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

gator-agent

Re-check After Author Update

Thanks @elezar. The feedback ledger confirms this head is rebase-equivalent to the previously reviewed patch, so the resolved Release Canary finding remains closed and no repeat code review is needed. No blocking findings remain.

Current-head Branch E2E is running, and Branch Checks and Helm Lint are queued after maintainer runner validation, so Gator is returning to pipeline monitoring.

Blocking findings:

  • None

Carried findings:

  • None
Gator metadata
  • Validation: Maintainer-authored CI/release improvement tied to the Snap gateway lifecycle work in #2055
  • Docs: CI.md, the release-canary skill, and CONTRIBUTING.md cover the Snap test path
  • Checks: Current-head Branch Checks and Helm Lint are queued; Branch E2E is in progress
  • E2E: test:e2e and test:snap are applied; current-head run 33734388410 is in progress
  • Head SHA: 40099d696ad85b55b2e2fd3b1192a3348e3949d0
  • Base SHA: 8d7db254032ef2d0ccb5d39b56a0f18d79eb87af
  • Merge base SHA: 8d7db254032ef2d0ccb5d39b56a0f18d79eb87af
  • Patch ID: 69ccf8ec62538d87736169d546c3b3583188fc01
  • Gator payload: 8
  • Review mode: already_reviewed (rebase-equivalent)
  • Previous reviewed SHA: 8df9f30cd35cb67cf6434a50069b3d253aff5aef
  • Review budget exhausted: yes
  • Maintainer decision required: no
  • Next state: gator:watch-pipeline

@johntmyers johntmyers added gator:watch-pipeline Gator is monitoring PR CI/CD status gator:blocked Gator is blocked by process or repository gates and removed gator:blocked Gator is blocked by process or repository gates gator:watch-pipeline Gator is monitoring PR CI/CD status labels Sep 3, 2026
@copy-pr-bot

copy-pr-bot Bot commented Sep 3, 2026

Copy link
Copy Markdown

Auto-sync is disabled for draft pull requests in this repository. Workflows must be run manually.

Contributors can view more details about this message here.

@johntmyers

Copy link
Copy Markdown
Collaborator

gator-agent

Blocked

Gator is blocked because this pull request is currently a draft. The previous gator:approval-needed state no longer applies after the new head was pushed and the PR returned to draft.

Next action: @elezar, mark the pull request ready for review when this revision is ready. Gator will then run the required current-head critical-only review and dispatch or monitor the authorized tests.

Gator metadata
  • Head SHA: 5058e5eb137387d28f03c07097e80cf047729140
  • Gator payload: 8
  • Previous intended state: gator:approval-needed
  • Next state: gator:blocked
  • Blocked reason: draft_pr

Comment thread .github/workflows/conformance.yml Fixed
@johntmyers

Copy link
Copy Markdown
Collaborator

gator-agent

Blocked

Gator remains blocked on current head 2dd8c84da053f6730b59ad47076e2ba050ce8399 because this pull request is still a draft and it currently has merge conflicts with main. The current-head Conformance workflow is already running, so no additional test dispatch is needed in this cycle.

Next action: @elezar, update the branch to resolve the merge conflicts and mark the pull request ready for review when this revision is ready. Gator will then run the required critical-only review and continue monitoring the authorized tests.

Gator metadata
  • Head SHA: 2dd8c84da053f6730b59ad47076e2ba050ce8399
  • Gator payload: 8
  • Previous intended state: gator:approval-needed
  • Review mode after blockers clear: critical_only
  • Checks: Current-head Conformance run 33763698850 is in progress; DCO is green
  • E2E: test:e2e and test:snap remain applied; no new E2E Label Help instruction exists for this head
  • Next state: gator:blocked
  • Blocked reason: draft_pr_and_merge_conflict

@johntmyers

Copy link
Copy Markdown
Collaborator

gator-agent

Blocked

Gator remains blocked on current head 5d25e59544e7114ad98182a44790228003c01298 because this pull request is still a draft and it has merge conflicts with main. Only DCO and the required-gate publisher have completed for this head; the required Branch Checks, Helm Lint, and E2E/Snap workflows have not been dispatched.

Next action: @elezar, update the branch to resolve the merge conflicts and mark the pull request ready for review when this revision is ready. Gator will then run the required current-head critical-only review and dispatch or monitor the authorized tests.

Gator metadata
  • Head SHA: 5d25e59544e7114ad98182a44790228003c01298
  • Gator payload: 8
  • Previous intended state: gator:approval-needed
  • Review mode after blockers clear: critical_only
  • Checks: DCO and the required-gate publisher are green; required current-head workflows are not dispatched
  • E2E: test:e2e and test:snap remain applied; no current-head E2E Label Help instruction exists
  • Next state: gator:blocked
  • Blocked reason: draft_pr_and_merge_conflict

@johntmyers

Copy link
Copy Markdown
Collaborator

gator-agent

Blocked

Gator remains blocked on current head baf0bf8e3a546c110a05edc36c7c6e9bf8c81534 because this pull request is still a draft and it has merge conflicts with main. The current-head Conformance run 33777852421 also failed in the Ubuntu Snap smoke job at “Install Snap and run smoke conformance”; the required Branch Checks, Helm Lint, and E2E gates have not been dispatched.

Next action: @elezar, update the branch to resolve the merge conflicts, investigate the failing Ubuntu Snap smoke job, and mark the pull request ready for review when this revision is ready. Gator will then run the required current-head critical-only review and dispatch or monitor the authorized tests.

Gator metadata
  • Head SHA: baf0bf8e3a546c110a05edc36c7c6e9bf8c81534
  • Base SHA: 17171cd9337a2181d4bb5a9e711e1f2ad5f69388
  • Merge base SHA: 487b26574dee15240f3ab2a348697571657eb121
  • Patch ID: bd1e7351b73f01b1532e7472a55c7a4cbcba870f
  • Gator payload: 8
  • Previous intended state: gator:approval-needed
  • Review mode after blockers clear: critical_only
  • Review budget exhausted: yes
  • Maintainer decision required: no
  • Checks: DCO is green; Conformance run 33777852421 failed; Branch Checks, Helm Lint, and required E2E gates are pending without current-head runs
  • E2E: test:e2e and test:snap remain applied; no current-head E2E Label Help instruction exists
  • Next state: gator:blocked
  • Blocked reason: draft_pr_merge_conflict_and_failed_conformance

@johntmyers

Copy link
Copy Markdown
Collaborator

gator-agent

Blocked

Gator remains blocked on current head 36fc3f3b29bd68c1d5fdec5d00aca1325d285fec because this pull request is still a draft and it has merge conflicts with main. The current-head Conformance run 33785013859 is queued, so no additional test dispatch is needed in this cycle.

Next action: @elezar, update the branch to resolve the merge conflicts and mark the pull request ready for review when this revision is ready. Gator will then run the required critical-only review and continue monitoring the authorized tests.

Gator metadata
  • Head SHA: 36fc3f3b29bd68c1d5fdec5d00aca1325d285fec
  • Base SHA: 17171cd9337a2181d4bb5a9e711e1f2ad5f69388
  • Merge base SHA: 487b26574dee15240f3ab2a348697571657eb121
  • Patch ID: 25c273be89ea5a5b68c922d0752442e5d467c373
  • Gator payload: 8
  • Previous intended state: gator:approval-needed
  • Review mode after blockers clear: critical_only
  • Review budget exhausted: yes
  • Maintainer decision required: no
  • Checks: DCO and the required-gate publisher are green; current-head Conformance run 33785013859 is queued
  • E2E: test:e2e and test:snap remain applied; no current-head E2E Label Help instruction exists
  • Next state: gator:blocked
  • Blocked reason: draft_pr_and_merge_conflict

@johntmyers

Copy link
Copy Markdown
Collaborator

gator-agent

Blocked

Thanks @elezar, this pull request is now ready for review, so the draft blocker is cleared. Gator remains blocked on current head 5606d06fd4905c36fa9ee4852940258963f02ec0 because GitHub still reports merge conflicts with main. The current-head Branch Checks and E2E workflows are already running, so no additional test dispatch is needed in this cycle.

Next action: @elezar, update the branch to resolve the merge conflicts. Gator will then run the required critical-only review and continue monitoring the authorized tests.

Gator metadata
  • Head SHA: 5606d06fd4905c36fa9ee4852940258963f02ec0
  • Base SHA: 17171cd9337a2181d4bb5a9e711e1f2ad5f69388
  • Merge base SHA: 487b26574dee15240f3ab2a348697571657eb121
  • Patch ID: f7b54866285e9eb6b9ffd5a5478b106061c2c4ac
  • Gator payload: 8
  • Previous intended state: gator:approval-needed
  • Review mode after blocker clears: critical_only
  • Review budget exhausted: yes
  • Maintainer decision required: no
  • Checks: Current-head Branch Checks run 33798869332 and E2E run 33798870457 are in progress; Helm Lint and DCO are green
  • E2E: test:e2e and test:snap remain applied; no current-head E2E Label Help instruction requires a rerun
  • Next state: gator:blocked
  • Blocked reason: merge_conflict

@olivercalder olivercalder 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.

Hi there, I'm part of the snapd team and have done a bit of work on the openshell snap in the past. Thanks so much for working on this! I had parked #2250 until the build/package/test tooling had migrated to bazel, but that work has since been dropped. I was hoping to improve testing of the openshell snap before picking up #2250 again, since it will enable the snap by default on supported systems.

This PR seems to be doing exactly that! So thanks.

One note: the openshell snap already has a snap store assertion which allows it to auto-connect its openshell:docker interface plug to any docker interface slot, including the system :docker slot provided by snapd. Thus, the openshell snap should be compatible with either a traditional Docker daemon install or the docker snap. Additionally, the docker snap should behave just like any other Docker daemon would, so it should also be possible for the openshell snap to talk to it even it has connected to the system :docker slot instead. But we want to test this.

Can we extend this smoke test to test the openshell snap with all three configurations:

  • docker snap with direct connection between openshell and docker snaps, so sudo snap connect openshell:docker docker:docker-daemon with the docker snap is already installed
  • docker snap with system :docker plug, so sudo snap connect openshell:docker :docker if the docker snap is already installed
  • system Docker daemon, which will be auto-connected if the docker snap is not present, otherwise we can manually connect to via sudo snap connect openshell:docker

Somewhat amusingly, if the docker snap is installed, then there are two viable slot candidates for auto-connection of the openshell:docker plug (docker:docker-daemon and the system :docker slot), so the auto-connection doesn't occur when openshell is installed. So in this case one must manually connect to either the system docker slot (sudo snap connect openshell:docker) or the docker snap's slot (sudo snap connect openshell:docker docker:docker-daemon). Connecting to the system :docker slot should allow openshell to interact with the docker snap as well as traditional Docker daemon installs, while connecting to docker:docker-daemon would only let it talk to the docker snap. The latter is more restrictive, so perhaps desirable. But we could also adjust the store assertions so the openshell snap would always auto-connect to the system :docker slot, and never the docker snap's docker:docker-daemon, for a more streamlined install but a bit less secure.

shell: bash

jobs:
build-snap:

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.

What is the relationship between this job and the build-snap: job in snap-ackage.yml? Seems both do many of the same things

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

This might be a rebase hiccup. The intent was to split this in a similar way as what we do for RPM packages. The one is a callable unit that can be called from various points with different parameters (e.g. architecture).

Comment thread .github/workflows/release-dev.yml Outdated
checkout-ref: ${{ github.sha }}
upload-channel: latest/edge
github-environment: latest/edge
publish: true

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.

I'm probably mistaken, but will this mean that every time build-snap runs, the result will be published to the latest/edge channel? If this workflow runs on PRs and not just main, that would mean arbitrary PR changes would be published to latest/edge. But it also seems like publishing was implicitly true before and now this is adding a way to turn it off, so I may be wrong.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

The release-dev workflow SHOULD only run on main. I flipped the default in the snap-package job to ensure that this is not the case on PRs.

Comment on lines +10 to +18
- name: Connect log-observe interface
become: true
ansible.builtin.command:
cmd: snap connect openshell:log-observe

- name: Connect system-observe interface
become: true
ansible.builtin.command:
cmd: snap connect openshell:system-observe

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.

These should both be autoconnected via a store assertion on the openshell snap, since 25 June, so this shouldn't be necessary. It's idempotent though, so it won't hurt. Existing docs in openshell around this are out of date, unfortunately.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

That's good to know. I was just going by what was being done in the existing "canary" job and trying to replicate that in Ansible. (and have something that's somewhat reproducible). Feel free to make suggestions.

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.

Hmm actually, if you're testing artifacts from the build pipeline with --dangerous which haven't been uploaded to the store, then they probably don't have store assertions, though I'm not sure. And that would also complicate testing with any non-snap docker since connecting to the system :docker slot without a store assertion requires snapd 2.77, which is currently in beta.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

The point is to test the snaps BEFORE publishing them to the store. Happy to iterate on a way to do this.

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.

I'm checking now whether assertions are required. But if so, I think really there are two different things we want to check:

  • Does the openshell snap work when all the connections are in place?
    • That's what this test is for
  • Does the openshell snap get the expected auto-connections when installed?
    • That sounds to me like it should be part of the install.sh test, not here

Edit: indeed, we do need manual connections always when testing a .snap file from outside the store:

ubuntu@clean-slate:~$ ls
openshell_0.0.116_amd64.snap
ubuntu@clean-slate:~$ sudo snap install ./openshell_0.0.116_amd64.snap 
error: cannot find signatures with metadata for snap/component "./openshell_0.0.116_amd64.snap"
ubuntu@clean-slate:~$ sudo snap install ./openshell_0.0.116_amd64.snap --dangerous
2026-09-03T21:33:26Z INFO Waiting for automatic snapd restart...
2026-09-03T21:33:27Z INFO Waiting for automatic snapd restart...
2026-09-03T21:33:28Z INFO Waiting for automatic snapd restart...
2026-09-03T21:33:29Z INFO Waiting for automatic snapd restart...
openshell 0.0.116 installed
ubuntu@clean-slate:~$ snap connections openshell
Interface       Plug                      Slot           Notes
docker          openshell:docker          -              -
home            openshell:home            :home          -
log-observe     openshell:log-observe     -              -
network         openshell:network         :network       -
network-bind    openshell:network-bind    :network-bind  -
system-observe  openshell:system-observe  -              -

So everything here is correct. It's just not required in other places, like install.sh or tests of that. Which is something I should separately update...

Comment thread nix/test-guest/README.md
Comment on lines +74 to +80
| Distro | Docker package | Docker Snap | Rootless Podman | SELinux | Package format |
| --- | --- | --- | --- | --- | --- |
| Ubuntu 24.04 | Yes | Yes | No | No | `.deb` |
| Ubuntu 26.04 | Yes | Yes | Yes | No | `.deb` |
| CentOS Stream 10 | No | No | No | Yes | `.rpm` |
| Fedora 44 | No | No | Yes | Yes | `.rpm` |
| Rocky Linux 9 | Yes | No | No | Yes | `.rpm` |

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.

The docker snap should act like any other docker install, so is there a reason the docker snap is not supported on other systems? All the listed systems are supported by snapd, though it is not pre-installed. Also I would think the docker snap should certainly work fine on 24.04.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

The only reason is "not explicitly tested". Happy to expand the matrix once we have the basics in place.

- name: Connect Docker Snap interface
become: true
ansible.builtin.command:
cmd: snap connect openshell:docker docker:docker-daemon

@olivercalder olivercalder Sep 3, 2026

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.

This is correct and is actually required (I initially thought it wasn't). Here's the reason:

The openshell snap has a store assertion:

type: snap-declaration
revision: 5
snap-id: ltw2m6EZ9UVOiglLDFP4blLwLO92hNhu
snap-name: openshell
plugs:
  docker:
    allow-auto-connection: true

This means that it will auto-connect the docker interface if there's one connection slot candidate. However, since snapd provides an implicit :docker system slot, if the docker snap is installed before installing the openshell snap, then there will be two candidates for the openshell:docker plug to auto-connect to: the snapd-provided :docker slot, and the docker snap's docker:docker-daemon. Because there are two auto-connection candidates, snapd does not auto-connect to either, leaving it up to the user to choose which they'd like to connect. So here, this connection is required.

Because the docker snap acts just like any other system Docker daemon, we could actually connect the openshell:docker plug to the system :docker slot instead of docker:docker-daemon, and everything should still work as expected, regardless of whether Docker is a traditional or snap install. Really, we want to test all three configurations:

  • openshell:docker docker:docker-daemon
  • openshell:docker :docker with docker snap installed
  • openshell:docker :docker without docker snap installed, instead a non-snap Docker daemon

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

I suppose that's the idea behind these VM configs is that we can define the ansible roles (and combinations) to test all of these. Is this something you have time / capacity to look at once the basics are in place?

@olivercalder olivercalder Sep 3, 2026

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.

It's not something I think I should commit to driving, no, as my focus needs to be on $dayjob commitments. I'm not in the weeds enough about how all the workflows are designed in OpenShell to do it quickly/cleanly.

That said, I would expect that it should be fairly simple: add a few parameters, something like docker: (system|snap) and slot: (":docker"|"docker:docker-daemon"), then have three jobs which share almost everything:

  • docker: "system", slot: ":docker"
  • docker: "snap", slot: ":docker"
  • docker: "snap", slot: "docker:docker-daemon"

Then the relevant workflow task(s) which is responsible for installing docker before the test would have:

case "$docker" in
    snap)
        sudo snap install docker
        ;;
    system)
        # <however you install system docker, I'm not sure>
        ;;
    *)
        echo "invalid parameter for docker install type: $docker"
        exit 1
        ;;
esac

And the relevant workflow task(s) which handle setting up the snap connections for the openshell snap would just have:

sudo snap connect openshell:docker "$slot"

rather than hard-coding docker:docker-daemon as is done now.

Apologies, as I don't usually write GitHub-style workflows, I'm used to other systems.

Signed-off-by: Evan Lezar <elezar@nvidia.com>
Signed-off-by: Evan Lezar <elezar@nvidia.com>
Signed-off-by: Evan Lezar <elezar@nvidia.com>
Signed-off-by: Evan Lezar <elezar@nvidia.com>
Signed-off-by: Evan Lezar <elezar@nvidia.com>
Signed-off-by: Evan Lezar <elezar@nvidia.com>
Signed-off-by: Evan Lezar <elezar@nvidia.com>
@github-actions

github-actions Bot commented Sep 4, 2026

Copy link
Copy Markdown

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

gator:blocked Gator is blocked by process or repository gates test:e2e Requires end-to-end coverage test:snap Requires Snap packaging and gateway lifecycle smoke coverage

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants