Compare commits

...

914 Commits

Author SHA1 Message Date
4e1d211a14 v7.1.0
Some checks failed
Publish to npm / npm-publish (push) Failing after 1m11s
Release / build-and-release (push) Successful in 1m57s
2026-02-07 04:08:01 +00:00
bd3b1ba9dd feat(installer): switch installer/docs to use main branch; add automated installer instructions and update CI examples to use the installer; add release registries and access level in npmextra.json 2026-02-07 04:08:01 +00:00
5d419e40c1 v7.0.0
Some checks failed
Publish to npm / npm-publish (push) Failing after 1m17s
Release / build-and-release (push) Successful in 2m5s
2026-02-06 16:12:41 +00:00
9d295f2633 BREAKING CHANGE(szci): delegate Docker operations to @git.zone/tsdocker, remove internal Docker managers and deprecated modules, simplify CLI and env var handling 2026-02-06 16:12:41 +00:00
5d18e53e30 update 2025-12-14 01:42:14 +00:00
9ad5222b95 update to deno 2025-12-13 13:27:51 +00:00
dba2e2ae68 chore: Remove deprecated Gitea workflows and add new CI/CD configurations 2025-10-28 06:38:02 +00:00
6c8095260d 6.0.1
Some checks failed
Default (tags) / security (push) Failing after 22s
Default (tags) / test (push) Failing after 12s
Default (tags) / release (push) Has been skipped
Default (tags) / metadata (push) Has been skipped
2025-10-26 17:44:43 +00:00
95c4ae3b16 fix(tests): Migrate tests to Deno native runner and update Deno config 2025-10-26 17:44:43 +00:00
536ebca6ab 6.0.0
Some checks failed
Default (tags) / security (push) Failing after 22s
Default (tags) / test (push) Failing after 12s
Default (tags) / release (push) Has been skipped
Default (tags) / metadata (push) Has been skipped
2025-10-26 15:23:56 +00:00
88f64536c2 BREAKING CHANGE(szci): Rename project from npmci to szci and migrate runtime to Deno; add compiled binaries, installer and wrapper; update imports, env handling and package metadata 2025-10-26 15:23:56 +00:00
4854d27a19 4.1.37
Some checks failed
Default (tags) / security (push) Failing after 15s
Default (tags) / test (push) Successful in 1m28s
Default (tags) / metadata (push) Failing after 11s
Default (tags) / release (push) Failing after 22s
2024-11-17 01:01:22 +01:00
75a0e8a7d8 fix(docker): Enhanced base image extraction logic from Dockerfile 2024-11-17 01:01:22 +01:00
43eb19f772 4.1.36
Some checks failed
Default (tags) / security (push) Failing after 16s
Default (tags) / test (push) Successful in 1m26s
Default (tags) / metadata (push) Failing after 11s
Default (tags) / release (push) Failing after 21s
2024-11-17 00:50:43 +01:00
dc2665d250 fix(docker): Improve logging for Dockerfile build order with base image details. 2024-11-17 00:50:43 +01:00
00f324e151 4.1.35
Some checks failed
Default (tags) / security (push) Failing after 16s
Default (tags) / test (push) Successful in 1m32s
Default (tags) / metadata (push) Failing after 10s
Default (tags) / release (push) Failing after 21s
2024-11-17 00:32:56 +01:00
e38cc40f11 fix(docker): Fix Dockerfile dependency sorting and enhance environment variable handling for GitHub repos 2024-11-17 00:32:56 +01:00
e9e8acafe4 4.1.34 2024-11-05 02:39:53 +01:00
c763db40bb fix(connector): Remove unused typedrequest implementation in cloudlyconnector 2024-11-05 02:39:53 +01:00
01256480c4 4.1.33 2024-11-05 02:38:21 +01:00
c6918399bf fix(core): Updated dependencies and improved npm preparation logic. 2024-11-05 02:38:21 +01:00
66d28e5081 4.1.32 2024-10-23 21:50:30 +02:00
9de77139ea fix(dependencies): Update project dependencies to latest versions 2024-10-23 21:50:30 +02:00
7b4bf10cc0 4.1.31 2024-05-24 15:54:33 +02:00
9eaa6347c1 fix(core): update 2024-05-24 15:54:32 +02:00
6e4c967917 4.1.30 2024-05-24 00:17:31 +02:00
52a8f42fc9 fix(core): update 2024-05-24 00:17:31 +02:00
8e9a61bbb2 4.1.29 2024-05-23 21:47:07 +02:00
dc809a6023 fix(core): update 2024-05-23 21:47:06 +02:00
7eeca992b0 4.1.28 2024-05-17 16:23:48 +02:00
d018102014 fix(core): update 2024-05-17 16:23:47 +02:00
838f2d6959 4.1.27 2023-08-24 17:25:56 +02:00
0d42e5f6eb fix(core): update 2023-08-24 17:25:55 +02:00
f96de8cdc3 4.1.26 2023-08-09 11:26:22 +02:00
965833916f fix(core): update 2023-08-09 11:26:22 +02:00
81ec1391e3 4.1.25 2023-08-09 11:23:57 +02:00
bbbca44640 fix(core): update 2023-08-09 11:23:56 +02:00
7ba7dc54a1 4.1.24 2023-08-08 23:32:08 +02:00
4f98eeec2a fix(core): update 2023-08-08 23:32:07 +02:00
419a6b9e5f 4.1.23 2023-07-13 16:00:47 +02:00
9c040c34f5 fix(core): update 2023-07-13 16:00:47 +02:00
50d3f2d795 4.1.22 2023-07-12 18:23:32 +02:00
305856b9e1 fix(core): update 2023-07-12 18:23:31 +02:00
3683743f3c 4.1.21 2023-07-12 15:35:39 +02:00
41237e0e5f fix(core): update 2023-07-12 15:35:38 +02:00
bce84a0e74 4.1.20 2023-07-02 00:10:28 +02:00
79bed919d8 fix(core): update 2023-07-02 00:10:27 +02:00
4b202ce00e 4.1.19 2023-07-01 22:09:54 +02:00
16ca787314 fix(core): update 2023-07-01 22:09:54 +02:00
3a9b6f658a 4.1.18 2023-07-01 22:05:44 +02:00
5c5dbf303f fix(core): update 2023-07-01 22:05:43 +02:00
4c07131e51 4.1.17 2023-07-01 19:23:17 +02:00
ba039469ff fix(core): update 2023-07-01 19:23:17 +02:00
49f2498ecd 4.1.16 2023-07-01 19:02:07 +02:00
1060060366 fix(core): update 2023-07-01 19:02:06 +02:00
0fa3a579f7 4.1.15 2023-06-26 10:09:25 +02:00
0e4556d59e fix(core): update 2023-06-26 10:09:24 +02:00
e2e7967fba 4.1.14 2023-06-26 09:28:19 +02:00
45b8d67abf fix(core): update 2023-06-26 09:28:19 +02:00
0a69aa5d62 4.1.13 2023-06-26 02:43:45 +02:00
dfbab1a1df fix(core): update 2023-06-26 02:43:45 +02:00
e58f009a24 4.1.12 2023-06-26 01:03:44 +02:00
2afd9cddc5 fix(core): update 2023-06-26 01:03:44 +02:00
d79c5366ef 4.1.11 2023-06-26 00:09:56 +02:00
8e4f7ad244 fix(core): update 2023-06-26 00:09:54 +02:00
39de3a1601 4.1.10 2023-06-25 23:59:26 +02:00
cb3d2964d1 fix(core): update 2023-06-25 23:59:25 +02:00
6b5390cef8 4.1.9 2023-06-25 23:26:25 +02:00
2736b85de3 fix(core): update 2023-06-25 23:26:25 +02:00
82d7778f59 4.1.8 2023-06-25 23:18:23 +02:00
8c99cc0491 fix(core): update 2023-06-25 23:18:23 +02:00
955e3d0dbe 4.1.7 2023-06-25 23:16:29 +02:00
702ae8bed8 fix(core): update 2023-06-25 23:16:29 +02:00
b6f0723b75 4.1.6 2023-06-25 22:23:31 +02:00
8a2fb30e59 fix(core): update 2023-06-25 22:23:30 +02:00
95b4030120 4.1.5 2023-06-25 21:15:51 +02:00
5c77cfbdc2 fix(core): update 2023-06-25 21:15:50 +02:00
5ea42320a9 4.1.4 2023-05-07 22:35:19 +02:00
d07ebfc9c6 fix(core): update 2023-05-07 22:35:18 +02:00
bbb5718184 4.1.3 2023-05-07 21:30:59 +02:00
0d8b54637c fix(core): update 2023-05-07 21:30:58 +02:00
e51b2e28b9 4.1.2 2022-11-02 18:57:47 +01:00
f767140cc8 fix(core): update 2022-11-02 18:57:47 +01:00
0d4d69f072 4.1.1 2022-11-02 16:43:54 +01:00
a3e628c43f fix(core): update 2022-11-02 16:43:54 +01:00
a58fa135c1 4.1.0 2022-10-24 21:23:14 +02:00
93c7af6c91 feat(precheck): now includes a precheck for more generic runner execution 2022-10-24 21:23:14 +02:00
ad0e12bf7b 4.0.11 2022-10-23 17:19:42 +02:00
498dd6eff6 fix(core): update 2022-10-23 17:19:41 +02:00
b3aa964739 4.0.10 2022-10-11 14:26:43 +02:00
03eb9d2657 fix(core): update 2022-10-11 14:26:42 +02:00
373a838a6a 4.0.9 2022-10-11 14:08:00 +02:00
960e3f4675 fix(core): update 2022-10-11 14:07:59 +02:00
09bf676b58 4.0.8 2022-10-11 13:59:40 +02:00
76ba8e2ab9 fix(core): update 2022-10-11 13:59:39 +02:00
aaaaca2d19 4.0.7 2022-10-11 13:59:16 +02:00
71b27eda17 fix(core): update 2022-10-11 13:59:15 +02:00
2d00882fd7 4.0.6 2022-10-11 13:58:48 +02:00
ba5e69041f fix(core): update 2022-10-11 13:58:48 +02:00
d2871d601a 4.0.5 2022-10-11 13:40:26 +02:00
9c66d88dc0 fix(core): update 2022-10-11 13:40:25 +02:00
fb4c84e1de 4.0.4 2022-10-11 13:38:40 +02:00
57aca36f11 fix(core): update 2022-10-11 13:38:40 +02:00
905f594af1 4.0.3 2022-10-11 13:26:50 +02:00
b788b7f96b fix(core): update 2022-10-11 13:26:49 +02:00
319a2dc41a 4.0.2 2022-10-11 13:08:10 +02:00
e01a998f0e fix(core): update 2022-10-11 13:08:10 +02:00
e40606d97b 4.0.1 2022-10-11 10:53:12 +02:00
449c7b2c04 fix(core): update 2022-10-11 10:53:12 +02:00
006782b57f 4.0.0 2022-10-09 18:15:37 +02:00
d643da29b0 BREAKING CHANGE(core): switch to esm style module 2022-10-09 18:15:37 +02:00
635f92d2bc 3.1.83 2022-01-18 18:10:28 +01:00
9a2cb56094 fix(core): update 2022-01-18 18:10:27 +01:00
5886283002 3.1.82 2021-11-10 12:42:42 +01:00
f886194c9c 3.1.81 2021-11-10 12:40:13 +01:00
e4efec89d9 fix(core): update 2021-11-10 12:40:12 +01:00
dbc12a593f 3.1.80 2021-11-09 20:27:31 +01:00
d7666e862b fix(core): update 2021-11-09 20:27:30 +01:00
e262d29510 3.1.79 2021-11-07 04:20:14 +01:00
858d97cb5c fix(core): update 2021-11-07 04:20:14 +01:00
b8a2df66fe 3.1.78 2021-10-22 01:51:43 +02:00
1c128dd694 fix(core): update 2021-10-22 01:51:43 +02:00
2744d0bf7f 3.1.77 2021-10-19 03:09:50 +02:00
9eb232da39 fix(core): update 2021-10-19 03:09:50 +02:00
52af1d5188 3.1.76 2021-05-14 18:19:43 +00:00
4325f21c8c fix(core): update 2021-05-14 18:19:42 +00:00
6cd3eaceb4 3.1.75 2021-05-14 18:11:13 +00:00
f850c79b6c fix(core): update 2021-05-14 18:11:12 +00:00
efdf789575 3.1.74 2019-11-26 17:47:22 +00:00
6ef6446022 fix(npm cache): now correctly setting it when preparing npm 2019-11-26 17:47:21 +00:00
ef7d85e7c4 3.1.73 2019-11-24 13:52:19 +00:00
93b5d9869b 3.1.72 2019-11-24 11:51:53 +00:00
2a0cfeffe9 fix(core): update 2019-11-24 11:51:52 +00:00
909aafbd5f 3.1.71 2019-11-23 22:36:34 +00:00
91288e2d74 3.1.70 2019-11-23 22:32:09 +00:00
25709b1f9a fix(core): update 2019-11-23 22:32:08 +00:00
8a03d9aa94 3.1.69 2019-11-23 19:46:24 +00:00
bbe1cf770a 3.1.68 2019-11-23 19:46:02 +00:00
ac8190282f fix(core): update 2019-11-23 19:46:02 +00:00
446d140e32 3.1.68 2019-11-23 19:45:00 +00:00
726948651e fix(core): update 2019-11-23 19:44:59 +00:00
dd0a7bb782 3.1.67 2019-10-04 15:18:51 +02:00
fca00ffcf8 fix(core): update 2019-10-04 15:18:51 +02:00
13f6334ae5 3.1.66 2019-10-03 00:00:20 +02:00
7275a858d6 fix(core): update 2019-10-03 00:00:20 +02:00
5a3befe5af 3.1.65 2019-10-02 23:55:55 +02:00
385a93a05e update 2019-10-02 23:55:51 +02:00
b4d444ff05 3.1.64 2019-10-02 14:54:21 +02:00
487bcb9a70 fix(core): update 2019-10-02 14:54:21 +02:00
aaf11b66d7 3.1.63 2019-10-02 11:57:00 +02:00
83d7d46896 fix(core): update 2019-10-02 11:56:59 +02:00
693bda6a49 3.1.62 2019-10-02 11:56:06 +02:00
bfe3e266ee fix(core): update 2019-10-02 11:56:05 +02:00
5f33ebd8a7 3.1.61 2019-10-02 11:33:52 +02:00
f78c80e100 fix(core): update 2019-10-02 11:33:52 +02:00
f4d8656831 3.1.60 2019-09-01 14:21:30 +02:00
2290081ef0 fix(core): update 2019-09-01 14:21:30 +02:00
189d02a16f 3.1.59 2019-09-01 14:11:35 +02:00
55aee04334 fix(core): update 2019-09-01 14:11:35 +02:00
0e407b9b9d 3.1.58 2019-09-01 13:54:00 +02:00
24095bbd40 fix(core): update 2019-09-01 13:54:00 +02:00
f97ee94b5a 3.1.57 2019-09-01 13:51:12 +02:00
4cf7aea374 fix(core): update 2019-09-01 13:51:11 +02:00
6ab5e9cb30 3.1.56 2019-09-01 13:49:28 +02:00
95c1145bf5 3.1.55 2019-09-01 13:49:12 +02:00
ea04a1b788 fix(core): update 2019-09-01 13:49:11 +02:00
3bc2499d09 3.1.54 2019-09-01 13:46:03 +02:00
1f5967ac45 fix(core): update 2019-09-01 13:46:03 +02:00
fd952f086b 3.1.53 2019-09-01 13:45:19 +02:00
79500cb2c2 fix(core): update 2019-09-01 13:45:18 +02:00
6c58864fcf 3.1.52 2019-09-01 13:44:22 +02:00
7ea3ac182d fix(core): update 2019-09-01 13:44:21 +02:00
8979d26005 3.1.51 2019-09-01 13:41:04 +02:00
c8876dac88 fix(core): update 2019-09-01 13:41:03 +02:00
9c8a257c2a 3.1.50 2019-08-30 18:40:00 +02:00
8b77930ece fix(core): update 2019-08-30 18:39:59 +02:00
ba672d030f 3.1.49 2019-08-30 14:51:04 +02:00
8ad7e016e7 fix(core): update 2019-08-30 14:51:03 +02:00
d843311d7b 3.1.48 2019-08-30 13:30:16 +02:00
14ef2cfa9b 3.1.47 2019-08-30 12:24:01 +02:00
648effcf86 fix(core): update 2019-08-30 12:24:00 +02:00
572738e88f 3.1.46 2019-08-30 10:40:38 +02:00
129ae93044 fix(core): update 2019-08-30 10:40:38 +02:00
e910892231 3.1.45 2019-08-30 10:38:48 +02:00
6d9cabf7ee fix(core): update 2019-08-30 10:38:47 +02:00
7c7787e811 3.1.44 2019-08-29 20:56:03 +02:00
bde26cc312 fix(core): update 2019-08-29 20:56:02 +02:00
29e81f3ae7 3.1.43 2019-08-29 20:38:45 +02:00
6337b20d62 fix(core): update 2019-08-29 20:38:44 +02:00
6dd537fe43 3.1.42 2019-08-29 20:26:24 +02:00
7191b172a4 fix(core): update 2019-08-29 20:26:23 +02:00
9a4611b70f 3.1.41 2019-08-27 16:45:47 +02:00
189dbc3654 fix(core): update 2019-08-27 16:45:46 +02:00
fc95fc96ed 3.1.40 2019-08-23 17:04:29 +02:00
467eed57d7 fix(core): update 2019-08-23 17:04:29 +02:00
a5ca5444a0 3.1.39 2019-08-23 16:48:53 +02:00
17610cb834 fix(core): update 2019-08-23 16:48:52 +02:00
e1f2b5c6fe 3.1.38 2019-08-23 16:42:55 +02:00
edbbae0bd0 fix(core): update 2019-08-23 16:42:55 +02:00
0e820bec27 3.1.37 2019-07-18 14:42:15 +02:00
91a3d612c6 fix(core): update 2019-07-18 14:42:14 +02:00
c696730e55 3.1.36 2019-07-17 17:57:21 +02:00
38d38ce246 fix(core): update 2019-07-17 17:57:20 +02:00
adfdf68c38 3.1.35 2019-07-17 17:55:03 +02:00
d4a4d69941 fix(core): update 2019-07-17 17:55:02 +02:00
c1fed2c758 3.1.34 2019-07-17 17:04:10 +02:00
9918d81f59 fix(core): update 2019-07-17 17:04:10 +02:00
59d8338f6e 3.1.33 2019-06-19 14:00:24 +02:00
a4f8bd3320 fix(core): update 2019-06-19 14:00:24 +02:00
7c2fdb7224 3.1.32 2019-06-19 11:36:05 +02:00
37384aeb57 fix(core): update 2019-06-19 11:36:04 +02:00
60efda263f 3.1.31 2019-06-19 11:35:19 +02:00
19831037ec fix(core): update 2019-06-19 11:35:19 +02:00
a1d52af813 3.1.30 2019-06-19 10:41:58 +02:00
0a49ff9b03 fix(core): update 2019-06-19 10:41:58 +02:00
ca62326b46 3.1.29 2019-06-18 22:24:53 +02:00
e1de0ee479 fix(core): update 2019-06-18 22:24:53 +02:00
0dea101c07 3.1.28 2019-06-18 22:24:12 +02:00
380a49c59f fix(core): update 2019-06-18 22:24:12 +02:00
5133651e34 3.1.27 2019-06-18 17:30:05 +02:00
c8f26c7c48 fix(core): update 2019-06-18 17:30:04 +02:00
3bb5912046 3.1.26 2019-06-18 16:19:07 +02:00
d75258d9dd fix(core): update 2019-06-18 16:19:07 +02:00
b1577e7542 3.1.25 2019-05-08 22:50:57 +02:00
d5cdeffd17 fix(core): update 2019-05-08 22:50:57 +02:00
c62ce415e9 3.1.24 2019-05-08 22:44:34 +02:00
99014da1e8 fix(core): update 2019-05-08 22:44:34 +02:00
0b5dada524 3.1.23 2019-05-08 22:43:49 +02:00
40bddba3b5 fix(core): update 2019-05-08 22:43:48 +02:00
6f6ee6d799 3.1.22 2019-02-24 22:50:12 +01:00
e30cc3f5a0 fix(core): update 2019-02-24 22:50:12 +01:00
a4562d4d1b 3.1.21 2018-12-24 02:13:05 +01:00
524b405773 fix(core): update 2018-12-24 02:13:04 +01:00
0d19c1c68d 3.1.20 2018-12-23 18:57:15 +01:00
cff79bc3b4 fix(mirror): now refusing to mirror for private code 2018-12-23 18:57:15 +01:00
28541a838d 3.1.19 2018-12-23 18:54:17 +01:00
c3ab527341 fix(core): update 2018-12-23 18:54:16 +01:00
52cc249098 3.1.18 2018-12-23 17:29:25 +01:00
2e189b0660 fix(core): update 2018-12-23 17:29:25 +01:00
f876c7414b 3.1.17 2018-12-12 22:29:59 +01:00
08b7585cfc fix(core): update 2018-12-12 22:29:59 +01:00
76311fab72 3.1.16 2018-12-11 01:02:22 +01:00
1b73df64f5 fix(core): update 2018-12-11 01:02:21 +01:00
701cee573b 3.1.15 2018-12-11 00:25:40 +01:00
3dd086f711 fix(core): update 2018-12-11 00:25:39 +01:00
67ff5d09d4 3.1.14 2018-12-09 16:48:33 +01:00
5cb8a79b6a fix(core): update 2018-12-09 16:48:33 +01:00
2dcbca2362 3.1.13 2018-12-09 16:26:28 +01:00
bd63194f4b fix(core): update 2018-12-09 16:26:28 +01:00
2763fdef5f 3.1.12 2018-12-09 15:53:39 +01:00
bbedde01b9 fix(core): update 2018-12-09 15:53:38 +01:00
f26606f757 3.1.11 2018-12-09 15:22:20 +01:00
99b03aa796 fix(core): update 2018-12-09 15:22:20 +01:00
f30dd3da65 3.1.10 2018-12-09 14:59:51 +01:00
d4decddb4b fix(core): update 2018-12-09 14:59:51 +01:00
5c2880da1a 3.1.9 2018-12-09 14:53:44 +01:00
bfffc5b130 3.1.8 2018-12-09 14:39:25 +01:00
8900a13c6b fix(core): update 2018-12-09 14:39:24 +01:00
d42acf737f 3.1.7 2018-12-09 02:51:04 +01:00
77e3b2912d fix(core): update 2018-12-09 02:51:03 +01:00
103e470eb4 3.1.6 2018-12-09 02:50:00 +01:00
74c1324e55 fix(core): update 2018-12-09 02:50:00 +01:00
a1876963a8 3.1.5 2018-11-28 21:06:12 +01:00
5d88e25c99 fix(dependencies): update 2018-11-28 21:06:12 +01:00
b3c47546e2 3.1.4 2018-11-26 18:01:55 +01:00
6316e81958 fix(core): update 2018-11-26 18:01:54 +01:00
ff10afbee4 3.1.3 2018-11-24 15:12:55 +01:00
9dbfa77084 fix(ci): remove npmts build dependency 2018-11-24 15:12:55 +01:00
46dbd61d89 3.1.2 2018-11-24 15:10:56 +01:00
713df1867a fix(core): update 2018-11-24 15:10:55 +01:00
23886c1ed3 3.1.1 2018-11-24 15:08:08 +01:00
0c46b627be fix(core): update 2018-11-24 15:08:07 +01:00
622ccd8dd9 3.1.0 2018-11-24 15:00:19 +01:00
0079addfc5 feat(logging): use smartlog 2018-11-24 15:00:19 +01:00
8604c63d37 3.0.59 2018-09-22 15:18:21 +02:00
db0b38bd7b fix(cli): update cli files to be in line with gitzone cli template 2018-09-22 15:18:21 +02:00
edde87b6be 3.0.58 2018-09-22 14:36:26 +02:00
5085d664cb fix(fix request package usage): update 2018-09-22 14:36:25 +02:00
5d468fc840 3.0.57 2018-09-22 14:13:26 +02:00
e2ac6cdcc9 fix(dependencies): update 2018-09-22 14:13:25 +02:00
fcd04415be 3.0.56 2018-07-16 00:04:24 +02:00
1fd1899099 fix(ci): update to latest standards 2018-07-16 00:04:24 +02:00
7df7f882d1 3.0.55 2018-07-16 00:02:30 +02:00
348b4d60fd fix(security): snyk 2018-07-16 00:02:29 +02:00
37589fb5e5 3.0.54 2018-07-15 23:58:43 +02:00
3dd115fe42 fix(ci): adjust to newer build system 2018-07-15 23:58:43 +02:00
01c88a6a6c 3.0.53 2018-07-15 23:49:38 +02:00
f5cacb7400 fix(core): update 2018-07-15 23:49:37 +02:00
887da51d78 3.0.52 2018-07-02 23:15:25 +02:00
585703fc55 fix(core): switch to @pushrocks/smartpromise 2018-07-02 23:15:24 +02:00
ec3e296d73 3.0.51 2018-07-02 23:09:52 +02:00
33f234cf73 fix(core): update to latest standards 2018-07-02 23:09:52 +02:00
e7ec765ed5 3.0.50 2018-05-27 15:43:50 +02:00
2f46197864 fix(structure): removed .npmignore 2018-05-27 15:43:50 +02:00
da44233263 3.0.49 2018-05-27 15:41:58 +02:00
cb2430f7b2 fix(build): improved asset handling 2018-05-27 15:41:58 +02:00
5fe9134f4a 3.0.48 2018-05-27 14:34:42 +02:00
7681f09d38 feat(npm) switch to npm as default package manager 2018-05-27 14:34:38 +02:00
d55c77560a 3.0.47 2018-05-07 10:51:45 +02:00
0e337a3574 fix(ci): update .gitlab.yml to latest gitzone version 2018-05-07 10:51:45 +02:00
94c5567b75 3.0.46 2018-05-05 02:28:26 +02:00
7b37506d4e update .npmignore 2018-05-05 02:28:02 +02:00
a401633b73 3.0.45 2018-05-05 02:27:29 +02:00
948a8e64d7 3.0.44 2018-05-04 15:58:18 +02:00
9e8fbac573 update to better smartcli parsing 2018-05-04 15:58:11 +02:00
362740a55f 3.0.43 2018-05-04 00:48:32 +02:00
3edc08b0ed update snyk policy 2018-05-04 00:48:25 +02:00
15d7e6cbfc 3.0.42 2018-05-04 00:42:53 +02:00
6824210da0 3.0.41 2018-05-04 00:23:23 +02:00
41d2d04958 update dependencies 2018-05-04 00:23:21 +02:00
e490c6f730 3.0.40 2018-05-04 00:22:10 +02:00
bdf4815145 3.0.39 2018-05-03 23:52:55 +02:00
84fdf8b139 now cleans up before publishing 2018-05-03 23:52:51 +02:00
545896821d 3.0.38 2018-05-03 21:29:38 +02:00
c7516458bd update .gitignore 2018-05-03 21:29:35 +02:00
c2f92e63c5 3.0.37 2018-05-03 20:40:29 +02:00
d4116aefdb update npm 2018-05-03 20:40:26 +02:00
0f5f1f7772 3.0.36 2018-05-03 20:08:00 +02:00
7722187ea5 update ci 2018-05-03 20:07:49 +02:00
734a21c925 update publishing process 2018-05-03 19:56:38 +02:00
bb36beb682 3.0.35 2018-05-03 19:48:03 +02:00
3417ca83ed 3.0.34 2018-05-03 19:12:22 +02:00
dea6264c34 update ci 2018-05-03 19:12:17 +02:00
b6ca597ca5 3.0.33 2018-05-03 19:05:12 +02:00
1539d49426 update publish process 2018-05-03 19:05:09 +02:00
51fbc906a0 3.0.32 2018-04-29 17:40:18 +02:00
0e3732cade update 2018-04-29 17:40:14 +02:00
4f968472c8 update 2018-04-29 17:37:59 +02:00
68aa8d1302 3.0.31 2018-04-29 17:37:06 +02:00
cbfe992ffc update 2018-04-29 17:37:04 +02:00
6614b1c3d3 3.0.30 2018-04-29 16:37:38 +02:00
20fd6a8d7b update gitlab-ci 2018-04-29 16:37:33 +02:00
81eb0e252e 3.0.29 2018-04-29 16:32:37 +02:00
ac804886fa update publish step 2018-04-29 16:32:29 +02:00
36cce95f1d 3.0.28 2018-04-29 16:21:05 +02:00
0e4467e324 add access level for npm 2018-04-29 16:21:00 +02:00
912063b9a8 3.0.27 2018-04-29 16:13:05 +02:00
a7a41523fb update .gitignore 2018-04-29 16:13:02 +02:00
1fdc9eb159 update 2018-04-29 16:12:32 +02:00
d6f47a630e update 2018-04-29 15:02:16 +02:00
13012eaec4 3.0.26 2018-04-04 22:43:18 +02:00
32ef4c2f65 add .snyk policy 2018-04-04 22:43:15 +02:00
2bc892cb4c 3.0.25 2018-04-04 22:25:16 +02:00
0ab1e1ab7c add option for npm access level 2018-04-04 22:25:13 +02:00
c8c17e6cba 3.0.24 2017-10-11 18:15:25 +02:00
23dfefd813 update syntax 2017-10-11 18:15:22 +02:00
e180c46ffa 3.0.23 2017-10-11 18:14:08 +02:00
d86d47f42b fix docker testing 2017-10-11 18:14:05 +02:00
38cf8d5ac3 3.0.22 2017-10-11 17:48:45 +02:00
13ca161a8f update docker testing 2017-10-11 17:48:41 +02:00
01f5d9cb68 3.0.21 2017-10-09 18:10:04 +02:00
a69a27cfad update node versions 2017-10-09 18:10:01 +02:00
0c3ab87286 update 2017-09-12 21:02:41 +02:00
75be6f7974 3.0.20 2017-09-12 19:45:57 +02:00
8a556d6f9e update dependencies 2017-09-12 19:45:51 +02:00
d4d4b9449d 3.0.19 2017-09-08 23:32:33 +02:00
1d49c629a4 fix ci 2017-09-08 23:32:29 +02:00
5e579901d5 3.0.18 2017-09-08 23:30:38 +02:00
91d10f8b8f update ci 2017-09-08 23:30:31 +02:00
2018dd98bf 3.0.17 2017-09-08 23:26:18 +02:00
47667d0d59 rollback ci 2017-09-08 23:25:53 +02:00
49c2e0909d 3.0.16 2017-09-08 23:24:50 +02:00
124d7b9f0a update ci 2017-09-08 23:24:44 +02:00
a38e637e8d 3.0.15 2017-09-08 23:16:12 +02:00
6971df069a enable analytics 2017-09-08 23:16:09 +02:00
78e6f13adf 3.0.14 2017-09-08 18:24:42 +02:00
4a63e8f225 fix package.json bug 2017-09-08 18:24:34 +02:00
aface1fec6 3.0.13 2017-09-08 17:51:50 +02:00
a6424d113b update mirror 2017-09-08 17:51:48 +02:00
d295e36bf4 3.0.12 2017-09-08 15:00:46 +02:00
c0aba5d487 fix async execution 2017-09-08 15:00:43 +02:00
0d34e2bc7f 3.0.11 2017-09-08 14:58:46 +02:00
46c9df32d8 update git module 2017-09-08 14:58:44 +02:00
55014fbdb2 3.0.10 2017-08-29 06:07:18 +02:00
c247cc2892 now has working dockerBuildArgEnvMap 2017-08-29 06:07:13 +02:00
37b3c1abc9 start build args implementation 2017-08-28 19:11:24 +02:00
214c523306 3.0.9 2017-08-28 18:10:03 +02:00
1a465f336d now respoecting registryrepo maps 2017-08-28 18:09:59 +02:00
11ec419700 git improve npmextra.json config 2017-08-28 17:19:31 +02:00
b9cc0556a8 3.0.8 2017-08-28 17:11:54 +02:00
5eb07f1ad7 add git module and kvStore 2017-08-28 17:11:47 +02:00
10cc7cf581 3.0.7 2017-08-28 13:25:25 +02:00
abe2408773 end with error if an action is not found 2017-08-28 13:25:22 +02:00
8890caca3d 3.0.6 2017-08-28 13:08:32 +02:00
39bab8b43e add npmci npm publish 2017-08-28 13:08:21 +02:00
c590c394ba 3.0.5 2017-08-28 02:43:48 +02:00
3a93feea26 update pull mechanism 2017-08-28 02:43:43 +02:00
3666b35ce0 3.0.4 2017-08-28 02:36:27 +02:00
45c91f3dc1 compile 2017-08-28 02:36:23 +02:00
4646862fd6 update async nature of pull and push 2017-08-28 02:36:12 +02:00
fb95bdfdc0 3.0.3 2017-08-28 02:24:15 +02:00
dca4010f97 now handles docker registries the right way 2017-08-28 02:24:06 +02:00
3b3a303c55 3.0.2 2017-08-28 01:35:28 +02:00
563414882e now working correctly and async 2017-08-28 01:35:21 +02:00
71c30e7563 3.0.1 2017-08-28 01:04:05 +02:00
d89cc90c4b update 2017-08-28 01:03:59 +02:00
108758ad19 3.0.0 2017-08-27 15:24:23 +02:00
6e816f35f6 update to new cli scheme 2017-08-27 15:24:17 +02:00
e6bc38c7e5 2.4.15 2017-08-26 12:54:25 +02:00
da3ee27d05 update to notice missing gitlab registry token 2017-08-26 12:54:24 +02:00
40a6bba338 2.4.14 2017-08-26 10:57:23 +02:00
f98f490956 update to notice missing gitlab registry token 2017-08-26 10:57:23 +02:00
15714204a6 2.4.13 2017-08-26 10:06:20 +02:00
35c4963192 clean up retagging 2017-08-26 10:06:20 +02:00
b3c5db3ed9 2.4.12 2017-08-26 09:41:08 +02:00
0701429782 compile 2017-08-26 09:41:04 +02:00
24dd9edcae update login 2017-08-26 09:40:40 +02:00
3e1397e13f 2.4.11 2017-08-26 00:23:16 +02:00
ecb21a787f update 2017-08-26 00:23:08 +02:00
10233ffae0 2.4.10 2017-08-25 23:47:34 +02:00
4cea1d29d2 update 2017-08-25 23:47:31 +02:00
3bf2502f87 2.4.9 2017-08-25 22:41:17 +02:00
c012810a8c improve log messages 2017-08-25 22:41:13 +02:00
ae5b1b1fa7 2.4.8 2017-08-25 22:13:14 +02:00
f1bf000744 update docker login handling 2017-08-25 22:13:11 +02:00
30e16cb33d 2.4.7 2017-08-25 21:07:04 +02:00
16984d811f fix tests 2017-08-25 21:07:02 +02:00
12e2509f0c 2.4.6 2017-08-25 19:30:10 +02:00
e0b8c4f263 2.4.5 2017-07-28 01:12:04 +02:00
16925a3f3f fix typo 2017-07-28 01:11:55 +02:00
1ff0337112 2.4.4 2017-07-27 21:55:13 +02:00
6b15728fbf fix gitlab ci 2017-07-27 21:55:09 +02:00
44c20deec7 2.4.3 2017-07-27 21:51:43 +02:00
6d328e263d update default publish target 2017-07-27 21:51:38 +02:00
52f09583f5 2.4.2 2017-07-27 16:42:13 +02:00
782738aae9 switch to next stabl version 2017-07-27 16:42:10 +02:00
b62104c2a5 2.4.1 2017-07-27 16:37:05 +02:00
3506d8dd21 fix npmci version 2017-07-27 16:36:58 +02:00
4328672958 2.4.0 2017-07-27 15:38:44 +02:00
1ca90eb64d remove debug messages 2017-07-27 15:38:40 +02:00
e68ee9e593 2.3.79 2017-07-27 15:27:29 +02:00
a597c1268b build in debug logs 2017-07-27 15:27:25 +02:00
0e7c942a97 2.3.78 2017-07-27 14:49:58 +02:00
c9b08b9f9d update 2017-07-27 14:49:54 +02:00
c059dff5e0 2.3.77 2017-07-27 14:24:05 +02:00
c0643edc82 2.3.76 2017-07-27 14:21:01 +02:00
a8571827b9 update to use better command recognition 2017-07-27 14:20:56 +02:00
1c0331524d 2.3.75 2017-07-27 13:15:52 +02:00
66bb3a10b7 update to support more detailed docker publishing 2017-07-27 13:15:39 +02:00
fdfb600bea update short description 2017-07-19 16:40:24 +02:00
8847d9031b update codecomments 2017-07-19 09:40:48 +02:00
90295a79d9 2.3.74 2017-06-30 23:34:00 +02:00
270ff4bb40 update 2017-06-30 23:33:56 +02:00
2d34e3e9eb 2.3.73 2017-06-30 18:57:02 +02:00
c899bfa23a upgrade to latest dependencies 2017-06-30 18:56:59 +02:00
6b23e32b13 2.3.72 2017-06-30 17:24:30 +02:00
91fe60c8c1 update dependencies 2017-06-30 17:24:27 +02:00
2fd6765385 2.3.71 2017-06-15 18:34:38 +02:00
53748a21b4 update dependencies 2017-06-15 18:34:38 +02:00
a6a3906bd5 2.3.70 2017-06-15 16:24:24 +02:00
6bfc8ac47c fix request types 2017-06-15 16:24:22 +02:00
988bc3cc5e 2.3.69 2017-06-15 15:48:35 +02:00
78eb3702b7 update test 2017-06-15 15:48:32 +02:00
9f2e629e8f update ssh module 2017-06-15 15:46:08 +02:00
Phil Kunz
419db8b197 Merge branch 'master' into 'master'
update purge

