Compare commits

..

8 Commits

Author SHA1 Message Date
5406c85837
chore(ci): re-run a test run once when a job in it times out (#96)
Some checks failed
tests / test (push) Has been cancelled
Kelly, 2026-10-03: a run past twice its usual time "should be verified if
it's failed and killed and/or restarted". The timeouts added in part 1
do the killing. This does the restarting, once.

A new workflow watches "tests". When a run of it ends cancelled or timed
out on its first attempt, it reads each stopped job's annotations and
re-runs the whole run only if one "exceeded the maximum execution
time". A run cancelled by hand or by a newer push is left alone, and a
second timeout stays red so a real hang reaches a person. On every other
run the job's `if` is false, so no runner starts.

Part 2 of evomedia-net/evo.testsuites#25.

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-03 16:24:17 -05:00
5bc77f2de1
docs(zdeploy): stop naming the server's web root in a comment (#95)
Some checks failed
tests / test (push) Has been cancelled
* docs(zdeploy): describe the landing layout without naming the server's web root

A comment in the static-site deploy path named the landing container's
real web root. It now says the container serves each host from its own
directory, which is all the comment needs. Comment only; no behaviour
change. Ported by hand from evo.scripts#196, since this file is
hand-maintained in the mirror.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* chore(checksums): record zdeploy.ps1's new hash

The comment change in the previous commit changed the file, so
CHECKSUMS.txt is regenerated with zchecksums -Update, as the suite requires.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-30 15:34:52 -05:00
57edc629c1
fix(deploy): decode the box's output as UTF-8 so progress bars render as bars, not "Γöü" (#94)
* fix(deploy): decode the box's output as UTF-8, so progress bars are bars and not "Γöü"

Mirror of the same change in the private scripts repo: [Console]::OutputEncoding is switched to UTF-8 (no BOM) around the deploy loop and restored in a finally. PowerShell 5.1 decodes ssh's stdout with the OEM code page, where the UTF-8 bytes of a progress bar read as three characters each.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>

* chore(checksums): zdeploy.ps1 changed, so its entry in CHECKSUMS.txt follows

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>

---------

Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-30 11:25:59 -05:00
73dd27c4f1
chore(release): v1.0.0.0.28 (#93)
Some checks failed
tests / test (push) Has been cancelled
Build stamp catch-up for 4 merged PR(s) since v1.0.0.0.27:
  b26be3c chore: write the site name as evomedia.net, lowercase (#92)
  22a7387 feat(site): link preview for zscripts.evomedia.net, with a card in the page's own colours (#91)
  86938d0 chore: publish the zec2 and zec2online comment updates to the mirror (#87)
  90f4301 fix: pin the .txt twins to LF so regenerating them stops reporting a change (#89)
2026-09-22 14:00:07 -05:00
b26be3cd2a
chore: write the site name as evomedia.net, lowercase (#92)
* chore: write the site name as evomedia.net, lowercase

The name is a domain and is written as one. Script headers, the README,
CHANGELOG and elevator pitch, their .txt twins, and the site page --
matching the same sweep in the private evo.scripts so the mirror does not
drift.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

* chore: refresh CHECKSUMS.txt for the lowercase sweep

Every script's header changed, so every hash did. The repo's own
Checksums test caught it -- which is what it is for.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
2026-09-22 13:40:03 -05:00
22a7387548
feat(site): link preview for zscripts.evomedia.net, with a card in the page's own colours (#91)
Some checks failed
tests / test (push) Has been cancelled
The page had a title and a description and nothing else, so pasting the link
anywhere rendered a bare URL.

- the full og:* block with absolute URLs, plus twitter:card and a canonical the
  og:url agrees with
- site/og-card.png, 1200x630, in the page's own dark palette so the preview and
  the page look like the same thing. Composed by make_og_card.py in the private
  tooling repo; it lives in site/ because that directory is what reaches the
  server.
- tests/LinkPreview.Tests.ps1

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 - so the test extracts the
z-commands named in og:image:alt and fails unless each one is a real .ps1 or
.cmd at the root. A card is public copy, and public copy must not advertise a
script that does not exist.

CHECKSUMS.txt is untouched: the manifest covers top-level executables only, and
nothing here is one.

Tested: 6 new tests, verified to fail when the card advertises ztests again.
Full suite 292 passed, 1 skipped.

Closes #90

Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
2026-09-16 17:52:27 -05:00
86938d0d80
chore: publish the zec2 and zec2online comment updates to the mirror (#87)
Some checks are pending
tests / test (push) Waiting to run
* chore: publish the zec2 and zec2online comment updates

Mirror drift, not new behaviour: the private copies had their comments
reworded and the public ones had not caught up.

Two things the new wording carries that the old did not:

zec2 now records WHY it grew an ssh of its own. The container-side version
read referenced three variables the script never defined, and because that
read 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. A
missing variable and an unreachable service looked identical from the
outside, which is the kind of thing worth writing down next to the fix.

Both files now describe the container-side read by what it is - an endpoint
that is not public on every project - rather than by a product's own
wording, which is what keeps this mirror publishable.

Published with zpublish_zscripts; CHECKSUMS.txt refreshed by the same run
and committed with them, as that script requires.

Tests: 286 passed, 1 skipped across the suite; checksums, plain-text twins
and sanitization re-run after the changelog edit - 70 passed.

README.txt was left out deliberately. Regenerating the twins rewrote it with
LF where the repo stores CRLF, and the content is byte-identical - a no-op
that would only have added noise to this diff.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

* fix: rehash zec2 and zec2online against their checked-out form

CI failed the manifest check on both files. The hashes in CHECKSUMS.txt were
computed from the copies zpublish_zscripts had just written, which land with
LF; .gitattributes pins *.ps1 to eol=crlf, so every checkout - CI's included
- materialises them with CRLF and hashes differently.

Local runs passed because the working tree had already been normalised by a
later git operation. Only CI, checking out clean, saw the mismatch. The new
hashes are byte-for-byte the "But was:" values from the failing run.

Nothing about the scripts changed; this is the manifest catching up with the
form the files actually take on disk after checkout.

Worth noting where the sharp edge is: the manifest is generated from the
working tree, so any tool that writes a pinned file and hashes it in the same
breath records a hash the repo will never reproduce. Re-materialising from
git before hashing is what makes the two agree.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
2026-09-15 20:47:18 -05:00
90f43010c1
fix: pin the .txt twins to LF so regenerating them stops reporting a change (#89)
Three things disagreed about line endings, and the generator lost:

  stored in git      LF
  checked out        CRLF   (core.autocrlf - nothing pinned *.txt)
  written by the     LF     (plaintext_twins.py, newline="\n")
  generator

So every run wrote LF over a CRLF checkout, git status reported each twin as
modified, and git add normalized it straight back to LF for an empty diff.

A generator that always reports work hides the one time it did some. It also
puts noise in front of the reviewer on every publish - exactly where a real
change should be easy to see - and trains the reader to discard the twins
without looking, which is how genuine drift gets thrown away.

Pinning *.txt to eol=lf makes checkout agree with both the generator and the
stored form. Verified: regenerate, and only .gitattributes is modified.

CHECKSUMS.txt keeps its own explicit line even though *.txt now covers it.
Its reason is different in kind - sha256sum -c treats a trailing CR as part
of the filename and reports every entry as missing, which is a broken
verification rather than a cosmetic diff - and that should not silently
depend on a glob above it staying where it is.

Closes #88

Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
2026-09-15 20:21:57 -05:00
69 changed files with 376 additions and 162 deletions

14
.gitattributes vendored
View File

@ -4,8 +4,18 @@
*.ps1 text eol=crlf
*.cmd text eol=crlf
# The checksum manifest must stay LF: `sha256sum -c` treats a trailing CR as
# part of the filename and reports every entry as missing.
# Every .txt here is either a generated twin or a manifest, and all of them
# 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
releases/*.sha256 text eol=lf

51
.github/workflows/rerun-timed-out.yml vendored Normal file
View 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

View File

@ -1,15 +1,27 @@
<!--
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
Licensed under the MIT License. See LICENSE.
-->
# Changelog
Notable changes to the Evomedia.net Token Savers.
Notable changes to the evomedia.net Token Savers.
## 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

View File

@ -1,15 +1,29 @@
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
Licensed under the MIT License. See LICENSE.
Changelog
=========
Notable changes to the Evomedia.net Token Savers.
Notable changes to the evomedia.net Token Savers.
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
------------------------

View File

@ -1,45 +1,45 @@
f17f6261f008d130bfdf9144b9a5891d26aa9adf7f46b1f43e1f5ebb30cd98f2 setup_backup_schedule.ps1
48afc2a0e335adab6a8f15f5c2d37a20e11db45b56403416c96cc0616ab8f4d2 token-count.ps1
49c5f0db99c6a28351b9c0a8ebc6c540257841a3fbbfbecd49d0943ddd79f004 zbackup.cmd
424f4ac95e5cf1532f09e97329ee1fa5fb0dbf251b5019f7ce8aa68fb6c0b3dd zbackup.ps1
efbdae46306461e22940c0825e5dae70f41085719ee84e8921e1af86e3c136a3 zbackup_and_sync.ps1
6788f5dc34e7a01522e24055f71f8bf62ab56c25a75f785a56ab83651b88862c zbackup_ec2.cmd
a0bf131d0efa75cb3ad468d51a857c272faabc362d793a9401ad5a51db1c7b2e zbackup_ec2.ps1
36c951f47da32b9d2fb47a80c23eef0b8e6a8cb3f14ffdefd9b70cc305d3a877 zchecksums.cmd
104383f41d1e7924aaee5e006862428001b47e97fb18ed9405b4f967fd78b4d0 zchecksums.ps1
9cd51b0aee0bd96c4ba1820a8bcdc0ad515cf26027113536a8f356a2854a8ff7 zdeploy.cmd
16bcfe8231f52788fc1e91626c1f3ddca2ef231f947dc7d72a0f9cad7bbe3bce zdeploy.ps1
a6891e5f6b9d443e9aa296ccd68f63b76e1d2d17ff5e3764a519287efc006bcd zec2.cmd
33ea8cd0b332643e7132c441f2cc6e6c1d6104981715bbdfe6e90c4307b8725c zec2.ps1
1ee7c70216a4db33b3e92726d3ca18c16c4fbcedae378b7e92bbcd67d2ba690a zec2_rotatekeys.cmd
efc43770e03c1e363f42064a7ee46c04e19a1c40e0f1daadf5b811d159d28967 zec2_rotatekeys.ps1
6215052f8e6fc2f276e7a3dbacc887e4e3e70e4f1f78eecee434991c23d31011 zec2online.cmd
163ea78ea6331115426cd00f7d3d818c739afbf6fed85d96e4090762a9528843 zec2online.ps1
d4bb99f85f591f3e2ee893788bce9e8020ad737dbd7a183eb713e43120a1ecde ZHelpers.ps1
e90f327cb4bdae778ff2c595d938e8292784bc1c7172f9770a569c820cb61f35 zkill.cmd
fc8865ebe5d493c8d560341f013cef1493a4b727439108b70edc839531cebb8a zkill.ps1
23a3cd3ed1b34c91d1ede7912ba7a2e0e5e50a2829d4875195627f2cb1b620a3 ZKiller.ps1
d8121dc2ccf589c24ef997f01e512010c4c4dc61f42f319c22e10716559fa4a6 ZKillOnly.ps1
233bc4aa4e313b3bb58f2398bafd0db43d35e3d825e2ebacd79373519ee88b8b zmerge.ps1
f08216ae69eda85b487d171c586ed66ce390af1bc73b3935c2a50ca659131b71 zpull.cmd
e7eb29df994b5b48084bc1487d9c6a2a5708fde0d7cc5aad0c14b710c5311990 zpull.ps1
1fc226de44f578b28110981230ef58e86a904501b5d894948e7ddcf32c21bf40 zrelease.cmd
cb389084017ca550e15ed8a15bf6cd6e4a832d21ccd5da83c447c3e399fadaf0 zrelease.ps1
05de8a2a2148c63171ff36bfbaf3461196db1c0ade8e0c1ebdab937e95801207 zrepair.cmd
545de7318378860d780ea6053e4a4898e531014d73188bfa293e63a5c2ba2d3b zrepair.ps1
b1f565d9d4e74aaf6bf9a2ac8264607c985265c344f1e3b812803a7bc2fa27f6 zrestart.cmd
fe7e89470443cc3da9b53125817daf4a16fac5d4091fa05dd4bdc82407474b4b zrestart.ps1
ee73b594b766cf8c9a2e7e274f47c68835f5dfa7e891bbf201ec7dd00ed2a7b5 zrestartd.cmd
61e575c5eb27785e8779a2b93f74a901bd3d3c091701b050334fdaa1c5e2ec47 zsetup.cmd
302d0786359bacba4a611ecc6a56c3c329ce25353b762e5c4d19e49c0d91430b zsetup.ps1
50c15f94b18347829eee2dc0e7c1f3a49929ddbe8e3b9c43805ad1c3fcadb0f0 zsetup_mail.ps1
67842347a94fd5230e2e321f2dc61e4c9f7050aa39ae5b6446bcf4a0c3fa2d6c zstart.cmd
4f05ee1c6748e81b7093cb63d1851963d484392bbd3fe8d0eeb33c7c05bf0186 zstart.ps1
d09e043d99019cb0aa50dc3f36d8c250174b593d126584fb0964848c76f785af zstart_docker.cmd
ddaf2b3303c6e11a1cf772ee721f2d671bb19b1668f3b72ac0a3d1e998305ccd zstart_docker.ps1
b1d4c3e22617f3248d86bc1d5c7abd1c8c8460f8449a8a02b73035e25ebe2a06 zstartd.cmd
0a9b6f66f26c5b763303006c19cbe71f27895910cfd0fe31aed040edca632cef zstop.ps1
986ea35c0d68c84cdd774296bec36b36ba88111b610ce600beb6736a87d7803d zsync.cmd
bbf463b0e270ce84e12e369eed2d2a3ed22dbf8515595f0e9de1f0d720281e29 zsync.ps1
f999bb677b1ebccf3aeb2515c4b11a5259f7809e8e20f0dad797caf2a6db9333 zversion.cmd
1f0e18b098aba1dea46e090614ecd84ac7016af07973f25b0d02a207d8f42723 zversion.ps1
6e95736007b3906950d95a830705ac1118ebfc11836d2c717d6dd49cb3157966 setup_backup_schedule.ps1
d6ab2ddb273a8ca870bd0673cffdd0907f16f4718367b4413a3e34bb1f1769c8 token-count.ps1
30ccf43c371ae95cecd5b443d9214ac8ea71ec83be94bc15bcf359beefb8dee1 zbackup.cmd
b3549b346c90a8ae5a05c4c91b7ac370f72467c4cb0d019edcd0ea80b994393e zbackup.ps1
b6e5e15f8e2b128219c7b8b9db3e9b7804eee60fd6aed43f184210048e518f3c zbackup_and_sync.ps1
b407ef5b298cd6fe94af492e9254b4447e34333d22f8c29d3e9d4d2881651cf3 zbackup_ec2.cmd
55df5f2e19e81317b1e33b7b030b252fc4d6f49c0c77229d9e4e86affeb3b8ef zbackup_ec2.ps1
64bc3148b09e422ffe4890339fade2354a31f2c7ba004f2728c29a0a39c32f08 zchecksums.cmd
3e1c573e446238cae494d22d25376f278333dc25fdbc0a5abbdaa9349722b438 zchecksums.ps1
049f8e79fc8c3d8d96ae8ccb1155d191e2dbf2753f4d4d73ceca00aa1ab0481b zdeploy.cmd
d2ead96436507c8efedc3c72045e623137a1f844940c4ff57c9c7ebe67645511 zdeploy.ps1
30918a9260cb6220d6e2140edcf319fc0fa1e75b7fe36d0efe68b0d10cdde241 zec2.cmd
695ec87ea6518933ee64524d369f1d0d5128bf6e54db31f555a888bdddcb9326 zec2.ps1
ce3209ed8eaab242286e76aeb11b1249239e2804e3de456a1609cc7caa780b43 zec2_rotatekeys.cmd
f58277779b5c54814c29dda55ab567960e305fa9ef515b1206076be97f623093 zec2_rotatekeys.ps1
30ed73711eeddb518e02eb5e1968b7cc1dad51f27ecf42155b515b097487c3f3 zec2online.cmd
1e8814928910ff4f3da59478511feb75280ba2e12111840fb47d2c5504741f0f zec2online.ps1
4ea81dc9e3cafc514b1e8224e633bf22bd88bfdc6e53545ff88a2a2d33715b4f ZHelpers.ps1
d97f9b5c68526c3295796b3042ee86194721eacab56b0efa0f3fdf16c881b0ea zkill.cmd
587de0b176788de917e713915ac468e44bf00cf9c9c7d6ea9b88aaec41ad6ea7 zkill.ps1
66556f55688d1f31e890d2b36143d3d0e2f5fcdded562e3d0a9591c02e827cda ZKiller.ps1
2c9e0fa5dabb1544b6600cb60e5f66e89c787f217db246553b830152ab976ec3 ZKillOnly.ps1
479d01a4c962eb1dba2dbfee913c3704048f29581a0a06d068c0fb9145c3a51c zmerge.ps1
dd1cfde33aec53fc0df4a34e45704a59bf48e094fcafcc0ec49e9d13aa442b6f zpull.cmd
9e746ad18b92ee7344061847b38c870f280421cf55d31e36a72a1514772e53a2 zpull.ps1
4a57e270fc75ae5419bd27cf01b7dd6d8965be8dd58e0c80af985cb7bf27bdc5 zrelease.cmd
a6906e118f13442340cc4e0b14d7523d63e85d2bdb0eff8fd3a7c25567af8962 zrelease.ps1
58e5b604cc260af7e644412094ff6e3bf799f80f9e52b9a83a044299f7704107 zrepair.cmd
186f7b0fb72808466ece328ea1a4e3a97bb2d4bae9f204ff7055e8b7f009614b zrepair.ps1
d97c9cf55b94c53dba49471d13f5c9870f2f50627ac5732ac4b60222da936244 zrestart.cmd
32a8484d356c5f740d7a12f18bf0dd51a0c7da66010f6a6f553d976484315eef zrestart.ps1
2ebf37f72323cac3963a4a95d1ae414fecf4da1e1e618147663c6cf94d1ece24 zrestartd.cmd
0a15ad0d341a5efdcd4c14e22e91d4b45f2bf87d0c5608fcf985200f6797bab4 zsetup.cmd
0d3042c5e44c3edf396005d0177f744c0c29536c25a50743e93a92156aa2a96c zsetup.ps1
498ad7f8a7a56b332fede299e7172211ba360e76d9244c6c93f7cceae8a58619 zsetup_mail.ps1
46b3782d9b05649bdb1bcbd2a007bf6abc889abee420ac2f6e75530fa45a4694 zstart.cmd
4b50cadf761f285f4fe655b143e04ec6b3565646ee8fb1ed165c234a201802b7 zstart.ps1
2d74dcca3d4f51a28c84fbef5cc134126b61dfcc8ffb35e2d72f9596bf685809 zstart_docker.cmd
5016654d9ad68e11b85594be5e05318e19c5c6154174f734c43251970bc2086f zstart_docker.ps1
1e1c5990e1dba41a165e797790f73cd33fcee5035eec65dd0d2610ea8b56a023 zstartd.cmd
a894876ad9fa1bfac6cacfec2a837914debb773e05b975d9b3cdf56589dd8ed2 zstop.ps1
2e165d35d9915099b98a14329c9eb2774b2bf2979c937bc3843d95b5b16400e7 zsync.cmd
5d008cc252b978a9f873101139054988dff24562655bdfcd22e781aa5c14029a zsync.ps1
d55020eeb926e7190d06cc3de3e4a0d0656e8c73e8a89032c06ffe29c0b661eb zversion.cmd
25de4c34219edb98b583be639b798b27c353e978a81f0480d49ba9d965f70f0b zversion.ps1

View File

@ -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
Licensed under the MIT License. See LICENSE.
-->

View File

@ -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
Licensed under the MIT License. See LICENSE.

View File

@ -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
Licensed under the MIT License. See LICENSE.
-->

View File

@ -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
Licensed under the MIT License. See LICENSE.

View File

@ -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
Licensed under the MIT License. See LICENSE.
-->

View File

@ -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
Licensed under the MIT License. See LICENSE.

View File

@ -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
# Licensed under the MIT License. See LICENSE.
# Version: v1.0.0.0.27
# Version: v1.0.0.0.28
# ZHelpers.ps1 — shared library dot-sourced by every z script. Not run directly.

View File

@ -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
# Licensed under the MIT License. See LICENSE.
# Version: v1.0.0.0.27
# Version: v1.0.0.0.28
# ZKillOnly.ps1 — stop local dev server listeners for any project in zconfig.json.
#

View File

@ -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
# Licensed under the MIT License. See LICENSE.
# Version: v1.0.0.0.27
# Version: v1.0.0.0.28
# ZKiller.ps1 — kill then restart dev servers for any project in zconfig.json.
#

View File

@ -1,3 +1,3 @@
{
"version": "v1.0.0.0.27"
"version": "v1.0.0.0.28"
}

Binary file not shown.

View File

@ -0,0 +1 @@
5eca5198ba500bb0e1ceb1e5000cfb405d5fb5024fa500daa8f64f9c012c1291 zscripts-v1.0.0.0.28.zip

View File

@ -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
# Licensed under the MIT License. See LICENSE.

View File

@ -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
# Licensed under the MIT License. See LICENSE.
# Version: v1.0.0.0.27
# Version: v1.0.0.0.28
# setup_backup_schedule.ps1 — create a scheduled task for daily backups + OneDrive sync
#

View File

@ -5,6 +5,26 @@
<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;

BIN
site/og-card.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

View File

@ -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
# Licensed under the MIT License. See LICENSE.

View File

@ -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
# Licensed under the MIT License. See LICENSE.

View File

@ -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
# Licensed under the MIT License. See LICENSE.

View 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"
}
}
}

View File

@ -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
# Licensed under the MIT License. See LICENSE.

View File

@ -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
# Licensed under the MIT License. See LICENSE.

View File

@ -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
# Licensed under the MIT License. See LICENSE.

View File

@ -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
# Licensed under the MIT License. See LICENSE.
# Version: v1.0.0.0.27
# Version: v1.0.0.0.28
# token-count.ps1 — measure script output volume to estimate AI agent token costs.
#

View File

@ -1,7 +1,7 @@
REM Evomedia.net Token Savers — https://github.com/evomedia-net/evo.zscripts
REM Created by Kelly Michels · dev@evomedia.net
REM Licensed under the MIT License. See LICENSE.
REM Version: v1.0.0.0.27
REM Version: v1.0.0.0.28
@echo off
powershell -NoProfile -ExecutionPolicy Bypass -File "%~dp0zbackup.ps1" %*

View File

@ -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
# Licensed under the MIT License. See LICENSE.
# Version: v1.0.0.0.27
# Version: v1.0.0.0.28
# zbackup.ps1 — local backups: zip project sources (plus a Postgres dump when the
# project's .env has a DATABASE_URL) into the backups folder.

View File

@ -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
# Licensed under the MIT License. See LICENSE.
# Version: v1.0.0.0.27
# Version: v1.0.0.0.28
# zbackup_and_sync.ps1 — run backups, then sync the backups folder offsite.
#

View File

@ -1,7 +1,7 @@
REM Evomedia.net Token Savers — https://github.com/evomedia-net/evo.zscripts
REM Created by Kelly Michels · dev@evomedia.net
REM Licensed under the MIT License. See LICENSE.
REM Version: v1.0.0.0.27
REM Version: v1.0.0.0.28
@echo off
powershell -NoProfile -ExecutionPolicy Bypass -File "%~dp0zbackup_ec2.ps1" %*

View File

@ -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
# Licensed under the MIT License. See LICENSE.
# Version: v1.0.0.0.27
# Version: v1.0.0.0.28
# 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).

View File

@ -1,7 +1,7 @@
REM Evomedia.net Token Savers — https://github.com/evomedia-net/evo.zscripts
REM Created by Kelly Michels · dev@evomedia.net
REM Licensed under the MIT License. See LICENSE.
REM Version: v1.0.0.0.27
REM Version: v1.0.0.0.28
@echo off
powershell -NoProfile -ExecutionPolicy Bypass -File "%~dp0zchecksums.ps1" %*

View File

@ -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
# Licensed under the MIT License. See LICENSE.
# Version: v1.0.0.0.27
# Version: v1.0.0.0.28
# zchecksums.ps1 - verify (or regenerate) SHA-256 checksums for the scripts.
#

View File

@ -1,7 +1,7 @@
REM Evomedia.net Token Savers — https://github.com/evomedia-net/evo.zscripts
REM Created by Kelly Michels · dev@evomedia.net
REM Licensed under the MIT License. See LICENSE.
REM Version: v1.0.0.0.27
REM Version: v1.0.0.0.28
@echo off
powershell -NoProfile -ExecutionPolicy Bypass -File "%~dp0zdeploy.ps1" %*

View File

@ -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
# Licensed under the MIT License. See LICENSE.
# Version: v1.0.0.0.27
# Version: v1.0.0.0.28
# 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
@ -1176,8 +1176,8 @@ function Invoke-StaticDeploy {
param([string]$Key, $Proj)
# Plain static sites - no build, no container of their own. The landing
# container serves them straight off disk out of /srv/$host, so shipping
# the files IS the deploy: there is nothing to restart afterwards.
# container serves them straight off disk, one directory per host, so
# shipping the files IS the deploy: there is nothing to restart afterwards.
$root = Join-Path $Proj.localRoot $Proj.siteDir
$remotePath = $Proj.remote.path
@ -1304,7 +1304,17 @@ function Invoke-ZTokensPublish {
# ── Dispatch ─────────────────────────────────────────────────────────────────
foreach ($key in $Projects) {
# pip, uv and docker draw progress bars with box-drawing characters: "━" is
# the bytes E2 94 81. PowerShell 5.1 decodes a native command's stdout - ssh's,
# here - with [Console]::OutputEncoding, which on Windows is the OEM code page
# (437 on this machine), where those three bytes read "Γöü". Forty per bar.
# Decode the box's output as the UTF-8 it is for the duration of the deploy,
# and put the console back in the finally so a deploy that throws does not
# leave the session changed.
$prevConsoleEncoding = [Console]::OutputEncoding
[Console]::OutputEncoding = New-Object System.Text.UTF8Encoding($false)
try {
foreach ($key in $Projects) {
# 'ztokens' matches the tool it runs (ztokens.cmd / ztokens.ps1). The old
# singular 'ztoken' still works so existing habits and any script that
# already calls it keep running.
@ -1320,6 +1330,9 @@ foreach ($key in $Projects) {
"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 tracking footer and before the trailing blank lines - the last thing on

View File

@ -1,7 +1,7 @@
REM Evomedia.net Token Savers — https://github.com/evomedia-net/evo.zscripts
REM Created by Kelly Michels · dev@evomedia.net
REM Licensed under the MIT License. See LICENSE.
REM Version: v1.0.0.0.27
REM Version: v1.0.0.0.28
@echo off
powershell -NoProfile -ExecutionPolicy Bypass -File "%~dp0zec2.ps1" %*

View File

@ -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
# Licensed under the MIT License. See LICENSE.
# Version: v1.0.0.0.27
# Version: v1.0.0.0.28
# zec2.ps1 — quick reachability check (TCP + HTTP + live build version) for deployed projects.
#
@ -22,9 +22,11 @@ Start-ZTracking
$cfg = Get-ZConfig
if (-not $HostName) { $HostName = $cfg.ec2.ip }
# Needed by the container-side version read below; same names zec2online.ps1
# uses. Without them that read throws inside its try/catch and falls through
# silently, which looks identical to a service that cannot be reached.
# Needed by the container-side version read below. zec2 had no ssh of its own
# before that, so the read referenced three variables this script never
# 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
$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
if ($r) { Write-Host " Live build: $(Get-LabelFromBuildJsonObj $r)" -ForegroundColor Gray }
} else {
# Container-side first where the project configures it: a build
# stamp is not public on every site, and asking the proxy answers
# from whichever vhost matches the Host header.
# Container-side first where the project configures it: the
# endpoint is not public on every project, and asking the edge
# answers from whichever vhost matches the Host header.
$execCmd = Get-ServerSideVersionCommand -Proj $Proj
$label = $null
if ($execCmd -and (Test-Path $PemKey)) {

View File

@ -1,7 +1,7 @@
REM Evomedia.net Token Savers — https://github.com/evomedia-net/evo.zscripts
REM Created by Kelly Michels · dev@evomedia.net
REM Licensed under the MIT License. See LICENSE.
REM Version: v1.0.0.0.27
REM Version: v1.0.0.0.28
@echo off
powershell -NoProfile -ExecutionPolicy Bypass -File "%~dp0zec2_rotatekeys.ps1" %*

View File

@ -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
# Licensed under the MIT License. See LICENSE.
# Version: v1.0.0.0.27
# Version: v1.0.0.0.28
# 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

View File

@ -1,7 +1,7 @@
REM Evomedia.net Token Savers — https://github.com/evomedia-net/evo.zscripts
REM Created by Kelly Michels · dev@evomedia.net
REM Licensed under the MIT License. See LICENSE.
REM Version: v1.0.0.0.27
REM Version: v1.0.0.0.28
@echo off
powershell -NoProfile -ExecutionPolicy Bypass -File "%~dp0zec2online.ps1" %*

View File

@ -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
# Licensed under the MIT License. See LICENSE.
# Version: v1.0.0.0.27
# Version: v1.0.0.0.28
# zec2online.ps1 — deep health check: verify apps are live AND running the expected
# build; auto-start downed stacks via docker compose and stream diagnostics.
@ -86,9 +86,10 @@ function Get-RemoteVersionLabel {
param($Proj)
$headers = @{}
if ($Proj.domain) { $headers['Host'] = $Proj.domain }
# Container-side first where the project configures it. A build stamp is
# not public on every site, and the proxy answers from whichever vhost
# matches the Host header - which is how a check reads another service.
# Container-side first where the project configures it. The endpoint is
# not public on every project, and the edge answers from whichever vhost
# matches the Host header -- which is how a check reads another
# product's version.
$execCmd = Get-ServerSideVersionCommand -Proj $Proj
if ($execCmd -and (Test-Path $PemKey)) {
try {

View File

@ -1,7 +1,7 @@
REM Evomedia.net Token Savers — https://github.com/evomedia-net/evo.zscripts
REM Created by Kelly Michels · dev@evomedia.net
REM Licensed under the MIT License. See LICENSE.
REM Version: v1.0.0.0.27
REM Version: v1.0.0.0.28
@echo off
powershell -NoProfile -ExecutionPolicy Bypass -File "%~dp0ZKillOnly.ps1" %*

View File

@ -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
# Licensed under the MIT License. See LICENSE.
# Version: v1.0.0.0.27
# Version: v1.0.0.0.28
# zkill.ps1 — alias for ZKillOnly.ps1 (kept so both names work). All args pass through.
& (Join-Path $PSScriptRoot "ZKillOnly.ps1") @args

View File

@ -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
# Licensed under the MIT License. See LICENSE.
# Version: v1.0.0.0.27
# Version: v1.0.0.0.28
# zmerge.ps1 - merge the fleet's ready pull requests in one pass.
#

View File

@ -2,5 +2,5 @@
REM Evomedia.net Token Savers — https://github.com/evomedia-net/evo.zscripts
REM Created by Kelly Michels · dev@evomedia.net
REM Licensed under the MIT License. See LICENSE.
REM Version: v1.0.0.0.27
REM Version: v1.0.0.0.28
powershell -NoProfile -ExecutionPolicy Bypass -File "%~dp0zpull.ps1" %*

View File

@ -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
# Licensed under the MIT License. See LICENSE.
# Version: v1.0.0.0.27
# Version: v1.0.0.0.28
# zpull.ps1 - merge the fleet's ready PRs, then bring the local checkouts current.
#

View File

@ -1,7 +1,7 @@
REM Evomedia.net — https://github.com/evomedia-net/evo.zscripts
REM Created by Kelly Michels · dev@evomedia.net
REM Licensed under the MIT License. See LICENSE.
REM Version: v1.0.0.0.27
REM Version: v1.0.0.0.28
@echo off
powershell -NoProfile -ExecutionPolicy Bypass -File "%~dp0zrelease.ps1" %*

View File

@ -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
# Licensed under the MIT License. See LICENSE.
# Version: v1.0.0.0.27
# Version: v1.0.0.0.28
# zrelease.ps1 - package the current version as a downloadable zip.
#

View File

@ -1,7 +1,7 @@
REM Evomedia.net Token Savers — https://github.com/evomedia-net/evo.zscripts
REM Created by Kelly Michels · dev@evomedia.net
REM Licensed under the MIT License. See LICENSE.
REM Version: v1.0.0.0.27
REM Version: v1.0.0.0.28
@echo off
powershell -NoProfile -ExecutionPolicy Bypass -File "%~dp0zrepair.ps1" %*

View File

@ -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
# Licensed under the MIT License. See LICENSE.
# Version: v1.0.0.0.27
# Version: v1.0.0.0.28
# zrepair.ps1 — audit and repair container/proxy routing on the server, then smoke test.
#

View File

@ -1,7 +1,7 @@
REM Evomedia.net Token Savers — https://github.com/evomedia-net/evo.zscripts
REM Created by Kelly Michels · dev@evomedia.net
REM Licensed under the MIT License. See LICENSE.
REM Version: v1.0.0.0.27
REM Version: v1.0.0.0.28
@echo off
powershell -NoProfile -ExecutionPolicy Bypass -File "%~dp0ZKiller.ps1" %*

View File

@ -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
# Licensed under the MIT License. See LICENSE.
# Version: v1.0.0.0.27
# Version: v1.0.0.0.28
# zrestart.ps1 — alias for ZKiller.ps1 (kept so both names work). All args pass through.
& (Join-Path $PSScriptRoot "ZKiller.ps1") @args

View File

@ -1,7 +1,7 @@
REM Evomedia.net Token Savers — https://github.com/evomedia-net/evo.zscripts
REM Created by Kelly Michels · dev@evomedia.net
REM Licensed under the MIT License. See LICENSE.
REM Version: v1.0.0.0.27
REM Version: v1.0.0.0.28
@echo off
powershell -NoProfile -ExecutionPolicy Bypass -File "%~dp0ZKiller.ps1" -Detached %*

View File

@ -1,7 +1,7 @@
REM Evomedia.net Token Savers — https://github.com/evomedia-net/evo.zscripts
REM Created by Kelly Michels · dev@evomedia.net
REM Licensed under the MIT License. See LICENSE.
REM Version: v1.0.0.0.27
REM Version: v1.0.0.0.28
@echo off
powershell -NoProfile -ExecutionPolicy Bypass -File "%~dp0zsetup.ps1" %*

View File

@ -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
# Licensed under the MIT License. See LICENSE.
# Version: v1.0.0.0.27
# Version: v1.0.0.0.28
# zsetup.ps1 — prepare a project for local dev: create its Python venv and install
# dependencies (python kind), or run `npm install` (vite/nextjs). Idempotent -

View File

@ -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
# Licensed under the MIT License. See LICENSE.
# Version: v1.0.0.0.27
# Version: v1.0.0.0.28
# 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.

View File

@ -1,7 +1,7 @@
REM Evomedia.net Token Savers — https://github.com/evomedia-net/evo.zscripts
REM Created by Kelly Michels · dev@evomedia.net
REM Licensed under the MIT License. See LICENSE.
REM Version: v1.0.0.0.27
REM Version: v1.0.0.0.28
@echo off
powershell -NoProfile -ExecutionPolicy Bypass -File "%~dp0ZStart.ps1" %*

View File

@ -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
# Licensed under the MIT License. See LICENSE.
# Version: v1.0.0.0.27
# Version: v1.0.0.0.28
# zstart.ps1 — start local dev servers for any project defined in zconfig.json.
#

View File

@ -1,7 +1,7 @@
REM Evomedia.net Token Savers — https://github.com/evomedia-net/evo.zscripts
REM Created by Kelly Michels · dev@evomedia.net
REM Licensed under the MIT License. See LICENSE.
REM Version: v1.0.0.0.27
REM Version: v1.0.0.0.28
@echo off
powershell -NoProfile -ExecutionPolicy Bypass -File "%~dp0zstart_docker.ps1" %*

View File

@ -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
# Licensed under the MIT License. See LICENSE.
# Version: v1.0.0.0.27
# Version: v1.0.0.0.28
# zstart_docker.ps1 — bring up a local docker compose stack from <scriptsRoot>\docker\.
#

View File

@ -1,7 +1,7 @@
REM Evomedia.net Token Savers — https://github.com/evomedia-net/evo.zscripts
REM Created by Kelly Michels · dev@evomedia.net
REM Licensed under the MIT License. See LICENSE.
REM Version: v1.0.0.0.27
REM Version: v1.0.0.0.28
@echo off
powershell -NoProfile -ExecutionPolicy Bypass -File "%~dp0ZStart.ps1" -Detached %*

View File

@ -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
# Licensed under the MIT License. See LICENSE.
# Version: v1.0.0.0.27
# Version: v1.0.0.0.28
# zstop.ps1 — stop docker compose stacks on the server without removing data or files.
#

View File

@ -1,7 +1,7 @@
REM Evomedia.net Token Savers — https://github.com/evomedia-net/evo.zscripts
REM Created by Kelly Michels · dev@evomedia.net
REM Licensed under the MIT License. See LICENSE.
REM Version: v1.0.0.0.27
REM Version: v1.0.0.0.28
@echo off
powershell -NoProfile -ExecutionPolicy Bypass -File "%~dp0zsync.ps1" %*

View File

@ -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
# Licensed under the MIT License. See LICENSE.
# Version: v1.0.0.0.27
# Version: v1.0.0.0.28
# zsync.ps1 — copy new backup files offsite; or build + mirror a vite project's dist.
#

View File

@ -1,7 +1,7 @@
REM Evomedia.net — https://github.com/evomedia-net/evo.zscripts
REM Created by Kelly Michels · dev@evomedia.net
REM Licensed under the MIT License. See LICENSE.
REM Version: v1.0.0.0.27
REM Version: v1.0.0.0.28
@echo off
powershell -NoProfile -ExecutionPolicy Bypass -File "%~dp0zversion.ps1" %*

View File

@ -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
# Licensed under the MIT License. See LICENSE.
# Version: v1.0.0.0.27
# Version: v1.0.0.0.28
# zversion.ps1 - manage the toolkit version.
#