mirror of
https://github.com/kellymichels/zscripts-token-savers
synced 2026-10-08 07:28:18 +00:00
Compare commits
14 Commits
v1.0.0.0.2
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
| 5406c85837 | |||
| 5bc77f2de1 | |||
| 57edc629c1 | |||
| 73dd27c4f1 | |||
| b26be3cd2a | |||
| 22a7387548 | |||
| 86938d0d80 | |||
| 90f43010c1 | |||
| 1c7d1d639b | |||
| c317b139d6 | |||
| d4cfa980ed | |||
| 05b771e64a | |||
| 193d6d86a1 | |||
| f2e6302d00 |
14
.gitattributes
vendored
14
.gitattributes
vendored
@ -4,8 +4,18 @@
|
|||||||
*.ps1 text eol=crlf
|
*.ps1 text eol=crlf
|
||||||
*.cmd text eol=crlf
|
*.cmd text eol=crlf
|
||||||
|
|
||||||
# The checksum manifest must stay LF: `sha256sum -c` treats a trailing CR as
|
# Every .txt here is either a generated twin or a manifest, and all of them
|
||||||
# part of the filename and reports every entry as missing.
|
# want LF. plaintext_twins.py writes LF and git stores LF, but without this
|
||||||
|
# pin checkout applied core.autocrlf and handed the working tree CRLF - so
|
||||||
|
# every regeneration rewrote the file to LF, `git status` reported a change,
|
||||||
|
# and `git add` normalized it straight back to nothing (#88). Pinning the
|
||||||
|
# checkout makes all three agree.
|
||||||
|
*.txt text eol=lf
|
||||||
|
|
||||||
|
# Kept explicit even though *.txt already covers it: the checksum manifest
|
||||||
|
# must stay LF because `sha256sum -c` treats a trailing CR as part of the
|
||||||
|
# filename and reports every entry as missing. That is a broken verification,
|
||||||
|
# not a cosmetic diff, and it should not depend on a glob above it.
|
||||||
CHECKSUMS.txt text eol=lf
|
CHECKSUMS.txt text eol=lf
|
||||||
releases/*.sha256 text eol=lf
|
releases/*.sha256 text eol=lf
|
||||||
|
|
||||||
|
|||||||
51
.github/workflows/rerun-timed-out.yml
vendored
Normal file
51
.github/workflows/rerun-timed-out.yml
vendored
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
# Re-runs a test run once when one of its jobs ran out of time
|
||||||
|
# (evo.testsuites#25, part 2).
|
||||||
|
#
|
||||||
|
# A timeout usually means a stuck runner or a network stall rather than a
|
||||||
|
# broken test, so the first one gets a second chance. A second timeout stays
|
||||||
|
# red, so a real hang still reaches a person. A run cancelled by hand, or by a
|
||||||
|
# newer push, is left alone: only a job whose own record says it "exceeded the
|
||||||
|
# maximum execution time" counts.
|
||||||
|
#
|
||||||
|
# Costs nothing on an ordinary run. The job's `if` is false for every run that
|
||||||
|
# ended any other way, and a job skipped by its `if` never starts a runner.
|
||||||
|
name: re-run a timed-out test run
|
||||||
|
|
||||||
|
on:
|
||||||
|
workflow_run:
|
||||||
|
workflows: ["tests"]
|
||||||
|
types: [completed]
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
actions: write
|
||||||
|
checks: read
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
rerun:
|
||||||
|
if: >-
|
||||||
|
github.event.workflow_run.run_attempt == 1 &&
|
||||||
|
(github.event.workflow_run.conclusion == 'cancelled' ||
|
||||||
|
github.event.workflow_run.conclusion == 'timed_out')
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
timeout-minutes: 2
|
||||||
|
steps:
|
||||||
|
- name: Re-run it if a job ran out of time
|
||||||
|
env:
|
||||||
|
GH_TOKEN: ${{ github.token }}
|
||||||
|
REPO: ${{ github.repository }}
|
||||||
|
RUN: ${{ github.event.workflow_run.id }}
|
||||||
|
run: |
|
||||||
|
timed_out=""
|
||||||
|
for job in $(gh api "repos/$REPO/actions/runs/$RUN/jobs" \
|
||||||
|
--jq '.jobs[] | select(.conclusion == "cancelled" or .conclusion == "timed_out") | .id'); do
|
||||||
|
if gh api "repos/$REPO/check-runs/$job/annotations" --jq '.[].message' \
|
||||||
|
| grep -q "exceeded the maximum execution time"; then
|
||||||
|
timed_out="$job"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
if [ -n "$timed_out" ]; then
|
||||||
|
echo "Job $timed_out ran out of time. Re-running run $RUN once."
|
||||||
|
gh api -X POST "repos/$REPO/actions/runs/$RUN/rerun"
|
||||||
|
else
|
||||||
|
echo "Run $RUN was cancelled, but not by a timeout. Leaving it."
|
||||||
|
fi
|
||||||
32
CHANGELOG.md
32
CHANGELOG.md
@ -1,15 +1,43 @@
|
|||||||
<!--
|
<!--
|
||||||
Evomedia.net Token Savers — https://github.com/evomedia-net/evo.zscripts
|
evomedia.net Token Savers — https://github.com/evomedia-net/evo.zscripts
|
||||||
Created by Kelly Michels · dev@evomedia.net
|
Created by Kelly Michels · dev@evomedia.net
|
||||||
Licensed under the MIT License. See LICENSE.
|
Licensed under the MIT License. See LICENSE.
|
||||||
-->
|
-->
|
||||||
|
|
||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
Notable changes to the Evomedia.net Token Savers.
|
Notable changes to the evomedia.net Token Savers.
|
||||||
|
|
||||||
## Unreleased
|
## Unreleased
|
||||||
|
|
||||||
|
## v1.0.0.0.28 - 2026-09-22
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
|
||||||
|
- **`zec2` and `zec2online` comments now say what they mean without
|
||||||
|
naming private detail.** The container-side version read is described
|
||||||
|
by what it is - an endpoint that is not public on every project - rather
|
||||||
|
than by a product's own wording, and `zec2` records why it needed its
|
||||||
|
own ssh: the read referenced three variables the script never defined,
|
||||||
|
and because it sits inside a try/catch the failure was silent and looked
|
||||||
|
exactly like a service that could not be reached.
|
||||||
|
|
||||||
|
## v1.0.0.0.26 - 2026-09-14
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
- **`zdeploy` on a docker stack built from source shipped nothing after the
|
||||||
|
first deploy.** The docker kind ran `docker compose pull` and then
|
||||||
|
`docker compose up -d`, which is right for a stack of published images and
|
||||||
|
wrong for one built from a `Dockerfile` in the tree: there is nothing to
|
||||||
|
pull, and `up -d` builds only when the image is *missing*. So the first
|
||||||
|
deploy worked and every one after it uploaded the new code, started the old
|
||||||
|
image, and reported success — worse than an error, because the deploy is
|
||||||
|
green and the container is healthy. A project now opts into building with
|
||||||
|
`"deploy": { "build": true }`, which runs `docker compose build --pull` so
|
||||||
|
the base image is refreshed at the same time. Stacks that pull are
|
||||||
|
unaffected.
|
||||||
|
|
||||||
## v1.0.0.0.25 - 2026-09-12
|
## v1.0.0.0.25 - 2026-09-12
|
||||||
|
|
||||||
### Added
|
### Added
|
||||||
|
|||||||
@ -1,15 +1,47 @@
|
|||||||
Evomedia.net Token Savers — https://github.com/evomedia-net/evo.zscripts
|
evomedia.net Token Savers — https://github.com/evomedia-net/evo.zscripts
|
||||||
Created by Kelly Michels · dev@evomedia.net
|
Created by Kelly Michels · dev@evomedia.net
|
||||||
Licensed under the MIT License. See LICENSE.
|
Licensed under the MIT License. See LICENSE.
|
||||||
|
|
||||||
Changelog
|
Changelog
|
||||||
=========
|
=========
|
||||||
|
|
||||||
Notable changes to the Evomedia.net Token Savers.
|
Notable changes to the evomedia.net Token Savers.
|
||||||
|
|
||||||
Unreleased
|
Unreleased
|
||||||
----------
|
----------
|
||||||
|
|
||||||
|
v1.0.0.0.28 - 2026-09-22
|
||||||
|
------------------------
|
||||||
|
|
||||||
|
Changed
|
||||||
|
-------
|
||||||
|
|
||||||
|
- **zec2 and zec2online comments now say what they mean without
|
||||||
|
naming private detail.** The container-side version read is described
|
||||||
|
by what it is - an endpoint that is not public on every project - rather
|
||||||
|
than by a product's own wording, and zec2 records why it needed its
|
||||||
|
own ssh: the read referenced three variables the script never defined,
|
||||||
|
and because it sits inside a try/catch the failure was silent and looked
|
||||||
|
exactly like a service that could not be reached.
|
||||||
|
|
||||||
|
v1.0.0.0.26 - 2026-09-14
|
||||||
|
------------------------
|
||||||
|
|
||||||
|
Fixed
|
||||||
|
-----
|
||||||
|
|
||||||
|
- **zdeploy on a docker stack built from source shipped nothing after the
|
||||||
|
first deploy.** The docker kind ran docker compose pull and then
|
||||||
|
docker compose up -d, which is right for a stack of published images and
|
||||||
|
wrong for one built from a Dockerfile in the tree: there is nothing to
|
||||||
|
pull, and up -d builds only when the image is missing. So the first
|
||||||
|
deploy worked and every one after it uploaded the new code, started the old
|
||||||
|
image, and reported success — worse than an error, because the deploy is
|
||||||
|
green and the container is healthy. A project now opts into building with
|
||||||
|
"deploy": { "build": true }, which runs docker compose build --pull so
|
||||||
|
the base image is refreshed at the same time. Stacks that pull are
|
||||||
|
unaffected.
|
||||||
|
|
||||||
v1.0.0.0.25 - 2026-09-12
|
v1.0.0.0.25 - 2026-09-12
|
||||||
------------------------
|
------------------------
|
||||||
|
|
||||||
|
|||||||
@ -1,45 +1,45 @@
|
|||||||
0a087b9152351ecc56bed280bad91f5ea8dfa17e9a3b642db2a7b1c10f018b19 setup_backup_schedule.ps1
|
6e95736007b3906950d95a830705ac1118ebfc11836d2c717d6dd49cb3157966 setup_backup_schedule.ps1
|
||||||
dfce8d0f2329c8095739b6daee38508e23a97a5fef8025be3d1564b86f22a2f0 token-count.ps1
|
d6ab2ddb273a8ca870bd0673cffdd0907f16f4718367b4413a3e34bb1f1769c8 token-count.ps1
|
||||||
bcc55d43671911814d00e9f446e6771ec1c5c7d0bf7ffc060d505c9aa3e674db zbackup.cmd
|
30ccf43c371ae95cecd5b443d9214ac8ea71ec83be94bc15bcf359beefb8dee1 zbackup.cmd
|
||||||
c921ba99c176b8e2cd234e5f81c51259d9e054c1b57561b469ac498ac684c500 zbackup.ps1
|
b3549b346c90a8ae5a05c4c91b7ac370f72467c4cb0d019edcd0ea80b994393e zbackup.ps1
|
||||||
d41abada132a3107db4c631ff50c4508b64c8dbd1989f2252f709d9e6e45ca86 zbackup_and_sync.ps1
|
b6e5e15f8e2b128219c7b8b9db3e9b7804eee60fd6aed43f184210048e518f3c zbackup_and_sync.ps1
|
||||||
dcc50b5f8597a5f0086be56faf3c90e0218343960daa07abaf74e61a7170ffec zbackup_ec2.cmd
|
b407ef5b298cd6fe94af492e9254b4447e34333d22f8c29d3e9d4d2881651cf3 zbackup_ec2.cmd
|
||||||
36ea7a9a78947813c14ef151a304f85348ead0411a6f06e88559fae5380dea48 zbackup_ec2.ps1
|
55df5f2e19e81317b1e33b7b030b252fc4d6f49c0c77229d9e4e86affeb3b8ef zbackup_ec2.ps1
|
||||||
0cd580b2b09f664003bab6754a0e35a29333dfdb7ca1f7dd4820662bd83f1d2d zchecksums.cmd
|
64bc3148b09e422ffe4890339fade2354a31f2c7ba004f2728c29a0a39c32f08 zchecksums.cmd
|
||||||
be392bd3663c1daa4ce659d22b1431c44c1b19fbabd0efaf48502ca8f9f86e56 zchecksums.ps1
|
3e1c573e446238cae494d22d25376f278333dc25fdbc0a5abbdaa9349722b438 zchecksums.ps1
|
||||||
72b1c87a13e7121ce8d8ce835cd69a806b5b7a229261d667d9e656219818b208 zdeploy.cmd
|
049f8e79fc8c3d8d96ae8ccb1155d191e2dbf2753f4d4d73ceca00aa1ab0481b zdeploy.cmd
|
||||||
687239e3d44e8a865dbe00c5405f1656add02f23703bda86de9bfc9172a96e12 zdeploy.ps1
|
d2ead96436507c8efedc3c72045e623137a1f844940c4ff57c9c7ebe67645511 zdeploy.ps1
|
||||||
fb9435852c344d8a0719041d0ca4968f9769243ddf925e424b78920b42de6e0b zec2.cmd
|
30918a9260cb6220d6e2140edcf319fc0fa1e75b7fe36d0efe68b0d10cdde241 zec2.cmd
|
||||||
42990e046d30c392b4434bb38808f10f629ca4c16f4b086affe9ce8dcb3adeb4 zec2.ps1
|
695ec87ea6518933ee64524d369f1d0d5128bf6e54db31f555a888bdddcb9326 zec2.ps1
|
||||||
91448ee9128e8e70fade9dbd8f744cce2d60fad180577ee276fad2a206495cac zec2_rotatekeys.cmd
|
ce3209ed8eaab242286e76aeb11b1249239e2804e3de456a1609cc7caa780b43 zec2_rotatekeys.cmd
|
||||||
cc6cbae0d50768690691c5dd27a67688aa5e1073e3363d4b4e3cc38b236aac32 zec2_rotatekeys.ps1
|
f58277779b5c54814c29dda55ab567960e305fa9ef515b1206076be97f623093 zec2_rotatekeys.ps1
|
||||||
c78509f5a705e1db3efcee310706035f7e6983d4bfe1b4ea22627451a0151a83 zec2online.cmd
|
30ed73711eeddb518e02eb5e1968b7cc1dad51f27ecf42155b515b097487c3f3 zec2online.cmd
|
||||||
d7f67c2aa1fb91fc12e04ebf54506e8b4a00264178b5b128a9eead05df0f8916 zec2online.ps1
|
1e8814928910ff4f3da59478511feb75280ba2e12111840fb47d2c5504741f0f zec2online.ps1
|
||||||
1af45fd810b171593e8e0cc79a1ef8a1eaf546c327ac095e9838aae30b0015ed ZHelpers.ps1
|
4ea81dc9e3cafc514b1e8224e633bf22bd88bfdc6e53545ff88a2a2d33715b4f ZHelpers.ps1
|
||||||
386c4ce64544584cb9fcd2f28099742cc3590fb1afe75bb7ea884a8bca7b6ed3 zkill.cmd
|
d97f9b5c68526c3295796b3042ee86194721eacab56b0efa0f3fdf16c881b0ea zkill.cmd
|
||||||
5f6c0e00dbcc62981252b6b43e3159fc84840f947ed15ca0fdf77b8fa7cece44 zkill.ps1
|
587de0b176788de917e713915ac468e44bf00cf9c9c7d6ea9b88aaec41ad6ea7 zkill.ps1
|
||||||
21a1d371947c10bfe2b86f1a51c6cfc3992b4e084f61097bad851736032d4bdb ZKiller.ps1
|
66556f55688d1f31e890d2b36143d3d0e2f5fcdded562e3d0a9591c02e827cda ZKiller.ps1
|
||||||
6c6a86d9deb0c3c86e5f7a14c9052c8df26da8273bfc9ebcafa81740e2f1b3bf ZKillOnly.ps1
|
2c9e0fa5dabb1544b6600cb60e5f66e89c787f217db246553b830152ab976ec3 ZKillOnly.ps1
|
||||||
f6bcd097dfb51cf8664ef95b43cceff58591bdb15f00c585c72459a21b8f4859 zmerge.ps1
|
479d01a4c962eb1dba2dbfee913c3704048f29581a0a06d068c0fb9145c3a51c zmerge.ps1
|
||||||
0040ece0250d3f562e163e11d7b04533c6dd8d8657bd2d60723414fc0aea267d zpull.cmd
|
dd1cfde33aec53fc0df4a34e45704a59bf48e094fcafcc0ec49e9d13aa442b6f zpull.cmd
|
||||||
8665a87253dc2733626dcbf1e4107c1235dc0b30d3bf97e58ee96c4f36dd139b zpull.ps1
|
9e746ad18b92ee7344061847b38c870f280421cf55d31e36a72a1514772e53a2 zpull.ps1
|
||||||
b550e8cb701b66957a28a4fd2c61bb1f92f91795d0acc292a026db77cc50475f zrelease.cmd
|
4a57e270fc75ae5419bd27cf01b7dd6d8965be8dd58e0c80af985cb7bf27bdc5 zrelease.cmd
|
||||||
77d38d949461ebad15aa81e24df1ac9bf2cca220f743f5540bdadd6249902326 zrelease.ps1
|
a6906e118f13442340cc4e0b14d7523d63e85d2bdb0eff8fd3a7c25567af8962 zrelease.ps1
|
||||||
2b88997d12373a6efce2b130b99eb9f7950751d4a4e685a2d3382f4c1296f1b2 zrepair.cmd
|
58e5b604cc260af7e644412094ff6e3bf799f80f9e52b9a83a044299f7704107 zrepair.cmd
|
||||||
af33bb9748d02da7cf846f2799ff15b70c63ecfbaf70a2f3e369fe3f447feee7 zrepair.ps1
|
186f7b0fb72808466ece328ea1a4e3a97bb2d4bae9f204ff7055e8b7f009614b zrepair.ps1
|
||||||
ae485d9e8beb710b737323b282be6f60105b710c706c6c7869679dba2e19b736 zrestart.cmd
|
d97c9cf55b94c53dba49471d13f5c9870f2f50627ac5732ac4b60222da936244 zrestart.cmd
|
||||||
ed3c4a07d0b19212503bd29f46e9561a9810ad7c5568c22ebc9e90be7d20adbb zrestart.ps1
|
32a8484d356c5f740d7a12f18bf0dd51a0c7da66010f6a6f553d976484315eef zrestart.ps1
|
||||||
32f20168ff66f948cef6ee4d92dff824b8a2814d29cfd61983a8b2aad9db6f22 zrestartd.cmd
|
2ebf37f72323cac3963a4a95d1ae414fecf4da1e1e618147663c6cf94d1ece24 zrestartd.cmd
|
||||||
118931bdbf7db0a2fa74bc991b876ee042147f6f1f44ff27ee650df83d2abb07 zsetup.cmd
|
0a15ad0d341a5efdcd4c14e22e91d4b45f2bf87d0c5608fcf985200f6797bab4 zsetup.cmd
|
||||||
55f9fbfb7dc4486e32cfb4e9a6ab9a67f7f8f53d1344290fe2facbab85c0ad49 zsetup.ps1
|
0d3042c5e44c3edf396005d0177f744c0c29536c25a50743e93a92156aa2a96c zsetup.ps1
|
||||||
182812a4ee405473b3a1a810ac1810fb0dd53367cdc2ea8d5e44d43c96fd5177 zsetup_mail.ps1
|
498ad7f8a7a56b332fede299e7172211ba360e76d9244c6c93f7cceae8a58619 zsetup_mail.ps1
|
||||||
8ebc35b38fa484bd6c5578def3d601aae0f2a8bbb32547cf6c20853789b69719 zstart.cmd
|
46b3782d9b05649bdb1bcbd2a007bf6abc889abee420ac2f6e75530fa45a4694 zstart.cmd
|
||||||
522386c8162b74c96c920b16375aa675e17909e7af79cde860689cef530b6646 zstart.ps1
|
4b50cadf761f285f4fe655b143e04ec6b3565646ee8fb1ed165c234a201802b7 zstart.ps1
|
||||||
c8813ec5aaa5827661dc0f3076fd79f5436bea6d11a4627ee51dd959cf2a198a zstart_docker.cmd
|
2d74dcca3d4f51a28c84fbef5cc134126b61dfcc8ffb35e2d72f9596bf685809 zstart_docker.cmd
|
||||||
72fe6e1c198313dd2ad41934d7744ab04679abcbe2ea66769c5e9be0f50eb7ee zstart_docker.ps1
|
5016654d9ad68e11b85594be5e05318e19c5c6154174f734c43251970bc2086f zstart_docker.ps1
|
||||||
ca67f4a50db47ade6d1c247e12ca446903f1e9c04f454ace7a1c5feef8c5dd5f zstartd.cmd
|
1e1c5990e1dba41a165e797790f73cd33fcee5035eec65dd0d2610ea8b56a023 zstartd.cmd
|
||||||
6b82952690ab9ff74931d842c02e8adfabccbbec0e7add85cc6351bc518c6e70 zstop.ps1
|
a894876ad9fa1bfac6cacfec2a837914debb773e05b975d9b3cdf56589dd8ed2 zstop.ps1
|
||||||
70a071ab58a274919ef85ad29f3cd5b5a88eca34917b3154579335e750d9d686 zsync.cmd
|
2e165d35d9915099b98a14329c9eb2774b2bf2979c937bc3843d95b5b16400e7 zsync.cmd
|
||||||
e9428c5fe7645e7f91420ecbfaf11be1c30a57758f3b48c3419f33ac771ce46a zsync.ps1
|
5d008cc252b978a9f873101139054988dff24562655bdfcd22e781aa5c14029a zsync.ps1
|
||||||
630782520afeff6d63e517cadc65597de044f782be9135a9176eafdf53831848 zversion.cmd
|
d55020eeb926e7190d06cc3de3e4a0d0656e8c73e8a89032c06ffe29c0b661eb zversion.cmd
|
||||||
a5da3320d60fb0eac4b3583fc0cc7ad8c4058a4f2f40a61d731510b91ead4c3e zversion.ps1
|
25de4c34219edb98b583be639b798b27c353e978a81f0480d49ba9d965f70f0b zversion.ps1
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
<!--
|
<!--
|
||||||
Evomedia.net Token Savers — https://github.com/evomedia-net/evo.zscripts
|
evomedia.net Token Savers — https://github.com/evomedia-net/evo.zscripts
|
||||||
Created by Kelly Michels · dev@evomedia.net
|
Created by Kelly Michels · dev@evomedia.net
|
||||||
Licensed under the MIT License. See LICENSE.
|
Licensed under the MIT License. See LICENSE.
|
||||||
-->
|
-->
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
Evomedia.net Token Savers — https://github.com/evomedia-net/evo.zscripts
|
evomedia.net Token Savers — https://github.com/evomedia-net/evo.zscripts
|
||||||
Created by Kelly Michels · dev@evomedia.net
|
Created by Kelly Michels · dev@evomedia.net
|
||||||
Licensed under the MIT License. See LICENSE.
|
Licensed under the MIT License. See LICENSE.
|
||||||
|
|
||||||
|
|||||||
20
README.md
20
README.md
@ -1,5 +1,5 @@
|
|||||||
<!--
|
<!--
|
||||||
Evomedia.net Token Savers — https://github.com/evomedia-net/evo.zscripts
|
evomedia.net Token Savers — https://github.com/evomedia-net/evo.zscripts
|
||||||
Created by Kelly Michels · dev@evomedia.net
|
Created by Kelly Michels · dev@evomedia.net
|
||||||
Licensed under the MIT License. See LICENSE.
|
Licensed under the MIT License. See LICENSE.
|
||||||
-->
|
-->
|
||||||
@ -411,6 +411,24 @@ Verification walks its channels in trust order — docker-network `viaProxy`, th
|
|||||||
|
|
||||||
Each release is packaged as a zip in [`releases/`](releases/) — grab the latest `zscripts-v*.zip`, check it, unzip, done:
|
Each release is packaged as a zip in [`releases/`](releases/) — grab the latest `zscripts-v*.zip`, check it, unzip, done:
|
||||||
|
|
||||||
|
**Windows · PowerShell** — these commands are a PowerShell toolkit, so this is
|
||||||
|
most people's path. `sha256sum` and `unzip` are not Windows commands:
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
$zip = "zscripts-v1.0.0.0.0.zip"
|
||||||
|
(Get-FileHash $zip -Algorithm SHA256).Hash -eq (Get-Content "$zip.sha256").Split()[0] # True = good
|
||||||
|
Expand-Archive $zip -DestinationPath zscripts
|
||||||
|
cd zscripts
|
||||||
|
.\zchecksums.cmd # verify the contents
|
||||||
|
```
|
||||||
|
|
||||||
|
`Get-FileHash` prints the hash in **upper** case and the `.sha256` file holds it
|
||||||
|
in lower — they look different side by side and are not. `-eq` on strings is
|
||||||
|
case-insensitive in PowerShell, so the comparison above is right; trust the
|
||||||
|
`True`, not your eyes.
|
||||||
|
|
||||||
|
**macOS · Linux · Git Bash · WSL**
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
sha256sum -c zscripts-v1.0.0.0.0.zip.sha256 # verify the download
|
sha256sum -c zscripts-v1.0.0.0.0.zip.sha256 # verify the download
|
||||||
unzip zscripts-v1.0.0.0.0.zip -d zscripts # extract
|
unzip zscripts-v1.0.0.0.0.zip -d zscripts # extract
|
||||||
|
|||||||
18
README.txt
18
README.txt
@ -1,4 +1,4 @@
|
|||||||
Evomedia.net Token Savers — https://github.com/evomedia-net/evo.zscripts
|
evomedia.net Token Savers — https://github.com/evomedia-net/evo.zscripts
|
||||||
Created by Kelly Michels · dev@evomedia.net
|
Created by Kelly Michels · dev@evomedia.net
|
||||||
Licensed under the MIT License. See LICENSE.
|
Licensed under the MIT License. See LICENSE.
|
||||||
|
|
||||||
@ -384,6 +384,22 @@ Downloading without cloning
|
|||||||
|
|
||||||
Each release is packaged as a zip in releases/ (releases/) — grab the latest zscripts-v*.zip, check it, unzip, done:
|
Each release is packaged as a zip in releases/ (releases/) — grab the latest zscripts-v*.zip, check it, unzip, done:
|
||||||
|
|
||||||
|
Windows · PowerShell — these commands are a PowerShell toolkit, so this is
|
||||||
|
most people's path. sha256sum and unzip are not Windows commands:
|
||||||
|
|
||||||
|
$zip = "zscripts-v1.0.0.0.0.zip"
|
||||||
|
(Get-FileHash $zip -Algorithm SHA256).Hash -eq (Get-Content "$zip.sha256").Split()[0] # True = good
|
||||||
|
Expand-Archive $zip -DestinationPath zscripts
|
||||||
|
cd zscripts
|
||||||
|
.\zchecksums.cmd # verify the contents
|
||||||
|
|
||||||
|
Get-FileHash prints the hash in upper case and the .sha256 file holds it
|
||||||
|
in lower — they look different side by side and are not. -eq on strings is
|
||||||
|
case-insensitive in PowerShell, so the comparison above is right; trust the
|
||||||
|
True, not your eyes.
|
||||||
|
|
||||||
|
macOS · Linux · Git Bash · WSL
|
||||||
|
|
||||||
sha256sum -c zscripts-v1.0.0.0.0.zip.sha256 # verify the download
|
sha256sum -c zscripts-v1.0.0.0.0.zip.sha256 # verify the download
|
||||||
unzip zscripts-v1.0.0.0.0.zip -d zscripts # extract
|
unzip zscripts-v1.0.0.0.0.zip -d zscripts # extract
|
||||||
cd zscripts && sha256sum -c CHECKSUMS.txt # verify the contents
|
cd zscripts && sha256sum -c CHECKSUMS.txt # verify the contents
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
<!--
|
<!--
|
||||||
Evomedia.net Token Savers — https://github.com/evomedia-net/evo.zscripts
|
evomedia.net Token Savers — https://github.com/evomedia-net/evo.zscripts
|
||||||
Created by Kelly Michels · dev@evomedia.net
|
Created by Kelly Michels · dev@evomedia.net
|
||||||
Licensed under the MIT License. See LICENSE.
|
Licensed under the MIT License. See LICENSE.
|
||||||
-->
|
-->
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
Evomedia.net Token Savers — https://github.com/evomedia-net/evo.zscripts
|
evomedia.net Token Savers — https://github.com/evomedia-net/evo.zscripts
|
||||||
Created by Kelly Michels · dev@evomedia.net
|
Created by Kelly Michels · dev@evomedia.net
|
||||||
Licensed under the MIT License. See LICENSE.
|
Licensed under the MIT License. See LICENSE.
|
||||||
|
|
||||||
|
|||||||
31
ZHelpers.ps1
31
ZHelpers.ps1
@ -1,7 +1,7 @@
|
|||||||
# Evomedia.net Token Savers — https://github.com/evomedia-net/evo.zscripts
|
# evomedia.net Token Savers — https://github.com/evomedia-net/evo.zscripts
|
||||||
# Created by Kelly Michels · dev@evomedia.net
|
# Created by Kelly Michels · dev@evomedia.net
|
||||||
# Licensed under the MIT License. See LICENSE.
|
# Licensed under the MIT License. See LICENSE.
|
||||||
# Version: v1.0.0.0.25
|
# Version: v1.0.0.0.28
|
||||||
|
|
||||||
# ZHelpers.ps1 — shared library dot-sourced by every z script. Not run directly.
|
# ZHelpers.ps1 — shared library dot-sourced by every z script. Not run directly.
|
||||||
|
|
||||||
@ -105,6 +105,33 @@ function Get-ZEdgeProject {
|
|||||||
}
|
}
|
||||||
|
|
||||||
# Remote compose directory for a project: remote.composeDir if set, else remote.path.
|
# Remote compose directory for a project: remote.composeDir if set, else remote.path.
|
||||||
|
# How a docker stack gets its images: built here, or pulled from a registry.
|
||||||
|
#
|
||||||
|
# `docker compose pull` is right for a stack of published images and wrong for
|
||||||
|
# one built from a Dockerfile in the tree - there is nothing to pull. The trap
|
||||||
|
# is what happens next: `docker compose up -d` builds only when the image is
|
||||||
|
# MISSING. So the FIRST deploy of a build-from-source stack works, and every
|
||||||
|
# one after it uploads the new code, starts the old image, and reports success.
|
||||||
|
# That is worse than an error, because nothing looks wrong: the deploy is
|
||||||
|
# green, the container is up, and the change simply is not in it.
|
||||||
|
#
|
||||||
|
# deploy.build opts a project into building instead. --pull refreshes the base
|
||||||
|
# image at the same time, so a rebuild also picks up its security updates
|
||||||
|
# rather than pinning whatever happened to be on the box the first time.
|
||||||
|
function Get-DockerImageStep {
|
||||||
|
param($Proj, [Parameter(Mandatory)][string]$RemotePath)
|
||||||
|
if ($Proj -and $Proj.deploy -and $Proj.deploy.build) {
|
||||||
|
return @{
|
||||||
|
Label = 'docker compose build'
|
||||||
|
Command = "cd $RemotePath && sudo docker compose build --pull"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return @{
|
||||||
|
Label = 'docker compose pull'
|
||||||
|
Command = "cd $RemotePath && sudo docker compose pull"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function Get-RemoteComposeDir {
|
function Get-RemoteComposeDir {
|
||||||
param([Parameter(Mandatory)][string]$Key)
|
param([Parameter(Mandatory)][string]$Key)
|
||||||
$proj = Get-ZProject -Key $Key
|
$proj = Get-ZProject -Key $Key
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
# Evomedia.net Token Savers — https://github.com/evomedia-net/evo.zscripts
|
# evomedia.net Token Savers — https://github.com/evomedia-net/evo.zscripts
|
||||||
# Created by Kelly Michels · dev@evomedia.net
|
# Created by Kelly Michels · dev@evomedia.net
|
||||||
# Licensed under the MIT License. See LICENSE.
|
# Licensed under the MIT License. See LICENSE.
|
||||||
# Version: v1.0.0.0.25
|
# Version: v1.0.0.0.28
|
||||||
|
|
||||||
# ZKillOnly.ps1 — stop local dev server listeners for any project in zconfig.json.
|
# ZKillOnly.ps1 — stop local dev server listeners for any project in zconfig.json.
|
||||||
#
|
#
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
# Evomedia.net Token Savers — https://github.com/evomedia-net/evo.zscripts
|
# evomedia.net Token Savers — https://github.com/evomedia-net/evo.zscripts
|
||||||
# Created by Kelly Michels · dev@evomedia.net
|
# Created by Kelly Michels · dev@evomedia.net
|
||||||
# Licensed under the MIT License. See LICENSE.
|
# Licensed under the MIT License. See LICENSE.
|
||||||
# Version: v1.0.0.0.25
|
# Version: v1.0.0.0.28
|
||||||
|
|
||||||
# ZKiller.ps1 — kill then restart dev servers for any project in zconfig.json.
|
# ZKiller.ps1 — kill then restart dev servers for any project in zconfig.json.
|
||||||
#
|
#
|
||||||
|
|||||||
@ -1,3 +1,3 @@
|
|||||||
{
|
{
|
||||||
"version": "v1.0.0.0.25"
|
"version": "v1.0.0.0.28"
|
||||||
}
|
}
|
||||||
|
|||||||
BIN
releases/zscripts-v1.0.0.0.26.zip
Normal file
BIN
releases/zscripts-v1.0.0.0.26.zip
Normal file
Binary file not shown.
1
releases/zscripts-v1.0.0.0.26.zip.sha256
Normal file
1
releases/zscripts-v1.0.0.0.26.zip.sha256
Normal file
@ -0,0 +1 @@
|
|||||||
|
dfaa85f53e4dd16789ac0f1f8c9d7e506b56c0c068f4c5f8e2c4d1cce7db8d95 zscripts-v1.0.0.0.26.zip
|
||||||
BIN
releases/zscripts-v1.0.0.0.27.zip
Normal file
BIN
releases/zscripts-v1.0.0.0.27.zip
Normal file
Binary file not shown.
1
releases/zscripts-v1.0.0.0.27.zip.sha256
Normal file
1
releases/zscripts-v1.0.0.0.27.zip.sha256
Normal file
@ -0,0 +1 @@
|
|||||||
|
f5b940344ffd832032b0c62e65e77f94bc2de294e690c9fd68362deb99d21e82 zscripts-v1.0.0.0.27.zip
|
||||||
BIN
releases/zscripts-v1.0.0.0.28.zip
Normal file
BIN
releases/zscripts-v1.0.0.0.28.zip
Normal file
Binary file not shown.
1
releases/zscripts-v1.0.0.0.28.zip.sha256
Normal file
1
releases/zscripts-v1.0.0.0.28.zip.sha256
Normal file
@ -0,0 +1 @@
|
|||||||
|
5eca5198ba500bb0e1ceb1e5000cfb405d5fb5024fa500daa8f64f9c012c1291 zscripts-v1.0.0.0.28.zip
|
||||||
@ -1,4 +1,4 @@
|
|||||||
# Evomedia.net Token Savers — https://github.com/evomedia-net/evo.zscripts
|
# evomedia.net Token Savers — https://github.com/evomedia-net/evo.zscripts
|
||||||
# Created by Kelly Michels · dev@evomedia.net
|
# Created by Kelly Michels · dev@evomedia.net
|
||||||
# Licensed under the MIT License. See LICENSE.
|
# Licensed under the MIT License. See LICENSE.
|
||||||
|
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
# Evomedia.net Token Savers — https://github.com/evomedia-net/evo.zscripts
|
# evomedia.net Token Savers — https://github.com/evomedia-net/evo.zscripts
|
||||||
# Created by Kelly Michels · dev@evomedia.net
|
# Created by Kelly Michels · dev@evomedia.net
|
||||||
# Licensed under the MIT License. See LICENSE.
|
# Licensed under the MIT License. See LICENSE.
|
||||||
# Version: v1.0.0.0.25
|
# Version: v1.0.0.0.28
|
||||||
|
|
||||||
# setup_backup_schedule.ps1 — create a scheduled task for daily backups + OneDrive sync
|
# setup_backup_schedule.ps1 — create a scheduled task for daily backups + OneDrive sync
|
||||||
#
|
#
|
||||||
|
|||||||
108
site/index.html
Normal file
108
site/index.html
Normal file
@ -0,0 +1,108 @@
|
|||||||
|
<!doctype html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
<title>zscripts — one-word dev commands</title>
|
||||||
|
<meta name="description" content="One-word commands for AI-assisted development. Routine start, deploy, and backup chores become scripts — saving tokens and keeping the AI's context window focused on real work.">
|
||||||
|
<link rel="canonical" href="https://zscripts.evomedia.net/">
|
||||||
|
|
||||||
|
<!-- Open Graph — LinkedIn, Slack and the rest build link previews from
|
||||||
|
these. The URLs must be absolute: a relative og:image is dropped by the
|
||||||
|
strict crawlers and the card renders as bare text. -->
|
||||||
|
<meta property="og:type" content="website">
|
||||||
|
<meta property="og:url" content="https://zscripts.evomedia.net/">
|
||||||
|
<meta property="og:site_name" content="evomedia.net">
|
||||||
|
<meta property="og:title" content="zscripts — one-word dev commands">
|
||||||
|
<meta property="og:description" content="One-word commands for AI-assisted development. Routine start, deploy and backup chores become scripts, keeping the AI's context window on real work.">
|
||||||
|
<meta property="og:image" content="https://zscripts.evomedia.net/og-card.png">
|
||||||
|
<meta property="og:image:width" content="1200">
|
||||||
|
<meta property="og:image:height" content="630">
|
||||||
|
<meta property="og:image:alt" content="zscripts — one-word dev commands, over a terminal showing zdeploy, zbackup and zrestart.">
|
||||||
|
|
||||||
|
<!-- Twitter/X card, reusing the same image. -->
|
||||||
|
<meta name="twitter:card" content="summary_large_image">
|
||||||
|
<meta name="twitter:title" content="zscripts — one-word dev commands">
|
||||||
|
<meta name="twitter:description" content="One-word commands for AI-assisted development. Routine start, deploy and backup chores become scripts, keeping the AI's context window on real work.">
|
||||||
|
<meta name="twitter:image" content="https://zscripts.evomedia.net/og-card.png">
|
||||||
|
<style>
|
||||||
|
:root{
|
||||||
|
--bg:#0d1117; --panel:#161b22; --border:#2a313c;
|
||||||
|
--fg:#e6edf3; --muted:#9aa7b4; --accent:#4ea1ff; --accent2:#3fb950;
|
||||||
|
--mono:ui-monospace,SFMono-Regular,"SF Mono",Menlo,Consolas,"Liberation Mono",monospace;
|
||||||
|
--sans:system-ui,-apple-system,Segoe UI,Roboto,Helvetica,Arial,sans-serif;
|
||||||
|
}
|
||||||
|
*{box-sizing:border-box}
|
||||||
|
html,body{margin:0;padding:0}
|
||||||
|
body{background:var(--bg);color:var(--fg);font-family:var(--sans);line-height:1.55;
|
||||||
|
-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}
|
||||||
|
.wrap{max-width:760px;margin:0 auto;padding:64px 24px 80px}
|
||||||
|
.eyebrow{font-family:var(--mono);font-size:.8rem;letter-spacing:.08em;text-transform:uppercase;color:var(--accent)}
|
||||||
|
h1{font-size:2.6rem;line-height:1.1;margin:.4rem 0 .2rem;font-weight:700}
|
||||||
|
h1 .z{color:var(--accent)}
|
||||||
|
.tag{font-size:1.2rem;color:var(--muted);margin:0 0 2rem}
|
||||||
|
.lead{font-size:1.05rem;color:var(--fg);margin:0 0 2rem}
|
||||||
|
.card{background:var(--panel);border:1px solid var(--border);border-radius:12px;padding:20px 22px;margin:0 0 18px}
|
||||||
|
.card h2{font-size:.95rem;margin:0 0 12px;color:var(--muted);font-weight:600;letter-spacing:.02em;text-transform:uppercase}
|
||||||
|
pre{margin:0;font-family:var(--mono);font-size:.92rem;overflow-x:auto;color:var(--fg)}
|
||||||
|
pre .c{color:var(--muted)}
|
||||||
|
pre .g{color:var(--accent2)}
|
||||||
|
.cmds{display:grid;grid-template-columns:auto 1fr;gap:6px 18px;font-size:.95rem}
|
||||||
|
.cmds code{font-family:var(--mono);color:var(--accent);white-space:nowrap}
|
||||||
|
.cmds span{color:var(--muted)}
|
||||||
|
.actions{display:flex;gap:12px;flex-wrap:wrap;margin-top:6px}
|
||||||
|
a.btn{display:inline-block;text-decoration:none;font-weight:600;font-size:.95rem;
|
||||||
|
padding:11px 20px;border-radius:9px;border:1px solid var(--border)}
|
||||||
|
a.primary{background:var(--accent);color:#04121f;border-color:var(--accent)}
|
||||||
|
a.ghost{color:var(--fg)}
|
||||||
|
a.primary:hover{filter:brightness(1.08)}
|
||||||
|
a.ghost:hover{border-color:var(--accent);color:var(--accent)}
|
||||||
|
footer{margin-top:44px;padding-top:20px;border-top:1px solid var(--border);color:var(--muted);font-size:.85rem}
|
||||||
|
footer a{color:var(--muted)}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<main class="wrap">
|
||||||
|
<p class="eyebrow">evomedia.net · developer tools</p>
|
||||||
|
<h1><span class="z">z</span>scripts</h1>
|
||||||
|
<p class="tag">Short, one-word commands for multi-project development.</p>
|
||||||
|
|
||||||
|
<p class="lead">
|
||||||
|
A small suite of PowerShell commands built for AI-assisted
|
||||||
|
development. Routine start / deploy / backup chores become single
|
||||||
|
words a coding agent can run without reasoning through them — which
|
||||||
|
saves tokens, but the real win is keeping the AI's context window
|
||||||
|
focused on the actual work instead of housekeeping.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<div class="card">
|
||||||
|
<h2>The idea</h2>
|
||||||
|
<pre><span class="c"># every chore the agent doesn't narrate is context kept free</span>
|
||||||
|
<span class="g">zstart</span> sp <span class="c"># launch a project's dev server</span>
|
||||||
|
<span class="g">zdeploy</span> sp <span class="c"># package + ship it</span>
|
||||||
|
<span class="g">zbackup</span> all <span class="c"># snapshot the databases</span></pre>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="card">
|
||||||
|
<h2>What's in the box</h2>
|
||||||
|
<div class="cmds">
|
||||||
|
<code>zstart</code><span>run a project's dev server locally</span>
|
||||||
|
<code>zdeploy</code><span>build and deploy to the server</span>
|
||||||
|
<code>zbackup</code><span>back up project databases</span>
|
||||||
|
<code>zrestart</code><span>restart a running dev server</span>
|
||||||
|
<code>zkill</code><span>stop a dev server cleanly</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="actions">
|
||||||
|
<a class="btn primary" href="https://github.com/evomedia-net/evo.zscripts">View on GitHub</a>
|
||||||
|
<a class="btn ghost" href="https://github.com/evomedia-net/evo.zscripts#readme">Read the docs</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<footer>
|
||||||
|
An <a href="https://evomedia.net">evomedia.net</a> project ·
|
||||||
|
open source, sanitized for public use.
|
||||||
|
</footer>
|
||||||
|
</main>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
BIN
site/og-card.png
Normal file
BIN
site/og-card.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 25 KiB |
7
site/robots.txt
Normal file
7
site/robots.txt
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
# zscripts.evomedia.net — the public page for this toolkit.
|
||||||
|
#
|
||||||
|
# Deliberately the opposite of the candidate pages on this estate
|
||||||
|
# (cardiff, opensesame, kelly, unify), which disallow everything. This one
|
||||||
|
# is an open-source project page: being found is the point.
|
||||||
|
User-agent: *
|
||||||
|
Allow: /
|
||||||
@ -1,4 +1,4 @@
|
|||||||
# Evomedia.net Token Savers - https://github.com/evomedia-net/evo.zscripts
|
# evomedia.net Token Savers - https://github.com/evomedia-net/evo.zscripts
|
||||||
# Created by Kelly Michels - dev@evomedia.net
|
# Created by Kelly Michels - dev@evomedia.net
|
||||||
# Licensed under the MIT License. See LICENSE.
|
# Licensed under the MIT License. See LICENSE.
|
||||||
|
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
# Evomedia.net Token Savers - https://github.com/evomedia-net/evo.zscripts
|
# evomedia.net Token Savers - https://github.com/evomedia-net/evo.zscripts
|
||||||
# Created by Kelly Michels - dev@evomedia.net
|
# Created by Kelly Michels - dev@evomedia.net
|
||||||
# Licensed under the MIT License. See LICENSE.
|
# Licensed under the MIT License. See LICENSE.
|
||||||
|
|
||||||
|
|||||||
82
tests/DockerImageStep.Tests.ps1
Normal file
82
tests/DockerImageStep.Tests.ps1
Normal file
@ -0,0 +1,82 @@
|
|||||||
|
# How a docker stack gets its images, and the deploy that shipped nothing.
|
||||||
|
#
|
||||||
|
# Invoke-Pester .\tests
|
||||||
|
#
|
||||||
|
# `docker compose pull` is right for a stack of published images - Prometheus,
|
||||||
|
# Grafana, docker-mailserver - and wrong for one built from a Dockerfile in the
|
||||||
|
# tree, where there is nothing to pull.
|
||||||
|
#
|
||||||
|
# The trap is what happens after. `docker compose up -d` builds only when the
|
||||||
|
# image is MISSING, so the first deploy of a build-from-source stack works and
|
||||||
|
# every one after it uploads the new code, starts the OLD image, and reports
|
||||||
|
# success. Green deploy, healthy container, and the change is not in it. That
|
||||||
|
# is the failure this helper exists to prevent, and it is worse than an error
|
||||||
|
# because nothing about it looks wrong.
|
||||||
|
#
|
||||||
|
# ZHelpers.ps1 is dot-sourced rather than zdeploy.ps1: zdeploy executes its
|
||||||
|
# main flow on load, helpers only define functions.
|
||||||
|
|
||||||
|
BeforeAll {
|
||||||
|
. (Join-Path (Split-Path -Parent $PSScriptRoot) "ZHelpers.ps1")
|
||||||
|
|
||||||
|
function New-Proj { param($Build)
|
||||||
|
if ($null -eq $Build) { return [pscustomobject]@{ deploy = [pscustomobject]@{ gitPull = $true } } }
|
||||||
|
return [pscustomobject]@{ deploy = [pscustomobject]@{ build = $Build } }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Describe 'Get-DockerImageStep - build here, or pull from a registry' {
|
||||||
|
|
||||||
|
It 'pulls by default, so every existing docker stack is unaffected' {
|
||||||
|
$step = Get-DockerImageStep -Proj (New-Proj $null) -RemotePath '/home/u/stack/x'
|
||||||
|
$step.Command | Should -BeLike '*docker compose pull*'
|
||||||
|
$step.Command | Should -Not -BeLike '*build*'
|
||||||
|
}
|
||||||
|
|
||||||
|
It 'pulls for a project with no deploy block at all' {
|
||||||
|
$step = Get-DockerImageStep -Proj ([pscustomobject]@{}) -RemotePath '/home/u/stack/x'
|
||||||
|
$step.Command | Should -BeLike '*docker compose pull*'
|
||||||
|
}
|
||||||
|
|
||||||
|
It 'builds when the project asks to be built' {
|
||||||
|
$step = Get-DockerImageStep -Proj (New-Proj $true) -RemotePath '/home/u/stack/x'
|
||||||
|
$step.Command | Should -BeLike '*docker compose build*'
|
||||||
|
$step.Command | Should -Not -BeLike '*compose pull*'
|
||||||
|
}
|
||||||
|
|
||||||
|
It 'still pulls when build is explicitly false' {
|
||||||
|
$step = Get-DockerImageStep -Proj (New-Proj $false) -RemotePath '/home/u/stack/x'
|
||||||
|
$step.Command | Should -BeLike '*docker compose pull*'
|
||||||
|
}
|
||||||
|
|
||||||
|
It 'refreshes the base image on a build, so a rebuild is not pinned to the first one' {
|
||||||
|
$step = Get-DockerImageStep -Proj (New-Proj $true) -RemotePath '/home/u/stack/x'
|
||||||
|
$step.Command | Should -BeLike '*--pull*'
|
||||||
|
}
|
||||||
|
|
||||||
|
It 'runs in the project directory: <Build>' -ForEach @(
|
||||||
|
@{ Build = $true }
|
||||||
|
@{ Build = $false }
|
||||||
|
) {
|
||||||
|
$step = Get-DockerImageStep -Proj (New-Proj $Build) -RemotePath '/home/u/stack/ablecamera'
|
||||||
|
$step.Command | Should -BeLike 'cd /home/u/stack/ablecamera &&*'
|
||||||
|
}
|
||||||
|
|
||||||
|
It 'labels the step with what it actually does: <Build>' -ForEach @(
|
||||||
|
@{ Build = $true; Expected = 'docker compose build' }
|
||||||
|
@{ Build = $false; Expected = 'docker compose pull' }
|
||||||
|
) {
|
||||||
|
(Get-DockerImageStep -Proj (New-Proj $Build) -RemotePath '/x').Label | Should -Be $Expected
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Describe 'the docker deploy uses it' {
|
||||||
|
|
||||||
|
It 'no longer hardcodes compose pull' {
|
||||||
|
$text = Get-Content -Raw (Join-Path (Split-Path -Parent $PSScriptRoot) "zdeploy.ps1")
|
||||||
|
$body = $text.Substring($text.IndexOf('function Invoke-DockerDeploy'))
|
||||||
|
$body = $body.Substring(0, $body.IndexOf('function Invoke-ZTokensPublish'))
|
||||||
|
$body | Should -Match 'Get-DockerImageStep'
|
||||||
|
$body | Should -Not -Match '"docker compose pull"'
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -1,4 +1,4 @@
|
|||||||
# Evomedia.net Token Savers — https://github.com/evomedia-net/evo.zscripts
|
# evomedia.net Token Savers — https://github.com/evomedia-net/evo.zscripts
|
||||||
# Created by Kelly Michels · dev@evomedia.net
|
# Created by Kelly Michels · dev@evomedia.net
|
||||||
# Licensed under the MIT License. See LICENSE.
|
# Licensed under the MIT License. See LICENSE.
|
||||||
|
|
||||||
|
|||||||
90
tests/LinkPreview.Tests.ps1
Normal file
90
tests/LinkPreview.Tests.ps1
Normal file
@ -0,0 +1,90 @@
|
|||||||
|
# evomedia.net Token Savers - https://github.com/evomedia-net/evo.zscripts
|
||||||
|
# Created by Kelly Michels - dev@evomedia.net
|
||||||
|
# Licensed under the MIT License. See LICENSE.
|
||||||
|
|
||||||
|
# LinkPreview.Tests.ps1 - the public page renders a card, not a bare URL.
|
||||||
|
#
|
||||||
|
# Invoke-Pester .\tests
|
||||||
|
#
|
||||||
|
# Pasting zscripts.evomedia.net into LinkedIn, Slack or a message builds a card
|
||||||
|
# from the page's og:* tags. The page had a title and a description and nothing
|
||||||
|
# else, so it pasted as a bare URL.
|
||||||
|
#
|
||||||
|
# None of that is visible from here. The page is correct, the site is up, and
|
||||||
|
# the only symptom is a card somewhere else - which is why the rule is asserted
|
||||||
|
# rather than remembered.
|
||||||
|
#
|
||||||
|
# The last test is the one that earned its place: the first draft of the card
|
||||||
|
# showed `ztests`, which is not a command in this repo. A card is public copy,
|
||||||
|
# and public copy must not advertise a script that does not exist.
|
||||||
|
|
||||||
|
BeforeAll {
|
||||||
|
$script:RepoRoot = Split-Path -Parent $PSScriptRoot
|
||||||
|
$script:Page = Join-Path $script:RepoRoot "site\index.html"
|
||||||
|
$script:Card = Join-Path $script:RepoRoot "site\og-card.png"
|
||||||
|
$script:Html = [IO.File]::ReadAllText($script:Page)
|
||||||
|
|
||||||
|
function Get-Meta {
|
||||||
|
param([string]$Key)
|
||||||
|
$pattern = '<meta (?:property|name)="' + [regex]::Escape($Key) + '" content="([^"]*)">'
|
||||||
|
$m = [regex]::Match($script:Html, $pattern)
|
||||||
|
if ($m.Success) { return $m.Groups[1].Value }
|
||||||
|
return $null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Describe "zscripts.evomedia.net link preview" {
|
||||||
|
|
||||||
|
It "carries the tags a card is built from" {
|
||||||
|
foreach ($key in @('og:type', 'og:url', 'og:title', 'og:description', 'og:image')) {
|
||||||
|
Get-Meta $key | Should -Not -BeNullOrEmpty -Because "$key is what the card is made of"
|
||||||
|
}
|
||||||
|
# Without it X renders the small square variant instead of a card.
|
||||||
|
Get-Meta 'twitter:card' | Should -Be 'summary_large_image'
|
||||||
|
}
|
||||||
|
|
||||||
|
It "gives absolute URLs, which the strict crawlers require" {
|
||||||
|
foreach ($key in @('og:url', 'og:image', 'twitter:image')) {
|
||||||
|
Get-Meta $key | Should -Match '^https://'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
It "points og:url at the same place as the canonical" {
|
||||||
|
$canonical = [regex]::Match($script:Html, '<link rel="canonical" href="([^"]*)">')
|
||||||
|
$canonical.Success | Should -BeTrue
|
||||||
|
Get-Meta 'og:url' | Should -Be $canonical.Groups[1].Value
|
||||||
|
}
|
||||||
|
|
||||||
|
It "publishes the card beside the page" {
|
||||||
|
# site/ is copied to the server wholesale; a card outside it is a 404
|
||||||
|
# and the preview falls back to text.
|
||||||
|
Test-Path -LiteralPath $script:Card | Should -BeTrue
|
||||||
|
}
|
||||||
|
|
||||||
|
It "serves a card that is the size the tags claim" {
|
||||||
|
# PNG header: width and height are big-endian at offsets 16 and 20.
|
||||||
|
$bytes = [IO.File]::ReadAllBytes($script:Card)[0..23]
|
||||||
|
$width = [int]$bytes[16] * 16777216 + [int]$bytes[17] * 65536 + [int]$bytes[18] * 256 + [int]$bytes[19]
|
||||||
|
$height = [int]$bytes[20] * 16777216 + [int]$bytes[21] * 65536 + [int]$bytes[22] * 256 + [int]$bytes[23]
|
||||||
|
$width | Should -Be 1200
|
||||||
|
$height | Should -Be 630
|
||||||
|
Get-Meta 'og:image:width' | Should -Be '1200'
|
||||||
|
Get-Meta 'og:image:height' | Should -Be '630'
|
||||||
|
}
|
||||||
|
|
||||||
|
It "does not advertise a command this repo does not ship" {
|
||||||
|
$alt = Get-Meta 'og:image:alt'
|
||||||
|
$alt | Should -Not -BeNullOrEmpty
|
||||||
|
|
||||||
|
$named = [regex]::Matches($alt, '\bz[a-z_]+\b') | ForEach-Object { $_.Value } | Sort-Object -Unique
|
||||||
|
$named.Count | Should -BeGreaterThan 0 -Because 'the alt text names the commands on the card'
|
||||||
|
|
||||||
|
foreach ($cmd in $named) {
|
||||||
|
if ($cmd -eq 'zscripts') { continue } # the toolkit, not a command
|
||||||
|
$exists = @('.ps1', '.cmd') | Where-Object {
|
||||||
|
Test-Path -LiteralPath (Join-Path $script:RepoRoot "$cmd$_")
|
||||||
|
}
|
||||||
|
$exists | Should -Not -BeNullOrEmpty -Because "$cmd is on the card but is not in this repo"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -1,4 +1,4 @@
|
|||||||
# Evomedia.net Token Savers — https://github.com/evomedia-net/evo.zscripts
|
# evomedia.net Token Savers — https://github.com/evomedia-net/evo.zscripts
|
||||||
# Created by Kelly Michels · dev@evomedia.net
|
# Created by Kelly Michels · dev@evomedia.net
|
||||||
# Licensed under the MIT License. See LICENSE.
|
# Licensed under the MIT License. See LICENSE.
|
||||||
|
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
# Evomedia.net Token Savers — https://github.com/evomedia-net/evo.zscripts
|
# evomedia.net Token Savers — https://github.com/evomedia-net/evo.zscripts
|
||||||
# Created by Kelly Michels · dev@evomedia.net
|
# Created by Kelly Michels · dev@evomedia.net
|
||||||
# Licensed under the MIT License. See LICENSE.
|
# Licensed under the MIT License. See LICENSE.
|
||||||
|
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
# Evomedia.net Token Savers — https://github.com/evomedia-net/evo.zscripts
|
# evomedia.net Token Savers — https://github.com/evomedia-net/evo.zscripts
|
||||||
# Created by Kelly Michels · dev@evomedia.net
|
# Created by Kelly Michels · dev@evomedia.net
|
||||||
# Licensed under the MIT License. See LICENSE.
|
# Licensed under the MIT License. See LICENSE.
|
||||||
|
|
||||||
|
|||||||
@ -23,14 +23,20 @@
|
|||||||
#>
|
#>
|
||||||
@{
|
@{
|
||||||
Denied = @(
|
Denied = @(
|
||||||
@{ Name = 'private project name'; Pattern = '\b(EvoCivilCode|EvoPlatform|DocketMail|SmartPlant\w*|ProvenSheet|evoehs|evoproven|evoaicc|evolocate|evoplatform)\b' }
|
# The retired EHS name is split with a one-character class in both rules
|
||||||
|
# below (Smart[P]lant, smart[p]lantehs). The regex is identical - a class of
|
||||||
|
# one matches exactly that character - but the literal no longer appears in
|
||||||
|
# this file, which is public. The private tree still carries that name in
|
||||||
|
# ~20 places, so these rules are still load-bearing: do not delete them,
|
||||||
|
# and do not un-split them.
|
||||||
|
@{ Name = 'private project name'; Pattern = '\b(EvoCivilCode|EvoPlatform|DocketMail|Smart[P]lant\w*|ProvenSheet|evoehs|evoproven|evoaicc|evolocate|evoplatform)\b' }
|
||||||
# The current spellings, which the line above never saw: a dot or a
|
# The current spellings, which the line above never saw: a dot or a
|
||||||
# hyphen breaks the word and an underscore hides the boundary, so
|
# hyphen breaks the word and an underscore hides the boundary, so
|
||||||
# evo.ehs, evo-ai and evoehs_app all passed (evo.scripts#138 in the
|
# evo.ehs, evo-ai and evoehs_app all passed (evo.scripts#138 in the
|
||||||
# private tree). Internal issue references travel with them.
|
# private tree). Internal issue references travel with them.
|
||||||
@{ Name = 'current product name'; Pattern = '(?i)\bevo[.-](ehs|ai|edge|locate|proven|platform|civilcode|scripts)\b|\bevoehs' }
|
@{ Name = 'current product name'; Pattern = '(?i)\bevo[.-](ehs|ai|edge|locate|proven|platform|civilcode|scripts)\b|\bevoehs' }
|
||||||
@{ Name = 'internal issue reference'; Pattern = 'evo\.scripts#\d+' }
|
@{ Name = 'internal issue reference'; Pattern = 'evo\.scripts#\d+' }
|
||||||
@{ Name = 'private product domain'; Pattern = '\b(smartplantehs\.com|provensheet\.com|evoehs\.com|civilcode\.evomedia\.net|dashboard\.evomedia\.net|webmail\.evomedia\.net|mail-admin\.evomedia\.net|docketmail\.evomedia\.net|cardiff\.evomedia\.net|platform\.evomedia\.net|ai\.evomedia\.net|git\.evomedia\.net|analytics\.evomedia\.net)\b' }
|
@{ Name = 'private product domain'; Pattern = '\b(smart[p]lantehs\.com|provensheet\.com|evoehs\.com|civilcode\.evomedia\.net|dashboard\.evomedia\.net|webmail\.evomedia\.net|mail-admin\.evomedia\.net|docketmail\.evomedia\.net|cardiff\.evomedia\.net|platform\.evomedia\.net|ai\.evomedia\.net|git\.evomedia\.net|analytics\.evomedia\.net)\b' }
|
||||||
@{ Name = 'private-only script'; Pattern = '\b(register_civilcode|register_docketmail|sp_seed_demo_prod|zpublish_stats|zcoverage|zresume|swag_set_owner|provision_demo|apply_platform_config_fixes)\b' }
|
@{ Name = 'private-only script'; Pattern = '\b(register_civilcode|register_docketmail|sp_seed_demo_prod|zpublish_stats|zcoverage|zresume|swag_set_owner|provision_demo|apply_platform_config_fixes)\b' }
|
||||||
@{ Name = 'local drive path'; Pattern = '[A-Za-z]:\\\\?evomedia\.net' }
|
@{ Name = 'local drive path'; Pattern = '[A-Za-z]:\\\\?evomedia\.net' }
|
||||||
@{ Name = 'operator home path'; Pattern = '/home/ubuntu/' }
|
@{ Name = 'operator home path'; Pattern = '/home/ubuntu/' }
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
# Evomedia.net Token Savers — https://github.com/evomedia-net/evo.zscripts
|
# evomedia.net Token Savers — https://github.com/evomedia-net/evo.zscripts
|
||||||
# Created by Kelly Michels · dev@evomedia.net
|
# Created by Kelly Michels · dev@evomedia.net
|
||||||
# Licensed under the MIT License. See LICENSE.
|
# Licensed under the MIT License. See LICENSE.
|
||||||
# Version: v1.0.0.0.25
|
# Version: v1.0.0.0.28
|
||||||
|
|
||||||
# token-count.ps1 — measure script output volume to estimate AI agent token costs.
|
# token-count.ps1 — measure script output volume to estimate AI agent token costs.
|
||||||
#
|
#
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
REM Evomedia.net Token Savers — https://github.com/evomedia-net/evo.zscripts
|
REM Evomedia.net Token Savers — https://github.com/evomedia-net/evo.zscripts
|
||||||
REM Created by Kelly Michels · dev@evomedia.net
|
REM Created by Kelly Michels · dev@evomedia.net
|
||||||
REM Licensed under the MIT License. See LICENSE.
|
REM Licensed under the MIT License. See LICENSE.
|
||||||
REM Version: v1.0.0.0.25
|
REM Version: v1.0.0.0.28
|
||||||
|
|
||||||
@echo off
|
@echo off
|
||||||
powershell -NoProfile -ExecutionPolicy Bypass -File "%~dp0zbackup.ps1" %*
|
powershell -NoProfile -ExecutionPolicy Bypass -File "%~dp0zbackup.ps1" %*
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
# Evomedia.net Token Savers — https://github.com/evomedia-net/evo.zscripts
|
# evomedia.net Token Savers — https://github.com/evomedia-net/evo.zscripts
|
||||||
# Created by Kelly Michels · dev@evomedia.net
|
# Created by Kelly Michels · dev@evomedia.net
|
||||||
# Licensed under the MIT License. See LICENSE.
|
# Licensed under the MIT License. See LICENSE.
|
||||||
# Version: v1.0.0.0.25
|
# Version: v1.0.0.0.28
|
||||||
|
|
||||||
# zbackup.ps1 — local backups: zip project sources (plus a Postgres dump when the
|
# zbackup.ps1 — local backups: zip project sources (plus a Postgres dump when the
|
||||||
# project's .env has a DATABASE_URL) into the backups folder.
|
# project's .env has a DATABASE_URL) into the backups folder.
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
# Evomedia.net Token Savers — https://github.com/evomedia-net/evo.zscripts
|
# evomedia.net Token Savers — https://github.com/evomedia-net/evo.zscripts
|
||||||
# Created by Kelly Michels · dev@evomedia.net
|
# Created by Kelly Michels · dev@evomedia.net
|
||||||
# Licensed under the MIT License. See LICENSE.
|
# Licensed under the MIT License. See LICENSE.
|
||||||
# Version: v1.0.0.0.25
|
# Version: v1.0.0.0.28
|
||||||
|
|
||||||
# zbackup_and_sync.ps1 — run backups, then sync the backups folder offsite.
|
# zbackup_and_sync.ps1 — run backups, then sync the backups folder offsite.
|
||||||
#
|
#
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
REM Evomedia.net Token Savers — https://github.com/evomedia-net/evo.zscripts
|
REM Evomedia.net Token Savers — https://github.com/evomedia-net/evo.zscripts
|
||||||
REM Created by Kelly Michels · dev@evomedia.net
|
REM Created by Kelly Michels · dev@evomedia.net
|
||||||
REM Licensed under the MIT License. See LICENSE.
|
REM Licensed under the MIT License. See LICENSE.
|
||||||
REM Version: v1.0.0.0.25
|
REM Version: v1.0.0.0.28
|
||||||
|
|
||||||
@echo off
|
@echo off
|
||||||
powershell -NoProfile -ExecutionPolicy Bypass -File "%~dp0zbackup_ec2.ps1" %*
|
powershell -NoProfile -ExecutionPolicy Bypass -File "%~dp0zbackup_ec2.ps1" %*
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
# Evomedia.net Token Savers — https://github.com/evomedia-net/evo.zscripts
|
# evomedia.net Token Savers — https://github.com/evomedia-net/evo.zscripts
|
||||||
# Created by Kelly Michels · dev@evomedia.net
|
# Created by Kelly Michels · dev@evomedia.net
|
||||||
# Licensed under the MIT License. See LICENSE.
|
# Licensed under the MIT License. See LICENSE.
|
||||||
# Version: v1.0.0.0.25
|
# Version: v1.0.0.0.28
|
||||||
|
|
||||||
# zbackup_ec2.ps1 — pull backups down from the server: a Postgres dump for projects
|
# zbackup_ec2.ps1 — pull backups down from the server: a Postgres dump for projects
|
||||||
# with a "db" config block, plus a zip of server-side data dirs (uploads/archive/dist).
|
# with a "db" config block, plus a zip of server-side data dirs (uploads/archive/dist).
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
REM Evomedia.net Token Savers — https://github.com/evomedia-net/evo.zscripts
|
REM Evomedia.net Token Savers — https://github.com/evomedia-net/evo.zscripts
|
||||||
REM Created by Kelly Michels · dev@evomedia.net
|
REM Created by Kelly Michels · dev@evomedia.net
|
||||||
REM Licensed under the MIT License. See LICENSE.
|
REM Licensed under the MIT License. See LICENSE.
|
||||||
REM Version: v1.0.0.0.25
|
REM Version: v1.0.0.0.28
|
||||||
|
|
||||||
@echo off
|
@echo off
|
||||||
powershell -NoProfile -ExecutionPolicy Bypass -File "%~dp0zchecksums.ps1" %*
|
powershell -NoProfile -ExecutionPolicy Bypass -File "%~dp0zchecksums.ps1" %*
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
# Evomedia.net Token Savers — https://github.com/evomedia-net/evo.zscripts
|
# evomedia.net Token Savers — https://github.com/evomedia-net/evo.zscripts
|
||||||
# Created by Kelly Michels · dev@evomedia.net
|
# Created by Kelly Michels · dev@evomedia.net
|
||||||
# Licensed under the MIT License. See LICENSE.
|
# Licensed under the MIT License. See LICENSE.
|
||||||
# Version: v1.0.0.0.25
|
# Version: v1.0.0.0.28
|
||||||
|
|
||||||
# zchecksums.ps1 - verify (or regenerate) SHA-256 checksums for the scripts.
|
# zchecksums.ps1 - verify (or regenerate) SHA-256 checksums for the scripts.
|
||||||
#
|
#
|
||||||
|
|||||||
@ -122,6 +122,7 @@
|
|||||||
"analytics": {
|
"analytics": {
|
||||||
"label": "Analytics (any docker compose app)",
|
"label": "Analytics (any docker compose app)",
|
||||||
"kind": "docker",
|
"kind": "docker",
|
||||||
|
"_build_note": "Images pulled from a registry need nothing here. If the image is BUILT from a Dockerfile in this tree, add \"deploy\": { \"build\": true } \u2014 without it a redeploy uploads the new code and restarts the OLD image, and reports success.",
|
||||||
"localRoot": "C:\\YourRoot\\analytics",
|
"localRoot": "C:\\YourRoot\\analytics",
|
||||||
"domain": "analytics.yourdomain.com",
|
"domain": "analytics.yourdomain.com",
|
||||||
"remote": {
|
"remote": {
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
REM Evomedia.net Token Savers — https://github.com/evomedia-net/evo.zscripts
|
REM Evomedia.net Token Savers — https://github.com/evomedia-net/evo.zscripts
|
||||||
REM Created by Kelly Michels · dev@evomedia.net
|
REM Created by Kelly Michels · dev@evomedia.net
|
||||||
REM Licensed under the MIT License. See LICENSE.
|
REM Licensed under the MIT License. See LICENSE.
|
||||||
REM Version: v1.0.0.0.25
|
REM Version: v1.0.0.0.28
|
||||||
|
|
||||||
@echo off
|
@echo off
|
||||||
powershell -NoProfile -ExecutionPolicy Bypass -File "%~dp0zdeploy.ps1" %*
|
powershell -NoProfile -ExecutionPolicy Bypass -File "%~dp0zdeploy.ps1" %*
|
||||||
|
|||||||
56
zdeploy.ps1
56
zdeploy.ps1
@ -1,7 +1,7 @@
|
|||||||
# Evomedia.net Token Savers — https://github.com/evomedia-net/evo.zscripts
|
# evomedia.net Token Savers — https://github.com/evomedia-net/evo.zscripts
|
||||||
# Created by Kelly Michels · dev@evomedia.net
|
# Created by Kelly Michels · dev@evomedia.net
|
||||||
# Licensed under the MIT License. See LICENSE.
|
# Licensed under the MIT License. See LICENSE.
|
||||||
# Version: v1.0.0.0.25
|
# Version: v1.0.0.0.28
|
||||||
|
|
||||||
# zdeploy.ps1 — deploy any project defined in zconfig.json to the server.
|
# zdeploy.ps1 — deploy any project defined in zconfig.json to the server.
|
||||||
# Each project runs its own docker compose stack; the handler is picked by the
|
# Each project runs its own docker compose stack; the handler is picked by the
|
||||||
@ -1176,8 +1176,8 @@ function Invoke-StaticDeploy {
|
|||||||
param([string]$Key, $Proj)
|
param([string]$Key, $Proj)
|
||||||
|
|
||||||
# Plain static sites - no build, no container of their own. The landing
|
# Plain static sites - no build, no container of their own. The landing
|
||||||
# container serves them straight off disk out of /srv/$host, so shipping
|
# container serves them straight off disk, one directory per host, so
|
||||||
# the files IS the deploy: there is nothing to restart afterwards.
|
# shipping the files IS the deploy: there is nothing to restart afterwards.
|
||||||
$root = Join-Path $Proj.localRoot $Proj.siteDir
|
$root = Join-Path $Proj.localRoot $Proj.siteDir
|
||||||
$remotePath = $Proj.remote.path
|
$remotePath = $Proj.remote.path
|
||||||
|
|
||||||
@ -1254,7 +1254,10 @@ function Invoke-DockerDeploy {
|
|||||||
if ($LASTEXITCODE -ne 0) { throw "SCP failed for $($d.Name) (exit $LASTEXITCODE)" }
|
if ($LASTEXITCODE -ne 0) { throw "SCP failed for $($d.Name) (exit $LASTEXITCODE)" }
|
||||||
}
|
}
|
||||||
|
|
||||||
Invoke-Ec2Step "docker compose pull" "cd $remotePath && sudo docker compose pull"
|
# Built here or pulled from a registry - see Get-DockerImageStep for why
|
||||||
|
# a build-from-source stack cannot use `pull` and silently ships nothing.
|
||||||
|
$imageStep = Get-DockerImageStep -Proj $Proj -RemotePath $remotePath
|
||||||
|
Invoke-Ec2Step $imageStep.Label $imageStep.Command
|
||||||
Invoke-Ec2Step "docker compose up -d" "cd $remotePath && sudo docker compose up -d"
|
Invoke-Ec2Step "docker compose up -d" "cd $remotePath && sudo docker compose up -d"
|
||||||
|
|
||||||
Invoke-Ec2PostDeployCleanup -Label $Key
|
Invoke-Ec2PostDeployCleanup -Label $Key
|
||||||
@ -1301,22 +1304,35 @@ function Invoke-ZTokensPublish {
|
|||||||
|
|
||||||
# ── Dispatch ─────────────────────────────────────────────────────────────────
|
# ── Dispatch ─────────────────────────────────────────────────────────────────
|
||||||
|
|
||||||
foreach ($key in $Projects) {
|
# pip, uv and docker draw progress bars with box-drawing characters: "━" is
|
||||||
# 'ztokens' matches the tool it runs (ztokens.cmd / ztokens.ps1). The old
|
# the bytes E2 94 81. PowerShell 5.1 decodes a native command's stdout - ssh's,
|
||||||
# singular 'ztoken' still works so existing habits and any script that
|
# here - with [Console]::OutputEncoding, which on Windows is the OEM code page
|
||||||
# already calls it keep running.
|
# (437 on this machine), where those three bytes read "Γöü". Forty per bar.
|
||||||
if ($key -in @('ztokens', 'ztoken')) { Invoke-ZTokensPublish; continue }
|
# Decode the box's output as the UTF-8 it is for the duration of the deploy,
|
||||||
$proj = Get-ZProject -Key $key
|
# and put the console back in the finally so a deploy that throws does not
|
||||||
Invoke-DeployGitPull -Proj $proj # no-op unless deploy.gitPull is set
|
# leave the session changed.
|
||||||
switch ([string]$proj.kind) {
|
$prevConsoleEncoding = [Console]::OutputEncoding
|
||||||
"python" { Invoke-PythonDeploy -Key $key -Proj $proj -ChangeNote $Note }
|
[Console]::OutputEncoding = New-Object System.Text.UTF8Encoding($false)
|
||||||
"vite" { Invoke-ViteDeploy -Key $key -Proj $proj -ChangeNote $Note }
|
try {
|
||||||
"nextjs" { Invoke-NextDeploy -Key $key -Proj $proj -ChangeNote $Note }
|
foreach ($key in $Projects) {
|
||||||
"edge" { Invoke-EdgeDeploy -Key $key -Proj $proj }
|
# 'ztokens' matches the tool it runs (ztokens.cmd / ztokens.ps1). The old
|
||||||
"docker" { Invoke-DockerDeploy -Key $key -Proj $proj }
|
# singular 'ztoken' still works so existing habits and any script that
|
||||||
"static" { Invoke-StaticDeploy -Key $key -Proj $proj }
|
# already calls it keep running.
|
||||||
default { throw "No deploy handler for kind '$($proj.kind)' (project '$key'). Add an Invoke-<Kind>Deploy function in zdeploy.ps1." }
|
if ($key -in @('ztokens', 'ztoken')) { Invoke-ZTokensPublish; continue }
|
||||||
|
$proj = Get-ZProject -Key $key
|
||||||
|
Invoke-DeployGitPull -Proj $proj # no-op unless deploy.gitPull is set
|
||||||
|
switch ([string]$proj.kind) {
|
||||||
|
"python" { Invoke-PythonDeploy -Key $key -Proj $proj -ChangeNote $Note }
|
||||||
|
"vite" { Invoke-ViteDeploy -Key $key -Proj $proj -ChangeNote $Note }
|
||||||
|
"nextjs" { Invoke-NextDeploy -Key $key -Proj $proj -ChangeNote $Note }
|
||||||
|
"edge" { Invoke-EdgeDeploy -Key $key -Proj $proj }
|
||||||
|
"docker" { Invoke-DockerDeploy -Key $key -Proj $proj }
|
||||||
|
"static" { Invoke-StaticDeploy -Key $key -Proj $proj }
|
||||||
|
default { throw "No deploy handler for kind '$($proj.kind)' (project '$key'). Add an Invoke-<Kind>Deploy function in zdeploy.ps1." }
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
} finally {
|
||||||
|
[Console]::OutputEncoding = $prevConsoleEncoding
|
||||||
}
|
}
|
||||||
# The timestamp goes through Stop-ZTracking as the FinalNote so it lands after
|
# The timestamp goes through Stop-ZTracking as the FinalNote so it lands after
|
||||||
# the tracking footer and before the trailing blank lines - the last thing on
|
# the tracking footer and before the trailing blank lines - the last thing on
|
||||||
|
|||||||
2
zec2.cmd
2
zec2.cmd
@ -1,7 +1,7 @@
|
|||||||
REM Evomedia.net Token Savers — https://github.com/evomedia-net/evo.zscripts
|
REM Evomedia.net Token Savers — https://github.com/evomedia-net/evo.zscripts
|
||||||
REM Created by Kelly Michels · dev@evomedia.net
|
REM Created by Kelly Michels · dev@evomedia.net
|
||||||
REM Licensed under the MIT License. See LICENSE.
|
REM Licensed under the MIT License. See LICENSE.
|
||||||
REM Version: v1.0.0.0.25
|
REM Version: v1.0.0.0.28
|
||||||
|
|
||||||
@echo off
|
@echo off
|
||||||
powershell -NoProfile -ExecutionPolicy Bypass -File "%~dp0zec2.ps1" %*
|
powershell -NoProfile -ExecutionPolicy Bypass -File "%~dp0zec2.ps1" %*
|
||||||
|
|||||||
18
zec2.ps1
18
zec2.ps1
@ -1,7 +1,7 @@
|
|||||||
# Evomedia.net Token Savers — https://github.com/evomedia-net/evo.zscripts
|
# evomedia.net Token Savers — https://github.com/evomedia-net/evo.zscripts
|
||||||
# Created by Kelly Michels · dev@evomedia.net
|
# Created by Kelly Michels · dev@evomedia.net
|
||||||
# Licensed under the MIT License. See LICENSE.
|
# Licensed under the MIT License. See LICENSE.
|
||||||
# Version: v1.0.0.0.25
|
# Version: v1.0.0.0.28
|
||||||
|
|
||||||
# zec2.ps1 — quick reachability check (TCP + HTTP + live build version) for deployed projects.
|
# zec2.ps1 — quick reachability check (TCP + HTTP + live build version) for deployed projects.
|
||||||
#
|
#
|
||||||
@ -22,9 +22,11 @@ Start-ZTracking
|
|||||||
|
|
||||||
$cfg = Get-ZConfig
|
$cfg = Get-ZConfig
|
||||||
if (-not $HostName) { $HostName = $cfg.ec2.ip }
|
if (-not $HostName) { $HostName = $cfg.ec2.ip }
|
||||||
# Needed by the container-side version read below; same names zec2online.ps1
|
# Needed by the container-side version read below. zec2 had no ssh of its own
|
||||||
# uses. Without them that read throws inside its try/catch and falls through
|
# before that, so the read referenced three variables this script never
|
||||||
# silently, which looks identical to a service that cannot be reached.
|
# defined -- and because it sits inside a try/catch, the failure was silent:
|
||||||
|
# it fell through to the HTTP call and reported nothing once that endpoint
|
||||||
|
# stopped being public. Same names zec2online.ps1 uses.
|
||||||
$PemKey = $cfg.ec2.pemKey
|
$PemKey = $cfg.ec2.pemKey
|
||||||
$SshTarget = Get-Ec2Target
|
$SshTarget = Get-Ec2Target
|
||||||
|
|
||||||
@ -103,9 +105,9 @@ function Show-Zec2LiveVersion {
|
|||||||
$r = Invoke-RestMethod -Uri "http://${HostName}/build-version.json" -Headers $headers -TimeoutSec 10 -ErrorAction Stop
|
$r = Invoke-RestMethod -Uri "http://${HostName}/build-version.json" -Headers $headers -TimeoutSec 10 -ErrorAction Stop
|
||||||
if ($r) { Write-Host " Live build: $(Get-LabelFromBuildJsonObj $r)" -ForegroundColor Gray }
|
if ($r) { Write-Host " Live build: $(Get-LabelFromBuildJsonObj $r)" -ForegroundColor Gray }
|
||||||
} else {
|
} else {
|
||||||
# Container-side first where the project configures it: a build
|
# Container-side first where the project configures it: the
|
||||||
# stamp is not public on every site, and asking the proxy answers
|
# endpoint is not public on every project, and asking the edge
|
||||||
# from whichever vhost matches the Host header.
|
# answers from whichever vhost matches the Host header.
|
||||||
$execCmd = Get-ServerSideVersionCommand -Proj $Proj
|
$execCmd = Get-ServerSideVersionCommand -Proj $Proj
|
||||||
$label = $null
|
$label = $null
|
||||||
if ($execCmd -and (Test-Path $PemKey)) {
|
if ($execCmd -and (Test-Path $PemKey)) {
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
REM Evomedia.net Token Savers — https://github.com/evomedia-net/evo.zscripts
|
REM Evomedia.net Token Savers — https://github.com/evomedia-net/evo.zscripts
|
||||||
REM Created by Kelly Michels · dev@evomedia.net
|
REM Created by Kelly Michels · dev@evomedia.net
|
||||||
REM Licensed under the MIT License. See LICENSE.
|
REM Licensed under the MIT License. See LICENSE.
|
||||||
REM Version: v1.0.0.0.25
|
REM Version: v1.0.0.0.28
|
||||||
|
|
||||||
@echo off
|
@echo off
|
||||||
powershell -NoProfile -ExecutionPolicy Bypass -File "%~dp0zec2_rotatekeys.ps1" %*
|
powershell -NoProfile -ExecutionPolicy Bypass -File "%~dp0zec2_rotatekeys.ps1" %*
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
# Evomedia.net Token Savers — https://github.com/evomedia-net/evo.zscripts
|
# evomedia.net Token Savers — https://github.com/evomedia-net/evo.zscripts
|
||||||
# Created by Kelly Michels · dev@evomedia.net
|
# Created by Kelly Michels · dev@evomedia.net
|
||||||
# Licensed under the MIT License. See LICENSE.
|
# Licensed under the MIT License. See LICENSE.
|
||||||
# Version: v1.0.0.0.25
|
# Version: v1.0.0.0.28
|
||||||
|
|
||||||
# zec2_rotatekeys.ps1 - rotate / reset secret keys in a project's SERVER-SIDE
|
# zec2_rotatekeys.ps1 - rotate / reset secret keys in a project's SERVER-SIDE
|
||||||
# .env, in place, without the values ever passing through this machine's shell
|
# .env, in place, without the values ever passing through this machine's shell
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
REM Evomedia.net Token Savers — https://github.com/evomedia-net/evo.zscripts
|
REM Evomedia.net Token Savers — https://github.com/evomedia-net/evo.zscripts
|
||||||
REM Created by Kelly Michels · dev@evomedia.net
|
REM Created by Kelly Michels · dev@evomedia.net
|
||||||
REM Licensed under the MIT License. See LICENSE.
|
REM Licensed under the MIT License. See LICENSE.
|
||||||
REM Version: v1.0.0.0.25
|
REM Version: v1.0.0.0.28
|
||||||
|
|
||||||
@echo off
|
@echo off
|
||||||
powershell -NoProfile -ExecutionPolicy Bypass -File "%~dp0zec2online.ps1" %*
|
powershell -NoProfile -ExecutionPolicy Bypass -File "%~dp0zec2online.ps1" %*
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
# Evomedia.net Token Savers — https://github.com/evomedia-net/evo.zscripts
|
# evomedia.net Token Savers — https://github.com/evomedia-net/evo.zscripts
|
||||||
# Created by Kelly Michels · dev@evomedia.net
|
# Created by Kelly Michels · dev@evomedia.net
|
||||||
# Licensed under the MIT License. See LICENSE.
|
# Licensed under the MIT License. See LICENSE.
|
||||||
# Version: v1.0.0.0.25
|
# Version: v1.0.0.0.28
|
||||||
|
|
||||||
# zec2online.ps1 — deep health check: verify apps are live AND running the expected
|
# zec2online.ps1 — deep health check: verify apps are live AND running the expected
|
||||||
# build; auto-start downed stacks via docker compose and stream diagnostics.
|
# build; auto-start downed stacks via docker compose and stream diagnostics.
|
||||||
@ -86,9 +86,10 @@ function Get-RemoteVersionLabel {
|
|||||||
param($Proj)
|
param($Proj)
|
||||||
$headers = @{}
|
$headers = @{}
|
||||||
if ($Proj.domain) { $headers['Host'] = $Proj.domain }
|
if ($Proj.domain) { $headers['Host'] = $Proj.domain }
|
||||||
# Container-side first where the project configures it. A build stamp is
|
# Container-side first where the project configures it. The endpoint is
|
||||||
# not public on every site, and the proxy answers from whichever vhost
|
# not public on every project, and the edge answers from whichever vhost
|
||||||
# matches the Host header - which is how a check reads another service.
|
# matches the Host header -- which is how a check reads another
|
||||||
|
# product's version.
|
||||||
$execCmd = Get-ServerSideVersionCommand -Proj $Proj
|
$execCmd = Get-ServerSideVersionCommand -Proj $Proj
|
||||||
if ($execCmd -and (Test-Path $PemKey)) {
|
if ($execCmd -and (Test-Path $PemKey)) {
|
||||||
try {
|
try {
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
REM Evomedia.net Token Savers — https://github.com/evomedia-net/evo.zscripts
|
REM Evomedia.net Token Savers — https://github.com/evomedia-net/evo.zscripts
|
||||||
REM Created by Kelly Michels · dev@evomedia.net
|
REM Created by Kelly Michels · dev@evomedia.net
|
||||||
REM Licensed under the MIT License. See LICENSE.
|
REM Licensed under the MIT License. See LICENSE.
|
||||||
REM Version: v1.0.0.0.25
|
REM Version: v1.0.0.0.28
|
||||||
|
|
||||||
@echo off
|
@echo off
|
||||||
powershell -NoProfile -ExecutionPolicy Bypass -File "%~dp0ZKillOnly.ps1" %*
|
powershell -NoProfile -ExecutionPolicy Bypass -File "%~dp0ZKillOnly.ps1" %*
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
# Evomedia.net Token Savers — https://github.com/evomedia-net/evo.zscripts
|
# evomedia.net Token Savers — https://github.com/evomedia-net/evo.zscripts
|
||||||
# Created by Kelly Michels · dev@evomedia.net
|
# Created by Kelly Michels · dev@evomedia.net
|
||||||
# Licensed under the MIT License. See LICENSE.
|
# Licensed under the MIT License. See LICENSE.
|
||||||
# Version: v1.0.0.0.25
|
# Version: v1.0.0.0.28
|
||||||
|
|
||||||
# zkill.ps1 — alias for ZKillOnly.ps1 (kept so both names work). All args pass through.
|
# zkill.ps1 — alias for ZKillOnly.ps1 (kept so both names work). All args pass through.
|
||||||
& (Join-Path $PSScriptRoot "ZKillOnly.ps1") @args
|
& (Join-Path $PSScriptRoot "ZKillOnly.ps1") @args
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
# Evomedia.net Token Savers — https://github.com/evomedia-net/evo.zscripts
|
# evomedia.net Token Savers — https://github.com/evomedia-net/evo.zscripts
|
||||||
# Created by Kelly Michels · dev@evomedia.net
|
# Created by Kelly Michels · dev@evomedia.net
|
||||||
# Licensed under the MIT License. See LICENSE.
|
# Licensed under the MIT License. See LICENSE.
|
||||||
# Version: v1.0.0.0.25
|
# Version: v1.0.0.0.28
|
||||||
|
|
||||||
# zmerge.ps1 - merge the fleet's ready pull requests in one pass.
|
# zmerge.ps1 - merge the fleet's ready pull requests in one pass.
|
||||||
#
|
#
|
||||||
|
|||||||
@ -2,5 +2,5 @@
|
|||||||
REM Evomedia.net Token Savers — https://github.com/evomedia-net/evo.zscripts
|
REM Evomedia.net Token Savers — https://github.com/evomedia-net/evo.zscripts
|
||||||
REM Created by Kelly Michels · dev@evomedia.net
|
REM Created by Kelly Michels · dev@evomedia.net
|
||||||
REM Licensed under the MIT License. See LICENSE.
|
REM Licensed under the MIT License. See LICENSE.
|
||||||
REM Version: v1.0.0.0.25
|
REM Version: v1.0.0.0.28
|
||||||
powershell -NoProfile -ExecutionPolicy Bypass -File "%~dp0zpull.ps1" %*
|
powershell -NoProfile -ExecutionPolicy Bypass -File "%~dp0zpull.ps1" %*
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
# Evomedia.net Token Savers — https://github.com/evomedia-net/evo.zscripts
|
# evomedia.net Token Savers — https://github.com/evomedia-net/evo.zscripts
|
||||||
# Created by Kelly Michels · dev@evomedia.net
|
# Created by Kelly Michels · dev@evomedia.net
|
||||||
# Licensed under the MIT License. See LICENSE.
|
# Licensed under the MIT License. See LICENSE.
|
||||||
# Version: v1.0.0.0.25
|
# Version: v1.0.0.0.28
|
||||||
|
|
||||||
# zpull.ps1 - merge the fleet's ready PRs, then bring the local checkouts current.
|
# zpull.ps1 - merge the fleet's ready PRs, then bring the local checkouts current.
|
||||||
#
|
#
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
REM Evomedia.net — https://github.com/evomedia-net/evo.zscripts
|
REM Evomedia.net — https://github.com/evomedia-net/evo.zscripts
|
||||||
REM Created by Kelly Michels · dev@evomedia.net
|
REM Created by Kelly Michels · dev@evomedia.net
|
||||||
REM Licensed under the MIT License. See LICENSE.
|
REM Licensed under the MIT License. See LICENSE.
|
||||||
REM Version: v1.0.0.0.25
|
REM Version: v1.0.0.0.28
|
||||||
|
|
||||||
@echo off
|
@echo off
|
||||||
powershell -NoProfile -ExecutionPolicy Bypass -File "%~dp0zrelease.ps1" %*
|
powershell -NoProfile -ExecutionPolicy Bypass -File "%~dp0zrelease.ps1" %*
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
# Evomedia.net — https://github.com/evomedia-net/evo.zscripts
|
# evomedia.net — https://github.com/evomedia-net/evo.zscripts
|
||||||
# Created by Kelly Michels · dev@evomedia.net
|
# Created by Kelly Michels · dev@evomedia.net
|
||||||
# Licensed under the MIT License. See LICENSE.
|
# Licensed under the MIT License. See LICENSE.
|
||||||
# Version: v1.0.0.0.25
|
# Version: v1.0.0.0.28
|
||||||
|
|
||||||
# zrelease.ps1 - package the current version as a downloadable zip.
|
# zrelease.ps1 - package the current version as a downloadable zip.
|
||||||
#
|
#
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
REM Evomedia.net Token Savers — https://github.com/evomedia-net/evo.zscripts
|
REM Evomedia.net Token Savers — https://github.com/evomedia-net/evo.zscripts
|
||||||
REM Created by Kelly Michels · dev@evomedia.net
|
REM Created by Kelly Michels · dev@evomedia.net
|
||||||
REM Licensed under the MIT License. See LICENSE.
|
REM Licensed under the MIT License. See LICENSE.
|
||||||
REM Version: v1.0.0.0.25
|
REM Version: v1.0.0.0.28
|
||||||
|
|
||||||
@echo off
|
@echo off
|
||||||
powershell -NoProfile -ExecutionPolicy Bypass -File "%~dp0zrepair.ps1" %*
|
powershell -NoProfile -ExecutionPolicy Bypass -File "%~dp0zrepair.ps1" %*
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
# Evomedia.net Token Savers — https://github.com/evomedia-net/evo.zscripts
|
# evomedia.net Token Savers — https://github.com/evomedia-net/evo.zscripts
|
||||||
# Created by Kelly Michels · dev@evomedia.net
|
# Created by Kelly Michels · dev@evomedia.net
|
||||||
# Licensed under the MIT License. See LICENSE.
|
# Licensed under the MIT License. See LICENSE.
|
||||||
# Version: v1.0.0.0.25
|
# Version: v1.0.0.0.28
|
||||||
|
|
||||||
# zrepair.ps1 — audit and repair container/proxy routing on the server, then smoke test.
|
# zrepair.ps1 — audit and repair container/proxy routing on the server, then smoke test.
|
||||||
#
|
#
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
REM Evomedia.net Token Savers — https://github.com/evomedia-net/evo.zscripts
|
REM Evomedia.net Token Savers — https://github.com/evomedia-net/evo.zscripts
|
||||||
REM Created by Kelly Michels · dev@evomedia.net
|
REM Created by Kelly Michels · dev@evomedia.net
|
||||||
REM Licensed under the MIT License. See LICENSE.
|
REM Licensed under the MIT License. See LICENSE.
|
||||||
REM Version: v1.0.0.0.25
|
REM Version: v1.0.0.0.28
|
||||||
|
|
||||||
@echo off
|
@echo off
|
||||||
powershell -NoProfile -ExecutionPolicy Bypass -File "%~dp0ZKiller.ps1" %*
|
powershell -NoProfile -ExecutionPolicy Bypass -File "%~dp0ZKiller.ps1" %*
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
# Evomedia.net Token Savers — https://github.com/evomedia-net/evo.zscripts
|
# evomedia.net Token Savers — https://github.com/evomedia-net/evo.zscripts
|
||||||
# Created by Kelly Michels · dev@evomedia.net
|
# Created by Kelly Michels · dev@evomedia.net
|
||||||
# Licensed under the MIT License. See LICENSE.
|
# Licensed under the MIT License. See LICENSE.
|
||||||
# Version: v1.0.0.0.25
|
# Version: v1.0.0.0.28
|
||||||
|
|
||||||
# zrestart.ps1 — alias for ZKiller.ps1 (kept so both names work). All args pass through.
|
# zrestart.ps1 — alias for ZKiller.ps1 (kept so both names work). All args pass through.
|
||||||
& (Join-Path $PSScriptRoot "ZKiller.ps1") @args
|
& (Join-Path $PSScriptRoot "ZKiller.ps1") @args
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
REM Evomedia.net Token Savers — https://github.com/evomedia-net/evo.zscripts
|
REM Evomedia.net Token Savers — https://github.com/evomedia-net/evo.zscripts
|
||||||
REM Created by Kelly Michels · dev@evomedia.net
|
REM Created by Kelly Michels · dev@evomedia.net
|
||||||
REM Licensed under the MIT License. See LICENSE.
|
REM Licensed under the MIT License. See LICENSE.
|
||||||
REM Version: v1.0.0.0.25
|
REM Version: v1.0.0.0.28
|
||||||
|
|
||||||
@echo off
|
@echo off
|
||||||
powershell -NoProfile -ExecutionPolicy Bypass -File "%~dp0ZKiller.ps1" -Detached %*
|
powershell -NoProfile -ExecutionPolicy Bypass -File "%~dp0ZKiller.ps1" -Detached %*
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
REM Evomedia.net Token Savers — https://github.com/evomedia-net/evo.zscripts
|
REM Evomedia.net Token Savers — https://github.com/evomedia-net/evo.zscripts
|
||||||
REM Created by Kelly Michels · dev@evomedia.net
|
REM Created by Kelly Michels · dev@evomedia.net
|
||||||
REM Licensed under the MIT License. See LICENSE.
|
REM Licensed under the MIT License. See LICENSE.
|
||||||
REM Version: v1.0.0.0.25
|
REM Version: v1.0.0.0.28
|
||||||
|
|
||||||
@echo off
|
@echo off
|
||||||
powershell -NoProfile -ExecutionPolicy Bypass -File "%~dp0zsetup.ps1" %*
|
powershell -NoProfile -ExecutionPolicy Bypass -File "%~dp0zsetup.ps1" %*
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
# Evomedia.net Token Savers — https://github.com/evomedia-net/evo.zscripts
|
# evomedia.net Token Savers — https://github.com/evomedia-net/evo.zscripts
|
||||||
# Created by Kelly Michels · dev@evomedia.net
|
# Created by Kelly Michels · dev@evomedia.net
|
||||||
# Licensed under the MIT License. See LICENSE.
|
# Licensed under the MIT License. See LICENSE.
|
||||||
# Version: v1.0.0.0.25
|
# Version: v1.0.0.0.28
|
||||||
|
|
||||||
# zsetup.ps1 — prepare a project for local dev: create its Python venv and install
|
# zsetup.ps1 — prepare a project for local dev: create its Python venv and install
|
||||||
# dependencies (python kind), or run `npm install` (vite/nextjs). Idempotent -
|
# dependencies (python kind), or run `npm install` (vite/nextjs). Idempotent -
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
# Evomedia.net Token Savers — https://github.com/evomedia-net/evo.zscripts
|
# evomedia.net Token Savers — https://github.com/evomedia-net/evo.zscripts
|
||||||
# Created by Kelly Michels · dev@evomedia.net
|
# Created by Kelly Michels · dev@evomedia.net
|
||||||
# Licensed under the MIT License. See LICENSE.
|
# Licensed under the MIT License. See LICENSE.
|
||||||
# Version: v1.0.0.0.25
|
# Version: v1.0.0.0.28
|
||||||
|
|
||||||
# zsetup_mail.ps1 — create admin@ and noreply@ mailboxes in a docker-mailserver
|
# zsetup_mail.ps1 — create admin@ and noreply@ mailboxes in a docker-mailserver
|
||||||
# container on the server, and print the DNS records + SMTP/IMAP settings to use.
|
# container on the server, and print the DNS records + SMTP/IMAP settings to use.
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
REM Evomedia.net Token Savers — https://github.com/evomedia-net/evo.zscripts
|
REM Evomedia.net Token Savers — https://github.com/evomedia-net/evo.zscripts
|
||||||
REM Created by Kelly Michels · dev@evomedia.net
|
REM Created by Kelly Michels · dev@evomedia.net
|
||||||
REM Licensed under the MIT License. See LICENSE.
|
REM Licensed under the MIT License. See LICENSE.
|
||||||
REM Version: v1.0.0.0.25
|
REM Version: v1.0.0.0.28
|
||||||
|
|
||||||
@echo off
|
@echo off
|
||||||
powershell -NoProfile -ExecutionPolicy Bypass -File "%~dp0ZStart.ps1" %*
|
powershell -NoProfile -ExecutionPolicy Bypass -File "%~dp0ZStart.ps1" %*
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
# Evomedia.net Token Savers — https://github.com/evomedia-net/evo.zscripts
|
# evomedia.net Token Savers — https://github.com/evomedia-net/evo.zscripts
|
||||||
# Created by Kelly Michels · dev@evomedia.net
|
# Created by Kelly Michels · dev@evomedia.net
|
||||||
# Licensed under the MIT License. See LICENSE.
|
# Licensed under the MIT License. See LICENSE.
|
||||||
# Version: v1.0.0.0.25
|
# Version: v1.0.0.0.28
|
||||||
|
|
||||||
# zstart.ps1 — start local dev servers for any project defined in zconfig.json.
|
# zstart.ps1 — start local dev servers for any project defined in zconfig.json.
|
||||||
#
|
#
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
REM Evomedia.net Token Savers — https://github.com/evomedia-net/evo.zscripts
|
REM Evomedia.net Token Savers — https://github.com/evomedia-net/evo.zscripts
|
||||||
REM Created by Kelly Michels · dev@evomedia.net
|
REM Created by Kelly Michels · dev@evomedia.net
|
||||||
REM Licensed under the MIT License. See LICENSE.
|
REM Licensed under the MIT License. See LICENSE.
|
||||||
REM Version: v1.0.0.0.25
|
REM Version: v1.0.0.0.28
|
||||||
|
|
||||||
@echo off
|
@echo off
|
||||||
powershell -NoProfile -ExecutionPolicy Bypass -File "%~dp0zstart_docker.ps1" %*
|
powershell -NoProfile -ExecutionPolicy Bypass -File "%~dp0zstart_docker.ps1" %*
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
# Evomedia.net Token Savers — https://github.com/evomedia-net/evo.zscripts
|
# evomedia.net Token Savers — https://github.com/evomedia-net/evo.zscripts
|
||||||
# Created by Kelly Michels · dev@evomedia.net
|
# Created by Kelly Michels · dev@evomedia.net
|
||||||
# Licensed under the MIT License. See LICENSE.
|
# Licensed under the MIT License. See LICENSE.
|
||||||
# Version: v1.0.0.0.25
|
# Version: v1.0.0.0.28
|
||||||
|
|
||||||
# zstart_docker.ps1 — bring up a local docker compose stack from <scriptsRoot>\docker\.
|
# zstart_docker.ps1 — bring up a local docker compose stack from <scriptsRoot>\docker\.
|
||||||
#
|
#
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
REM Evomedia.net Token Savers — https://github.com/evomedia-net/evo.zscripts
|
REM Evomedia.net Token Savers — https://github.com/evomedia-net/evo.zscripts
|
||||||
REM Created by Kelly Michels · dev@evomedia.net
|
REM Created by Kelly Michels · dev@evomedia.net
|
||||||
REM Licensed under the MIT License. See LICENSE.
|
REM Licensed under the MIT License. See LICENSE.
|
||||||
REM Version: v1.0.0.0.25
|
REM Version: v1.0.0.0.28
|
||||||
|
|
||||||
@echo off
|
@echo off
|
||||||
powershell -NoProfile -ExecutionPolicy Bypass -File "%~dp0ZStart.ps1" -Detached %*
|
powershell -NoProfile -ExecutionPolicy Bypass -File "%~dp0ZStart.ps1" -Detached %*
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
# Evomedia.net Token Savers — https://github.com/evomedia-net/evo.zscripts
|
# evomedia.net Token Savers — https://github.com/evomedia-net/evo.zscripts
|
||||||
# Created by Kelly Michels · dev@evomedia.net
|
# Created by Kelly Michels · dev@evomedia.net
|
||||||
# Licensed under the MIT License. See LICENSE.
|
# Licensed under the MIT License. See LICENSE.
|
||||||
# Version: v1.0.0.0.25
|
# Version: v1.0.0.0.28
|
||||||
|
|
||||||
# zstop.ps1 — stop docker compose stacks on the server without removing data or files.
|
# zstop.ps1 — stop docker compose stacks on the server without removing data or files.
|
||||||
#
|
#
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
REM Evomedia.net Token Savers — https://github.com/evomedia-net/evo.zscripts
|
REM Evomedia.net Token Savers — https://github.com/evomedia-net/evo.zscripts
|
||||||
REM Created by Kelly Michels · dev@evomedia.net
|
REM Created by Kelly Michels · dev@evomedia.net
|
||||||
REM Licensed under the MIT License. See LICENSE.
|
REM Licensed under the MIT License. See LICENSE.
|
||||||
REM Version: v1.0.0.0.25
|
REM Version: v1.0.0.0.28
|
||||||
|
|
||||||
@echo off
|
@echo off
|
||||||
powershell -NoProfile -ExecutionPolicy Bypass -File "%~dp0zsync.ps1" %*
|
powershell -NoProfile -ExecutionPolicy Bypass -File "%~dp0zsync.ps1" %*
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
# Evomedia.net Token Savers — https://github.com/evomedia-net/evo.zscripts
|
# evomedia.net Token Savers — https://github.com/evomedia-net/evo.zscripts
|
||||||
# Created by Kelly Michels · dev@evomedia.net
|
# Created by Kelly Michels · dev@evomedia.net
|
||||||
# Licensed under the MIT License. See LICENSE.
|
# Licensed under the MIT License. See LICENSE.
|
||||||
# Version: v1.0.0.0.25
|
# Version: v1.0.0.0.28
|
||||||
|
|
||||||
# zsync.ps1 — copy new backup files offsite; or build + mirror a vite project's dist.
|
# zsync.ps1 — copy new backup files offsite; or build + mirror a vite project's dist.
|
||||||
#
|
#
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
REM Evomedia.net — https://github.com/evomedia-net/evo.zscripts
|
REM Evomedia.net — https://github.com/evomedia-net/evo.zscripts
|
||||||
REM Created by Kelly Michels · dev@evomedia.net
|
REM Created by Kelly Michels · dev@evomedia.net
|
||||||
REM Licensed under the MIT License. See LICENSE.
|
REM Licensed under the MIT License. See LICENSE.
|
||||||
REM Version: v1.0.0.0.25
|
REM Version: v1.0.0.0.28
|
||||||
|
|
||||||
@echo off
|
@echo off
|
||||||
powershell -NoProfile -ExecutionPolicy Bypass -File "%~dp0zversion.ps1" %*
|
powershell -NoProfile -ExecutionPolicy Bypass -File "%~dp0zversion.ps1" %*
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
# Evomedia.net — https://github.com/evomedia-net/evo.zscripts
|
# evomedia.net — https://github.com/evomedia-net/evo.zscripts
|
||||||
# Created by Kelly Michels · dev@evomedia.net
|
# Created by Kelly Michels · dev@evomedia.net
|
||||||
# Licensed under the MIT License. See LICENSE.
|
# Licensed under the MIT License. See LICENSE.
|
||||||
# Version: v1.0.0.0.25
|
# Version: v1.0.0.0.28
|
||||||
|
|
||||||
# zversion.ps1 - manage the toolkit version.
|
# zversion.ps1 - manage the toolkit version.
|
||||||
#
|
#
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user