See merge request !4
2017-06-08 21:32:45 +00:00
ddf7ca0466 update purge 2017-06-07 15:16:33 +02:00
bdce1dbded add modPurge 2017-06-05 22:08:49 +02:00
8f81c71de7 now using yarn to install npmci 2017-05-25 13:28:28 +02:00
2e12fd7548 update ci 2017-05-25 13:26:06 +02:00
08152f9b51 2.3.68 2017-05-25 13:01:36 +02:00
b6f54bc967 update tests 2017-05-25 13:01:17 +02:00
faf538aa4d 2.3.67 2017-05-19 12:17:37 +02:00
8c28fcc906 add cflare 2017-05-19 12:14:43 +02:00
7c5cafeb1b complete modular transition 2017-05-19 12:09:33 +02:00
Phil Kunz
cf41e81153 Merge branch 'master' into 'master'
Go modular

See merge request !3
2017-05-18 20:40:14 +00:00
PhilKunz External
b6a85319b0 Go modular 2017-05-18 20:40:09 +00:00
6edd51c6e6 start modular infrastructure 2017-05-16 21:09:59 +02:00
eb57697f96 2.3.66 2017-05-15 18:27:17 +02:00
800e4d8956 fix environment detection 2017-05-15 18:27:13 +02:00
a5633a01c5 2.3.65 2017-05-15 18:10:48 +02:00
0694d3a393 update 2017-05-15 18:10:24 +02:00
b31cc4cbbf 2.3.64 2017-05-15 16:35:23 +02:00
d1e7448b40 update 2017-05-15 16:35:16 +02:00
e541159019 2.3.63 2017-05-15 16:07:08 +02:00
b6c06e2b17 remove bashBare 2017-05-15 16:07:05 +02:00
3505b2effc 2.3.62 2017-05-15 15:54:14 +02:00
29df49addb update 2017-05-15 15:54:09 +02:00
3484575108 2.3.61 2017-05-15 15:36:15 +02:00
7c4890f57a improve logging for docker 2017-05-15 15:36:09 +02:00
308d969540 2.3.60 2017-05-15 15:22:01 +02:00
5065587275 update 2017-05-15 15:21:56 +02:00
8f0092b2ef 2.3.59 2017-05-15 14:33:03 +02:00
e81d001aeb update base image for ci 2017-05-15 14:33:01 +02:00
993f6f691e 2.3.58 2017-05-15 14:28:20 +02:00
64053de75a update base image 2017-05-15 14:28:15 +02:00
1edea1046b 2.3.57 2017-05-15 14:20:00 +02:00
0f8a76ca02 update dependencies 2017-05-15 14:19:56 +02:00
7dc76be1bb 2.3.56 2017-04-03 00:06:04 +02:00
8920110783 update README 2017-04-03 00:06:00 +02:00
7419ee28e4 Merge branch 'master' of gitlab.com:gitzone/npmci 2017-04-02 23:57:25 +02:00
1f4ecb6ff6 2.3.55 2017-04-02 23:56:18 +02:00
a042674a81 fix gitlabTestTag 2017-04-02 23:56:15 +02:00
Phil Kunz
764cd8f7ee Update README.md 2017-04-02 21:48:51 +00:00
657c6870ec 2.3.54 2017-04-02 23:41:54 +02:00
566e074cf4 fix docker execution 2017-04-02 23:41:51 +02:00
90b9b61a37 update 2017-04-02 23:11:19 +02:00
88bc772ea7 2.3.53 2017-04-02 22:56:42 +02:00
76530985e7 now using newest npmts and uploading public docker images also to gitlab registry 2017-04-02 22:56:40 +02:00
2525bc1ad4 update ci 2017-03-24 22:00:14 +01:00
20bca85a12 2.3.52 2017-03-24 11:48:54 +01:00
dd260538a7 now using yarn upgrade instead yarn install to better reflect updates of packages for automatic triggers 2017-03-24 11:48:50 +01:00
d511e8c2f7 update 2017-03-24 11:44:58 +01:00
c44d6c036c 2.3.51 2017-03-11 15:56:51 +01:00
9cec914c94 now using yarn for dependencies as well 2017-03-11 15:56:48 +01:00
52a09bb8dd 2.3.50 2017-03-11 15:17:31 +01:00
1224fce295 fix yarn install decision 2017-03-11 15:17:24 +01:00
6343731772 2.3.49 2017-03-11 14:07:40 +01:00
129d22b537 update usage of yarn 2017-03-11 14:07:36 +01:00
8075281499 readd lodash typings 2017-03-11 11:52:47 +01:00
fe5f602aca 2.3.48 2017-03-11 03:35:18 +01:00
577a9b3e49 update source strings 2017-03-11 03:35:15 +01:00
e6ad22547c 2.3.47 2017-03-11 03:15:17 +01:00
8adeb5bb5c update deps 2017-03-11 03:15:13 +01:00
db0d55636e 2.3.46 2017-03-11 02:41:22 +01:00
0a73134e1c update smartshell 2017-03-11 02:41:18 +01:00
2994a9ef5b 2.3.45 2017-03-11 02:27:50 +01:00
af74e730cc fix async loop execution 2017-03-11 02:27:48 +01:00
798c909f1e 2.3.44 2017-03-11 01:34:06 +01:00
ba41776c0e update 2017-03-11 01:34:03 +01:00
254f7dcfa6 2.3.43 2017-03-11 01:20:08 +01:00
d1e060e1dc now fully async 2017-03-11 01:10:37 +01:00
Phil Kunz
bbc2e9002a Merge branch 'master' into 'master'
Go fully async with shelljs to reduce processor strain

Closes #2

See merge request !2
2017-03-08 19:22:39 +00:00
1db5d6e669 update async 2017-03-08 14:50:58 +01:00
a54015da16 update async functions 2017-03-08 14:50:41 +01:00
d9b8eb3bf0 update 2017-03-07 18:07:03 +01:00
5ede124f56 2.3.42 2017-02-19 14:53:00 +01:00
e835a17fe4 2.3.41 2017-02-19 14:46:14 +01:00
b86b090c07 update dependencies and add yarn 2017-02-19 14:46:05 +01:00
97d2a8d1b7 improve gitlab.yml 2017-02-08 23:44:47 +01:00
38e54f13ff 2.3.40 2017-02-08 21:32:49 +01:00
a11233ddb6 update package.json 2017-02-08 21:32:45 +01:00
7cfd5e4358 update links 2017-02-08 21:32:22 +01:00
431371db5a 2.3.39 2016-12-15 01:09:00 +01:00
e784c02a40 now correctly evaluating which output 2016-12-15 01:08:54 +01:00
f156b58b95 2.3.38 2016-12-15 00:06:15 +01:00
40a00cb1b0 readd logging 2016-12-15 00:06:11 +01:00
0f384a799a 2.3.37 2016-12-14 23:10:57 +01:00
d2f4512ca4 compile 2016-12-14 23:10:54 +01:00
Phil Kunz
ee7e7e2551 Merge branch 'master' into 'master'
fix tool Installation and bash without error.

