-
Notifications
You must be signed in to change notification settings - Fork 63
feat: add virtual workstation setup scripts for Linux and Windows #271
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
crowecawcaw
merged 29 commits into
aws-deadline:mainline
from
crowecawcaw:virtual-workstation-sample
Aug 3, 2026
+1,273
−0
Merged
Changes from 14 commits
Commits
Show all changes
29 commits
Select commit
Hold shift + click to select a range
cf26a86
feat: add virtual workstation setup scripts for Linux and Windows
crowecawcaw feb3ca1
docs: clarify create-profile support status and monitor ID format
crowecawcaw 65a751e
fix: correct Windows script failures found testing on Windows Server …
crowecawcaw f782c27
fix: address review findings on correctness, verification, and reuse
crowecawcaw 0d36380
refactor: simplify to a worked example rather than a flexible tool
crowecawcaw bd2a37d
fix: correct two Windows regressions from the simplification
crowecawcaw 2c4d5d5
refactor: target Debian-family only and install OpenSSL 1.1 again
crowecawcaw 07597dd
fix: pass a non-empty monitor ID placeholder, not an empty one
crowecawcaw 3f1d74a
fix: reject images without the monitor's webkit dependency, verify li…
crowecawcaw 8738702
docs: record what end-to-end testing showed the README was missing
crowecawcaw e6de40c
fix: address review findings on silent failures and DCC portability
crowecawcaw 3d4f602
fix: name the missing libraries when Blender cannot start
crowecawcaw 295426a
docs: drop advice to add a repository that does not exist
crowecawcaw 6067a62
docs: verify the README's factual claims against real artifacts
crowecawcaw 0ad34f7
fix: capture Blender's version output before narrowing it, on both pl…
crowecawcaw da44eb2
docs: narrow the supported scope to Ubuntu 22.04
crowecawcaw 583e1f5
Merge branch 'mainline' into virtual-workstation-sample
crowecawcaw c764390
fix: refuse an implicitly-resolved root, and repair the ldd diagnostic
crowecawcaw 513325f
fix: insure native calls against 5.1 stderr, and surface reachable me…
crowecawcaw 2b3ae13
docs: state the Windows admin requirement and the required Linux user…
crowecawcaw a00b7fb
ci: run the virtual workstation sample end to end on both platforms
crowecawcaw 18639f1
fix: keep the Blender prefix world-readable, and report what actually…
crowecawcaw 1a11405
fix(ci): the workflow was invalid -- shell: takes no expression
crowecawcaw 8ad3de7
fix(ci): correct the two failures from the first valid run
crowecawcaw 849cfe6
fix: do not wrap the monitor's create-profile in a scriptblock
crowecawcaw ef4dfde
ci: test only the happy path, and trim the comments
crowecawcaw 1be490c
refactor: use the latest download URLs, and simplify to sample scope
crowecawcaw 3251fdb
docs: satisfy the prose linter on the changed READMEs
crowecawcaw 0411693
Merge branch 'mainline' into virtual-workstation-sample
crowecawcaw File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,75 @@ | ||
| # Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. | ||
| """Syntax checks for the standalone scripts under ``utility_scripts/``. | ||
|
|
||
| Unlike a host configuration script, these are not uploaded to the service, so the | ||
| ``scriptBody`` length limit does not apply. What does apply is that they parse: a | ||
| sample that does not is broken for everyone who copies it, and these run as root or | ||
| an administrator, where a syntax error can surface halfway through an install. | ||
|
|
||
| The same reasoning as ``test_host_configuration_scripts.py`` applies to the tools -- | ||
| ``bash`` and ``pwsh`` are required, and a missing one fails rather than skips, | ||
| because a skipped check is indistinguishable from a passing one. | ||
| """ | ||
| from __future__ import annotations | ||
|
|
||
| import os | ||
| import subprocess | ||
| from pathlib import Path | ||
|
|
||
| import pytest | ||
|
|
||
| from conftest import find_utility_scripts, rel, require_tool | ||
|
|
||
| _SCRIPTS = find_utility_scripts() | ||
| _SHELL_SCRIPTS = [s for s in _SCRIPTS if s.suffix == ".sh"] | ||
| _POWERSHELL_SCRIPTS = [s for s in _SCRIPTS if s.suffix == ".ps1"] | ||
|
|
||
|
|
||
| def test_utility_scripts_discovered(): | ||
| assert _SCRIPTS, "no utility scripts were discovered" | ||
|
|
||
|
|
||
| @pytest.mark.parametrize("script", _SCRIPTS, ids=rel) | ||
| def test_script_is_not_empty(script: Path): | ||
| assert script.read_text(encoding="utf-8", errors="replace").strip(), f"{rel(script)} is empty" | ||
|
|
||
|
|
||
| @pytest.mark.parametrize("script", _SHELL_SCRIPTS, ids=rel) | ||
| def test_shell_script_syntax(script: Path): | ||
| """`bash -n` catches syntax errors without executing anything.""" | ||
| bash = require_tool("bash", "install bash (present by default on Linux/macOS)") | ||
| result = subprocess.run( | ||
| [bash, "-n", str(script)], capture_output=True, text=True, timeout=30 | ||
| ) | ||
| assert result.returncode == 0, ( | ||
| f"bash syntax check failed for {rel(script)}:\n{result.stderr}" | ||
| ) | ||
|
|
||
|
|
||
| @pytest.mark.parametrize("script", _POWERSHELL_SCRIPTS, ids=rel) | ||
| def test_powershell_script_syntax(script: Path): | ||
| """Parse each PowerShell script with the PowerShell parser (no execution).""" | ||
| pwsh = require_tool( | ||
| "pwsh", | ||
| "install PowerShell (https://learn.microsoft.com/powershell/); " | ||
| "pre-installed on GitHub-hosted runners", | ||
| ) | ||
| # The script path goes through an environment variable rather than being | ||
| # interpolated into the command, so it cannot be interpreted as PowerShell. | ||
| ps_command = ( | ||
| "$p = $env:PWSH_TARGET_SCRIPT; $errors = $null; " | ||
| "[System.Management.Automation.Language.Parser]::ParseFile(" | ||
| "$p, [ref]$null, [ref]$errors) | Out-Null; " | ||
| "if ($errors) { $errors | ForEach-Object { Write-Output $_.ToString() }; exit 1 } " | ||
| "else { exit 0 }" | ||
| ) | ||
| result = subprocess.run( | ||
| [pwsh, "-NoProfile", "-NonInteractive", "-Command", ps_command], | ||
| capture_output=True, | ||
| text=True, | ||
| timeout=60, | ||
| env={**os.environ, "PWSH_TARGET_SCRIPT": str(script)}, | ||
| ) | ||
| assert result.returncode == 0, ( | ||
| f"PowerShell parse failed for {rel(script)}:\n{result.stdout}\n{result.stderr}" | ||
| ) | ||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.