Repository navigation
Releases: AutoIDM/pdt
Release list
v0.1.12
Summary
pdt run APP --deployed --followstarts a run and prints its log until the run ends.pdt logs APP --listlists each run log, andpdt storage APP lsshows the number of files and the size of each folder.--openonpdt logs,pdt runs, andpdt storageopens the folder, the log file, or Task Scheduler on Windows, and the console page on AWS, Azure, and Google Cloud, signed in to the right account or tenant.- Each Windows Task Scheduler run writes a success or failure event to the Windows Application log.
- Alerts can go to Microsoft Teams, and console alerts print as one
[alert]line. - On Azure, following the first run after a deploy no longer prints a 404 warning.
- Google Cloud jobs no longer log a 403 warning for each storage call, and
--followprints Google Cloud lines in time order. - Yes/no questions ask again until the answer is y or n, and the verify workflow builds again.
It includes #208, #209, #210, #227, #229, #237, #238, #257, #259, #260 and #261.
Features
- feat: add
--open,logs --list,run --follow, and storage sizes (#257) - feat(alerts): print console alerts as one [alert] sentence (#227)
- feat(alerts): name webhook entries by webhook ID, not a typed channel (#210)
- feat(alerts): add a Microsoft Teams alerts type (#209)
- feat(cli): suggest pdt logs --follow after pdt run --deployed (#237)
Fixes
- fix(gcloud): stop the 403 storage warnings and order live log lines (#260)
- fix(deploy): build an app that installs a local wheel (#261)
- fix(alerts): start setup from pdt.yml, ask before the test, add console (#208)
- fix(logs): follow a new Azure run's live log without a 404 (#229), by @visch
- fix: ask yes/no questions again until the answer is y or n (#238)
Tests
- test(cli): make the
pdt healthorder test independent of thread timing (#259)
CI and release
- chore(release): 0.1.12 (#262)
Full changelog: v0.1.11...v0.1.12
v0.1.11
Summary
- Windows has a per-user installer,
pdt-windows-x64.msi, on the release page. It needs no administrator rights, sets up Python and pdt during the install with a progress bar, addspdtto the PATH, and is signed by AutoIDM. - A deploy skips the image build when nothing in the app folder changed.
pdt destroy --allremoves every app, and--allcommands skip the apps you decline.pdt healthchecks the apps in parallel, and the Azure deploy plan reads its state in parallel.- New
powershell-hello-worldexample and a quick start that uses only commands. - On Windows Task Scheduler, pdt reads config files that start with a BOM, follows run logs live, and checks schedules before the deploy.
- After a failed command, pdt prints a help line that points to autoidm.com/discord.
- The package, winget, and README links point to AutoIDM.
Includes #92, #200, #225, #230, #239, #241, #245, #247, #248, #251 and #253.
Features
- feat(release): build a per-user Windows MSI with WiX from source (#248)
- feat: print a pdt Discord help line after a failed command (#245)
- feat(cli): add pdt destroy --all and skip declined apps in --all (#200)
- feat(examples): add powershell-hello-world and a commands-only quick start (#241), by @visch
Fixes
- fix(windows): reread the log when the task ends during the status check (#254)
- fix(windows): drop the PATH explanation from the plan uv line (#253)
- fix: point the pdt help line at autoidm.com/discord (#251)
- fix(windows): read BOM config, follow logs live, validate schedules (#247)
Performance
- perf(deploy): skip the image build when the build context is unchanged (#239)
- perf(azure): read the deploy plan state in parallel over ARM (#225)
- perf(deploy): check the apps of pdt health in parallel (#230)
CI and release
Full changelog: v0.1.10...v0.1.11
v0.1.10
Summary
pdt deployasks how often an app should run when it has no schedule, and saves the answer in the app'sconfig.yml(creating the file when it is missing), instead of stopping with an error.- After every deploy at a terminal, pdt asks whether to start a run, on every provider.
- A redeploy with no change is much faster: on Azure about 25 s instead of 78 s, and on AWS about 13 s instead of 25 s, because pdt skips job updates and permission checks that already match.
- Code and config changes rebuild the image in seconds, because the app's dependencies install before the app is copied in.
- Tab completion for
pdtis about three times faster. - New
intune-exportexample: a weekly Intune export through IntuneManagement v4, and PowerShell apps now get theirconfig:section asPDT_CONFIG_JSON. - Google Cloud and Azure no longer list and prune old secret versions on a deploy that did not change a secret.
- Release notes now group merged PRs by type under a written summary.
Bumps the version to 0.1.10 in the same four files as the 0.1.9 release (#204): pyproject.toml, uv.lock, the run.py example in README.md, and the usage line in scripts/render_winget_manifests.py. It includes #174, #189, #199, #211, #212, #213, #214, #215, #216 and #221.
🤖 Generated with Claude Code
Features
- feat(cli): make pdt new APP create a hello-world app (#217)
- feat(examples): add a weekly Intune export through IntuneManagement v4 (#189)
- feat(deploy): ask for a schedule and save it when the app has none (#221), by @visch
- feat(deploy): always offer to start a run after an interactive deploy (#212)
Fixes
- fix(aws): set up an SSO profile and sign in without the AWS CLI (#188)
- fix: clean up old secret versions only after a secret write (#211)
Performance
- perf(deploy): keep list prices and exchange rates for 72 hours (#233)
- perf(azure): make cheaper role checks and skip repeated az calls (#216)
- perf(azure): skip the job update when the Container Apps job matches (#213)
- perf(aws): reuse a passed permission check for 24 hours (#215)
- perf(deploy): install app dependencies before copying the app (#214)
- perf(cli): skip the command imports during tab completion (#199)
CI and release
- chore(release): 0.1.10 (#226), by @visch
- ci(release): group release notes by type under a written summary (#174)
Full changelog: v0.1.9...v0.1.10
v0.1.9
What's Changed
- fix(logs): print one heading and no wait for an ended run with --follow by @autoidm-jon in #181
- feat(logs): stream running runs live on Google Cloud and AWS by @autoidm-jon in #193
- feat(lifecycle): print lifecycle events for runs, deploys and pauses by @autoidm-jon in #194
- feat(alerts): send alerts to Slack and add pdt alerts setup and test by @autoidm-jon in #197
- fix(aws): install awscrt for aws login profiles where a wheel exists by @autoidm-jon in #202
- chore(release): 0.1.9 by @autoidm-jon in #204
Full Changelog: v0.1.8...v0.1.9
v0.1.8
What's Changed
- fix(aws): retry throttled AWS calls in standard mode by @autoidm-jon in #175
- feat(deploy): Use docker if it's available and if not, build on the cloud. Removes auto-install of docker. Adds a config setting
docker-buildallowingauto,local,cloudoptions. @autoidm-jon in #185 - chore(release): 0.1.8 by @autoidm-jon in #191
Full Changelog: v0.1.7...v0.1.8
v0.1.7
Summary
pdt 0.1.7 builds every cloud image with Docker on your computer, and it now gets Docker ready for you.
- Docker setup. A cloud deploy starts an installed Docker that is not running. When no Docker engine is installed, pdt lists the steps, asks once (
--yesskips the question), and installs one: Colima on macOS, Rancher Desktop on Windows x64, or Docker Engine on Linux. - Local image builds (breaking). AWS, Azure, and Google Cloud now build the image with local Docker and forward your SSH agent into the build, so an app can install a private git dependency. A cloud deploy now needs Docker on the deploying computer.
- First run after a deploy. When an app has no successful run,
pdt deployoffers to start one and show its log.--runstarts it with no question. - Logs.
pdt logs --followprints lines in the order the job wrote them on every provider, ends soon after the run ends, and reads Azure jobs from their live log stream. Google Cloud logs are no longer cut at 5000 lines. - Dashboard and run control.
pdt guiopens a local dashboard.pdt pause,pdt unpause, andpdt run APP --deployedare new. - Clearer output. pdt says what it found and why before it acts, prints values you can copy in bold, and prints only JSON on stdout with
--json. - PowerShell apps.
pdt runinstalls the modules an app needs before a local run.
Breaking changes
- feat(deploy)!: build every provider's image with local Docker (#66)
Features
- feat(deploy): install and start Docker for the user when it is missing (#162)
- feat(deploy): offer to start the first run and follow its log (#166)
- feat(gui): add
pdt gui, pause and unpause, andpdt run --deployed(#84) - feat(cli): say what pdt found and why before it acts (#151)
- feat(console): bold every value pdt prints (#161)
- feat(deploy): forward the SSH agent into local docker builds (#76)
Fixes
- fix(logs): follow a running job from its live stream and print lines in time order (#167)
- fix(run): install the PowerShell modules an app needs before a local run (#155)
- fix(examples): install the pdt-cli apps extra in the starter and verify apps (#170)
- fix(console): print names and ids plain bold (#165)
- fix(cli): print only JSON on stdout for every --json path (#154)
- fix(completion): never offer file names where pdt expects an app (#150)
- fix(storage): release the state lock when a run fails (#64)
- fix(aws): run jobs in a pdt security group, not the VPC default group (#96)
- fix(console): name a shared-symbol currency only on the cost total line (#145)
Examples
Documentation
- docs: say that a deploy starts or installs Docker (#173)
- docs: match the docs and hints to the current commands (#159)
- docs(agents): a run.py pin does not keep a job on an old pdt (#147)
Tests
- test(completion): check that PowerShell Tab completion writes no error (#172)
- test(completion): check app-name completion in bash and zsh (#157)
Refactoring
- refactor(config): write enabled: through save_app_key (#158)
CI and release
- ci(verify): run on main and by hand, and deploy the commit's own pdt (#141)
- ci(verify): add a script that writes the verify:aws role policy (#100)
- ci(release): generate release notes from merged PR titles (#142)
- chore(release): 0.1.7 (#156)
Full changelog: v0.1.6...v0.1.7
v0.1.6
0.1.5 was tagged but never published to PyPI. This release contains everything since 0.1.4.
Upgrade notes
- A missing env var now stops a run before the app starts. pdt treats each env var that an app reads as required, as if
config.ymllisted it underenv: required:. For a PowerShell app, that is each$env:NAMEread. For a Python app, it is eachos.environ["NAME"]read;os.environ.get("NAME")andos.getenv("NAME")count as optional. A name thatconfig.ymllists keeps its listing.pdt run,pdt validate,pdt deploy,pdt secrets, and the deployed job all check the list, and the error names the variable, the file and line that reads it, and the fix.pdt deployalso sends these variables to the job. (#139) - The first deploy of a project with no region asks for one. pdt suggests a region from this computer's time zone, then from the provider CLI's settings, then a fixed default, and saves your answer to
pdt.yml.--yestakes the suggestion. A run with no terminal and no--yesstops and prints the line to add. (#139) - A deployed job runs the pdt-cli version that its
run.pypins. Apps pinned to 0.1.4 get the job-side fixes below only after you change the pin topdt-cli==0.1.6and deploy again.
New
- Cost estimates show the currency of this computer's regional setting. pdt uses the cloud's own price in that currency, then the cloud's exchange rate, then the ECB daily rate, and otherwise USD with a note. (#139)
pdt logs --followprints a run's lines as they arrive.pdt logssays when a run is still running, or when the cloud log store may not show the last lines yet (up to 5 minutes on AWS, Azure, and Google Cloud). (#139)- A mistyped command, option, or app name gets a "Did you mean" suggestion. (#139)
- pdt prints a line before each slow step, including the first install of the AWS, Azure, or Google Cloud CLI. (#139)
pdt completionprints the line that turns on completion in the current shell, for PowerShell, bash, zsh, and fish. On Windows, it offers to set the PowerShell execution policy so the profile loads. (#139, fixes #133)
Fixes
- A local store folder with a space in its name no longer gets a literal
%20. (#139) - Azure commands run the Azure CLI inside pdt's process. Six calls took 13.96 s before and 1.12 s after, on a Windows test computer. (#139)
- A PowerShell app's image pins the pdt-cli version that deployed it; before, it pinned
0.0.0.dev0, which is not on PyPI, and the build failed. (#136) - Output that a PowerShell module prints when it loads no longer breaks the script scan. (#135)
- The README install steps put
uvandpdton the PATH in the current PowerShell window. (#139)
What's Changed
- Keep a module's load-time output out of the PowerShell scan by @visch in #135
- Pass pdt's version to the provider script by @visch in #136
- fix(windows): fix problems found on Windows by @autoidm-jon in #139
- chore(release): 0.1.6 by @visch in #138
Full Changelog: v0.1.4...v0.1.6
v0.1.5
v0.1.4
Upgrade notes
- Azure: every job gets a new name on its next deploy. The name is
pdt-<app>-<7 hex characters>, with a maximum of 32 characters. The deploy plan showsdelete Container Apps Job <old> (its name is now <new>).destroy,pdt secrets,pdt runs, andpdt logsstill find a job that has the old name. (#80) - Azure: set again each secret that you set with
pdt secrets <app> setin 0.1.3 or earlier. Those versions stored the value under the app name, not under the variable name. (#87)
New
- A folder of
.ps1files with norun.pyis an app. pdt installs PowerShell 7 and the modules that the scripts need, and runs the scripts through a built-in wrapper.run.ps1,run_scripts,continue_on_error, andpdt new APP --from-scriptscontrol it. A cloud image builds from a separate Dockerfile that installs the modules at build time. (#120) pdt -hshows the commands in groups. (#82)- A command that takes an app name uses the current app folder when you leave the name off. (#117)
Fixes
- AWS: pdt starts the pinned AWS CLI from the uv cache with
--offlineafter the first install. A failed request to GitHub no longer stops the command. (#103) deploy --all, and arun.pystarted from the project root, read the.envof each app. (#124)- Off Windows, every
windowsprovider command stops with one error. (#119)