See merge request !1
2016-12-14 22:03:00 +00:00
Philipp Kunz
4c3d284186 Update npmci.bash.ts 2016-12-14 16:45:48 +00:00
Philipp Kunz
5a472326ad Update npmci.install.ts 2016-12-14 16:38:57 +00:00
5021ee099d 2.3.36 2016-12-13 23:16:22 +01:00
cd7363625d now logging path 2016-12-13 23:16:19 +01:00
399168f5d0 2.3.35 2016-12-11 16:34:16 +01:00
a272556ccd improve README 2016-12-11 16:33:56 +01:00
172b9f9b3f 2.3.34 2016-12-11 16:20:33 +01:00
9eb3d1d06a fix README 2016-12-11 16:20:29 +01:00
4093675a9d 2.3.33 2016-12-11 16:19:46 +01:00
53a2fb4c78 update README 2016-12-11 16:19:25 +01:00
59ed6829e4 2.3.32 2016-12-10 23:27:37 +01:00
4e01b0c9b6 improve logs 2016-12-10 23:27:34 +01:00
85a6099d56 2.3.31 2016-12-10 22:43:16 +01:00
787145816a fix npm global Tool installation 2016-12-10 22:43:14 +01:00
b194bf2a0e 2.3.30 2016-12-10 22:28:30 +01:00
407d9f8237 fixup globalNpmTools 2016-12-10 22:28:27 +01:00
ec196e1d53 add base picture to README 2016-11-25 22:46:14 +01:00
305fc6e68e 2.3.29 2016-11-25 22:44:51 +01:00
35a7a83ee6 fix global install of needed tools 2016-11-25 22:44:49 +01:00
165000144c 2.3.28 2016-11-25 22:34:32 +01:00
77a4cd7a12 now checking if tool already installed 2016-11-25 22:34:28 +01:00
9822a9c867 2.3.27 2016-11-25 14:29:11 +01:00
a1209c74dd 2.3.26 2016-11-25 14:15:48 +01:00
d9f517cf46 fix cli usage 2016-11-25 14:15:44 +01:00
1e976372fa 2.3.25 2016-11-25 13:43:38 +01:00
733a35b789 improve install handling of needed global tools 2016-11-25 13:43:35 +01:00
07deb7497a 2.3.24 2016-11-25 13:26:02 +01:00
2096e27fc5 fixed 16 file Buffer overflow 2016-11-25 13:25:45 +01:00
301a317fa0 update 2016-11-25 00:07:20 +01:00
299d2567f8 test 2016-11-24 23:21:40 +01:00
09c7dae079 2.3.23 2016-11-17 23:02:45 +01:00
19c118e166 fix gitlab-ci 2016-11-17 23:02:37 +01:00
c0a5057a0d 2.3.22 2016-11-15 22:47:23 +01:00
cfdce55c9b fixed node versions 2016-11-15 22:47:21 +01:00
a364fcb961 2.3.21 2016-11-15 21:57:42 +01:00
dfb8b43559 update node versions 2016-11-15 21:57:18 +01:00
3da8e60149 change to loglevel warn 2016-11-15 13:02:56 +01:00
509b97548c 2.3.20 2016-11-15 13:00:07 +01:00
6dda67bf37 add silent install 2016-11-15 12:59:36 +01:00
1e4dd1554c update script 2016-11-15 12:55:45 +01:00
4db221ea2d update tests 2016-11-15 00:18:32 +01:00
0e63c17fc2 2.3.19 2016-11-15 00:07:58 +01:00
0427368cfa update deps and node version 2016-11-15 00:07:55 +01:00
da180b090c 2.3.18 2016-09-20 12:43:42 +02:00
22d7e83b8d update node versions 2016-09-20 12:43:37 +02:00
bb910f9fab 2.3.17 2016-09-04 19:49:48 +02:00
420c39dd5f fix ci 2016-09-04 19:49:38 +02:00
7d4c80ed04 2.3.16 2016-09-04 17:57:00 +02:00
5858682946 improve typings 2016-09-04 17:56:56 +02:00
c4aa3a8926 update commnts 2016-09-04 16:05:47 +02:00
f0e62c06e8 2.3.15 2016-09-04 13:42:34 +02:00
61ee70ea8d update docs and comments, add servezone compatibility 2016-09-04 13:42:22 +02:00
66bef3cd60 2.3.14 2016-08-02 23:11:57 +02:00
28054b17fc update nvm detection 2016-08-02 23:11:42 +02:00
8736530920 2.3.13 2016-08-02 16:20:35 +02:00
2d9c225d28 start shift to making bare bash obsolete 2016-08-02 16:20:32 +02:00
236df3388f test 2016-07-18 19:18:19 +02:00
0406998e92 test 2016-07-18 18:55:34 +02:00
4e865e7bef test 2016-07-18 18:53:17 +02:00
62e4dd23d2 2.3.12 2016-07-18 18:51:34 +02:00
2962c5f8f9 now using global npmts 2016-07-18 18:50:58 +02:00
7e506b8e69 2.3.11 2016-07-18 18:43:07 +02:00
26400b8153 update base image for CI 2016-07-18 18:43:01 +02:00
a94e1771a4 2.3.10 2016-07-18 18:39:07 +02:00
0213afa46e updated setter for environment module to comply with JS standards 2016-07-18 18:39:04 +02:00
6f4138e536 2.3.9 2016-07-18 17:20:27 +02:00
5c5ca3ebf0 recompile 2016-07-18 17:20:24 +02:00
29ccf9d866 2.3.8 2016-07-18 17:18:58 +02:00
a68fc4050f now going node 6 all the way 2016-07-18 17:17:57 +02:00
2e965bcb46 2.3.7 2016-07-18 16:58:12 +02:00
73aceb4054 2.3.6 2016-07-18 16:57:52 +02:00
9f63fba3e2 switch to ES6 2016-07-18 16:56:53 +02:00
253d69254b prepare ES6 2016-07-18 16:47:42 +02:00
44e5d3758c 2.3.5 2016-06-29 23:59:21 +02:00
9fc142d931 2.3.4 2016-06-29 23:55:50 +02:00
f4c7c0b239 fix stable version 2016-06-29 23:55:38 +02:00
5c28561c1f 2.3.3 2016-06-29 23:18:55 +02:00
d0547a78dd updated versions 2016-06-29 23:18:51 +02:00
5438b7792f 2.3.2 2016-06-26 16:18:35 +02:00
35c9bd1aff updated dependencies 2016-06-26 16:18:17 +02:00
26a5766807 2.3.1 2016-06-26 05:21:29 +02:00
ab6b447d55 fix undefined error for docker registry 2016-06-26 05:21:24 +02:00
a2a7544797 2.3.0 2016-06-26 04:54:20 +02:00
83cd4e9a13 now has <clean> command 2016-06-26 04:54:10 +02:00
21b46dd939 cleanup 2016-06-26 04:45:00 +02:00
5b86db6f98 2.2.3 2016-06-26 04:41:04 +02:00
f091fb2452 fix some config issues and update to latest smartssh 2016-06-26 04:40:58 +02:00
b59bf2de8d 2.2.2 2016-06-26 02:17:27 +02:00
3653373f12 some cosmetics 2016-06-26 02:17:17 +02:00
94e7f502b3 2.2.1 2016-06-25 19:19:43 +02:00
a699d29885 fix function call for ssh 2016-06-25 19:18:42 +02:00
85d50c868b 2.2.0 2016-06-25 18:53:44 +02:00
2b4bfbdb39 now ships with ssh support 2016-06-25 18:53:35 +02:00
e77a30b2bc update structure 2016-06-25 16:29:06 +02:00
b8a0c788eb 2.1.64 2016-06-25 12:35:13 +02:00
713338b2c3 update legacy version 2016-06-25 12:34:57 +02:00
233fa74566 2.1.63 2016-06-25 12:29:39 +02:00
8eadb7449b 2.1.62 2016-06-25 12:29:14 +02:00
3ebed47170 switched from commander to smartcli 2016-06-25 12:28:51 +02:00
9f5c7b0ca0 2.1.61 2016-06-25 11:58:38 +02:00
7de38ce050 now has working version 2016-06-25 11:58:33 +02:00
c495f20b3d 2.1.60 2016-06-25 03:21:43 +02:00
2082773f56 2.1.59 2016-06-25 03:21:08 +02:00
e27dd058cc fic some issues 2016-06-25 03:19:29 +02:00
f9cee9ac85 improve ssh implementation 2016-06-25 02:55:36 +02:00
e3c300293d 2.1.58 2016-06-24 02:55:05 +02:00
0f0eaf4c4f add version commandline option 2016-06-24 02:54:55 +02:00
57fe78c673 2.1.57 2016-06-23 22:22:11 +02:00
3298b6298e improve triggr detection 2016-06-23 22:22:03 +02:00
3e80ea15e0 update deps 2016-06-23 20:57:09 +02:00
0b5c99a516 now looking for project level config 2016-06-19 02:30:50 +02:00
a48f8b9c54 2.1.56 2016-06-11 21:14:25 +02:00
b8079e0bc9 now correctly adding spaces in wrapped commands 2016-06-11 21:14:20 +02:00
61c00f31ea 2.1.55 2016-06-11 21:02:05 +02:00
7fc8648d40 now detects wrapped command correctly 2016-06-11 21:01:44 +02:00
973c55e147 2.1.54 2016-06-11 20:45:01 +02:00
a3523ad7c4 fixed command 2016-06-11 20:44:56 +02:00
216c28d76e 2.1.53 2016-06-11 20:30:41 +02:00
b22b2fa802 fix npmci command 2016-06-11 20:30:35 +02:00
e81592ae38 2.1.52 2016-06-11 20:22:05 +02:00
b3572d512d now using npmts-g 2016-06-11 20:22:00 +02:00
d7bfaa75e1 2.1.51 2016-06-10 08:07:08 +02:00
3867000d0f fix npmci failure when repo env var not set 2016-06-10 08:07:04 +02:00
7ecb30cf0a 2.1.50 2016-06-09 03:42:25 +02:00
b45b0ea6ed now using projectinfo 2016-06-09 03:42:12 +02:00
edf7b268ab update Readme 2016-06-08 23:18:02 +02:00
2af2a71471 2.1.49 2016-06-07 23:22:15 +02:00
45e41500bc now using same docker push function across all stages 2016-06-07 23:21:56 +02:00
a4d66744be 2.1.48 2016-06-07 22:27:20 +02:00
c0d0e5154a fix tagging logic 2016-06-07 22:27:10 +02:00
e92d421bae 2.1.47 2016-06-07 19:41:20 +02:00
2f827a7696 fix tagging logic 2016-06-07 19:41:14 +02:00
11c0341c76 2.1.46 2016-06-07 14:45:42 +02:00
4bc86ad7b8 now more efficiently retagging image during release stage 2016-06-07 14:45:27 +02:00
cebcfc9fc5 2.1.45 2016-06-07 13:40:48 +02:00
ba047ed586 added some log messages for debugging 2016-06-07 13:40:42 +02:00
215d0b97bb 2.1.44 2016-06-07 12:36:07 +02:00
b1e873afa8 some cosmetics 2016-06-07 12:36:00 +02:00
cb2400652f 2.1.43 2016-06-07 12:12:25 +02:00
455247eb18 improved docker image testing 2016-06-07 12:12:19 +02:00
b7394ff730 2.1.42 2016-06-07 10:28:33 +02:00
c74bd67008 test 2016-06-07 10:28:21 +02:00
3300db61b4 2.1.41 2016-06-07 10:22:27 +02:00
eeef17c327 restructure a little bit 2016-06-07 10:21:56 +02:00
f510277c16 2.1.40 2016-06-07 08:02:15 +02:00
2d61640c91 improve mounting 2016-06-07 08:02:02 +02:00
e4507b7073 update test 2016-06-07 07:54:04 +02:00
0acb6ad351 2.1.39 2016-06-07 06:51:17 +02:00
c33e0c622b fix docker test call 2016-06-07 06:51:05 +02:00
5085e86c9b even better logs 2016-06-07 06:35:10 +02:00
3ea8265a75 now stating local build depdendencies in log 2016-06-07 06:31:53 +02:00
d7e4efc2c0 2.1.38 2016-06-07 06:14:46 +02:00
7ca0171658 fix image id inspection 2016-06-07 06:14:36 +02:00
87d8a4401e 2.1.37 2016-06-07 06:05:17 +02:00
8b5cf3bb5f fix local image dependency detection 2016-06-07 06:05:13 +02:00
f28d3cc3d8 2.1.36 2016-06-07 05:37:07 +02:00
358e4674f2 compile 2016-06-07 05:37:02 +02:00
0222ab91c3 fix bash 2016-06-07 05:36:37 +02:00
61c8cbc152 2.1.35 2016-06-07 05:20:09 +02:00
4ffb1d1e7e now checking for specific testfiles for each Image version 2016-06-07 05:20:04 +02:00
48bee2fa92 improve npmignore 2016-06-07 05:07:08 +02:00
494e3c5395 compile 2016-06-07 04:55:28 +02:00
1408cb3b3d fix bash 2016-06-07 04:55:08 +02:00
1bcb1f8fee 2.1.34 2016-06-07 04:52:13 +02:00
d98d8e9667 fix test command for docker 2016-06-07 04:50:36 +02:00
3ac486312e fix README 2016-06-07 04:40:44 +02:00
2464499214 2.1.33 2016-06-07 04:31:29 +02:00
9f4a3783a1 full docker workflow now implemented 2016-06-07 04:31:25 +02:00
fe0b99309b compile 2016-06-07 03:59:47 +02:00
5a05092bc8 improve bash, implement retagging 2016-06-07 03:57:43 +02:00
8dc0db3b71 2.1.32 2016-06-07 00:11:51 +02:00
d24ff4c67b fix another bash typo 2016-06-06 23:57:23 +02:00
821747510f 2.1.31 2016-06-06 23:53:32 +02:00
e13624fc26 fix bash 2016-06-06 23:53:14 +02:00
02e363d105 Start with docker test 2016-06-06 20:30:06 +02:00
47aac2f7c5 compile 2016-06-06 00:00:50 +02:00
832031a02a fix registry login scope 2016-06-05 23:59:10 +02:00
73b4057dc9 2.1.30 2016-06-05 23:53:30 +02:00
fcd6b81668 improve config handling 2016-06-05 23:53:01 +02:00
b84152aac2 fix typo 2016-06-05 23:27:19 +02:00
198b35b0c6 now keeping track of what has been done during a build 2016-06-05 23:24:11 +02:00
334713a344 2.1.29 2016-06-05 22:52:04 +02:00
36c4a676c7 now patching Dockerfiles to use local images during build 2016-06-05 22:51:59 +02:00
0571051009 start unclutter env 2016-06-05 21:11:30 +02:00
0d4fd9dbba 2.1.28 2016-06-05 20:51:21 +02:00
1e9c2c850c added automatic retrial of failed commands 2016-06-05 20:51:13 +02:00
2ae6fad2a1 2.1.27 2016-06-05 17:17:21 +02:00
d3dcc2f8ab now working 2016-06-05 17:17:15 +02:00
c718593162 add NpmciTest module tests 2016-06-05 16:56:07 +02:00
c9ba850b4b fix Test 2016-06-05 16:43:27 +02:00
faef4da6be now testing shell 2016-06-05 14:55:08 +02:00
3300f177ca introduce better shell interaction for testing 2016-06-05 14:33:59 +02:00
b2d56e59bb restore job queue 2016-06-05 14:28:45 +02:00
ee54cbf78d now patches local dependencies for multitag dependent docker builds 2016-06-05 14:27:56 +02:00
e3c1ac1897 started with tests 2016-06-05 13:50:45 +02:00
ea01b87949 start tests 2016-06-05 13:01:45 +02:00
229c3ae27b 2.1.26 2016-06-05 11:08:23 +02:00
19e3aa3721 better sorter function 2016-06-05 11:08:20 +02:00
a965cf38c8 2.1.25 2016-06-05 10:24:00 +02:00
7924ba26a2 now sorting Dockerfiles correctly 2016-06-05 10:23:55 +02:00
361d45e086 2.1.24 2016-06-05 10:11:07 +02:00
cb7cb852ea now sorting Dockerfiles correctly 2016-06-05 10:11:01 +02:00
61720f47be 2.1.23 2016-06-05 09:42:14 +02:00
b435fc6bdf update smartstring 2016-06-05 09:42:08 +02:00
70ad41ab86 fix gitlab.yml 2016-06-05 09:38:11 +02:00
d67109b4bc 2.1.22 2016-06-05 09:34:21 +02:00
a29e04f9e3 fix gitlab.yml 2016-06-05 09:33:51 +02:00
9634ca3b4d 2.1.21 2016-06-05 08:53:52 +02:00
d2e7488868 fix 2016-06-05 08:53:46 +02:00
bb44333d70 2.1.20 2016-06-05 08:30:12 +02:00
87f6adeda4 fix 2016-06-05 08:30:08 +02:00
6334396bfc 2.1.19 2016-06-05 08:19:59 +02:00
7a33252f2f fix 2016-06-05 08:19:03 +02:00
b7068b7b53 2.1.18 2016-06-05 08:06:35 +02:00
1e5b56a388 fix 2016-06-05 08:06:32 +02:00
786de4ae18 2.1.17 2016-06-05 08:00:53 +02:00
62ee8a26a4 fix 2016-06-05 08:00:46 +02:00
f544aef054 2.1.16 2016-06-05 07:50:11 +02:00
cb6867dbde fix 2016-06-05 07:50:04 +02:00
5316740a1a 2.1.15 2016-06-05 07:41:20 +02:00
06bc1e59f8 fix 2016-06-05 07:41:14 +02:00
bd237ccdab 2.1.14 2016-06-05 07:28:02 +02:00
f51b556fca fix 2016-06-05 07:27:58 +02:00
9ce29a7c24 improve .gitlab.yml 2016-06-05 07:24:21 +02:00
8dade860f5 2.1.13 2016-06-05 07:17:13 +02:00
9d4c8ce68b fix 2016-06-05 07:17:02 +02:00
5917c63836 2.1.12 2016-06-05 07:05:42 +02:00
af2c4b04cd fix 2016-06-05 07:05:34 +02:00
deae50007e 2.1.11 2016-06-05 06:26:08 +02:00
9ddf28f90a fix build command 2016-06-05 06:26:05 +02:00
4321ae3dab 2.1.10 2016-06-05 06:20:48 +02:00
1c7542c970 now sorting dockerfiles before build 2016-06-05 06:20:05 +02:00
839dac1fe8 2.1.9 2016-06-05 05:16:20 +02:00
9c7afba849 now building and pushing Dockerfiles with automatic tag recognition 2016-06-05 05:16:14 +02:00
6b72652c7a more docker 2016-06-05 04:48:39 +02:00
51334c297d even more docker 2016-06-05 04:45:46 +02:00
a38996b98c more docker 2016-06-05 04:19:54 +02:00
ab62b979bd start on getting some class logic to Docker 2016-06-05 02:17:55 +02:00
dd142856d0 restructure 2016-06-05 01:31:21 +02:00
c826ba3d5f update .gitlab.yml base image 2016-06-05 01:24:13 +02:00
c75e2b2e06 restructure 2016-06-05 01:22:04 +02:00
04a5b15668 test runner 2016-06-04 23:39:38 +02:00
a87fc98eb8 compile 2016-06-04 23:20:39 +02:00
9d092aa280 restructure some commands 2016-06-04 18:41:35 +02:00
7ca6578443 improve README 2016-06-04 00:59:17 +02:00
6d5865427e improve README 2016-06-04 00:41:25 +02:00
9595a82dc5 2.1.8 2016-06-04 00:35:55 +02:00
125f96edc4 update readme 2016-06-04 00:35:43 +02:00
f1244c33dc compile 2016-06-04 00:10:19 +02:00
dfe829541e start testing docker containers with npmci 2016-06-04 00:09:44 +02:00
51a695ed8e 2.1.7 2016-06-03 23:23:36 +02:00
10015aa0c1 update dependencies and add tag function 2016-06-03 23:22:50 +02:00
a65150b640 2.1.6 2016-06-03 19:45:40 +02:00
1f23b3693f compile 2016-06-03 19:45:34 +02:00
ce66e0a729 fix registry domain 2016-06-03 19:44:53 +02:00
606683aa8b cosmetics 2016-06-03 18:20:05 +02:00
b443662df8 2.1.5 2016-06-03 17:25:38 +02:00
c3179815c2 compile 2016-06-03 17:25:29 +02:00
dda4893e39 fix docker gitlab login 2016-06-03 17:24:55 +02:00
806647d7c3 2.1.4 2016-06-03 16:27:19 +02:00
6a0e74690d compile 2016-06-03 16:27:12 +02:00
27cb433c82 add docker tag push 2016-06-03 16:26:28 +02:00
e1245f24ce add some functions 2016-06-03 03:44:24 +02:00
42d3ecbe37 2.1.3 2016-06-03 02:56:26 +02:00
b19bb9569d start centralizing environment gathering 2016-06-03 02:56:20 +02:00
497659df1f compile 2016-06-03 02:11:03 +02:00
4047fc815b add build functionality 2016-06-03 02:10:34 +02:00
2a6d155a89 2.1.2 2016-06-03 01:58:44 +02:00
fa7f576ae5 add some more functionality 2016-06-03 01:58:37 +02:00
057e425824 update ci yml 2016-06-02 20:09:28 +02:00
90919ba009 2.1.1 2016-06-02 20:07:58 +02:00
7cda79daa6 fix regex targeting 2016-06-02 20:07:52 +02:00
5962339aff 2.1.0 2016-06-02 19:48:04 +02:00
6854b7a83f remove need for bash in docker environment 2016-06-02 19:47:57 +02:00
9e886db462 run trigger seperately 2016-06-02 19:41:03 +02:00
5bf8311380 2.0.29 2016-06-02 19:35:28 +02:00
6b82f8385c update triggerRegex 2016-06-02 19:35:16 +02:00
1159a9ab5c update trigger regex 2016-06-02 19:35:01 +02:00
5e4b93ed76 2.0.28 2016-06-02 18:46:34 +02:00
1b2fd33a13 2.0.27 2016-06-02 18:39:18 +02:00
5f0496ef85 fix trigger name 2016-06-02 18:39:11 +02:00
2ca886cd6e 2.0.26 2016-06-02 18:12:17 +02:00
50e69682b0 2.0.25 2016-06-02 18:09:58 +02:00
Philipp Kunz
23ca382590 always use latest npmci 2016-06-02 18:09:07 +02:00
Philipp Kunz
4e4fb1399f 2.0.24 2016-06-02 17:57:07 +02:00
Philipp Kunz
8dd0f230c0 fixed docker login 2016-06-02 17:57:01 +02:00
Philipp Kunz
677f730b34 add new env file 2016-06-02 13:39:03 +02:00
Philipp Kunz
a2a409a1ff 2.0.23 2016-06-02 13:12:48 +02:00
Philipp Kunz
d6e597111e noe handling docker as well 2016-06-02 13:08:15 +02:00
Philipp Kunz
b37a2f78c4 2.0.22 2016-06-01 11:09:24 +02:00
Philipp Kunz
396099253d 2.0.21 2016-06-01 10:26:36 +02:00
Philipp Kunz
a2a3019e6b 2.0.20 2016-06-01 08:56:40 +02:00
Philipp Kunz
5753fb80bf 2.0.19 2016-06-01 08:56:13 +02:00
Philipp Kunz
2a15b35dd5 compile 2016-06-01 08:56:06 +02:00
Philipp Kunz
27a12415e6 update trigger 2016-06-01 08:55:15 +02:00
Philipp Kunz
4c0f0f5cc6 2.0.18 2016-06-01 08:47:20 +02:00
Philipp Kunz
06d785df6b 2.0.17 2016-06-01 08:30:11 +02:00
Philipp Kunz
19dc4974b9 update gitlab ci yml 2016-06-01 08:29:14 +02:00
Philipp Kunz
ed9327db8b 2.0.16 2016-06-01 08:13:54 +02:00
Philipp Kunz
e239c8f350 now using regex to have a simpler env var format 2016-06-01 08:13:48 +02:00
7b8fc67d7f 2.0.15 2016-06-01 07:18:36 +02:00
9d3102583d now using node request 2016-06-01 07:18:30 +02:00
9e640e63d7 2.0.14 2016-06-01 07:13:06 +02:00
081520746e 2.0.13 2016-06-01 06:51:22 +02:00
88ffbf3198 2.0.12 2016-06-01 06:50:03 +02:00
db0010b3f3 compile 2016-06-01 06:49:59 +02:00
ff1a7398da 2.0.11 2016-06-01 06:39:13 +02:00
412e6ec9ba 2.0.10 2016-06-01 06:38:48 +02:00
8d67cf2a8f 2.0.9 2016-06-01 06:30:32 +02:00
3a6e2d6f3d run triggers 2016-06-01 06:30:21 +02:00
aafa5bd1e9 2.0.8 2016-06-01 06:05:17 +02:00
3c82c4c62b compile 2016-06-01 06:04:20 +02:00
a382d98892 fix legaxy tag error 2016-06-01 06:03:26 +02:00
06e96e7778 update gitlab-ci.yml 2016-06-01 05:58:43 +02:00
1efc425a46 2.0.7 2016-06-01 05:44:56 +02:00
501ff7beb7 compile 2016-06-01 05:44:48 +02:00
3fe173e59c Merge branches 'master' and 'master' of gitlab.com:pushrocks/npmci 2016-06-01 05:43:11 +02:00
8fec378a53 add prepare command 2016-06-01 05:42:37 +02:00
Philipp Kunz
3bb06781f9 2.0.6 2016-05-30 11:32:15 +02:00
Philipp Kunz
8970deec3f fix README 2016-05-30 11:08:21 +02:00
Philipp Kunz
8ff08240fd 2.0.5 2016-05-30 11:05:35 +02:00
Philipp Kunz
955474e296 Update README 2016-05-30 11:05:28 +02:00
Philipp Kunz
12e3cda903 2.0.4 2016-05-30 10:57:24 +02:00
Philipp Kunz
43726b22b2 Update README 2016-05-30 10:57:08 +02:00
34f29bb4b4 2.0.3 2016-05-30 06:07:12 +02:00
a434b366ff compile 2016-05-30 06:07:07 +02:00
827af44f9e fix version selector 2016-05-30 06:05:13 +02:00
18edee400c 2.0.2 2016-05-30 05:52:06 +02:00
bac99d4bf8 2.0.1 2016-05-30 05:40:37 +02:00
d2db827348 2.0.0 2016-05-30 05:40:05 +02:00
96981798b8 now fully working 2016-05-30 05:40:02 +02:00
101b701e66 1.0.21 2016-05-30 05:29:47 +02:00
774a1bc21f update 2016-05-30 05:29:40 +02:00
07149d0fdd update 2016-05-30 05:29:18 +02:00
a0f3b4e4b4 1.0.20 2016-05-30 05:25:32 +02:00
f0eff7b83c update 2016-05-30 05:25:07 +02:00
af117c1fbe 1.0.19 2016-05-30 05:13:22 +02:00
09188e5733 investigate $HOME 2016-05-30 05:13:15 +02:00
76f67a449d 1.0.18 2016-05-30 04:54:44 +02:00
2fd0e131a5 update gitlab yml 2016-05-30 04:54:13 +02:00
90490b928c 1.0.17 2016-05-30 04:45:01 +02:00
86d29325cb now using npm global config 2016-05-30 04:44:13 +02:00
73de81d912 1.0.16 2016-05-30 04:27:09 +02:00
7d5162e631 fix .npmrc creation timing 2016-05-30 04:27:03 +02:00
6101d716c1 now creating .npmrc sync 2016-05-30 04:25:52 +02:00
69f93bb817 1.0.15 2016-05-30 04:16:08 +02:00
ca272d1282 compile 2016-05-30 04:15:54 +02:00
884d9f8a34 1.0.14 2016-05-30 04:13:05 +02:00
b2968005aa compile 2016-05-30 04:13:01 +02:00
e759b731ea fix default version 2016-05-30 04:12:15 +02:00
e28d864d17 1.0.13 2016-05-30 03:54:21 +02:00
993b99891a compile 2016-05-30 03:54:14 +02:00
baea86e087 update npmrx path 2016-05-30 03:53:37 +02:00
bc3679d614 make sure that process exits ok 2016-05-30 03:43:15 +02:00
61e3edc827 1.0.12 2016-05-30 03:40:11 +02:00
77ce4eea00 now using bash for everything 2016-05-30 03:40:07 +02:00
5632bd5d0b 1.0.11 2016-05-30 03:19:12 +02:00
922d052287 now reading version from package.json 2016-05-30 03:19:07 +02:00
b0f8134afa 1.0.10 2016-05-30 03:11:24 +02:00
d9ff7957e9 compile 2016-05-30 03:11:13 +02:00
e92827de57 1.0.9 2016-05-30 03:06:22 +02:00
2782a242be added some log messages for publishing to npm 2016-05-30 03:06:18 +02:00
eef63f6b38 1.0.8 2016-05-30 02:53:26 +02:00
ce9f3871b4 1.0.7 2016-05-30 02:49:01 +02:00
3e9a62e4c9 update .gitlab-ci.yml 2016-05-30 02:48:08 +02:00
242c5f2873 1.0.6 2016-05-30 02:44:48 +02:00
57e2fd8da1 update scripts 2016-05-30 02:44:38 +02:00
742899472c add appveyor 2016-05-30 02:38:31 +02:00
3f126d849f update scome scripts 2016-05-30 02:35:44 +02:00
911392e00e 1.0.5 2016-05-30 02:29:36 +02:00
3f5d4ee091 compiled 2016-05-30 02:29:30 +02:00
c13ab8e428 add functionality 2016-05-30 02:28:47 +02:00
d82e28f5d1 prepare extended functionality 2016-05-29 22:54:59 +02:00
LosslessBot
9de91b91e1 1.0.4 2016-05-26 22:31:31 +02:00
LosslessBot
271fc6bcc1 fix 2016-05-26 22:31:26 +02:00
52 changed files with 3441 additions and 48 deletions

View File

@@ -0,0 +1,31 @@
## SZCI {{VERSION}}
Pre-compiled binaries for multiple platforms.
### Installation
#### Option 1: Via npm (recommended)
```bash
npm install -g @ship.zone/szci
```
#### Option 2: Via installer script
```bash
curl -sSL https://code.foss.global/ship.zone/szci/raw/branch/master/install.sh | sudo bash
```
#### Option 3: Direct binary download
Download the appropriate binary for your platform from the assets below and make it executable.
### Supported Platforms
- Linux x86_64 (x64)
- Linux ARM64 (aarch64)
- macOS x86_64 (Intel)
- macOS ARM64 (Apple Silicon)
- Windows x86_64
### Checksums
SHA256 checksums are provided in `SHA256SUMS.txt` for binary verification.
### npm Package
The npm package includes automatic binary detection and installation for your platform.

122
.gitea/workflows/README.md Normal file
View File

@@ -0,0 +1,122 @@
# SZCI Gitea CI/CD Workflows
This directory contains Gitea Actions workflows for automated CI/CD of the SZCI project.
## Workflows
### 1. CI (`ci.yml`)
**Trigger:** Push to `master` branch or pull requests
**Purpose:** Continuous integration checks on every push
**Jobs:**
- **Type Check & Lint** - Validates TypeScript types and code style
- **Build Test** - Compiles binary for Linux x64 and tests execution
- **Build All Platforms** - Compiles all 5 platform binaries and uploads as artifacts
**Usage:** Automatically runs on every commit to ensure code quality
---
### 2. Release (`release.yml`)
**Trigger:** Push of version tags (e.g., `v5.0.0`)
**Purpose:** Creates GitHub releases with pre-compiled binaries
**Jobs:**
1. Validates deno.json version matches git tag
2. Compiles binaries for all 5 platforms
3. Generates SHA256 checksums
4. Creates Gitea release with binaries as assets
5. Cleans up old releases (keeps last 3)
**Usage:**
```bash
# Update version in deno.json to 6.0.1
# Then create and push tag:
git tag v6.0.1
git push origin v6.0.1
```
**Output:** Release at `https://code.foss.global/ship.zone/szci/releases/tag/v6.0.1`
---
### 3. NPM Publish (`npm-publish.yml`)
**Trigger:** Push of version tags (e.g., `v5.0.0`)
**Purpose:** Publishes package to npm registry
**Jobs:**
1. Validates deno.json version matches git tag
2. Compiles all binaries
3. Syncs package.json version
4. Creates npm package
5. Publishes to npm with access token
6. Verifies publication
**Prerequisites:**
- `NPM_TOKEN` must be set in Gitea secrets
**Usage:** Same as release workflow (automatically triggered by version tags)
**Output:** Package at `https://www.npmjs.com/package/@ship.zone/szci`
---
## Release Process
To create a new release:
1. **Update version in deno.json:**
```json
{
"version": "6.0.1"
}
```
2. **Commit the version change:**
```bash
git add deno.json
git commit -m "6.0.1"
```
3. **Create and push tag:**
```bash
git tag v6.0.1
git push origin master
git push origin v6.0.1
```
4. **Workflows run automatically:**
- `release.yml` creates Gitea release with binaries
- `npm-publish.yml` publishes to npm
5. **Verify:**
- Check https://code.foss.global/ship.zone/szci/releases
- Check https://www.npmjs.com/package/@ship.zone/szci
---
## Secrets Required
Configure these in Gitea repository settings:
- `GITHUB_TOKEN` - Gitea access token (auto-provided)
- `NPM_TOKEN` - npm publish token (must be configured)
---
## Binary Artifacts
Each workflow produces binaries for:
- Linux x86_64
- Linux ARM64
- macOS x86_64
- macOS ARM64
- Windows x86_64
Total size per release: ~4GB (5 binaries × ~800MB each)

82
.gitea/workflows/ci.yml Normal file
View File

@@ -0,0 +1,82 @@
name: CI
on:
push:
branches:
- master
pull_request:
branches:
- master
jobs:
check:
name: Type Check & Lint
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up Deno
uses: denoland/setup-deno@v1
with:
deno-version: v2.x
- name: Check TypeScript types
run: deno check mod.ts
- name: Lint code
run: deno lint
continue-on-error: true
- name: Format check
run: deno fmt --check
continue-on-error: true
build:
name: Build Test (Current Platform)
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up Deno
uses: denoland/setup-deno@v1
with:
deno-version: v2.x
- name: Compile for current platform
run: |
echo "Testing compilation for Linux x86_64..."
deno compile --allow-all --no-check \
--output szci-test \
--target x86_64-unknown-linux-gnu mod.ts
- name: Test binary execution
run: |
chmod +x szci-test
./szci-test --version
build-all:
name: Build All Platforms
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up Deno
uses: denoland/setup-deno@v1
with:
deno-version: v2.x
- name: Compile all platform binaries
run: bash scripts/compile-all.sh
- name: Upload all binaries as artifact
uses: actions/upload-artifact@v3
with:
name: szci-binaries.zip
path: dist/binaries/*
retention-days: 30

View File

@@ -0,0 +1,129 @@
name: Publish to npm
on:
push:
tags:
- 'v*'
jobs:
npm-publish:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up Deno
uses: denoland/setup-deno@v1
with:
deno-version: v2.x
- name: Setup Node.js for npm publishing
uses: actions/setup-node@v4
with:
node-version: '18.x'
registry-url: 'https://registry.npmjs.org/'
- name: Get version from tag
id: version
run: |
VERSION=${GITHUB_REF#refs/tags/}
echo "version=$VERSION" >> $GITHUB_OUTPUT
echo "version_number=${VERSION#v}" >> $GITHUB_OUTPUT
echo "Publishing version: $VERSION"
- name: Verify deno.json version matches tag
run: |
DENO_VERSION=$(grep -o '"version": "[^"]*"' deno.json | cut -d'"' -f4)
TAG_VERSION="${{ steps.version.outputs.version_number }}"
echo "deno.json version: $DENO_VERSION"
echo "Tag version: $TAG_VERSION"
if [ "$DENO_VERSION" != "$TAG_VERSION" ]; then
echo "ERROR: Version mismatch!"
echo "deno.json has version $DENO_VERSION but tag is $TAG_VERSION"
exit 1
fi
- name: Compile binaries for npm package
run: |
echo "Compiling binaries for npm package..."
deno task compile
echo ""
echo "Binary sizes:"
ls -lh dist/binaries/
- name: Generate SHA256 checksums
run: |
cd dist/binaries
sha256sum * > SHA256SUMS
cat SHA256SUMS
cd ../..
- name: Sync package.json version
run: |
VERSION="${{ steps.version.outputs.version_number }}"
echo "Syncing package.json to version ${VERSION}..."
npm version ${VERSION} --no-git-tag-version --allow-same-version
echo "package.json version: $(grep '"version"' package.json | head -1)"
- name: Create npm package
run: |
echo "Creating npm package..."
npm pack
echo ""
echo "Package created:"
ls -lh *.tgz
- name: Test local installation
run: |
echo "Testing local package installation..."
PACKAGE_FILE=$(ls *.tgz)
npm install -g ${PACKAGE_FILE}
echo ""
echo "Testing szci command:"
szci --version || echo "Note: Binary execution may fail in CI environment"
echo ""
echo "Checking installed files:"
npm ls -g @ship.zone/szci || true
- name: Publish to npm
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
run: |
echo "Publishing to npm registry..."
npm publish --access public
echo ""
echo "✅ Successfully published @ship.zone/szci to npm!"
echo ""
echo "Package info:"
npm view @ship.zone/szci
- name: Verify npm package
run: |
echo "Waiting for npm propagation..."
sleep 30
echo ""
echo "Verifying published package..."
npm view @ship.zone/szci
echo ""
echo "Testing installation from npm:"
npm install -g @ship.zone/szci
echo ""
echo "Package installed successfully!"
which szci || echo "Binary location check skipped"
- name: Publish Summary
run: |
echo "================================================"
echo " npm Publish Complete!"
echo "================================================"
echo ""
echo "✅ Package: @ship.zone/szci"
echo "✅ Version: ${{ steps.version.outputs.version }}"
echo ""
echo "Installation:"
echo " npm install -g @ship.zone/szci"
echo ""
echo "Registry:"
echo " https://www.npmjs.com/package/@ship.zone/szci"
echo ""

View File

@@ -0,0 +1,248 @@
name: Release
on:
push:
tags:
- 'v*'
jobs:
build-and-release:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Set up Deno
uses: denoland/setup-deno@v1
with:
deno-version: v2.x
- name: Get version from tag
id: version
run: |
VERSION=${GITHUB_REF#refs/tags/}
echo "version=$VERSION" >> $GITHUB_OUTPUT
echo "version_number=${VERSION#v}" >> $GITHUB_OUTPUT
echo "Building version: $VERSION"
- name: Verify deno.json version matches tag
run: |
DENO_VERSION=$(grep -o '"version": "[^"]*"' deno.json | cut -d'"' -f4)
TAG_VERSION="${{ steps.version.outputs.version_number }}"
echo "deno.json version: $DENO_VERSION"
echo "Tag version: $TAG_VERSION"
if [ "$DENO_VERSION" != "$TAG_VERSION" ]; then
echo "ERROR: Version mismatch!"
echo "deno.json has version $DENO_VERSION but tag is $TAG_VERSION"
exit 1
fi
- name: Compile binaries for all platforms
run: |
echo "================================================"
echo " SZCI Release Compilation"
echo " Version: ${{ steps.version.outputs.version }}"
echo "================================================"
echo ""
# Clean up old binaries and create fresh directory
rm -rf dist/binaries
mkdir -p dist/binaries
echo "→ Cleaned old binaries from dist/binaries"
echo ""
# Linux x86_64
echo "→ Compiling for Linux x86_64..."
deno compile --allow-all --no-check \
--output dist/binaries/szci-linux-x64 \
--target x86_64-unknown-linux-gnu mod.ts
echo " ✓ Linux x86_64 complete"
# Linux ARM64
echo "→ Compiling for Linux ARM64..."
deno compile --allow-all --no-check \
--output dist/binaries/szci-linux-arm64 \
--target aarch64-unknown-linux-gnu mod.ts
echo " ✓ Linux ARM64 complete"
# macOS x86_64
echo "→ Compiling for macOS x86_64..."
deno compile --allow-all --no-check \
--output dist/binaries/szci-macos-x64 \
--target x86_64-apple-darwin mod.ts
echo " ✓ macOS x86_64 complete"
# macOS ARM64
echo "→ Compiling for macOS ARM64..."
deno compile --allow-all --no-check \
--output dist/binaries/szci-macos-arm64 \
--target aarch64-apple-darwin mod.ts
echo " ✓ macOS ARM64 complete"
# Windows x86_64
echo "→ Compiling for Windows x86_64..."
deno compile --allow-all --no-check \
--output dist/binaries/szci-windows-x64.exe \
--target x86_64-pc-windows-msvc mod.ts
echo " ✓ Windows x86_64 complete"
echo ""
echo "All binaries compiled successfully!"
ls -lh dist/binaries/
- name: Generate SHA256 checksums
run: |
cd dist/binaries
sha256sum * > SHA256SUMS.txt
cat SHA256SUMS.txt
cd ../..
- name: Extract changelog for this version
id: changelog
run: |
VERSION="${{ steps.version.outputs.version }}"
# Check if changelog.md exists
if [ ! -f changelog.md ]; then
echo "No changelog.md found, using default release notes"
cat > /tmp/release_notes.md << EOF
## SZCI $VERSION
Pre-compiled binaries for multiple platforms.
### Installation
Use the installation script:
\`\`\`bash
curl -sSL https://code.foss.global/ship.zone/szci/raw/branch/master/install.sh | sudo bash
\`\`\`
Or download the binary for your platform and make it executable.
### Supported Platforms
- Linux x86_64 (x64)
- Linux ARM64 (aarch64)
- macOS x86_64 (Intel)
- macOS ARM64 (Apple Silicon)
- Windows x86_64
### Checksums
SHA256 checksums are provided in SHA256SUMS.txt
EOF
else
# Try to extract section for this version from changelog.md
awk "/## \[$VERSION\]/,/## \[/" changelog.md | sed '$d' > /tmp/release_notes.md || cat > /tmp/release_notes.md << EOF
## SZCI $VERSION
See changelog.md for full details.
### Installation
Use the installation script:
\`\`\`bash
curl -sSL https://code.foss.global/ship.zone/szci/raw/branch/master/install.sh | sudo bash
\`\`\`
EOF
fi
echo "Release notes:"
cat /tmp/release_notes.md
- name: Delete existing release if it exists
run: |
VERSION="${{ steps.version.outputs.version }}"
echo "Checking for existing release $VERSION..."
# Try to get existing release by tag
EXISTING_RELEASE_ID=$(curl -s \
-H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \
"https://code.foss.global/api/v1/repos/ship.zone/szci/releases/tags/$VERSION" \
| jq -r '.id // empty')
if [ -n "$EXISTING_RELEASE_ID" ]; then
echo "Found existing release (ID: $EXISTING_RELEASE_ID), deleting..."
curl -X DELETE -s \
-H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \
"https://code.foss.global/api/v1/repos/ship.zone/szci/releases/$EXISTING_RELEASE_ID"
echo "Existing release deleted"
sleep 2
else
echo "No existing release found, proceeding with creation"
fi
- name: Create Gitea Release
run: |
VERSION="${{ steps.version.outputs.version }}"
RELEASE_NOTES=$(cat /tmp/release_notes.md)
# Create the release
echo "Creating release for $VERSION..."
RELEASE_ID=$(curl -X POST -s \
-H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \
-H "Content-Type: application/json" \
"https://code.foss.global/api/v1/repos/ship.zone/szci/releases" \
-d "{
\"tag_name\": \"$VERSION\",
\"name\": \"SZCI $VERSION\",
\"body\": $(jq -Rs . /tmp/release_notes.md),
\"draft\": false,
\"prerelease\": false
}" | jq -r '.id')
echo "Release created with ID: $RELEASE_ID"
# Upload binaries as release assets
for binary in dist/binaries/*; do
filename=$(basename "$binary")
echo "Uploading $filename..."
curl -X POST -s \
-H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \
-H "Content-Type: application/octet-stream" \
--data-binary "@$binary" \
"https://code.foss.global/api/v1/repos/ship.zone/szci/releases/$RELEASE_ID/assets?name=$filename"
done
echo "All assets uploaded successfully"
- name: Clean up old releases
run: |
echo "Cleaning up old releases (keeping only last 3)..."
# Fetch all releases sorted by creation date
RELEASES=$(curl -s -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \
"https://code.foss.global/api/v1/repos/ship.zone/szci/releases" | \
jq -r 'sort_by(.created_at) | reverse | .[3:] | .[].id')
# Delete old releases
if [ -n "$RELEASES" ]; then
echo "Found releases to delete:"
for release_id in $RELEASES; do
echo " Deleting release ID: $release_id"
curl -X DELETE -s -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \
"https://code.foss.global/api/v1/repos/ship.zone/szci/releases/$release_id"
done
echo "Old releases deleted successfully"
else
echo "No old releases to delete (less than 4 releases total)"
fi
echo ""
- name: Release Summary
run: |
echo "================================================"
echo " Release ${{ steps.version.outputs.version }} Complete!"
echo "================================================"
echo ""
echo "Binaries published:"
ls -lh dist/binaries/
echo ""
echo "Release URL:"
echo "https://code.foss.global/ship.zone/szci/releases/tag/${{ steps.version.outputs.version }}"
echo ""
echo "Installation command:"
echo "curl -sSL https://code.foss.global/ship.zone/szci/raw/branch/master/install.sh | sudo bash"
echo ""

26
.gitignore vendored
View File

@@ -1,4 +1,24 @@
node_modules/ .nogit/
dist/
# artifacts
coverage/ coverage/
docs/ public/
pages/
# installs
node_modules/
# caches
.yarn/
.cache/
.rpt2_cache
# builds
dist/
dist_*/
# deno
deno.lock
.deno/
# custom

View File

@@ -1,2 +0,0 @@
docs/
coverage/

11
.vscode/launch.json vendored Normal file
View File

@@ -0,0 +1,11 @@
{
"version": "0.2.0",
"configurations": [
{
"command": "npm test",
"name": "Run npm test",
"request": "launch",
"type": "node-terminal"
}
]
}

26
.vscode/settings.json vendored Normal file
View File

@@ -0,0 +1,26 @@
{
"json.schemas": [
{
"fileMatch": ["/npmextra.json"],
"schema": {
"type": "object",
"properties": {
"szci": {
"type": "object",
"description": "settings for szci"
},
"gitzone": {
"type": "object",
"description": "settings for gitzone",
"properties": {
"projectType": {
"type": "string",
"enum": ["website", "element", "service", "npm", "wcc"]
}
}
}
}
}
}
]
}

108
bin/szci-wrapper.js Executable file
View File

@@ -0,0 +1,108 @@
#!/usr/bin/env node
/**
* SZCI npm wrapper
* This script executes the appropriate pre-compiled binary based on the current platform
*/
import { spawn } from 'child_process';
import { fileURLToPath } from 'url';
import { dirname, join } from 'path';
import { existsSync } from 'fs';
import { platform, arch } from 'os';
const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename);
/**
* Get the binary name for the current platform
*/
function getBinaryName() {
const plat = platform();
const architecture = arch();
// Map Node's platform/arch to our binary naming
const platformMap = {
'darwin': 'macos',
'linux': 'linux',
'win32': 'windows'
};
const archMap = {
'x64': 'x64',
'arm64': 'arm64'
};
const mappedPlatform = platformMap[plat];
const mappedArch = archMap[architecture];
if (!mappedPlatform || !mappedArch) {
console.error(`Error: Unsupported platform/architecture: ${plat}/${architecture}`);
console.error('Supported platforms: Linux, macOS, Windows');
console.error('Supported architectures: x64, arm64');
process.exit(1);
}
// Construct binary name
let binaryName = `szci-${mappedPlatform}-${mappedArch}`;
if (plat === 'win32') {
binaryName += '.exe';
}
return binaryName;
}
/**
* Execute the binary
*/
function executeBinary() {
const binaryName = getBinaryName();
const binaryPath = join(__dirname, '..', 'dist', 'binaries', binaryName);
// Check if binary exists
if (!existsSync(binaryPath)) {
console.error(`Error: Binary not found at ${binaryPath}`);
console.error('This might happen if:');
console.error('1. The postinstall script failed to run');
console.error('2. The platform is not supported');
console.error('3. The package was not installed correctly');
console.error('');
console.error('Try reinstalling the package:');
console.error(' npm uninstall -g @ship.zone/szci');
console.error(' npm install -g @ship.zone/szci');
process.exit(1);
}
// Spawn the binary with all arguments passed through
const child = spawn(binaryPath, process.argv.slice(2), {
stdio: 'inherit',
shell: false
});
// Handle child process events
child.on('error', (err) => {
console.error(`Error executing szci: ${err.message}`);
process.exit(1);
});
child.on('exit', (code, signal) => {
if (signal) {
process.kill(process.pid, signal);
} else {
process.exit(code || 0);
}
});
// Forward signals to child process
const signals = ['SIGINT', 'SIGTERM', 'SIGHUP'];
signals.forEach(signal => {
process.on(signal, () => {
if (!child.killed) {
child.kill(signal);
}
});
});
}
// Execute
executeBinary();

136
changelog.md Normal file
View File

@@ -0,0 +1,136 @@
# Changelog
## 2026-02-07 - 7.1.0 - feat(installer)
switch installer/docs to use main branch; add automated installer instructions and update CI examples to use the installer; add release registries and access level in npmextra.json
- Replaced master branch URLs with main in install.sh and README examples
- Added "Automated Installer (Recommended)" section to README with curl install examples (including versioned install)
- Replaced npm install -g @ship.zone/szci in CI examples with the curl-based installer invocation (some uses sudo)
- Updated npmextra.json: removed npmAccessLevel for @ship.zone/szci and added release.registries and release.accessLevel entries
## 2026-02-06 - 7.0.0 - BREAKING CHANGE(szci)
delegate Docker operations to @git.zone/tsdocker, remove internal Docker managers and deprecated modules, simplify CLI and env var handling
- Delegate all Docker actions to @git.zone/tsdocker via npx; SzciDockerManager now bridges SZCI_LOGIN_DOCKER* and CI_JOB_TOKEN to DOCKER_REGISTRY_N and invokes npx @git.zone/tsdocker for build/login/push/pull/test.
- Removed internal Docker implementation: Dockerfile, DockerRegistry, RegistryStorage, related helpers and plugin wrappers removed from ts/manager.docker.
- Removed Cloudron manager and other deprecated modules and their plugin shims: manager.cloudron, mod_clean, mod_command, mod_precheck, mod_trigger (and corresponding CLI commands: cloudron, clean, command, precheck, trigger).
- CLI and exports simplified: Dockerfile export removed from mod.ts; Szci CLI now delegates docker command to the simplified SzciDockerManager.
- Updated environment handling: bridges SZCI_LOGIN_DOCKER* → DOCKER_REGISTRY_N and auto-bridges GitLab CI CI_JOB_TOKEN to DOCKER_REGISTRY_0.
- Node.js default mappings updated: stable→22, lts→20, legacy→18.
- Dependencies and plugins cleaned-up: removed unused/obsolete deps (e.g. @push.rocks/lik, smartdelay, through2) from deno.json and szci.plugins.ts.
- Docs updated (readme.md, readme.hints.md) to reflect architecture, tsdocker delegation, env var bridging and migration notes from npmci.
- BREAKING: CI configs and any workflows relying on internal Docker classes or the removed CLI commands must be updated to use tsdocker and the new env var/command flows.
## 2025-10-26 - 6.0.1 - fix(tests)
Migrate tests to Deno native runner and update Deno config
- Convert test suites from tap/tapbundle to Deno.test and @std/assert
- Replace CommonJS-style runtime imports with .ts module imports for Deno (test files updated)
- Use Deno.env.set to configure test environment variables and restore working directory after tests
- Update test/test.cloudly.ts to import CloudlyConnector directly and disable TLS verification for tests
- Adjust deno.json version field (6.0.0 -> 5.0.0) as part of Deno configuration changes
- Add local project .claude/settings.local.json for tooling permissions
## 2025-10-26 - 6.0.0 - BREAKING CHANGE(szci)
Rename project from npmci to szci and migrate runtime to Deno; add compiled binaries, installer and wrapper; update imports, env handling and package metadata
- Major rename/refactor: Npmci -> Szci across the codebase (classes, filenames, modules and exports).
- Migrate runtime to Deno: add deno.json, mod.ts entry point, use Deno.std imports and .ts module imports throughout.
- Add compilation and distribution tooling: scripts/compile-all.sh, scripts/install-binary.js, bin/szci-wrapper.js and dist/binaries layout for prebuilt executables.
- Package metadata updated: package.json renamed/rewritten for @ship.zone/szci and bumped to 5.0.0, updated publishConfig, files and scripts.
- Environment API changes: replaced process.env usages with Deno.env accessors and updated path constants (Szci paths).
- Refactored helper modules: npmci.bash -> szci.bash, updated smartshell/bash wrappers and other manager modules to Deno patterns.
- Tests and imports updated to new module paths and package layout; .gitignore updated to ignore deno artifacts.
- Breaking changes to callers: CLI name, class names, programmatic API, binary installation and environment handling have changed and may require updates in integrations and CI configurations.
## 2024-11-17 - 4.1.37 - fix(docker)
Enhanced base image extraction logic from Dockerfile
- Improved dockerBaseImage to accurately extract base images considering ARG variables.
- Added support for parsing Dockerfile content without external libraries.
- Enhanced error handling for missing FROM instructions.
## 2024-11-17 - 4.1.36 - fix(docker)
Improve logging for Dockerfile build order with base image details.
- Enhance logging in Dockerfile sorting process to include base image information.
## 2024-11-17 - 4.1.35 - fix(docker)
Fix Dockerfile dependency sorting and enhance environment variable handling for GitHub repos
- Refined the algorithm for sorting Dockerfiles based on dependencies to ensure proper build order.
- Enhanced environment variable handling in the NpmciEnv class to support conditional assignments.
- Updated various dependencies in package.json for improved performance and compatibility.
- Added error handling to circular dependency detection in Dockerfile sorting.
## 2024-11-05 - 4.1.34 - fix(connector)
Remove unused typedrequest implementation in cloudlyconnector
- Removed commented out code that initialized typedrequest in CloudlyConnector.
## 2024-11-05 - 4.1.33 - fix(core)
Updated dependencies and improved npm preparation logic.
- Updated @git.zone/tsbuild from ^2.1.84 to ^2.2.0.
- Updated @git.zone/tsrun from ^1.2.49 to ^1.3.3.
- Updated @types/node from ^22.7.9 to ^22.8.7.
- Updated @serve.zone/api from ^1.2.1 to ^4.3.1.
- Improved npm preparation logic to handle empty tokens gracefully.
## 2024-10-23 - 4.1.32 - fix(dependencies)
Update project dependencies to latest versions
- Updated development dependencies, including @git.zone/tsbuild and @git.zone/tsrun.
- Updated production dependencies such as @api.global/typedrequest and @push.rocks/smartfile.
## 2022-10-24 - 4.0.11 - prerelease
now includes a precheck for more generic runner execution
- Implemented a precheck feature for runners.
## 2022-10-09 to 2022-10-11 - 4.0.0 to 4.0.10 - migration
internal migrations and fixes
- Major switch to ESM style module: **BREAKING CHANGE**.
- Multiple fixes in core functionalities and module updates.
## 2019-11-26 - 3.1.73 - fixes
correctly setting npm cache and other updates
- Ensured correct npm cache setting during preparation.
- Various core updates.
## 2018-12-23 - 3.1.19 - privacy updates
enhanced mirroring controls for private code
- Now refusing to mirror private code.
## 2018-11-24 - 3.1.2 - ci improvement
removed unnecessary build dependency
- Removed npmts build dependency in CI pipeline.
## 2018-09-22 - 3.0.59 - enhancement
integrated smartlog for improved logging
- Logs now utilize smartlog for better management.
## 2017-09-08 - 3.0.14 - analytics
added analytics features
- Enabled analytics throughout the system.
## 2017-08-29 - 3.0.9 - docker enhancements
docker improvements and build args implementation
- Implemented working `dockerBuildArgEnvMap`.
## 2017-07-27 - 2.4.0 - stability improvements
various updates to stabilize the environment
- Fixed npmci versioning issues.
## 2016-11-25 - 2.3.24 - global tools
improved handling for global tool installations
- Improved install handling for needed global tools.

63
deno.json Normal file
View File

@@ -0,0 +1,63 @@
{
"name": "@ship.zone/szci",
"version": "7.1.0",
"exports": "./mod.ts",
"nodeModulesDir": "auto",
"tasks": {
"dev": "deno run --allow-all mod.ts",
"compile": "deno task compile:all",
"compile:all": "bash scripts/compile-all.sh",
"test": "deno test --allow-all test/",
"test:watch": "deno test --allow-all --watch test/",
"check": "deno check mod.ts",
"fmt": "deno fmt",
"lint": "deno lint"
},
"lint": {
"rules": {
"tags": [
"recommended"
]
}
},
"fmt": {
"useTabs": false,
"lineWidth": 100,
"indentWidth": 2,
"semiColons": true,
"singleQuote": true
},
"compilerOptions": {
"lib": [
"deno.window"
],
"strict": true
},
"imports": {
"@std/path": "jsr:@std/path@^1.0.0",
"@std/fmt": "jsr:@std/fmt@^1.0.0",
"@std/cli": "jsr:@std/cli@^1.0.0",
"@std/assert": "jsr:@std/assert@^1.0.0",
"@api.global/typedrequest": "npm:@api.global/typedrequest@^3.1.10",
"@push.rocks/npmextra": "npm:@push.rocks/npmextra@^5.1.2",
"@push.rocks/projectinfo": "npm:@push.rocks/projectinfo@^5.0.2",
"@push.rocks/qenv": "npm:@push.rocks/qenv@^6.0.2",
"@push.rocks/smartanalytics": "npm:@push.rocks/smartanalytics@^2.0.15",
"@push.rocks/smartcli": "npm:@push.rocks/smartcli@^4.0.11",
"@push.rocks/smartfile": "npm:@push.rocks/smartfile@^11.0.21",
"@push.rocks/smartgit": "npm:@push.rocks/smartgit@^3.1.1",
"@push.rocks/smartlog": "npm:@push.rocks/smartlog@^3.0.7",
"@push.rocks/smartlog-destination-local": "npm:@push.rocks/smartlog-destination-local@^9.0.0",
"@push.rocks/smartobject": "npm:@push.rocks/smartobject@^1.0.12",
"@push.rocks/smartpath": "npm:@push.rocks/smartpath@^5.0.11",
"@push.rocks/smartpromise": "npm:@push.rocks/smartpromise@^4.0.4",
"@push.rocks/smartrequest": "npm:@push.rocks/smartrequest@^2.0.23",
"@push.rocks/smartshell": "npm:@push.rocks/smartshell@^3.0.6",
"@push.rocks/smartsocket": "npm:@push.rocks/smartsocket@^2.0.22",
"@push.rocks/smartssh": "npm:@push.rocks/smartssh@^2.0.1",
"@push.rocks/smartstring": "npm:@push.rocks/smartstring@^4.0.8",
"@push.rocks/smartexpect": "npm:@push.rocks/smartexpect@^1.0.15",
"@serve.zone/api": "npm:@serve.zone/api@^4.3.11",
"@tsclass/tsclass": "npm:@tsclass/tsclass@^4.1.2"
}
}

257
install.sh Executable file
View File

@@ -0,0 +1,257 @@
#!/bin/bash
# SZCI Installer Script (v5.0+)
# Downloads and installs pre-compiled SZCI binary from Gitea releases
#
# Usage:
# Direct piped installation (recommended):
# curl -sSL https://code.foss.global/ship.zone/szci/raw/branch/main/install.sh | sudo bash
#
# With version specification:
# curl -sSL https://code.foss.global/ship.zone/szci/raw/branch/main/install.sh | sudo bash -s -- --version v5.0.0
#
# Options:
# -h, --help Show this help message
# --version VERSION Install specific version (e.g., v5.0.0)
# --install-dir DIR Installation directory (default: /opt/szci)
set -e
# Default values
SHOW_HELP=0
SPECIFIED_VERSION=""
INSTALL_DIR="/opt/szci"
GITEA_BASE_URL="https://code.foss.global"
GITEA_REPO="ship.zone/szci"
# Parse command line arguments
while [[ $# -gt 0 ]]; do
case $1 in
-h|--help)
SHOW_HELP=1
shift
;;
--version)
SPECIFIED_VERSION="$2"
shift 2
;;
--install-dir)
INSTALL_DIR="$2"
shift 2
;;
*)
echo "Unknown option: $1"
echo "Use -h or --help for usage information"
exit 1
;;
esac
done
if [ $SHOW_HELP -eq 1 ]; then
echo "SZCI Installer Script (v5.0+)"
echo "Downloads and installs pre-compiled SZCI binary"
echo ""
echo "Usage: $0 [options]"
echo ""
echo "Options:"
echo " -h, --help Show this help message"
echo " --version VERSION Install specific version (e.g., v5.0.0)"
echo " --install-dir DIR Installation directory (default: /opt/szci)"
echo ""
echo "Examples:"
echo " # Install latest version"
echo " curl -sSL https://code.foss.global/ship.zone/szci/raw/branch/main/install.sh | sudo bash"
echo ""
echo " # Install specific version"
echo " curl -sSL https://code.foss.global/ship.zone/szci/raw/branch/main/install.sh | sudo bash -s -- --version v5.0.0"
exit 0
fi
# Check if running as root
if [ "$EUID" -ne 0 ]; then
echo "Please run as root (sudo bash install.sh or pipe to sudo bash)"
exit 1
fi
# Helper function to detect OS and architecture
detect_platform() {
local os=$(uname -s)
local arch=$(uname -m)
# Map OS
case "$os" in
Linux)
os_name="linux"
;;
Darwin)
os_name="macos"
;;
MINGW*|MSYS*|CYGWIN*)
os_name="windows"
;;
*)
echo "Error: Unsupported operating system: $os"
echo "Supported: Linux, macOS, Windows"
exit 1
;;
esac
# Map architecture
case "$arch" in
x86_64|amd64)
arch_name="x64"
;;
aarch64|arm64)
arch_name="arm64"
;;
*)
echo "Error: Unsupported architecture: $arch"
echo "Supported: x86_64/amd64 (x64), aarch64/arm64 (arm64)"
exit 1
;;
esac
# Construct binary name
if [ "$os_name" = "windows" ]; then
echo "szci-${os_name}-${arch_name}.exe"
else
echo "szci-${os_name}-${arch_name}"
fi
}
# Get latest release version from Gitea API
get_latest_version() {
echo "Fetching latest release version from Gitea..." >&2
local api_url="${GITEA_BASE_URL}/api/v1/repos/${GITEA_REPO}/releases/latest"
local response=$(curl -sSL "$api_url" 2>/dev/null)
if [ $? -ne 0 ] || [ -z "$response" ]; then
echo "Error: Failed to fetch latest release information from Gitea API" >&2
echo "URL: $api_url" >&2
exit 1
fi
# Extract tag_name from JSON response
local version=$(echo "$response" | grep -o '"tag_name":"[^"]*"' | cut -d'"' -f4)
if [ -z "$version" ]; then
echo "Error: Could not determine latest version from API response" >&2
exit 1
fi
echo "$version"
}
# Main installation process
echo "================================================"
echo " SZCI Installation Script (v5.0+)"
echo " Serve Zone CI/CD Tool"
echo "================================================"
echo ""
# Detect platform
BINARY_NAME=$(detect_platform)
echo "Detected platform: $BINARY_NAME"
echo ""
# Determine version to install
if [ -n "$SPECIFIED_VERSION" ]; then
VERSION="$SPECIFIED_VERSION"
echo "Installing specified version: $VERSION"
else
VERSION=$(get_latest_version)
echo "Installing latest version: $VERSION"
fi
echo ""
# Construct download URL
DOWNLOAD_URL="${GITEA_BASE_URL}/${GITEA_REPO}/releases/download/${VERSION}/${BINARY_NAME}"
echo "Download URL: $DOWNLOAD_URL"
echo ""
# Clean installation directory - ensure only binary exists
if [ -d "$INSTALL_DIR" ]; then
echo "Cleaning installation directory: $INSTALL_DIR"
rm -rf "$INSTALL_DIR"
fi
# Create fresh installation directory
echo "Creating installation directory: $INSTALL_DIR"
mkdir -p "$INSTALL_DIR"
# Download binary
echo "Downloading SZCI binary..."
TEMP_FILE="$INSTALL_DIR/szci.download"
curl -sSL "$DOWNLOAD_URL" -o "$TEMP_FILE"
if [ $? -ne 0 ]; then
echo "Error: Failed to download binary from $DOWNLOAD_URL"
echo ""
echo "Please check:"
echo " 1. Your internet connection"
echo " 2. The specified version exists: ${GITEA_BASE_URL}/${GITEA_REPO}/releases"
echo " 3. The platform binary is available for this release"
rm -f "$TEMP_FILE"
exit 1
fi
# Check if download was successful (file exists and not empty)
if [ ! -s "$TEMP_FILE" ]; then
echo "Error: Downloaded file is empty or does not exist"
rm -f "$TEMP_FILE"
exit 1
fi
# Move to final location
BINARY_PATH="$INSTALL_DIR/szci"
mv "$TEMP_FILE" "$BINARY_PATH"
if [ $? -ne 0 ] || [ ! -f "$BINARY_PATH" ]; then
echo "Error: Failed to move binary to $BINARY_PATH"
rm -f "$TEMP_FILE" 2>/dev/null
exit 1
fi
# Make executable
chmod +x "$BINARY_PATH"
if [ $? -ne 0 ]; then
echo "Error: Failed to make binary executable"
exit 1
fi
echo "Binary installed successfully to: $BINARY_PATH"
echo ""
# Check if /usr/local/bin is in PATH
if [[ ":$PATH:" == *":/usr/local/bin:"* ]]; then
BIN_DIR="/usr/local/bin"
else
BIN_DIR="/usr/bin"
fi
# Create symlink for global access
ln -sf "$BINARY_PATH" "$BIN_DIR/szci"
echo "Symlink created: $BIN_DIR/szci -> $BINARY_PATH"
echo ""
echo "================================================"
echo " SZCI Installation Complete!"
echo "================================================"
echo ""
echo "Installation details:"
echo " Binary location: $BINARY_PATH"
echo " Symlink location: $BIN_DIR/szci"
echo " Version: $VERSION"
echo ""
echo "Get started:"
echo " szci --version"
echo " szci --help"
echo " szci node install stable # Install Node.js"
echo " szci docker build # Build Docker images"
echo " szci npm test # Run tests"
echo ""
echo "For CI/CD integration examples, visit:"
echo " https://code.foss.global/ship.zone/szci"
echo ""

View File

47
mod.ts Normal file
View File

@@ -0,0 +1,47 @@
#!/usr/bin/env -S deno run --allow-all
/**
* SZCI - Serve Zone CI/CD Tool
*
* A command-line tool for streamlining Node.js and Docker workflows
* within CI environments, particularly GitLab CI, GitHub CI, and Gitea CI.
*
* Required Permissions:
* - --allow-net: Network access for Docker registries, npm, git operations
* - --allow-read: Read configuration files, Dockerfiles, package.json
* - --allow-write: Write configuration files, build artifacts
* - --allow-run: Execute system commands (docker, git, npm, ssh)
* - --allow-sys: Access system information (OS details)
* - --allow-env: Read/write environment variables
*
* @module
*/
import { Szci } from './ts/szci.classes.szci.ts';
/**
* Main entry point for the SZCI application
* Parses command-line arguments and executes the requested command
*/
async function main(): Promise<void> {
// Create Szci instance
const szciInstance = new Szci();
// Start the CLI
// Deno.args is already 0-indexed (unlike Node's process.argv which starts at index 2)
// The smartcli library may expect process.argv format, so we might need to prepend placeholders
await szciInstance.start();
}
// Execute main and handle errors
if (import.meta.main) {
try {
await main();
} catch (error) {
console.error(`Error: ${error instanceof Error ? error.message : String(error)}`);
Deno.exit(1);
}
}
// Export for programmatic use
export { Szci } from './ts/szci.classes.szci.ts';

45
npmextra.json Normal file
View File

@@ -0,0 +1,45 @@
{
"@ship.zone/szci": {
"npmGlobalTools": [],
"npmRegistryUrl": "registry.npmjs.org"
},
"@git.zone/tsdocker": {
"baseImage": "hosttoday/ht-docker-node:npmci",
"command": "szci test stable"
},
"@git.zone/cli": {
"projectType": "npm",
"module": {
"githost": "gitlab.com",
"gitscope": "ship.zone",
"gitrepo": "szci",
"description": "A tool to streamline Node.js and Docker workflows within CI environments, particularly GitLab CI, providing various CI/CD utilities.",
"npmPackagename": "@ship.zone/szci",
"license": "MIT",
"keywords": [
"Node.js",
"Docker",
"GitLab CI",
"GitHub CI",
"Gitea CI",
"CI/CD",
"automation",
"npm",
"TypeScript",
"cloud",
"SSH",
"registry",
"container management",
"continuous integration",
"continuous deployment"
]
},
"release": {
"registries": [
"https://verdaccio.lossless.digital",
"https://registry.npmjs.org"
],
"accessLevel": "public"
}
}
}

View File

@@ -1,30 +1,67 @@
{ {
"name": "npmci", "name": "@ship.zone/szci",
"version": "1.0.3", "version": "7.1.0",
"description": "", "description": "Serve Zone CI - A tool to streamline Node.js and Docker workflows within CI environments, particularly GitLab CI, providing various CI/CD utilities. Powered by Deno with standalone executables.",
"main": "dist/index.js", "keywords": [
"bin": { "Node.js",
"npmci": "dist/index.js" "Docker",
}, "GitLab CI",
"scripts": { "GitHub CI",
"test": "(npmts)" "Gitea CI",
"CI/CD",
"automation",
"npm",
"TypeScript",
"Deno",
"cloud",
"SSH",
"registry",
"container management",
"continuous integration",
"continuous deployment"
],
"homepage": "https://code.foss.global/ship.zone/szci",
"bugs": {
"url": "https://code.foss.global/ship.zone/szci/issues"
}, },
"repository": { "repository": {
"type": "git", "type": "git",
"url": "git+ssh://git@github.com/pushrocks/npmci.git" "url": "git+https://code.foss.global/ship.zone/szci.git"
}, },
"author": "Lossless GmbH", "author": "Lossless GmbH",
"license": "MIT", "license": "MIT",
"bugs": { "type": "module",
"url": "https://gitlab.com/pushrocks/npmci/issues" "bin": {
"szci": "./bin/szci-wrapper.js"
}, },
"homepage": "https://gitlab.com/pushrocks/npmci#README", "scripts": {
"devDependencies": { "postinstall": "node scripts/install-binary.js",
"npmts": "^5.1.15" "prepublishOnly": "echo 'Publishing SZCI binaries to npm...'",
"test": "echo 'Tests are run with Deno: deno task test'",
"build": "echo 'no build needed'"
}, },
"dependencies": { "files": [
"commander": "^2.9.0", "bin/",
"shelljs": "^0.7.0", "scripts/install-binary.js",
"typings-global": "^1.0.3" "readme.md",
} "license",
"changelog.md"
],
"engines": {
"node": ">=14.0.0"
},
"os": [
"darwin",
"linux",
"win32"
],
"cpu": [
"x64",
"arm64"
],
"publishConfig": {
"access": "public",
"registry": "https://registry.npmjs.org/"
},
"packageManager": "pnpm@10.18.1+sha512.77a884a165cbba2d8d1c19e3b4880eee6d2fcabd0d879121e282196b80042351d5eb3ca0935fa599da1dc51265cc68816ad2bddd2a2de5ea9fdf92adbec7cd34"
} }

9
pnpm-lock.yaml generated Normal file
View File

@@ -0,0 +1,9 @@
lockfileVersion: '9.0'
settings:
autoInstallPeers: true
excludeLinksFromLockfile: false
importers:
.: {}

55
readme.hints.md Normal file
View File

@@ -0,0 +1,55 @@
- Focus on CLI usage in CI environments.
- Show GitLab CI, GitHub CI and Gitea CI examples.
## Architecture
szci is a thin orchestrator that delegates heavy lifting to specialized tools:
- **Docker**: Delegates all operations to `@git.zone/tsdocker` via `npx`
- **NPM**: Thin wrapper around `pnpm` with .npmrc generation from `SZCI_TOKEN_NPM*` env vars
- **Node.js**: NVM-based version management (stable=22, lts=20, legacy=18)
- **SSH**: Deploys SSH keys from `SZCI_SSHKEY_*` env vars
- **Git**: GitHub mirroring via `SZCI_GIT_GITHUBTOKEN`
- **Cloudly**: Integration with serve.zone infrastructure
## Docker Env Var Bridging
szci bridges its own env var format to tsdocker's format before delegation:
- `SZCI_LOGIN_DOCKER*` -> `DOCKER_REGISTRY_N` (pipe-delimited: `url|user|pass`)
- GitLab CI: `CI_JOB_TOKEN` -> `DOCKER_REGISTRY_0` for `registry.gitlab.com`
## Deno Migration Status
The project has been fully migrated from Node.js to Deno runtime.
### Environment Variables
All environment variables have been rebranded from NPMCI_* to SZCI_*:
| Old Name | New Name |
|----------|----------|
| `NPMCI_COMPUTED_REPOURL` | `SZCI_COMPUTED_REPOURL` |
| `NPMCI_URL_CLOUDLY` | `SZCI_URL_CLOUDLY` |
| `NPMCI_GIT_GITHUBTOKEN` | `SZCI_GIT_GITHUBTOKEN` |
| `NPMCI_GIT_GITHUBGROUP` | `SZCI_GIT_GITHUBGROUP` |
| `NPMCI_GIT_GITHUB` | `SZCI_GIT_GITHUB` |
| `NPMCI_SSHKEY_*` | `SZCI_SSHKEY_*` |
| `NPMCI_LOGIN_DOCKER*` | `SZCI_LOGIN_DOCKER*` |
| `NPMCI_TOKEN_NPM*` | `SZCI_TOKEN_NPM*` |
| `NPMTS_TEST` | `SZCI_TEST` |
| `DEBUG_NPMCI` | `DEBUG_SZCI` |
### Runtime
- Uses Deno APIs (`Deno.env`, `Deno.cwd`, `Deno.exit`)
- Logger runtime set to 'deno'
- Dynamic imports use `.ts` extensions
## Removed Modules (v7+)
The following were removed as dead/obsolete code:
- `mod_trigger` - Deprecated GitLab API v3
- `mod_precheck` - GitLab-specific runner tag validation
- `manager.cloudron` - Niche Cloudron deployment
- `mod_command` - Trivial bash wrapper
- `mod_clean` - Trivial config cleanup
- Docker manager internals (Dockerfile, DockerRegistry, RegistryStorage classes) - replaced by tsdocker delegation

391
readme.md Normal file
View File

@@ -0,0 +1,391 @@
# @ship.zone/szci
A lightweight CI/CD orchestrator built with Deno that unifies Node.js, Docker, NPM, SSH, and Git workflows into a single CLI. Compiles to standalone binaries — no runtime required.
## Issue Reporting and Security
For reporting bugs, issues, or security vulnerabilities, please visit [community.foss.global/](https://community.foss.global/). This is the central community hub for all issue reporting. Developers who sign and comply with our contribution agreement and go through identification can also get a [code.foss.global/](https://code.foss.global/) account to submit Pull Requests directly.
## 🏗️ Architecture
szci is a **thin orchestrator** — it doesn't reinvent the wheel. Instead, it wires up best-in-class tools and handles the CI-specific glue:
| Domain | What szci does | Delegates to |
|--------|---------------|-------------|
| 🐳 Docker | Bridges `SZCI_LOGIN_DOCKER*` env vars, auto-detects GitLab CI tokens | [`@git.zone/tsdocker`](https://code.foss.global/git.zone/tsdocker) |
| 📦 NPM | Generates `.npmrc` from `SZCI_TOKEN_NPM*` env vars, handles multi-registry publish | `pnpm` + `npm publish` |
| 🟢 Node.js | Manages Node versions via NVM with named aliases | `nvm` |
| 🔑 SSH | Deploys SSH keys from env vars to `~/.ssh` | `@push.rocks/smartssh` |
| 🔀 Git | Mirrors repos to GitHub | `git remote` |
```
CLI Input (Deno.args)
SmartCLI Router
├─ szci docker * → env var bridging → npx @git.zone/tsdocker
├─ szci npm * → .npmrc generation → pnpm / npm publish
├─ szci node * → version aliasing → nvm install
├─ szci git * → token injection → git push --mirror
└─ szci ssh * → key parsing → write to ~/.ssh
```
## 📥 Installation
### Automated Installer (Recommended)
The easiest way to install szci is using the automated installer script. It handles platform detection, binary download, and global setup:
```sh
curl -sSL https://code.foss.global/ship.zone/szci/raw/branch/main/install.sh | sudo bash
```
To install a specific version:
```sh
curl -sSL https://code.foss.global/ship.zone/szci/raw/branch/main/install.sh | sudo bash -s -- --version v7.0.0
```
### Via NPM (downloads pre-compiled binary)
```sh
npm install -g @ship.zone/szci
```
### From Source
```sh
git clone https://code.foss.global/ship.zone/szci.git
cd szci
deno task compile
```
The compiled binaries land in `dist/binaries/` for Linux (x64/arm64), macOS (x64/arm64), and Windows (x64).
## 🚀 Quick Start
```sh
# Setup Node.js environment
szci node install stable
# Install project dependencies
szci npm install
# Build & push Docker images
szci docker build
szci docker push registry.example.com
# Run tests
szci npm test
```
## 📖 CLI Reference
### `szci docker` — Docker Operations
All Docker commands delegate to `@git.zone/tsdocker` after bridging environment variables.
```sh
szci docker build # Build all Dockerfiles in cwd
szci docker login # Login to all configured registries
szci docker prepare # Alias for login
szci docker push registry.example.com # Push images to a registry
szci docker pull registry.example.com # Pull images from a registry
szci docker test # Test Dockerfiles
```
**Env var bridging:** Before delegating, szci converts its own env var format to tsdocker's expected format:
```
SZCI_LOGIN_DOCKER_1 → DOCKER_REGISTRY_1
SZCI_LOGIN_DOCKER_2 → DOCKER_REGISTRY_2
...
```
In GitLab CI, `CI_JOB_TOKEN` is automatically bridged as `DOCKER_REGISTRY_0` for `registry.gitlab.com`.
### `szci npm` — NPM/pnpm Workflows
```sh
szci npm install # Runs pnpm install
szci npm build # Runs pnpm run build
szci npm test # Runs pnpm test
szci npm prepare # Generates ~/.npmrc from SZCI_TOKEN_NPM* env vars
szci npm publish # Full workflow: prepare → install → build → clean → npm publish
```
The `publish` command supports multi-registry publishing. If `npmAccessLevel` is `public` and a Verdaccio registry is configured, it publishes to both npm and Verdaccio automatically.
### `szci node` — Node.js Version Management
```sh
szci node install stable # Node.js 22
szci node install lts # Node.js 20
szci node install legacy # Node.js 18
szci node install 21 # Any specific version
```
Uses NVM under the hood (auto-detected at `/usr/local/nvm/nvm.sh` or `~/.nvm/nvm.sh`). After installing, it:
1. Sets the installed version as `nvm alias default`
2. Upgrades npm to latest
3. Installs any global tools listed in `npmextra.json``npmGlobalTools`
### `szci ssh` — SSH Key Deployment
```sh
szci ssh prepare # Deploy SSH keys from env vars to ~/.ssh
```
Reads all `SZCI_SSHKEY_*` env vars and writes the keys to disk.
### `szci git` — Git Mirroring
```sh
szci git mirror # Mirror repository to GitHub
```
Pushes all branches and tags to a GitHub mirror. Requires `SZCI_GIT_GITHUBTOKEN`. Refuses to mirror packages marked as `private` in `package.json`.
## ⚙️ Configuration
### `npmextra.json`
Place this in your project root to configure szci behavior:
```json
{
"@ship.zone/szci": {
"npmGlobalTools": ["typescript", "pnpm"],
"npmAccessLevel": "public",
"npmRegistryUrl": "registry.npmjs.org",
"urlCloudly": "https://cloudly.example.com"
}
}
```
| Option | Type | Default | Description |
|--------|------|---------|-------------|
| `npmGlobalTools` | `string[]` | `[]` | Global npm packages to install during `node install` |
| `npmAccessLevel` | `"public" \| "private"` | `"private"` | Access level for `npm publish` |
| `npmRegistryUrl` | `string` | `"registry.npmjs.org"` | Default npm registry |
| `urlCloudly` | `string?` | — | Cloudly endpoint URL (can also be set via `SZCI_URL_CLOUDLY`) |
## 🔐 Environment Variables
### Docker Registry Authentication
Pipe-delimited format: `registry|username|password`
```sh
SZCI_LOGIN_DOCKER_1="registry.example.com|myuser|mypass"
SZCI_LOGIN_DOCKER_2="ghcr.io|token|ghp_xxxx"
```
In **GitLab CI**, the `CI_JOB_TOKEN` is automatically used for `registry.gitlab.com` — no manual config needed.
### NPM Registry Authentication
Pipe-delimited format: `registry|token[|plain]`
```sh
# Base64-encoded token (default)
SZCI_TOKEN_NPM_1="registry.npmjs.org|dGhlLXRva2VuLWhlcmU="
# Plain text token
SZCI_TOKEN_NPM_2="verdaccio.example.com|the-token-here|plain"
```
### SSH Keys
Pipe-delimited format: `host|privKeyBase64|pubKeyBase64`
```sh
SZCI_SSHKEY_1="github.com|BASE64_PRIVATE_KEY|BASE64_PUBLIC_KEY"
SZCI_SSHKEY_2="gitlab.com|BASE64_PRIVATE_KEY|##" # Use ## to skip a field
```
### Git Mirroring
```sh
SZCI_GIT_GITHUBTOKEN="ghp_your_personal_access_token"
SZCI_GIT_GITHUBGROUP="your-org" # Defaults to repo owner
SZCI_GIT_GITHUB="your-repo" # Defaults to repo name
```
### Debugging & Testing
```sh
DEBUG_SZCI="true" # Log all shell commands before execution
SZCI_TEST="true" # Test mode: mocks bash execution, skips SSH disk writes
```
### Full Environment Variable Reference
| Variable | Purpose |
|----------|---------|
| `SZCI_LOGIN_DOCKER_*` | Docker registry credentials (pipe-delimited) |
| `SZCI_TOKEN_NPM_*` | NPM registry auth tokens (pipe-delimited) |
| `SZCI_SSHKEY_*` | SSH key pairs (pipe-delimited) |
| `SZCI_GIT_GITHUBTOKEN` | GitHub personal access token for mirroring |
| `SZCI_GIT_GITHUBGROUP` | GitHub org/user for mirror target |
| `SZCI_GIT_GITHUB` | GitHub repo name for mirror target |
| `SZCI_URL_CLOUDLY` | Cloudly endpoint URL |
| `SZCI_COMPUTED_REPOURL` | Override auto-detected repo URL |
| `DEBUG_SZCI` | Enable verbose shell command logging |
| `SZCI_TEST` | Enable test mode (mock execution) |
## 🔄 CI/CD Integration Examples
### GitLab CI
```yaml
image: node:22
stages:
- prepare
- build
- test
- deploy
before_script:
- curl -sSL https://code.foss.global/ship.zone/szci/raw/branch/main/install.sh | bash
prepare:
stage: prepare
script:
- szci node install stable
- szci npm install
build:
stage: build
script:
- szci docker build
test:
stage: test
script:
- szci npm test
deploy:
stage: deploy
script:
- szci docker push $CI_REGISTRY
only:
- master
```
> 💡 In GitLab CI, `CI_JOB_TOKEN` is automatically detected — szci will login to `registry.gitlab.com` without any extra config.
### GitHub Actions
```yaml
name: CI/CD
on:
push:
branches: [main]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install szci
run: curl -sSL https://code.foss.global/ship.zone/szci/raw/branch/main/install.sh | sudo bash
- name: Setup Node.js
run: szci node install stable
- name: Install & Build
run: |
szci npm install
szci npm build
- name: Test
run: szci npm test
- name: Push Docker
if: github.ref == 'refs/heads/main'
run: szci docker push ghcr.io
env:
SZCI_LOGIN_DOCKER_1: "ghcr.io|${{ github.actor }}|${{ secrets.GITHUB_TOKEN }}"
```
### Gitea CI (Woodpecker)
```yaml
steps:
- name: ci
image: node:22
commands:
- curl -sSL https://code.foss.global/ship.zone/szci/raw/branch/main/install.sh | bash
- szci node install stable
- szci npm install
- szci docker build
- szci npm test
```
## 🔄 Migration from npmci
Upgrading from `@ship.zone/npmci`? Three steps:
1. **Rename the binary** — replace `npmci` with `szci` in all CI scripts
2. **Rename env vars**`NPMCI_*``SZCI_*` (same formats, just the prefix changed)
3. **Docker ops** — now delegate to `@git.zone/tsdocker` (installed automatically via `npx`)
| Old | New |
|-----|-----|
| `NPMCI_LOGIN_DOCKER*` | `SZCI_LOGIN_DOCKER*` |
| `NPMCI_TOKEN_NPM*` | `SZCI_TOKEN_NPM*` |
| `NPMCI_SSHKEY_*` | `SZCI_SSHKEY_*` |
| `NPMCI_GIT_GITHUBTOKEN` | `SZCI_GIT_GITHUBTOKEN` |
| `NPMCI_URL_CLOUDLY` | `SZCI_URL_CLOUDLY` |
| `DEBUG_NPMCI` | `DEBUG_SZCI` |
| `NPMTS_TEST` | `SZCI_TEST` |
## 🛠️ Development
```sh
# Type check
deno task check
# Run tests
deno task test
# Watch tests
deno task test:watch
# Dev mode
deno task dev -- --help
# Compile binaries for all platforms
deno task compile
# Format code
deno task fmt
# Lint
deno task lint
```
## License and Legal Information
This repository contains open-source code licensed under the MIT License. A copy of the license can be found in the [LICENSE](./LICENSE) file.
**Please note:** The MIT License does not grant permission to use the trade names, trademarks, service marks, or product names of the project, except as required for reasonable and customary use in describing the origin of the work and reproducing the content of the NOTICE file.
### Trademarks
This project is owned and maintained by Task Venture Capital GmbH. The names and logos associated with Task Venture Capital GmbH and any related products or services are trademarks of Task Venture Capital GmbH or third parties, and are not included within the scope of the MIT license granted herein.
Use of these trademarks must comply with Task Venture Capital GmbH's Trademark Guidelines or the guidelines of the respective third-party owners, and any usage must be approved in writing. Third-party trademarks used herein are the property of their respective owners and used only in a descriptive manner, e.g. for an implementation of an API or similar.
### Company Information
Task Venture Capital GmbH
Registered at District Court Bremen HRB 35230 HB, Germany
For any legal inquiries or further information, please contact us via email at hello@task.vc.
By using this repository, you acknowledge that you have read this section, agree to comply with its terms, and understand that the licensing of the code does not imply endorsement by Task Venture Capital GmbH of any derivative works.

66
scripts/compile-all.sh Executable file
View File

@@ -0,0 +1,66 @@
#!/bin/bash
set -e
# Get version from deno.json
VERSION=$(cat deno.json | grep -o '"version": *"[^"]*"' | cut -d'"' -f4)
BINARY_DIR="dist/binaries"
echo "================================================"
echo " SZCI Compilation Script"
echo " Version: ${VERSION}"
echo "================================================"
echo ""
echo "Compiling for all supported platforms..."
echo ""
# Clean up old binaries and create fresh directory
rm -rf "$BINARY_DIR"
mkdir -p "$BINARY_DIR"
echo "→ Cleaned old binaries from $BINARY_DIR"
echo ""
# Linux x86_64
echo "→ Compiling for Linux x86_64..."
deno compile --allow-all --no-check --output "$BINARY_DIR/szci-linux-x64" \
--target x86_64-unknown-linux-gnu mod.ts
echo " ✓ Linux x86_64 complete"
echo ""
# Linux ARM64
echo "→ Compiling for Linux ARM64..."
deno compile --allow-all --no-check --output "$BINARY_DIR/szci-linux-arm64" \
--target aarch64-unknown-linux-gnu mod.ts
echo " ✓ Linux ARM64 complete"
echo ""
# macOS x86_64
echo "→ Compiling for macOS x86_64..."
deno compile --allow-all --no-check --output "$BINARY_DIR/szci-macos-x64" \
--target x86_64-apple-darwin mod.ts
echo " ✓ macOS x86_64 complete"
echo ""
# macOS ARM64
echo "→ Compiling for macOS ARM64..."
deno compile --allow-all --no-check --output "$BINARY_DIR/szci-macos-arm64" \
--target aarch64-apple-darwin mod.ts
echo " ✓ macOS ARM64 complete"
echo ""
# Windows x86_64
echo "→ Compiling for Windows x86_64..."
deno compile --allow-all --no-check --output "$BINARY_DIR/szci-windows-x64.exe" \
--target x86_64-pc-windows-msvc mod.ts
echo " ✓ Windows x86_64 complete"
echo ""
echo "================================================"
echo " Compilation Summary"
echo "================================================"
echo ""
ls -lh "$BINARY_DIR/" | tail -n +2
echo ""
echo "✓ All binaries compiled successfully!"
echo ""
echo "Binary location: $BINARY_DIR/"
echo ""

228
scripts/install-binary.js Normal file
View File

@@ -0,0 +1,228 @@
#!/usr/bin/env node
/**
* SZCI npm postinstall script
* Downloads the appropriate binary for the current platform from repository releases
*/
import { platform, arch } from 'os';
import { existsSync, mkdirSync, writeFileSync, chmodSync, unlinkSync } from 'fs';
import { join, dirname } from 'path';
import { fileURLToPath } from 'url';
import https from 'https';
import { pipeline } from 'stream';
import { promisify } from 'util';
import { createWriteStream } from 'fs';
const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename);
const streamPipeline = promisify(pipeline);
// Configuration
const REPO_BASE = 'https://code.foss.global/ship.zone/szci';
const VERSION = process.env.npm_package_version || '4.1.37';
function getBinaryInfo() {
const plat = platform();
const architecture = arch();
const platformMap = {
'darwin': 'macos',
'linux': 'linux',
'win32': 'windows'
};
const archMap = {
'x64': 'x64',
'arm64': 'arm64'
};
const mappedPlatform = platformMap[plat];
const mappedArch = archMap[architecture];
if (!mappedPlatform || !mappedArch) {
return { supported: false, platform: plat, arch: architecture };
}
let binaryName = `szci-${mappedPlatform}-${mappedArch}`;
if (plat === 'win32') {
binaryName += '.exe';
}
return {
supported: true,
platform: mappedPlatform,
arch: mappedArch,
binaryName,
originalPlatform: plat
};
}
function downloadFile(url, destination) {
return new Promise((resolve, reject) => {
console.log(`Downloading from: ${url}`);
// Follow redirects
const download = (url, redirectCount = 0) => {
if (redirectCount > 5) {
reject(new Error('Too many redirects'));
return;
}
https.get(url, (response) => {
if (response.statusCode === 301 || response.statusCode === 302) {
console.log(`Following redirect to: ${response.headers.location}`);
download(response.headers.location, redirectCount + 1);
return;
}
if (response.statusCode !== 200) {
reject(new Error(`Failed to download: ${response.statusCode} ${response.statusMessage}`));
return;
}
const totalSize = parseInt(response.headers['content-length'], 10);
let downloadedSize = 0;
let lastProgress = 0;
response.on('data', (chunk) => {
downloadedSize += chunk.length;
const progress = Math.round((downloadedSize / totalSize) * 100);
// Only log every 10% to reduce noise
if (progress >= lastProgress + 10) {
console.log(`Download progress: ${progress}%`);
lastProgress = progress;
}
});
const file = createWriteStream(destination);
pipeline(response, file, (err) => {
if (err) {
reject(err);
} else {
console.log('Download complete!');
resolve();
}
});
}).on('error', reject);
};
download(url);
});
}
async function main() {
console.log('===========================================');
console.log(' SZCI - Binary Installation');
console.log('===========================================');
console.log('');
const binaryInfo = getBinaryInfo();
if (!binaryInfo.supported) {
console.error(`❌ Error: Unsupported platform/architecture: ${binaryInfo.platform}/${binaryInfo.arch}`);
console.error('');
console.error('Supported platforms:');
console.error(' • Linux (x64, arm64)');
console.error(' • macOS (x64, arm64)');
console.error(' • Windows (x64)');
console.error('');
console.error('If you believe your platform should be supported, please file an issue:');
console.error(' https://code.foss.global/ship.zone/szci/issues');
process.exit(1);
}
console.log(`Platform: ${binaryInfo.platform} (${binaryInfo.originalPlatform})`);
console.log(`Architecture: ${binaryInfo.arch}`);
console.log(`Binary: ${binaryInfo.binaryName}`);
console.log(`Version: ${VERSION}`);
console.log('');
// Create dist/binaries directory if it doesn't exist
const binariesDir = join(__dirname, '..', 'dist', 'binaries');
if (!existsSync(binariesDir)) {
console.log('Creating binaries directory...');
mkdirSync(binariesDir, { recursive: true });
}
const binaryPath = join(binariesDir, binaryInfo.binaryName);
// Check if binary already exists and skip download
if (existsSync(binaryPath)) {
console.log('✓ Binary already exists, skipping download');
} else {
// Construct download URL
// Try release URL first, fall back to raw branch if needed
const releaseUrl = `${REPO_BASE}/releases/download/v${VERSION}/${binaryInfo.binaryName}`;
const fallbackUrl = `${REPO_BASE}/raw/branch/master/dist/binaries/${binaryInfo.binaryName}`;
console.log('Downloading platform-specific binary...');
console.log('This may take a moment depending on your connection speed.');
console.log('');
try {
// Try downloading from release
await downloadFile(releaseUrl, binaryPath);
} catch (err) {
console.log(`Release download failed: ${err.message}`);
console.log('Trying fallback URL...');
try {
// Try fallback URL
await downloadFile(fallbackUrl, binaryPath);
} catch (fallbackErr) {
console.error(`❌ Error: Failed to download binary`);
console.error(` Primary URL: ${releaseUrl}`);
console.error(` Fallback URL: ${fallbackUrl}`);
console.error('');
console.error('This might be because:');
console.error('1. The release has not been created yet');
console.error('2. Network connectivity issues');
console.error('3. The version specified does not exist');
console.error('');
console.error('You can try:');
console.error('1. Installing from source: https://code.foss.global/ship.zone/szci');
console.error('2. Downloading the binary manually from the releases page');
console.error('3. Building from source with: deno task compile');
// Clean up partial download
if (existsSync(binaryPath)) {
unlinkSync(binaryPath);
}
process.exit(1);
}
}
console.log(`✓ Binary downloaded successfully`);
}
// On Unix-like systems, ensure the binary is executable
if (binaryInfo.originalPlatform !== 'win32') {
try {
console.log('Setting executable permissions...');
chmodSync(binaryPath, 0o755);
console.log('✓ Binary permissions updated');
} catch (err) {
console.error(`⚠️ Warning: Could not set executable permissions: ${err.message}`);
console.error(' You may need to manually run:');
console.error(` chmod +x ${binaryPath}`);
}
}
console.log('');
console.log('✅ SZCI installation completed successfully!');
console.log('');
console.log('You can now use SZCI by running:');
console.log(' szci --help');
console.log('');
console.log('===========================================');
}
// Run the installation
main().catch(err => {
console.error(`❌ Installation failed: ${err.message}`);
process.exit(1);
});

2
test/assets/Dockerfile Normal file
View File

@@ -0,0 +1,2 @@
FROM ubuntu
RUN apt-get update

View File

@@ -0,0 +1,2 @@
FROM mygroup/myrepo:sometag2
RUN apt-get update

View File

@@ -0,0 +1,2 @@
FROM mygroup/myrepo:sometag2
RUN apt-get update

View File

@@ -0,0 +1 @@
FROM mygroup/myrepo:latest

View File

@@ -0,0 +1,9 @@
{
"gitzone": {
"module": {
"githost": "code.foss.global",
"gitscope": "mygroup",
"gitrepo": "myrepo"
}
}
}

33
test/assets/package.json Normal file
View File

@@ -0,0 +1,33 @@
{
"name": "sandbox-npmts",
"version": "1.0.1",
"description": "a cool test repo for npmts",
"main": "dist/index.js",
"typings": "dist/index.d.ts",
"directories": {
"test": "test"
},
"scripts": {
"test": "(npmts)",
"testDev": "node ../../pushrocks/npmts/dist/index.js"
},
"repository": {
"type": "git",
"url": "git+ssh://git@gitlab.com/sandboxzone/sandbox-npmts.git"
},
"author": "Lossless GmbH",
"license": "MIT",
"bugs": {
"url": "https://gitlab.com/sandboxzone/sandbox-npmts/issues"
},
"homepage": "https://gitlab.com/sandboxzone/sandbox-npmts#README",
"dependencies": {
"smartchai": "^1.0.3",
"smartci": "^1.0.2",
"smartq": "^1.1.6"
},
"devDependencies": {
"qenv": "^1.1.7",
"tapbundle": "^1.1.1"
}
}

View File

@@ -0,0 +1,2 @@
npm -v
node -v

29
test/test.cloudly.ts Normal file
View File

@@ -0,0 +1,29 @@
// Disable TLS certificate validation for testing
Deno.env.set('NODE_TLS_REJECT_UNAUTHORIZED', '0');
Deno.env.set('SZCI_TEST', 'true');
Deno.env.set('CI_REPOSITORY_URL', 'https://yyyyyy:xxxxxxxx@gitlab.com/mygroup/myrepo.git');
import { CloudlyConnector } from '../ts/connector.cloudly/cloudlyconnector.ts';
import { Szci } from '../ts/szci.classes.szci.ts';
Deno.test({
name: 'should be able to announce a container to cloudly',
sanitizeResources: false,
sanitizeOps: false,
fn: async () => {
// Create a proper Szci instance for the connector
const szciInstance = new Szci();
await szciInstance.start();
const cloudlyConnector = new CloudlyConnector(szciInstance);
await cloudlyConnector.announceDockerContainer(
{
registryUrl: 'registry.losssless.com',
tag: 'testcontainer',
version: 'x.x.x',
labels: [],
},
'cloudly.lossless.one'
);
},
});

159
test/test.ts Normal file
View File

@@ -0,0 +1,159 @@
import { assertEquals, assertExists } from '@std/assert';
import * as path from '@std/path';
import * as smartpath from '@push.rocks/smartpath';
// Set up test environment with the NEW SZCI environment variables
Deno.env.set('SZCI_TEST', 'true');
Deno.env.set('SZCI_URL_CLOUDLY', 'localhost');
Deno.env.set('CI_REPOSITORY_URL', 'https://yyyyyy:xxxxxxxx@gitlab.com/mygroup/myrepo.git');
Deno.env.set('CI_BUILD_TOKEN', 'kjlkjfiudofiufs');
Deno.env.set('SZCI_LOGIN_DOCKER', 'docker.io|someuser|somepass');
Deno.env.set('SZCI_SSHKEY_1', 'hostString|somePrivKey|##');
// Get the test assets directory
const testAssetsDir = path.join(smartpath.get.dirnameFromImportMetaUrl(import.meta.url), 'assets/');
// Save original cwd and change to test assets
const originalCwd = Deno.cwd();
Deno.chdir(testAssetsDir);
import type { Dockerfile } from '../ts/manager.docker/mod.classes.dockerfile.ts';
import { Szci } from '../ts/szci.classes.szci.ts';
import * as DockerfileModule from '../ts/manager.docker/mod.classes.dockerfile.ts';
// ======
// Docker
// ======
let dockerfile1: Dockerfile;
let dockerfile2: Dockerfile;
let sortableArray: Dockerfile[];
Deno.test('should return valid Dockerfiles', async () => {
const szciInstance = new Szci();
await szciInstance.start();
dockerfile1 = new DockerfileModule.Dockerfile(szciInstance.dockerManager, {
filePath: './Dockerfile',
read: true,
});
dockerfile2 = new DockerfileModule.Dockerfile(szciInstance.dockerManager, {
filePath: './Dockerfile_sometag1',
read: true,
});
assertEquals(dockerfile1.version, 'latest');
assertEquals(dockerfile2.version, 'sometag1');
});
Deno.test('should read a directory of Dockerfiles', async () => {
const szciInstance = new Szci();
await szciInstance.start();
const readDockerfilesArray = await DockerfileModule.Dockerfile.readDockerfiles(
szciInstance.dockerManager
);
sortableArray = readDockerfilesArray;
// The test assets directory should have multiple Dockerfiles
assertExists(readDockerfilesArray, 'readDockerfilesArray should exist');
assertEquals(readDockerfilesArray.length > 0, true, 'Should find at least one Dockerfile');
// Find the sometag1 dockerfile
const sometag1Dockerfile = readDockerfilesArray.find(df => df.version === 'sometag1');
assertExists(sometag1Dockerfile, 'Should find Dockerfile_sometag1');
assertEquals(sometag1Dockerfile?.version, 'sometag1');
});
Deno.test('should sort an array of Dockerfiles', async () => {
// Use the sortableArray from previous test, or create a new one if empty
if (!sortableArray || sortableArray.length === 0) {
const szciInstance = new Szci();
await szciInstance.start();
sortableArray = await DockerfileModule.Dockerfile.readDockerfiles(szciInstance.dockerManager);
}
const sortedArray = await DockerfileModule.Dockerfile.sortDockerfiles(sortableArray);
assertExists(sortedArray, 'sortedArray should exist');
console.log('Sorted dockerfiles:', sortedArray.map(df => df.cleanTag));
});
Deno.test({
name: 'should build all Dockerfiles',
// Allow resource leaks since smartshell creates background processes
sanitizeResources: false,
sanitizeOps: false,
fn: async () => {
const szciInstance = new Szci();
await szciInstance.start();
await szciInstance.dockerManager.handleCli({
_: ['docker', 'build'],
});
},
});
Deno.test({
name: 'should test all Dockerfiles',
// Allow resource leaks since smartshell creates background processes
sanitizeResources: false,
sanitizeOps: false,
fn: async () => {
const szciInstance = new Szci();
await szciInstance.start();
await szciInstance.dockerManager.handleCli({
_: ['docker', 'test'],
});
},
});
Deno.test({
name: 'should login docker daemon',
// Allow resource leaks since smartshell creates background processes
sanitizeResources: false,
sanitizeOps: false,
fn: async () => {
const szciInstance = new Szci();
await szciInstance.start();
await szciInstance.dockerManager.handleCli({
_: ['docker', 'login'],
});
},
});
// ===
// SSH
// ===
Deno.test('should prepare SSH keys', async () => {
// Ensure test mode is set so we don't actually write to disk
Deno.env.set('SZCI_TEST', 'true');
const szciModSsh = await import('../ts/mod_ssh/index.ts');
await szciModSsh.handleCli({
_: ['ssh', 'prepare'],
});
});
// ====
// node
// ====
Deno.test({
name: 'should install a certain version of node',
// Allow resource leaks for this test since nvm creates background processes
sanitizeResources: false,
sanitizeOps: false,
fn: async () => {
const szciInstance = new Szci();
await szciInstance.start();
await szciInstance.nodejsManager.handleCli({
_: ['node', 'install', 'stable'],
});
await szciInstance.nodejsManager.handleCli({
_: ['node', 'install', 'lts'],
});
await szciInstance.nodejsManager.handleCli({
_: ['node', 'install', 'legacy'],
});
},
});
// Restore original working directory after all tests
Deno.test('reset paths', () => {
Deno.chdir(originalCwd);
});

8
ts/00_commitinfo_data.ts Normal file
View File

@@ -0,0 +1,8 @@
/**
* autocreated commitinfo by @push.rocks/commitinfo
*/
export const commitinfo = {
name: '@ship.zone/szci',
version: '7.1.0',
description: 'Serve Zone CI - A tool to streamline Node.js and Docker workflows within CI environments, particularly GitLab CI, providing various CI/CD utilities. Powered by Deno with standalone executables.'
}

View File

@@ -0,0 +1,31 @@
import * as plugins from '../szci.plugins.ts';
import { Szci } from '../szci.classes.szci.ts';
import { logger } from '../szci.logging.ts';
/**
* connects to cloudly
*/
export class CloudlyConnector {
public szciRef: Szci;
constructor(szciRefArg: Szci) {
this.szciRef = szciRefArg;
}
public async announceDockerContainer(
optionsArg: plugins.tsclass.container.IContainer,
testCloudlyUrlArg?: string
) {
const cloudlyUrl = testCloudlyUrlArg || this.szciRef.szciConfig.getConfig().urlCloudly;
if (!cloudlyUrl) {
logger.log(
'warn',
'no cloudly url provided. Thus we cannot announce the newly built Dockerimage!'
);
return;
}
// lets push to cloudly here
}
}

View File

@@ -1,25 +1,9 @@
#!/usr/bin/env node import { Szci } from './szci.classes.szci.ts';
import "typings-global"
let shelljs = require("shelljs");
let program = require('commander'); export const szciInstance = new Szci();
let cmdValue;
let nodeValue;
program export { Szci };
.version('0.0.1')
.arguments('<cmd> [node]') export const runCli = async () => {
.action(function (cmd, node) { await szciInstance.start();
cmdValue = cmd; };
nodeValue = node;
});
program.parse(process.argv);
if (typeof cmdValue === 'undefined') {
console.error('no command given!');
process.exit(1);
}
console.log('command:', cmdValue);
console.log('node Version:', nodeValue);
shelljs.exec("bash -c \"source /usr/local/nvm/nvm.sh && nvm install "+ nodeValue + " nvm alias default " + nodeValue" "\"");

View File

@@ -0,0 +1,78 @@
import { logger } from '../szci.logging.ts';
import { bash } from '../szci.bash.ts';
import { Szci } from '../szci.classes.szci.ts';
export class SzciDockerManager {
public szciRef: Szci;
constructor(szciArg: Szci) {
this.szciRef = szciArg;
}
/**
* Bridges SZCI_LOGIN_DOCKER* env vars to DOCKER_REGISTRY_N format for tsdocker,
* and handles GitLab CI registry auto-login.
*/
private bridgeEnvVars() {
const env = Deno.env.toObject();
// Bridge GitLab CI registry as DOCKER_REGISTRY_0
if (env['GITLAB_CI']) {
const ciJobToken = env['CI_JOB_TOKEN'];
if (!ciJobToken) {
logger.log('error', 'Running in GitLab CI, but no CI_JOB_TOKEN found!');
Deno.exit(1);
}
Deno.env.set('DOCKER_REGISTRY_0', `registry.gitlab.com|gitlab-ci-token|${ciJobToken}`);
}
// Bridge SZCI_LOGIN_DOCKER* → DOCKER_REGISTRY_N
let registryIndex = 1;
const sortedKeys = Object.keys(env)
.filter((key) => key.startsWith('SZCI_LOGIN_DOCKER'))
.sort();
for (const key of sortedKeys) {
Deno.env.set(`DOCKER_REGISTRY_${registryIndex}`, env[key]);
registryIndex++;
}
}
/**
* Handle cli input by bridging env vars and delegating to tsdocker.
*/
public handleCli = async (argvArg: any) => {
if (argvArg._.length < 2) {
logger.log(
'info',
`>>szci docker ...<< cli arguments invalid... Please read the documentation.`
);
return;
}
this.bridgeEnvVars();
const action: string = argvArg._[1];
const extraArgs = argvArg._.slice(2).join(' ');
switch (action) {
case 'build':
await bash(`npx @git.zone/tsdocker build ${extraArgs}`.trim());
break;
case 'login':
case 'prepare':
await bash(`npx @git.zone/tsdocker login ${extraArgs}`.trim());
break;
case 'test':
await bash(`npx @git.zone/tsdocker test ${extraArgs}`.trim());
break;
case 'push':
await bash(`npx @git.zone/tsdocker push ${extraArgs}`.trim());
break;
case 'pull':
await bash(`npx @git.zone/tsdocker pull ${extraArgs}`.trim());
break;
default:
logger.log('error', `>>szci docker ...<< action >>${action}<< not supported`);
}
};
}

71
ts/manager.git/index.ts Normal file
View File

@@ -0,0 +1,71 @@
import { logger } from '../szci.logging.ts';
import * as plugins from './mod.plugins.ts';
import { bash, bashNoError } from '../szci.bash.ts';
import { Szci } from '../szci.classes.szci.ts';
export class SzciGitManager {
public szciRef: Szci;
constructor(szciRefArg: Szci) {
this.szciRef = szciRefArg;
}
/**
* handle cli input
* @param argvArg
*/
public handleCli = async (argvArg: any) => {
if (argvArg._.length >= 2) {
const action: string = argvArg._[1];
switch (action) {
case 'mirror':
await this.mirror();
break;
default:
logger.log('error', `szci git -> action >>${action}<< not supported!`);
}
} else {
logger.log('info', `szci git -> cli arguments invalid! Please read the documentation.`);
}
};
public mirror = async () => {
const githubToken = Deno.env.get("SZCI_GIT_GITHUBTOKEN");
const githubUser = Deno.env.get("SZCI_GIT_GITHUBGROUP") || this.szciRef.szciEnv.repo.user;
const githubRepo = Deno.env.get("SZCI_GIT_GITHUB") || this.szciRef.szciEnv.repo.repo;
if (
this.szciRef.szciConfig.getConfig().projectInfo.npm.packageJson.private === true ||
this.szciRef.szciConfig.getConfig().npmAccessLevel === 'private'
) {
logger.log(
'warn',
`refusing to mirror due to private property use a private mirror location instead`
);
return;
}
if (githubToken) {
logger.log('info', 'found github token.');
logger.log('info', 'attempting the mirror the repository to GitHub');
// remove old mirrors
await bashNoError('git remote rm mirror');
await bash(`git fetch`);
// add the mirror
await bashNoError(
`git remote add mirror https://${githubToken}@github.com/${githubUser}/${githubRepo}.git`
);
await bashNoError(`git push mirror --all`);
await bashNoError(`git checkout origin/master`);
await bashNoError(`git push mirror master`);
logger.log('ok', 'pushed all branches to mirror!');
await bashNoError(`git push mirror --tags`);
logger.log('ok', 'pushed all tags to mirror!');
// remove old mirrors
await bashNoError('git remote rm mirror');
} else {
logger.log('error', `cannot find SZCI_GIT_GITHUBTOKEN env var!`);
Deno.exit(1);
}
};
}

View File

@@ -0,0 +1 @@
export * from '../szci.plugins.ts';

View File

@@ -0,0 +1,82 @@
import * as plugins from '../szci.plugins.ts';
import * as paths from '../szci.paths.ts';
import { logger } from '../szci.logging.ts';
import { bash, bashNoError, nvmAvailable } from '../szci.bash.ts';
import { Szci } from '../szci.classes.szci.ts';
export class SzciNodeJsManager {
public szciRef: Szci;
constructor(szciRefArg: Szci) {
this.szciRef = szciRefArg;
}
/**
* handle cli input
* @param argvArg
*/
public async handleCli(argvArg: any) {
if (argvArg._.length >= 3) {
const action: string = argvArg._[1];
switch (action) {
case 'install':
await this.install(argvArg._[2]);
break;
default:
logger.log('error', `>>szci node ...<< action >>${action}<< not supported`);
Deno.exit(1);
}
} else {
logger.log(
'error',
`>>szci node ...<< cli arguments invalid... Please read the documentation.`
);
Deno.exit(1);
}
}
/**
* Install a specific version of node
* @param versionArg
*/
public async install(versionArg: any) {
logger.log('info', `now installing node version ${versionArg}`);
let version: string;
if (versionArg === 'stable') {
version = '22';
} else if (versionArg === 'lts') {
version = '20';
} else if (versionArg === 'legacy') {
version = '18';
} else {
version = versionArg;
}
if (await nvmAvailable.promise) {
await bash(`nvm install ${version} && nvm alias default ${version}`);
logger.log('success', `Node version ${version} successfully installed!`);
} else {
logger.log('warn', 'Nvm not in path so staying at installed node version!');
}
logger.log('info', 'now installing latest npm version');
await bash('npm install -g npm');
await bash('node -v');
await bash('npm -v');
// lets look for further config
const config = await this.szciRef.szciConfig.getConfig();
logger.log('info', 'Now checking for needed global npm tools...');
for (const npmTool of config.npmGlobalTools) {
logger.log('info', `Checking for global "${npmTool}"`);
const whichOutput: string = await bashNoError(`which ${npmTool}`);
const toolAvailable: boolean = !(/not\sfound/.test(whichOutput) || whichOutput === '');
if (toolAvailable) {
logger.log('info', `Tool ${npmTool} is available`);
} else {
logger.log('info', `globally installing ${npmTool} from npm`);
await bash(`npm install ${npmTool} -q -g`);
}
}
logger.log('success', 'all global npm tools specified in npmextra.json are now available!');
}
}

194
ts/manager.npm/index.ts Normal file
View File

@@ -0,0 +1,194 @@
import * as plugins from './mod.plugins.ts';
import * as paths from '../szci.paths.ts';
import { logger } from '../szci.logging.ts';
import { bash, bashNoError, nvmAvailable } from '../szci.bash.ts';
import { Szci } from '../szci.classes.szci.ts';
export class SzciNpmManager {
public szciRef: Szci;
constructor(szciRefArg: Szci) {
this.szciRef = szciRefArg;
}
/**
* handle cli input
* @param argvArg
*/
public async handleCli(argvArg: any) {
if (argvArg._.length >= 2) {
const action: string = argvArg._[1];
switch (action) {
case 'install':
await this.install();
break;
case 'build':
await this.build();
break;
case 'prepare':
await this.prepare();
break;
case 'test':
await this.test();
break;
case 'publish':
await this.publish();
break;
default:
logger.log('error', `>>szci npm ...<< action >>${action}<< not supported`);
Deno.exit(1);
}
} else {
logger.log(
'info',
`>>szci npm ...<< cli arguments invalid... Please read the documentation.`
);
Deno.exit(1);
}
}
/**
* authenticates npm with token from env var
*/
public async prepare() {
logger.log('info', 'running >>npm prepare<<');
const config = this.szciRef.szciConfig.getConfig();
let npmrcFileString: string = '';
await plugins.smartobject.forEachMinimatch(
Deno.env.toObject(),
'SZCI_TOKEN_NPM*',
(npmEnvArg: string) => {
if (!npmEnvArg) {
logger.log('note','found empty token...');
return;
}
const npmRegistryUrl = npmEnvArg.split('|')[0];
logger.log('ok', `found token for ${npmRegistryUrl}`);
let npmToken = npmEnvArg.split('|')[1];
if (npmEnvArg.split('|')[2] && npmEnvArg.split('|')[2] === 'plain') {
logger.log('ok', 'npm token not base64 encoded.');
} else {
logger.log('ok', 'npm token base64 encoded.');
npmToken = plugins.smartstring.base64.decode(npmToken);
}
npmrcFileString += `//${npmRegistryUrl}/:_authToken="${npmToken}"\n`;
}
);
logger.log('info', `setting default npm registry to ${config.npmRegistryUrl}`);
npmrcFileString += `registry=https://${config.npmRegistryUrl}\n`;
// final check
if (npmrcFileString.length > 0) {
logger.log('info', 'found one or more access tokens');
} else {
logger.log('error', 'no access token found! Exiting!');
Deno.exit(1);
}
// lets save it to disk
plugins.smartfile.memory.toFsSync(npmrcFileString, '/root/.npmrc');
// lets set the cache directory
await bash(`npm config set cache ${paths.SzciCacheDir} --global `);
return;
}
/**
* publish a package to npm
*/
public async publish() {
const buildPublishCommand = async () => {
let npmAccessCliString = ``;
let npmRegistryCliString = ``;
let publishVerdaccioAsWell = false;
const config = this.szciRef.szciConfig.getConfig();
const availableRegistries: string[] = [];
await plugins.smartobject.forEachMinimatch(
Deno.env.toObject(),
'SZCI_TOKEN_NPM*',
(npmEnvArg: string) => {
availableRegistries.push(npmEnvArg.split('|')[0]);
}
);
// -> configure package access level
if (config.npmAccessLevel) {
npmAccessCliString = `--access=${config.npmAccessLevel}`;
if (config.npmAccessLevel === 'public') {
publishVerdaccioAsWell = true;
}
} else {
throw new Error('You need to set a npmAccessLevel!!!');
}
// -> configure registry url
if (config.npmRegistryUrl) {
npmRegistryCliString = `--registry=https://${config.npmRegistryUrl}`;
} else {
logger.log('error', `no registry url specified. Can't publish!`);
Deno.exit(1);
}
let publishCommand = `npm publish ${npmAccessCliString} ${npmRegistryCliString} `;
// publishEverywhere
if (publishVerdaccioAsWell) {
const verdaccioRegistry = availableRegistries.find((registryString) =>
registryString.startsWith('verdaccio')
);
if (verdaccioRegistry) {
logger.log(
'info',
`package is public and verdaccio registry is specified. Also publishing to Verdaccio!`
);
publishCommand = `${publishCommand} && npm publish ${npmAccessCliString} --registry=https://${verdaccioRegistry}`;
} else {
logger.log(
'error',
`This package should also be published to Verdaccio, however there is no Verdaccio registry data available!`
);
}
}
return publishCommand;
};
// -> preparing
logger.log('info', `now preparing environment:`);
this.prepare();
await bash(`npm -v`);
await bash(`pnpm -v`);
// -> build it
await this.install();
await this.build();
logger.log('success', `Nice!!! The build for the publication was successfull!`);
logger.log('info', `Lets clean up so we don't publish any packages that don't belong to us:`);
// -> clean up before we publish stuff
await bashNoError(`rm -r ./.szci_cache`);
await bash(`rm -r ./node_modules`);
logger.log('success', `Cleaned up!:`);
// -> publish it
logger.log('info', `now invoking npm to publish the package!`);
await bash(await buildPublishCommand());
logger.log('success', `Package was successfully published!`);
}
public async install(): Promise<void> {
logger.log('info', 'now installing dependencies:');
await bash('pnpm install');
}
public async build(): Promise<void> {
logger.log('info', 'now building the project:');
await bash('pnpm run build');
}
public async test(): Promise<void> {
logger.log('info', 'now starting tests:');
await bash('pnpm test');
}
}

View File

@@ -0,0 +1 @@
export * from '../szci.plugins.ts';

97
ts/mod_ssh/index.ts Normal file
View File

@@ -0,0 +1,97 @@
import { logger } from '../szci.logging.ts';
import * as plugins from './mod.plugins.ts';
let sshInstance: plugins.smartssh.SshInstance;
/**
* Interface for CLI arguments
*/
interface ICliArgs {
_: string[];
[key: string]: unknown;
}
/**
* Handle SSH CLI commands
*/
export const handleCli = async (argvArg: ICliArgs): Promise<void> => {
if (argvArg._.length >= 2) {
const action = argvArg._[1];
switch (action) {
case 'prepare':
await prepare();
break;
default:
logger.log('error', `action >>${action}<< not supported`);
Deno.exit(1);
}
} else {
logger.log('error', `>>szci ssh ...<< please specify an action!`);
Deno.exit(1);
}
};
/**
* Checks if a string value is defined and not a placeholder
*/
const isValidValue = (value: string | undefined): boolean => {
return Boolean(value && value !== 'undefined' && value !== '##');
};
/**
* Checks for ENV vars in form of SZCI_SSHKEY_* and deploys any found ones
*/
export const prepare = async (): Promise<void> => {
sshInstance = new plugins.smartssh.SshInstance();
// Get all env vars and filter for SSH keys
const envVars = Deno.env.toObject();
const sshKeyEnvVars = Object.entries(envVars).filter(([key]) =>
key.startsWith('SZCI_SSHKEY_')
);
// Process each SSH key env var
for (const [key, value] of sshKeyEnvVars) {
logger.log('info', `Processing SSH key from ${key}`);
addSshKeyFromEnvVar(value);
}
// Only write to disk if not in test mode
if (!Deno.env.get('SZCI_TEST')) {
try {
sshInstance.writeToDisk();
logger.log('ok', 'SSH keys written to disk');
} catch (error) {
logger.log('error', `Failed to write SSH keys: ${(error as Error).message}`);
throw error;
}
} else {
logger.log('info', 'In test mode, so not storing SSH keys to disk!');
}
};
/**
* Parses an SSH key env var and adds it to the SSH instance
* Format: host|privKeyBase64|pubKeyBase64
*/
const addSshKeyFromEnvVar = (sshkeyEnvVarArg: string): void => {
const [host, privKeyBase64, pubKeyBase64] = sshkeyEnvVarArg.split('|');
const sshKey = new plugins.smartssh.SshKey();
logger.log('info', `Found SSH identity for ${host || 'unknown host'}`);
if (isValidValue(host)) {
logger.log('info', '---> host defined!');
sshKey.host = host;
}
if (isValidValue(privKeyBase64)) {
logger.log('info', '---> privKey defined!');
sshKey.privKeyBase64 = privKeyBase64;
}
if (isValidValue(pubKeyBase64)) {
logger.log('info', '---> pubKey defined!');
sshKey.pubKeyBase64 = pubKeyBase64;
}
sshInstance.addKey(sshKey);
};

View File

@@ -0,0 +1 @@
export * from '../szci.plugins.ts';

96
ts/szci.bash.ts Normal file
View File

@@ -0,0 +1,96 @@
import { logger } from './szci.logging.ts';
import * as plugins from './szci.plugins.ts';
import * as paths from './szci.paths.ts';
/**
* wether nvm is available or not
*/
export let nvmAvailable = plugins.smartpromise.defer<boolean>();
/**
* the smartshell instance for szci
*/
const szciSmartshell = new plugins.smartshell.Smartshell({
executor: 'bash',
sourceFilePaths: [],
});
/**
* check for tools.
*/
const checkToolsAvailable = async () => {
// check for nvm
if (!Deno.env.get('SZCI_TEST')) {
if (
(await szciSmartshell.execSilent(`bash -c "source /usr/local/nvm/nvm.sh"`)).exitCode === 0
) {
szciSmartshell.shellEnv.addSourceFiles([`/usr/local/nvm/nvm.sh`]);
nvmAvailable.resolve(true);
} else if (
(await szciSmartshell.execSilent(`bash -c "source ~/.nvm/nvm.sh"`)).exitCode === 0
) {
szciSmartshell.shellEnv.addSourceFiles([`~/.nvm/nvm.sh`]);
nvmAvailable.resolve(true);
} else {
nvmAvailable.resolve(false);
}
} else {
nvmAvailable.resolve(true);
}
};
checkToolsAvailable();
/**
* bash() allows using bash with nvm in path
* @param commandArg - The command to execute
* @param retryArg - The retryArg: 0 to any positive number will retry, -1 will always succeed, -2 will return undefined
*/
export let bash = async (commandArg: string, retryArg: number = 2): Promise<string> => {
await nvmAvailable.promise; // make sure nvm check has run
let execResult!: plugins.smartshell.IExecResult;
// determine if we fail
let failOnError: boolean = true;
if (retryArg === -1) {
failOnError = false;
retryArg = 0;
}
if (!Deno.env.get('SZCI_TEST')) {
// SZCI_TEST is used during testing
for (let i = 0; i <= retryArg; i++) {
if (Deno.env.get('DEBUG_SZCI') === 'true') {
console.log(commandArg);
}
execResult = await szciSmartshell.exec(commandArg);
// determine how bash reacts to error and success
if (execResult.exitCode !== 0 && i === retryArg) {
// something went wrong and retries are exhausted
if (failOnError) {
logger.log('error', 'something went wrong and retries are exhausted');
Deno.exit(1);
}
} else if (execResult.exitCode === 0) {
// everything went fine, or no error wanted
i = retryArg + 1; // retry +1 breaks for loop, if everything works out ok retrials are not wanted
} else {
logger.log('warn', 'Something went wrong! Exit Code: ' + execResult.exitCode.toString());
logger.log('info', 'Retry ' + (i + 1).toString() + ' of ' + retryArg.toString());
}
}
} else {
logger.log('info', 'ShellExec would be: ' + commandArg);
execResult = {
exitCode: 0,
stdout: 'testOutput',
};
}
return execResult.stdout;
};
/**
* bashNoError allows executing stuff without throwing an error
*/
export let bashNoError = async (commandArg: string): Promise<string> => {
return await bash(commandArg, -1);
};

58
ts/szci.classes.szci.ts Normal file
View File

@@ -0,0 +1,58 @@
import * as plugins from './szci.plugins.ts';
// env
import { SzciEnv } from './szci.classes.szcienv.ts';
import { SzciInfo } from './szci.classes.szciinfo.ts';
import { SzciCli } from './szci.classes.szcicli.ts';
import { SzciConfig } from './szci.classes.szciconfig.ts';
// connectors
import { CloudlyConnector } from './connector.cloudly/cloudlyconnector.ts';
// managers
import { SzciDockerManager } from './manager.docker/index.ts';
import { SzciGitManager } from './manager.git/index.ts';
import { SzciNodeJsManager } from './manager.nodejs/index.ts';
import { SzciNpmManager } from './manager.npm/index.ts';
export class Szci {
public analytics: plugins.smartanalytics.Analytics;
public cloudlyConnector!: CloudlyConnector;
public szciEnv!: SzciEnv;
public szciInfo!: SzciInfo;
public szciConfig!: SzciConfig;
public szciCli!: SzciCli;
// managers
public dockerManager!: SzciDockerManager;
public gitManager!: SzciGitManager;
public nodejsManager!: SzciNodeJsManager;
public npmManager!: SzciNpmManager;
constructor() {
this.analytics = new plugins.smartanalytics.Analytics({
apiEndPoint: 'https://pubapi.lossless.one/analytics',
projectId: 'gitzone',
appName: 'szci',
});
}
public async start() {
this.cloudlyConnector = new CloudlyConnector(this);
this.szciEnv = new SzciEnv(this);
this.szciInfo = new SzciInfo(this);
await this.szciInfo.printToConsole();
this.szciCli = new SzciCli(this);
this.szciConfig = new SzciConfig(this);
await this.szciConfig.init();
// managers
this.dockerManager = new SzciDockerManager(this);
this.gitManager = new SzciGitManager(this);
this.nodejsManager = new SzciNodeJsManager(this);
this.npmManager = new SzciNpmManager(this);
this.szciCli.startParse();
}
}

View File

@@ -0,0 +1,68 @@
import { logger } from './szci.logging.ts';
import * as plugins from './szci.plugins.ts';
import * as paths from './szci.paths.ts';
import { Szci } from './szci.classes.szci.ts';
export class SzciCli {
public szciRef: Szci;
public smartcli: plugins.smartcli.Smartcli;
constructor(szciArg: Szci) {
this.szciRef = szciArg;
this.smartcli = new plugins.smartcli.Smartcli();
this.smartcli.addVersion(this.szciRef.szciInfo.version);
// docker
this.smartcli.addCommand('docker').subscribe(
async (argvArg) => {
await this.szciRef.dockerManager.handleCli(argvArg);
},
(err) => {
console.log(err);
Deno.exit(1);
}
);
// git
this.smartcli.addCommand('git').subscribe(
async (argvArg) => {
await this.szciRef.gitManager.handleCli(argvArg);
},
(err) => {
console.log(err);
Deno.exit(1);
}
);
// node
this.smartcli.addCommand('node').subscribe(
async (argvArg) => {
await this.szciRef.nodejsManager.handleCli(argvArg);
},
(err) => {
console.log(err);
Deno.exit(1);
}
);
// npm
this.smartcli.addCommand('npm').subscribe(
async (argvArg) => {
await this.szciRef.npmManager.handleCli(argvArg);
},
(err) => {
console.log(err);
}
);
// ssh
this.smartcli.addCommand('ssh').subscribe(async (argvArg) => {
const modSsh = await import('./mod_ssh/index.ts');
await modSsh.handleCli(argvArg);
});
}
public startParse = () => {
this.smartcli.startParse();
};
}

View File

@@ -0,0 +1,63 @@
import * as plugins from './szci.plugins.ts';
import * as paths from './szci.paths.ts';
import { logger } from './szci.logging.ts';
import { Szci } from './szci.classes.szci.ts';
/**
* the main config interface for szci
*/
export interface ISzciOptions {
projectInfo: plugins.projectinfo.ProjectInfo;
// npm
npmGlobalTools: string[];
npmAccessLevel?: 'private' | 'public';
npmRegistryUrl: string;
// urls
urlCloudly?: string;
}
/**
* a config class for Szci
*/
export class SzciConfig {
public szciRef: Szci;
public szciNpmextra!: plugins.npmextra.Npmextra;
public kvStorage!: plugins.npmextra.KeyValueStore;
public szciQenv!: plugins.qenv.Qenv;
private configObject!: ISzciOptions;
constructor(szciRefArg: Szci) {
this.szciRef = szciRefArg;
}
public async init() {
this.szciNpmextra = new plugins.npmextra.Npmextra(paths.cwd);
this.kvStorage = new plugins.npmextra.KeyValueStore({
typeArg: 'userHomeDir',
identityArg: `.szci_${this.szciRef.szciEnv.repo.user}_${this.szciRef.szciEnv.repo.repo}`,
});
this.szciQenv = new plugins.qenv.Qenv(
paths.SzciProjectDir,
paths.SzciProjectNogitDir,
false
);
this.configObject = {
projectInfo: new plugins.projectinfo.ProjectInfo(paths.cwd),
npmGlobalTools: [],
npmAccessLevel: 'private',
npmRegistryUrl: 'registry.npmjs.org',
urlCloudly: await this.szciQenv.getEnvVarOnDemand('SZCI_URL_CLOUDLY'),
};
this.configObject = this.szciNpmextra.dataFor<ISzciOptions>('@ship.zone/szci', this.configObject);
}
public getConfig(): ISzciOptions {
return this.configObject;
}
}

View File

@@ -0,0 +1,25 @@
import * as plugins from './szci.plugins.ts';
import { Szci } from './szci.classes.szci.ts';
export class SzciEnv {
public szciRef: Szci;
public repoString: string;
public repo: plugins.smartstring.GitRepo;
constructor(szciRefArg: Szci) {
this.szciRef = szciRefArg;
// Determine repo string from environment
let repoUrl: string | undefined;
if (Deno.env.get("GITLAB_CI")) {
repoUrl = Deno.env.get("CI_REPOSITORY_URL");
}
if (!repoUrl && Deno.env.get("SZCI_COMPUTED_REPOURL")) {
repoUrl = Deno.env.get("SZCI_COMPUTED_REPOURL");
}
this.repoString = repoUrl || 'https://undefined:undefined@github.com/undefined/undefined.git';
this.repo = new plugins.smartstring.GitRepo(this.repoString);
}
}

View File

@@ -0,0 +1,18 @@
import * as plugins from './szci.plugins.ts';
import * as paths from './szci.paths.ts';
import { logger } from './szci.logging.ts';
import { Szci } from './szci.classes.szci.ts';
import denoConfig from '../deno.json' with { type: 'json' };
export class SzciInfo {
public szciRef: Szci;
public version = denoConfig.version;
constructor(szciArg: Szci) {
this.szciRef = szciArg;
}
public async printToConsole() {
await logger.log('info', `szci version: ${this.version}`);
}
}

14
ts/szci.logging.ts Normal file
View File

@@ -0,0 +1,14 @@
import * as plugins from './szci.plugins.ts';
export const logger = new plugins.smartlog.Smartlog({
logContext: {
company: 'Some Company',
companyunit: 'Some Unit',
containerName: 'Some ContainerName',
environment: 'test',
runtime: 'deno',
zone: 'Some Zone',
},
});
logger.addLogDestination(new plugins.smartlogDestinationLocal.DestinationLocal());

31
ts/szci.paths.ts Normal file
View File

@@ -0,0 +1,31 @@
import * as plugins from './szci.plugins.ts';
/**
* Get current working directory (evaluated at call time, not module load time)
*/
export const getCwd = (): string => Deno.cwd();
/**
* Current working directory - use getCwd() if you need the live value after chdir
* @deprecated Use getCwd() for dynamic cwd resolution
*/
export const cwd = Deno.cwd();
// package paths
export const SzciPackageRoot = plugins.path.join(
plugins.smartpath.get.dirnameFromImportMetaUrl(import.meta.url),
'../'
);
export const SzciPackageConfig = plugins.path.join(SzciPackageRoot, './config.json');
// project paths - use functions for dynamic resolution
export const getSzciProjectDir = (): string => getCwd();
export const getSzciProjectNogitDir = (): string => plugins.path.join(getCwd(), './.nogit');
export const getSzciTestDir = (): string => plugins.path.join(getCwd(), './test');
export const getSzciCacheDir = (): string => plugins.path.join(getCwd(), './.szci_cache');
// Static paths (for backwards compatibility - captured at module load)
export const SzciProjectDir = cwd;
export const SzciProjectNogitDir = plugins.path.join(SzciProjectDir, './.nogit');
export const SzciTestDir = plugins.path.join(cwd, './test');
export const SzciCacheDir = plugins.path.join(cwd, './.szci_cache');

60
ts/szci.plugins.ts Normal file
View File

@@ -0,0 +1,60 @@
// Deno std libraries
import * as path from '@std/path';
export { path };
// @apiglobal
import * as typedrequest from '@api.global/typedrequest';
export { typedrequest };
// @servezone
import * as servezoneApi from '@serve.zone/api';
export { servezoneApi };
// @push.rocks
import * as npmextra from '@push.rocks/npmextra';
import * as projectinfo from '@push.rocks/projectinfo';
import * as qenv from '@push.rocks/qenv';
import * as smartanalytics from '@push.rocks/smartanalytics';
import * as smartfile from '@push.rocks/smartfile';
import * as smartcli from '@push.rocks/smartcli';
import * as smartgit from '@push.rocks/smartgit';
import * as smartlog from '@push.rocks/smartlog';
import * as smartlogDestinationLocal from '@push.rocks/smartlog-destination-local';
import * as smartobject from '@push.rocks/smartobject';
import * as smartpath from '@push.rocks/smartpath';
import * as smartpromise from '@push.rocks/smartpromise';
import * as smartrequest from '@push.rocks/smartrequest';
import * as smartshell from '@push.rocks/smartshell';
import * as smartsocket from '@push.rocks/smartsocket';
import * as smartssh from '@push.rocks/smartssh';
import * as smartstring from '@push.rocks/smartstring';
export {
npmextra,
projectinfo,
qenv,
smartanalytics,
smartfile,
smartgit,
smartcli,
smartlog,
smartlogDestinationLocal,
smartobject,
smartpath,
smartpromise,
smartrequest,
smartshell,
smartsocket,
smartssh,
smartstring,
};
// @tsclass scope
import * as tsclass from '@tsclass/tsclass';
export { tsclass };

64
uninstall.sh Executable file
View File

@@ -0,0 +1,64 @@
#!/bin/bash
# SZCI Uninstaller Script
# Removes SZCI from the system (installed via install.sh)
#
# Usage:
# sudo bash uninstall.sh
set -e
# Check if running as root
if [ "$EUID" -ne 0 ]; then
echo "Please run as root (sudo bash uninstall.sh)"
exit 1
fi
echo "================================================"
echo " SZCI Uninstaller"
echo " Serve Zone CI/CD Tool Removal"
echo "================================================"
echo ""
# Default installation directory
INSTALL_DIR="/opt/szci"
# Step 1: Remove global symlinks
echo "Checking for global symlinks..."
if [ -L "/usr/local/bin/szci" ]; then
echo "Removing symlink: /usr/local/bin/szci"
rm -f /usr/local/bin/szci
fi
if [ -L "/usr/bin/szci" ]; then
echo "Removing symlink: /usr/bin/szci"
rm -f /usr/bin/szci
fi
# Step 2: Remove installation directory
if [ -d "$INSTALL_DIR" ]; then
echo "Removing installation directory: $INSTALL_DIR"
rm -rf "$INSTALL_DIR"
else
echo "Installation directory not found: $INSTALL_DIR"
fi
echo ""
echo "================================================"
echo " SZCI Uninstallation Complete!"
echo "================================================"
echo ""
# Check for npm global installation
NODE_PATH=$(which node 2>/dev/null || true)
if [ -n "$NODE_PATH" ]; then
NPM_PATH=$(dirname "$NODE_PATH")/npm
if [ -x "$NPM_PATH" ]; then
echo "If you installed SZCI via npm, you may want to uninstall it with:"
echo " npm uninstall -g @ship.zone/szci"
echo ""
fi
fi
echo "SZCI has been removed from your system."
echo ""