Compare commits

...

83 Commits
v2.3.1 ... main

Author SHA1 Message Date
dependabot[bot]
2e878ec30f
Bump cross-spawn from 6.0.5 to 6.0.6 (#169)
Bumps [cross-spawn](https://github.com/moxystudio/node-cross-spawn) from 6.0.5 to 6.0.6.
- [Changelog](https://github.com/moxystudio/node-cross-spawn/blob/v6.0.6/CHANGELOG.md)
- [Commits](https://github.com/moxystudio/node-cross-spawn/compare/v6.0.5...v6.0.6)

---
updated-dependencies:
- dependency-name: cross-spawn
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-11-25 12:20:37 +01:00
Kevin van Zonneveld
726ce78de7
Update README.md 2024-08-19 13:02:35 +02:00
Kevin van Zonneveld
51e7644bb1
Easier SHELLCHECK_SEVERITY in CI 2023-08-29 12:48:33 +02:00
Kevin van Zonneveld
985b0046c4
Update yarn.lock 2023-08-29 12:46:46 +02:00
Kevin van Zonneveld
38f269c660
Update CHANGELOG.md 2023-08-29 12:45:04 +02:00
Kevin van Zonneveld
f6b61410c0
Update version 2023-08-29 12:44:42 +02:00
Kevin van Zonneveld
42e50f66c8
Release 2.7.2 2023-08-29 12:44:42 +02:00
Kevin van Zonneveld
c5012d0190
Update package.json 2023-08-29 12:44:40 +02:00
Kevin van Zonneveld
14421bd791
Update version 2023-08-29 12:44:13 +02:00
Kevin van Zonneveld
7af1f75c5e
Release 2.7.1 2023-08-29 12:44:12 +02:00
Kevin van Zonneveld
320609fceb
update version 2023-08-29 12:44:10 +02:00
Kevin van Zonneveld
9e70d61133
Fix improper replace 2023-08-29 12:43:49 +02:00
Kevin van Zonneveld
354c304b19
Release 2.7.0 2023-08-29 12:41:51 +02:00
Kevin van Zonneveld
a6a2d961ae
Update CHANGELOG.md 2023-08-29 12:41:50 +02:00
Kevin van Zonneveld
7f9a31f8d8
Release 2.6.0 2023-08-29 12:39:39 +02:00
Kevin van Zonneveld
758fa92f05
Update package.json 2023-08-29 12:39:37 +02:00
Kevin van Zonneveld
555beb1add
Update package.json 2023-08-29 12:38:25 +02:00
Kevin van Zonneveld
2d145e24e9
Update version 2023-08-29 12:37:51 +02:00
Kevin van Zonneveld
b2140d5ec6
Release 2.5.0 2023-08-29 12:37:50 +02:00
Kevin van Zonneveld
7a022bccf3
Upgrade/cleanup deps 2023-08-29 12:37:39 +02:00
Kevin van Zonneveld
55cd329ebd
Upgrade fakefile 2023-08-29 12:35:17 +02:00
Kevin van Zonneveld
879422d09f
Create dependabot.yml 2023-08-29 12:31:27 +02:00
Kevin van Zonneveld
1fb7cc4337
Update ci.yml 2023-08-29 12:29:27 +02:00
Kevin van Zonneveld
f2ccef5b36
Merge branch 'main' of github.com:kvz/bash3boilerplate 2023-08-29 12:25:19 +02:00
Kevin van Zonneveld
2e68b71743
Move linting out to separate actions 2023-08-29 12:25:08 +02:00
Kevin van Zonneveld
28deb39d86
Fix tests 2023-08-29 12:24:49 +02:00
Kevin van Zonneveld
33a3fd706b
Create CNAME 2023-08-29 12:06:32 +02:00
Kevin van Zonneveld
ddc6440177
Rename website->docs 2023-08-29 12:06:14 +02:00
Kevin van Zonneveld
c4585291f3
Update ci.yml 2023-08-29 12:04:33 +02:00
Kevin van Zonneveld
9a27140e7e
Deprecate Lanyon-based website in favor of a simple redirect to github 2023-08-29 12:01:10 +02:00
Kevin van Zonneveld
cb06f0aa70
Update bash3boilerplate.code-workspace 2023-08-29 11:50:15 +02:00
FilipBrinkmann
e45247d4aa
Fix duplicated comment (#166) 2023-07-05 22:21:11 +02:00
dependabot[bot]
a50ad7007e
Bump express from 4.17.1 to 4.18.2 (#165)
Bumps [express](https://github.com/expressjs/express) from 4.17.1 to 4.18.2.
- [Release notes](https://github.com/expressjs/express/releases)
- [Changelog](https://github.com/expressjs/express/blob/master/History.md)
- [Commits](https://github.com/expressjs/express/compare/4.17.1...4.18.2)

---
updated-dependencies:
- dependency-name: express
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-12-12 10:23:05 +01:00
dependabot[bot]
41172fcc8f
Bump decode-uri-component from 0.2.0 to 0.2.2 (#164)
Bumps [decode-uri-component](https://github.com/SamVerschueren/decode-uri-component) from 0.2.0 to 0.2.2.
- [Release notes](https://github.com/SamVerschueren/decode-uri-component/releases)
- [Commits](https://github.com/SamVerschueren/decode-uri-component/compare/v0.2.0...v0.2.2)

---
updated-dependencies:
- dependency-name: decode-uri-component
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-12-05 10:59:02 +01:00
dependabot[bot]
9f0c37e2ac
Bump terser from 4.8.0 to 4.8.1 (#163)
Bumps [terser](https://github.com/terser/terser) from 4.8.0 to 4.8.1.
- [Release notes](https://github.com/terser/terser/releases)
- [Changelog](https://github.com/terser/terser/blob/master/CHANGELOG.md)
- [Commits](https://github.com/terser/terser/commits)

---
updated-dependencies:
- dependency-name: terser
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-07-21 15:57:12 +02:00
dependabot[bot]
0a6e3925dc
Bump shell-quote from 1.6.1 to 1.7.3 (#162)
Bumps [shell-quote](https://github.com/substack/node-shell-quote) from 1.6.1 to 1.7.3.
- [Release notes](https://github.com/substack/node-shell-quote/releases)
- [Changelog](https://github.com/substack/node-shell-quote/blob/master/CHANGELOG.md)
- [Commits](https://github.com/substack/node-shell-quote/compare/1.6.1...1.7.3)

---
updated-dependencies:
- dependency-name: shell-quote
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-06-22 10:57:22 +02:00
dependabot[bot]
7d3927b025
Bump eventsource from 1.0.7 to 1.1.1 (#161)
Bumps [eventsource](https://github.com/EventSource/eventsource) from 1.0.7 to 1.1.1.
- [Release notes](https://github.com/EventSource/eventsource/releases)
- [Changelog](https://github.com/EventSource/eventsource/blob/master/HISTORY.md)
- [Commits](https://github.com/EventSource/eventsource/compare/v1.0.7...v1.1.1)

---
updated-dependencies:
- dependency-name: eventsource
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-06-02 10:43:05 +02:00
dependabot[bot]
49eed4f283
Bump url-parse from 1.5.3 to 1.5.10 (#159)
Bumps [url-parse](https://github.com/unshiftio/url-parse) from 1.5.3 to 1.5.10.
- [Release notes](https://github.com/unshiftio/url-parse/releases)
- [Commits](https://github.com/unshiftio/url-parse/compare/1.5.3...1.5.10)

---
updated-dependencies:
- dependency-name: url-parse
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-02-28 12:34:33 +01:00
dependabot[bot]
3d47083fcf
Bump ajv from 6.10.2 to 6.12.6 (#157)
Bumps [ajv](https://github.com/ajv-validator/ajv) from 6.10.2 to 6.12.6.
- [Release notes](https://github.com/ajv-validator/ajv/releases)
- [Commits](https://github.com/ajv-validator/ajv/compare/v6.10.2...v6.12.6)

---
updated-dependencies:
- dependency-name: ajv
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-02-14 10:50:59 +01:00
dependabot[bot]
e516a60169
Bump undefsafe from 2.0.2 to 2.0.5 (#156)
Bumps [undefsafe](https://github.com/remy/undefsafe) from 2.0.2 to 2.0.5.
- [Release notes](https://github.com/remy/undefsafe/releases)
- [Commits](https://github.com/remy/undefsafe/compare/v2.0.2...v2.0.5)

---
updated-dependencies:
- dependency-name: undefsafe
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-02-10 07:47:25 +01:00
dependabot[bot]
d1c26b9ac1
Bump path-parse from 1.0.6 to 1.0.7 (#155)
Bumps [path-parse](https://github.com/jbgutierrez/path-parse) from 1.0.6 to 1.0.7.
- [Release notes](https://github.com/jbgutierrez/path-parse/releases)
- [Commits](https://github.com/jbgutierrez/path-parse/commits/v1.0.7)

---
updated-dependencies:
- dependency-name: path-parse
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-10-06 14:37:19 +02:00
dependabot[bot]
85efe41ad9
Bump url-parse from 1.5.1 to 1.5.3 (#154)
Bumps [url-parse](https://github.com/unshiftio/url-parse) from 1.5.1 to 1.5.3.
- [Release notes](https://github.com/unshiftio/url-parse/releases)
- [Commits](https://github.com/unshiftio/url-parse/compare/1.5.1...1.5.3)

---
updated-dependencies:
- dependency-name: url-parse
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-10-06 13:51:35 +02:00
dependabot[bot]
80ab935cf6
Bump qs from 6.2.1 to 6.2.3 (#153)
Bumps [qs](https://github.com/ljharb/qs) from 6.2.1 to 6.2.3.
- [Release notes](https://github.com/ljharb/qs/releases)
- [Changelog](https://github.com/ljharb/qs/blob/master/CHANGELOG.md)
- [Commits](https://github.com/ljharb/qs/compare/v6.2.1...v6.2.3)

---
updated-dependencies:
- dependency-name: qs
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-08-04 07:55:33 +02:00
dependabot[bot]
86f20e34b7
Bump color-string from 1.5.3 to 1.6.0 (#152)
Bumps [color-string](https://github.com/Qix-/color-string) from 1.5.3 to 1.6.0.
- [Release notes](https://github.com/Qix-/color-string/releases)
- [Changelog](https://github.com/Qix-/color-string/blob/master/CHANGELOG.md)
- [Commits](https://github.com/Qix-/color-string/commits/1.6.0)

---
updated-dependencies:
- dependency-name: color-string
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-08-04 07:23:57 +02:00
dependabot[bot]
d113e87c96
Bump tar from 2.2.1 to 2.2.2 (#151)
Bumps [tar](https://github.com/npm/node-tar) from 2.2.1 to 2.2.2.
- [Release notes](https://github.com/npm/node-tar/releases)
- [Changelog](https://github.com/npm/node-tar/blob/main/CHANGELOG.md)
- [Commits](https://github.com/npm/node-tar/compare/v2.2.1...v2.2.2)

---
updated-dependencies:
- dependency-name: tar
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-08-04 07:22:21 +02:00
dependabot[bot]
9f06b1a8c6
Bump dns-packet from 1.1.1 to 1.3.4 (#150)
Bumps [dns-packet](https://github.com/mafintosh/dns-packet) from 1.1.1 to 1.3.4.
- [Release notes](https://github.com/mafintosh/dns-packet/releases)
- [Changelog](https://github.com/mafintosh/dns-packet/blob/master/CHANGELOG.md)
- [Commits](https://github.com/mafintosh/dns-packet/compare/v1.1.1...v1.3.4)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-05-27 16:11:20 +02:00
dependabot[bot]
8a14c0e3d5
Bump browserslist from 4.7.2 to 4.16.6 (#149)
Bumps [browserslist](https://github.com/browserslist/browserslist) from 4.7.2 to 4.16.6.
- [Release notes](https://github.com/browserslist/browserslist/releases)
- [Changelog](https://github.com/browserslist/browserslist/blob/main/CHANGELOG.md)
- [Commits](https://github.com/browserslist/browserslist/compare/4.7.2...4.16.6)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-05-25 11:49:57 +02:00
dependabot[bot]
c086796573
Bump url-parse from 1.4.7 to 1.5.1 (#147)
Bumps [url-parse](https://github.com/unshiftio/url-parse) from 1.4.7 to 1.5.1.
- [Release notes](https://github.com/unshiftio/url-parse/releases)
- [Commits](https://github.com/unshiftio/url-parse/compare/1.4.7...1.5.1)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-05-10 08:51:28 +02:00
dependabot[bot]
05cdcdaa12
Bump hosted-git-info from 2.1.5 to 2.8.9 (#148)
Bumps [hosted-git-info](https://github.com/npm/hosted-git-info) from 2.1.5 to 2.8.9.
- [Release notes](https://github.com/npm/hosted-git-info/releases)
- [Changelog](https://github.com/npm/hosted-git-info/blob/v2.8.9/CHANGELOG.md)
- [Commits](https://github.com/npm/hosted-git-info/compare/v2.1.5...v2.8.9)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-05-10 08:41:35 +02:00
dependabot[bot]
8ceed901d5
Bump ssri from 6.0.1 to 6.0.2 (#146)
Bumps [ssri](https://github.com/npm/ssri) from 6.0.1 to 6.0.2.
- [Release notes](https://github.com/npm/ssri/releases)
- [Changelog](https://github.com/npm/ssri/blob/v6.0.2/CHANGELOG.md)
- [Commits](https://github.com/npm/ssri/compare/v6.0.1...v6.0.2)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-04-20 07:58:51 +02:00
dependabot[bot]
76fbd2104b
Bump y18n from 3.2.1 to 3.2.2 (#145)
Bumps [y18n](https://github.com/yargs/y18n) from 3.2.1 to 3.2.2.
- [Release notes](https://github.com/yargs/y18n/releases)
- [Changelog](https://github.com/yargs/y18n/blob/master/CHANGELOG.md)
- [Commits](https://github.com/yargs/y18n/commits)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-03-30 17:37:10 +02:00
dependabot[bot]
9cc3bf124c
Bump elliptic from 6.5.3 to 6.5.4 (#144)
Bumps [elliptic](https://github.com/indutny/elliptic) from 6.5.3 to 6.5.4.
- [Release notes](https://github.com/indutny/elliptic/releases)
- [Commits](https://github.com/indutny/elliptic/compare/v6.5.3...v6.5.4)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-03-09 11:22:17 +01:00
dependabot[bot]
986fec8090
Bump ini from 1.3.4 to 1.3.7 (#142)
Bumps [ini](https://github.com/isaacs/ini) from 1.3.4 to 1.3.7.
- [Release notes](https://github.com/isaacs/ini/releases)
- [Commits](https://github.com/isaacs/ini/compare/v1.3.4...v1.3.7)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-12-14 09:48:44 +01:00
Kevin van Zonneveld
ea15c44c7e Remove Travis 2020-11-23 20:10:45 +01:00
Kevin van Zonneveld
febd9e354b
Switch from using Travis to GitHub Actions (#141)
* First swing at GHA

* Delete .travis.yml

* Update ci.yml

* Update main.sh

* Update ci.yml

* Update ci.yml
2020-11-23 19:56:46 +01:00
dependabot[bot]
13d74bb4f1
Bump is-my-json-valid from 2.15.0 to 2.20.5 (#140)
Bumps [is-my-json-valid](https://github.com/mafintosh/is-my-json-valid) from 2.15.0 to 2.20.5.
- [Release notes](https://github.com/mafintosh/is-my-json-valid/releases)
- [Commits](https://github.com/mafintosh/is-my-json-valid/compare/v2.15.0...v2.20.5)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-11-16 11:01:06 +01:00
dependabot[bot]
ab3857e3bd
Bump elliptic from 6.3.2 to 6.5.3 (#139)
Bumps [elliptic](https://github.com/indutny/elliptic) from 6.3.2 to 6.5.3.
- [Release notes](https://github.com/indutny/elliptic/releases)
- [Commits](https://github.com/indutny/elliptic/compare/v6.3.2...v6.5.3)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-11-16 11:00:43 +01:00
Kevin van Zonneveld
e5da0aa249 Upgrade to latest Lanyon 2020-11-16 10:46:11 +01:00
Kevin van Zonneveld
bbb8afea4d Update .travis.yml 2020-11-12 15:40:08 +01:00
dependabot[bot]
e078dd2b91
Bump websocket-extensions from 0.1.1 to 0.1.4 (#138)
Bumps [websocket-extensions](https://github.com/faye/websocket-extensions-node) from 0.1.1 to 0.1.4.
- [Release notes](https://github.com/faye/websocket-extensions-node/releases)
- [Changelog](https://github.com/faye/websocket-extensions-node/blob/master/CHANGELOG.md)
- [Commits](https://github.com/faye/websocket-extensions-node/compare/0.1.1...0.1.4)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-06-08 10:16:56 +02:00
Kevin van Zonneveld
9fd3f1df64 Update CHANGELOG.md 2020-04-22 10:01:55 +02:00
R. Fuehrer
1005ceeec8
Add feature edit/update comments (#132)
Remove obsolete lines of code
Update reference file
Update test scenario
2020-04-22 09:59:24 +02:00
Kevin van Zonneveld
56eab89caa Fix CHANGELOG links (I think). Should fix #136 2020-04-22 09:57:39 +02:00
Kevin van Zonneveld
186d9ff6a0 Update yarn.lock 2020-04-22 09:51:53 +02:00
Kevin van Zonneveld
23ce0e6b85 Merge branch 'master' of github.com:kvz/bash3boilerplate 2020-04-22 09:51:38 +02:00
Kevin van Zonneveld
6392674f70 Update CHANGELOG.md 2020-04-22 09:48:03 +02:00
dependabot[bot]
222a95793b
Bump constantinople from 3.1.0 to 3.1.2 (#135)
Bumps [constantinople](https://github.com/ForbesLindesay/constantinople) from 3.1.0 to 3.1.2.
- [Release notes](https://github.com/ForbesLindesay/constantinople/releases)
- [Commits](https://github.com/ForbesLindesay/constantinople/compare/3.1.0...3.1.2)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-04-16 07:42:22 +02:00
Ross Smith II
269627deec
Simplify example in readme (#133) 2020-02-17 09:51:55 +01:00
R. Fuehrer
1238b67abe Add comment feature and feature checks (#130) 2020-01-07 09:32:57 +01:00
R. Fuehrer
5cc417485a Fix sed regular expression to be non-greedy (#129)
* Fix sed to be non-greedy

* Fix missing double quote to prevent globbing and word splitting
2020-01-04 13:56:01 +01:00
R. Fuehrer
971a83ea3a Enhanced ini file handling (#128)
* Add ini file creation if not exists
Add section creation if not exists
Add default section if section not given
Fix read key value only from given (or default) section

* Fix to support platform specific sed

* Fixed typo in comment

* Fix test scenario to reflect changes to the (introduced) default section

* Fix expectations for scenario test

* Fix style guide compatibility
2019-12-31 15:16:08 +01:00
Ross Smith II
14dc823cca Fix readme to use [[ per readme (#126)
To be consistent with
https://github.com/kvz/bash3boilerplate/edit/master/README.md#Scoping
2019-12-09 09:22:33 +01:00
Gert Goet
599faf3830 Correct error_code in err_report (#124) (#125) 2019-11-18 11:56:18 +01:00
Kevin van Zonneveld
0d096350b0 Update CHANGELOG.md 2019-11-07 14:24:19 +01:00
Kevin van Zonneveld
24e7ceaaf7 Update version 2019-11-07 14:23:58 +01:00
Kevin van Zonneveld
f1ad8a5655 Release 2.4.1 2019-11-07 14:23:57 +01:00
Kevin van Zonneveld
c0f58127bb Update version 2019-11-07 14:23:26 +01:00
Kevin van Zonneveld
6689117e5d Release 2.4.0 2019-11-07 14:23:25 +01:00
Kevin van Zonneveld
a28d594d5f Update CHANGELOG.md 2019-11-07 14:23:19 +01:00
Kevin van Zonneveld
bccefb0061 Update version 2019-11-07 14:21:46 +01:00
Kevin van Zonneveld
8146667ea1 Merge branch 'master' of github.com:kvz/bash3boilerplate 2019-11-05 09:32:59 +01:00
Kevin van Zonneveld
d908e8b362 Release 2.4.0 2019-10-08 16:07:32 +02:00
Kevin van Zonneveld
9250d036dc Update CHANGELOG.md 2019-10-08 16:07:27 +02:00
57 changed files with 1683 additions and 13123 deletions

View File

@ -1,7 +1,7 @@
Thanks for contributing to b3bp! As part of your PR, have you: Thanks for contributing to b3bp! As part of your PR, have you:
- [ ] Added an item in [CHANGELOG.md](https://github.com/kvz/bash3boilerplate/blob/master/CHANGELOG.md) with attribution? - [ ] Added an item in [CHANGELOG.md](https://github.com/kvz/bash3boilerplate/blob/HEAD/CHANGELOG.md) with attribution?
- [ ] Added your name to the [README.md](https://github.com/kvz/bash3boilerplate/blob/master/README.md#authors) - [ ] Added your name to the [README.md](https://github.com/kvz/bash3boilerplate/blob/HEAD/README.md#authors)
- [ ] Linted your code? (`make test` should do the trick) - [ ] Linted your code? (`make test` should do the trick)
If so, great! Feel free to replace this message with a description of your work and hit submit! If so, great! Feel free to replace this message with a description of your work and hit submit!

5
.github/dependabot.yml vendored Normal file
View File

@ -0,0 +1,5 @@
groups:
production-dependencies:
dependency-type: 'production'
development-dependencies:
dependency-type: 'development'

30
.github/workflows/ci.yml vendored Normal file
View File

@ -0,0 +1,30 @@
name: b3bp CI
on:
push:
branches:
- main
pull_request:
types:
- opened
- synchronize
jobs:
ci:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
with:
fetch-depth: 1
- uses: actions/setup-node@v1
with:
node-version: 18.x
- name: Install
run: |
corepack yarn
- name: Lint
env:
SHELLCHECK_SEVERITY: warning
run: |
corepack yarn lint
- name: Test
run: |
corepack yarn test

17
.gitignore vendored
View File

@ -1,20 +1,5 @@
.jekyll-cache/ .yarn
.jekyll-metadata
.lanyon
.lanyon/bin
assets/build assets/build
env.sh env.sh
node_modules node_modules
npm-debug.log npm-debug.log
website/_site/
website/_vendor/
website/.jekyll-metadata
website/.lanyon
website/.lanyon/bin
website/.lanyon/vendor/bin
website/assets/build
website/changelog.md
website/faq.md
website/index.md
website/main.shwebsite/.lanyon
website/main.sh

View File

@ -1,59 +0,0 @@
const path = require('path')
const _ = require('lodash')
module.exports.overrideRuntime = function ({ runtime, toolkit }) {
let preBuilds = []
let postBuilds = []
if (!runtime.isDev) {
preBuilds = preBuilds.concat([
'npm run inject',
])
postBuilds = postBuilds.concat([
// 'npm run redirects',
])
}
// "lanyon": {
// "projectDir": "website",
// "contentScandir": "../",
// "contentIgnore": [
// "website/*.md",
// "website/main.sh"
// ]
// },
// runtime['npmRoot'] = `${__dirname}`
runtime.projectDir = `${__dirname}/website`
runtime.cacheDir = path.join(runtime.projectDir, '.lanyon')
runtime.recordsPath = path.join(runtime.cacheDir, 'records.json')
runtime.assetsSourceDir = path.join(runtime.projectDir, 'assets')
runtime.assetsBuildDir = path.join(runtime.assetsSourceDir, 'build')
runtime.contentScandir = path.join(runtime.projectDir, runtime.contentScandir || '.')
runtime.contentBuildDir = path.join(runtime.projectDir, '_site')
runtime['prebuild:content'] = preBuilds.join(' && ')
runtime['postbuild:content'] = postBuilds.join(' && ')
return runtime
}
module.exports.overrideConfig = function ({ config, toolkit }) {
if (config.runtime.isDev) {
config.jekyll.url = 'http://localhost:3000'
}
config.jekyll.profile = true
config.jekyll.trace = true
if (config.runtime.isDev) {
config.jekyll.unpublished = true
config.jekyll.future = true
config.jekyll.incremental = true // <-- for clarify; incremental is the default also
} else {
config.jekyll.incremental = false
}
return config
}

3
.shellcheckrc Normal file
View File

@ -0,0 +1,3 @@
external-sources=true
shell=bash
color=always

View File

@ -1,44 +0,0 @@
matrix:
include:
- os: linux
sudo: false
language: node_js
node_js: 10
- os: osx
language: node_js
node_js: 10
env:
global:
- SCROLEX_MODE=passthru
- secure: BeM6mpPEATdeFcAr/222QBZ9vRkZtU2WOi9QQy3mxsuDbWfM8RxYESIEJLipyhW9kXGoe6HGMqm4Kz9B/c4jrzeSXPpKnW7mIfnyqN+hhq1ctW9qPSqodu+fYNhdDxXh5wylml7hnIJzU70vFGrFknZRE2FYk5XvyHg2ImIKDJw=
- secure: RJ5UpdXms9QkraylZ11OBfmcRrmKnb254Yj0yCDAvZmg+n+3jSTwMgGvPY8Ih8X/R1JeW3VTtFDkJXXPnjjfpNg1M91u4CAEUOMPciCudYcoF6GKb8psnOzneTTX5M7zuJSzknGdpv/foldxiPYxiY5Hn5bfjmikhAEl+QX/R0Y=
- secure: BXf2buPt/DA09M5ZUdp/LpOWtUuz1mfCBopLyxvHv3Sl3ln+Az57wWsM2+Re+77lUOgihR2f6lXYfNUmQuSUo157rZPunQCqM/DJhK69KhREEB6SJDaJF3FVlnGla+Cwwb1IQUtMopqX9pBYD7w/zyWQFJCi20O57JEVIdfZZS8=
- secure: AaDI3OLTcwau2tu9jTtR0eHpylSUudYua9aKH3C540Lm2scQhQcT4IbMa6KXgrY+1UchapS9gUuClH8QwgJo61tJjtOqvmCgZ2EkmZg68pzw/25zwv7LSzYASbZvKahulV/giZdxFLGOpPhNhKbG70/owYXjKFENi5LoZKc8Y+c=
addons:
apt:
sources:
- debian-sid
before_install:
- if [ "$TRAVIS_OS_NAME" = "linux" ]; then sudo apt-get install --allow-unauthenticated -y cabal-install; fi
- if [ "$TRAVIS_OS_NAME" = "linux" ]; then cabal update; fi
- if [ "$TRAVIS_OS_NAME" = "linux" ]; then cabal v1-install ShellCheck; fi
- if [ "$TRAVIS_OS_NAME" = "osx" ]; then brew update; fi
- if [ "$TRAVIS_OS_NAME" = "osx" ]; then which gsed || brew install gnu-sed; fi
- if [ "$TRAVIS_OS_NAME" = "osx" ]; then which gtimeout || brew install coreutils; fi
- if [ "$TRAVIS_OS_NAME" = "osx" ]; then which bundle || gem install bundler; fi
- bash --version
- awk --version
before_cache:
- rm -f ./node_modules/.bin/which
# cache:
# apt: true
# directories:
# - .lanyon
script: test/acceptance.sh
deploy:
skip_cleanup: true
provider: script
script: ./node_modules/lanyon/scripts/ci-deploy.sh
on:
branch: master
condition: $TRAVIS_OS_NAME = linux

View File

@ -1,7 +1,7 @@
{ {
"folders": [ "folders": [
{ {
"path": "." "path": ".."
} }
], ],
"settings": {} "settings": {}

1
.yarnrc.yml Normal file
View File

@ -0,0 +1 @@
nodeLinker: node-modules

View File

@ -8,12 +8,42 @@ Unplanned.
- [ ] Better style guide checking (#84) - [ ] Better style guide checking (#84)
## master ## main
Released: TBA. Released: TBA.
[Diff](https://github.com/kvz/bash3boilerplate/compare/v2.3.0...master). [Diff](https://github.com/kvz/bash3boilerplate/compare/2.7.2...main).
- [ ] Upgrade to `lanyon@0.0.55` - [ ]
## 2.7.2
Released: 2023-08-29
[Diff](https://github.com/kvz/bash3boilerplate/compare/v2.4.1...2.7.2).
- [x] Upgrade and cleanup node dependencies
- [x] Remove lanyon-based website in favor of simple redirect to github for bash3boilerplate.sh
- [x] Make tests pass again
- [x] Make linting and style checking separate actions
- [x] Add feature to edit/update comments in ini file (#132, @rfuehrer)
- [x] Upgrade to `lanyon@0.1.16`
- [x] Capture correct error_code in err_report (#124, @eval)
- [x] Enhanced ini file handling: create new file, create new sections, handle default section, read key from given section (@rfuehrer)
## v2.4.2
Released: 2019-11-07.
[Diff](https://github.com/kvz/bash3boilerplate/compare/v2.4.1...v2.4.2).
- [x] Upgrade to `lanyon@0.1.16`
- [x] Capture correct error_code in err_report (#124, @eval)
- [x] Enhanced ini file handling: create new file, create new sections, handle default section, read key from given section (@rfuehrer)
## v2.4.1
Released: 2019-11-07.
[Diff](https://github.com/kvz/bash3boilerplate/compare/v2.3.0...v2.4.1).
- [x] Upgrade to `lanyon@0.1.7`
- [x] Allow counting how many times an argument is used (@genesiscloud) - [x] Allow counting how many times an argument is used (@genesiscloud)
- [x] Fix typos in megamount (thanks @gsaponaro) - [x] Fix typos in megamount (thanks @gsaponaro)
- [x] Enable color in screen or tmux (#92, @gmasse) - [x] Enable color in screen or tmux (#92, @gmasse)
@ -25,6 +55,13 @@ Released: TBA.
- [x] Add support for repeatable arguments (@genesiscloud) - [x] Add support for repeatable arguments (@genesiscloud)
- [x] Fix remaining warnings with shellcheck v0.7.0 (#107, @genesiscloud) - [x] Fix remaining warnings with shellcheck v0.7.0 (#107, @genesiscloud)
## v2.4.0
Released: 2016-12-21.
[Diff](https://github.com/kvz/bash3boilerplate/compare/v2.3.0...v2.4.0).
- [x] Upgrade to `lanyon@0.0.143`
## v2.3.0 ## v2.3.0
Released: 2016-12-21. Released: 2016-12-21.

57
FAQ.md
View File

@ -1,23 +1,22 @@
[This document is formatted with GitHub-Flavored Markdown. ]: # [This document is formatted with GitHub-Flavored Markdown. ]: #
[For better viewing, including hyperlinks, read it online at ]: # [For better viewing, including hyperlinks, read it online at ]: #
[https://github.com/kvz/bash3boilerplate/blob/master/FAQ.md ]:# [https://github.com/kvz/bash3boilerplate/blob/HEAD/FAQ.md ]: #
## Contents ## Contents
* [What is a CLI](#what-is-a-cli)? - [What is a CLI](#what-is-a-cli)?
* [How do I incorporate BASH3 Boilerplate into my own project](#how-do-i-incorporate-bash3-boilerplate-into-my-own-project)? - [How do I incorporate BASH3 Boilerplate into my own project](#how-do-i-incorporate-bash3-boilerplate-into-my-own-project)?
* [How do I add a command-line flag](#how-do-i-add-a-command-line-flag)? - [How do I add a command-line flag](#how-do-i-add-a-command-line-flag)?
* [How do I access the value of a command-line argument](#how-do-i-access-the-value-of-a-command-line-argument)? - [How do I access the value of a command-line argument](#how-do-i-access-the-value-of-a-command-line-argument)?
* [What is a magic variable](#what-is-a-magic-variable)? - [What is a magic variable](#what-is-a-magic-variable)?
* [How do I submit an issue report](#how-do-i-submit-an-issue-report)? - [How do I submit an issue report](#how-do-i-submit-an-issue-report)?
* [How can I contribute to this project](#how-can-i-contribute-to-this-project)? - [How can I contribute to this project](#how-can-i-contribute-to-this-project)?
* [Why are you typing BASH in all caps](#why-are-you-typing-bash-in-all-caps)? - [Why are you typing BASH in all caps](#why-are-you-typing-bash-in-all-caps)?
* [How can I locally develop and preview the b3bp website](#how-can-i-locally-develop-and-preview-the-b3bp-website)? - [You are saying you are portable, but why won't b3bp code run in dash / busybox / posh / ksh / mksh / zsh](#you-are-saying-you-are-portable-but-why-wont-b3bp-code-run-in-dash--busybox--posh--ksh--mksh--zsh)?
* [You are saying you are portable, but why won't b3bp code run in dash / busybox / posh / ksh / mksh / zsh](#you-are-saying-you-are-portable-but-why-wont-b3bp-code-run-in-dash--busybox--posh--ksh--mksh--zsh)? - [How do I do Operating System detection](#how-do-i-do-operating-system-detection)?
* [How do I do Operating System detection](#how-do-i-do-operating-system-detection)? - [How do I access a potentially unset (environment) variable](#how-do-i-access-a-potentially-unset-environment-variable)?
* [How do I access a potentially unset (environment) variable](#how-do-i-access-a-potentially-unset-environment-variable)? - [How can I detect or trap CTRL-C and other signals](#how-can-i-detect-or-trap-ctrl-c-and-other-signals)?
* [How can I detect or trap CTRL-C and other signals](#how-can-i-detect-or-trap-ctrl-c-and-other-signals)? - [How can I get the PID of my running script](how-can-i-get-the-pid-of-my-running-script)?
* [How can I get the PID of my running script](how-can-i-get-the-pid-of-my-running-script)?
<!--more--> <!--more-->
@ -83,7 +82,7 @@ Please visit our [Issues](https://github.com/kvz/bash3boilerplate/issues) page.
## How can I contribute to this project? ## How can I contribute to this project?
Please fork this repository. After that, create a branch containing your suggested changes and submit a pull request based on the master branch Please fork this repository. After that, create a branch containing your suggested changes and submit a pull request based on the main branch
of <https://github.com/kvz/bash3boilerplate/>. We are always more than happy to accept your contributions! of <https://github.com/kvz/bash3boilerplate/>. We are always more than happy to accept your contributions!
## Why are you typing BASH in all caps? ## Why are you typing BASH in all caps?
@ -94,30 +93,6 @@ This project's name, however, is "BASH3 Boilerplate". It is a reference to
only for crafting webpages. only for crafting webpages.
Somewhat inconsistent but true to Unix ancestry the abbreviation for our project is "b3bp". Somewhat inconsistent but true to Unix ancestry the abbreviation for our project is "b3bp".
## How can I locally develop and preview the b3bp website?
You should have a working Node.js >=10, Ruby >=2 and [YARN](https://yarnpkg.com) install on your workstation. When that is the case, you can run:
```bash
yarn install
npm run start
```
This will install and start all required services and automatically open a webbrowser that reloads as soon as you make any changes to the source.
The source mainly consists of:
- `./README.md` (Front page)
- `./FAQ.md` (FAQ page)
- `./CHANGELOG.md` (changelog page)
- `./website/_layouts/default.html` (the design in which all pages are rendered)
- `./website/assets/app.js` (main JS file)
- `./website/assets/style.css` (main CSS file)
The rest is dark magic from which you should probably steer clear. : )
Any changes should be proposed as PRs. Anything added to `master` is automatically deployed using a combination of Travis CI and GitHub Pages.
## You are saying you are portable, but why won't b3bp code run in dash / busybox / posh / ksh / mksh / zsh? ## You are saying you are portable, but why won't b3bp code run in dash / busybox / posh / ksh / mksh / zsh?
When we say _portable_, we mean across Bash versions. Bash is widespread and most systems When we say _portable_, we mean across Bash versions. Bash is widespread and most systems
@ -193,4 +168,4 @@ See http://mywiki.wooledge.org/SignalTrap for a list of signals, examples, and a
## How can I get the PID of my running script? ## How can I get the PID of my running script?
The PID of a running script is contained in the `${$}` variable. This is *not* the pid of any subshells. With Bash 4 you can get the PID of your subshell with `${BASHPID}`. For a comprehensive list of Bash built in variables see, e.g., http://www.tldp.org/LDP/abs/html/internalvariables.html The PID of a running script is contained in the `${$}` variable. This is _not_ the pid of any subshells. With Bash 4 you can get the PID of your subshell with `${BASHPID}`. For a comprehensive list of Bash built in variables see, e.g., http://www.tldp.org/LDP/abs/html/internalvariables.html

View File

@ -3,6 +3,9 @@
# #
# https://www.npmjs.com/package/fakefile # https://www.npmjs.com/package/fakefile
# #
# Please do not edit this file directly, but propose changed upstream instead:
# https://github.com/kvz/fakefile/blob/main/Makefile
#
# This Makefile offers convience shortcuts into any Node.js project that utilizes npm scripts. # This Makefile offers convience shortcuts into any Node.js project that utilizes npm scripts.
# It functions as a wrapper around the actual listed in `package.json` # It functions as a wrapper around the actual listed in `package.json`
# So instead of typing: # So instead of typing:
@ -25,10 +28,26 @@
# OSX users will have to install bash-completion # OSX users will have to install bash-completion
# (http://davidalger.com/development/bash-completion-on-os-x-with-brew/) # (http://davidalger.com/development/bash-completion-on-os-x-with-brew/)
ifeq ($(shell test -e ./yarn.lock && echo -n yes),yes)
RUNNER=yarn
INSTALLER=yarn install
else
RUNNER=npm run
INSTALLER=npm install
endif
define npm_script_targets define npm_script_targets
TARGETS := $(shell node -e 'for (var k in require("./package.json").scripts) {console.log(k.replace(/:/g, "-"));}') TARGETS := $(shell \
node -e 'for (var k in require("./package.json").scripts) {console.log(k.replace(/:/g, "-"));}'
| grep -v -E "^install$$"
)
$$(TARGETS): $$(TARGETS):
npm run $(subst -,:,$(MAKECMDGOALS)) $(RUNNER) $(shell \
node -e 'for (var k in require("./package.json").scripts) {console.log(k.replace(/:/g, "-"), k);}'
| grep -E "^$(MAKECMDGOALS)\s"
| head -n1
| awk '{print $$2}'
)
.PHONY: $$(TARGETS) .PHONY: $$(TARGETS)
endef endef
@ -37,4 +56,4 @@ $(eval $(call npm_script_targets))
# These npm run scripts are available, without needing to be mentioned in `package.json` # These npm run scripts are available, without needing to be mentioned in `package.json`
install: install:
npm run install $(INSTALLER)

View File

@ -1,19 +1,17 @@
[![Build Status](https://travis-ci.org/kvz/bash3boilerplate.svg?branch=master)](https://travis-ci.org/kvz/bash3boilerplate)
[This document is formatted with GitHub-Flavored Markdown. ]: # [This document is formatted with GitHub-Flavored Markdown. ]: #
[For better viewing, including hyperlinks, read it online at ]: # [For better viewing, including hyperlinks, read it online at ]: #
[https://github.com/kvz/bash3boilerplate/blob/master/README.md]:# [https://github.com/kvz/bash3boilerplate/blob/HEAD/README.md]: #
* [Overview](#overview) - [Overview](#overview)
* [Goals](#goals) - [Goals](#goals)
* [Features](#features) - [Features](#features)
* [Installation](#installation) - [Installation](#installation)
* [Changelog](#changelog) - [Changelog](#changelog)
* [Frequently Asked Questions](#frequently-asked-questions) - [Frequently Asked Questions](#frequently-asked-questions)
* [Best Practices](#best-practices) - [Best Practices](#best-practices)
* [Who uses b3bp](#who-uses-b3bp) - [Who uses b3bp](#who-uses-b3bp)
* [Authors](#authors) - [Authors](#authors)
* [License](#license) - [License](#license)
## Overview ## Overview
@ -32,7 +30,7 @@ We call it "BASH3 Boilerplate" or b3bp for short.
## Goals ## Goals
Delete-Key-**Friendly**. Instead of introducing packages, includes, compilers, etc., we propose using [`main.sh`](http://bash3boilerplate.sh/main.sh) as a base and removing the parts you don't need. Delete-Key-**Friendly**. Instead of introducing packages, includes, compilers, etc., we propose using [`main.sh`](https://bash3boilerplate.sh/main.sh) as a base and removing the parts you don't need.
While this may feel a bit archaic at first, it is exactly the strength of Bash scripts that we should want to embrace. While this may feel a bit archaic at first, it is exactly the strength of Bash scripts that we should want to embrace.
**Portable**. We are targeting Bash 3 (OSX still ships **Portable**. We are targeting Bash 3 (OSX still ships
@ -47,7 +45,7 @@ dependency.
- Configuration by environment variables - Configuration by environment variables
- Simple command-line argument parsing that requires no external dependencies. Definitions are parsed from help info, ensuring there will be no duplication - Simple command-line argument parsing that requires no external dependencies. Definitions are parsed from help info, ensuring there will be no duplication
- Helpful magic variables like `__file` and `__dir` - Helpful magic variables like `__file` and `__dir`
- Logging that supports colors and is compatible with [Syslog Severity levels](http://en.wikipedia.org/wiki/Syslog#Severity_levels), as well as the [twelve-factor](http://12factor.net/) guidelines - Logging that supports colors and is compatible with [Syslog Severity levels](https://en.wikipedia.org/wiki/Syslog#Severity_levels), as well as the [twelve-factor](https://12factor.net/) guidelines
## Installation ## Installation
@ -58,7 +56,7 @@ There are three different ways to install b3bp:
Use curl or wget to download the source and save it as your script. Then you can start deleting the unwanted bits, and adding your own logic. Use curl or wget to download the source and save it as your script. Then you can start deleting the unwanted bits, and adding your own logic.
```bash ```bash
wget http://bash3boilerplate.sh/main.sh wget https://bash3boilerplate.sh/main.sh
vim main.sh vim main.sh
``` ```
@ -95,15 +93,14 @@ As of `v1.0.3`, b3bp offers some nice re-usable libraries in `./src`. In order t
### Function packaging ### Function packaging
It is nice to have a Bash package that can not only be used in the terminal, but also invoked as a command line function. In order to achieve this, the exporting of your functionality *should* follow this pattern: It is nice to have a Bash package that can not only be used in the terminal, but also invoked as a command line function. In order to achieve this, the exporting of your functionality _should_ follow this pattern:
```bash ```bash
if [ "${BASH_SOURCE[0]}" != "${0}" ]; then if [[ "${BASH_SOURCE[0]}" = "${0}" ]]; then
export -f my_script
else
my_script "${@}" my_script "${@}"
exit $? exit $?
fi fi
export -f my_script
``` ```
This allows a user to `source` your script or invoke it as a script. This allows a user to `source` your script or invoke it as a script.
@ -116,7 +113,7 @@ $ source my_script.sh
$ my_script some more args --blah $ my_script some more args --blah
``` ```
(taken from the [bpkg](https://raw.githubusercontent.com/bpkg/bpkg/master/README.md) project) (taken from the [bpkg](https://raw.githubusercontent.com/bpkg/bpkg/HEAD/README.md) project)
### Scoping ### Scoping
@ -138,27 +135,27 @@ $ my_script some more args --blah
1. Use `set`, rather than relying on a shebang like `#!/usr/bin/env bash -e`, since that is neutralized when someone runs your script as `bash yourscript.sh`. 1. Use `set`, rather than relying on a shebang like `#!/usr/bin/env bash -e`, since that is neutralized when someone runs your script as `bash yourscript.sh`.
1. Use `#!/usr/bin/env bash`, as it is more portable than `#!/bin/bash`. 1. Use `#!/usr/bin/env bash`, as it is more portable than `#!/bin/bash`.
1. Use `${BASH_SOURCE[0]}` if you refer to current file, even if it is sourced by a parent script. In other cases, use `${0}`. 1. Use `${BASH_SOURCE[0]}` if you refer to current file, even if it is sourced by a parent script. In other cases, use `${0}`.
1. Use `:-` if you want to test variables that could be undeclared. For instance, with `if [ "${NAME:-}" = "Kevin" ]`, `$NAME` will evaluate to `Kevin` if the variable is empty. The variable itself will remain unchanged. The syntax to assign a default value is `${NAME:=Kevin}`. 1. Use `:-` if you want to test variables that could be undeclared. For instance, with `if [[ "${NAME:-}" = "Kevin" ]]`, `$NAME` will evaluate to `Kevin` if the variable is empty. The variable itself will remain unchanged. The syntax to assign a default value is `${NAME:=Kevin}`.
## Who uses b3bp? ## Who uses b3bp?
- [Transloadit](https://transloadit.com) - [Transloadit](https://transloadit.com)
- [OpenCoarrays](http://www.opencoarrays.org) - [OpenCoarrays](https://www.opencoarrays.org)
- [Sourcery Institute](http://www.sourceryinstitute.org) - [Sourcery Institute](https://www.sourceryinstitute.org)
- [Computational Brain Anatomy Laboratory](http://cobralab.ca/) - [Computational Brain Anatomy Laboratory](https://cobralab.ca/)
- [Genesis Cloud](https://genesiscloud.com/) - [Genesis Cloud](https://genesiscloud.com/)
We are looking for endorsements! Are you also using b3bp? [Let us know](https://github.com/kvz/bash3boilerplate/issues/new?title=I%20use%20b3bp) and get listed. We are looking for endorsements! Are you also using b3bp? [Let us know](https://github.com/kvz/bash3boilerplate/issues/new?title=I%20use%20b3bp) and get listed.
## Authors ## Authors
- [Kevin van Zonneveld](http://kvz.io) - [Kevin van Zonneveld](https://kvz.io)
- [Izaak Beekman](https://izaakbeekman.com/) - [Izaak Beekman](https://izaakbeekman.com/)
- [Manuel Streuhofer](https://github.com/mstreuhofer) - [Manuel Streuhofer](https://github.com/mstreuhofer)
- [Alexander Rathai](mailto:Alexander.Rathai@gmail.com) - [Alexander Rathai](mailto:Alexander.Rathai@gmail.com)
- [Dr. Damian Rouson](http://www.sourceryinstitute.org/) (documentation, feedback) - [Dr. Damian Rouson](https://www.sourceryinstitute.org/) (documentation, feedback)
- [@jokajak](https://github.com/jokajak) (documentation) - [@jokajak](https://github.com/jokajak) (documentation)
- [Gabriel A. Devenyi](http://staticwave.ca/) (feedback) - [Gabriel A. Devenyi](https://staticwave.ca/) (feedback)
- [@bravo-kernel](https://github.com/bravo-kernel) (feedback) - [@bravo-kernel](https://github.com/bravo-kernel) (feedback)
- [@skanga](https://github.com/skanga) (feedback) - [@skanga](https://github.com/skanga) (feedback)
- [galaktos](https://www.reddit.com/user/galaktos) (feedback) - [galaktos](https://www.reddit.com/user/galaktos) (feedback)
@ -167,10 +164,12 @@ We are looking for endorsements! Are you also using b3bp? [Let us know](https://
- [Germain Masse](https://github.com/gmasse) - [Germain Masse](https://github.com/gmasse)
- [A. G. Madi](https://github.com/warpengineer) - [A. G. Madi](https://github.com/warpengineer)
- [Lukas Stockner](mailto:oss@genesiscloud.com) - [Lukas Stockner](mailto:oss@genesiscloud.com)
- [Gert Goet](https://github.com/eval)
- [@rfuehrer](https://github.com/rfuehrer)
## License ## License
Copyright (c) 2013 Kevin van Zonneveld and [contributors](https://github.com/kvz/bash3boilerplate#authors). Copyright (c) 2013 Kevin van Zonneveld and [contributors](https://github.com/kvz/bash3boilerplate#authors).
Licensed under [MIT](https://raw.githubusercontent.com/kvz/bash3boilerplate/master/LICENSE). Licensed under [MIT](https://raw.githubusercontent.com/kvz/bash3boilerplate/HEAD/LICENSE).
You are not obligated to bundle the LICENSE file with your b3bp projects as long You are not obligated to bundle the LICENSE file with your b3bp projects as long
as you leave these references intact in the header comments of your source files. as you leave these references intact in the header comments of your source files.

1
docs/CNAME Normal file
View File

@ -0,0 +1 @@
bash3boilerplate.sh

15
docs/index.html Normal file
View File

@ -0,0 +1,15 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta
http-equiv="refresh"
content="0;url=https://github.com/kvz/bash3boilerplate"
/>
<title>Redirecting...</title>
</head>
<body>
If you are not redirected,
<a href="https://github.com/kvz/bash3boilerplate">click here</a>.
</body>
</html>

View File

@ -61,8 +61,7 @@ trap __b3bp_cleanup_before_exit EXIT
# requires `set -o errtrace` # requires `set -o errtrace`
__b3bp_err_report() { __b3bp_err_report() {
local error_code local error_code=${?}
error_code=${?}
# shellcheck disable=SC2154 # shellcheck disable=SC2154
error "Error in ${__file} in function ${1} on line ${2}" error "Error in ${__file} in function ${1} on line ${2}"
exit ${error_code} exit ${error_code}
@ -141,7 +140,7 @@ info "$(echo -e "multiple lines example - line #1\\nmultiple lines example - lin
debug "Info useful to developers for debugging the application, not useful during operations." debug "Info useful to developers for debugging the application, not useful during operations."
info "Normal operational messages - may be harvested for reporting, measuring throughput, etc. - no action required." info "Normal operational messages - may be harvested for reporting, measuring throughput, etc. - no action required."
notice "Events that are unusual but not error conditions - might be summarized in an email to developers or admins to spot potential problems - no immediate action required." notice "Events that are unusual but not error conditions - might be summarized in an email to developers or admins to spot potential problems - no immediate action required."
warning "Warning messages, not an error, but indication that an error will occur if action is not taken, e.g. file system 85% full - each item must be resolved within a given time. This is a debug message" warning "Warning messages, not an error, but indication that an error will occur if action is not taken, e.g. file system 85% full - each item must be resolved within a given time."
error "Non-urgent failures, these should be relayed to developers or admins; each item must be resolved within a given time." error "Non-urgent failures, these should be relayed to developers or admins; each item must be resolved within a given time."
critical "Should be corrected immediately, but indicates failure in a primary system, an example is a loss of a backup ISP connection." critical "Should be corrected immediately, but indicates failure in a primary system, an example is a loss of a backup ISP connection."
alert "Should be corrected immediately, therefore notify staff who can fix the problem. An example would be the loss of a primary ISP connection." alert "Should be corrected immediately, therefore notify staff who can fix the problem. An example would be the loss of a primary ISP connection."

View File

@ -7,7 +7,7 @@
# #
# LOG_LEVEL=7 ./main.sh -f /tmp/x -d (change this for your script) # LOG_LEVEL=7 ./main.sh -f /tmp/x -d (change this for your script)
# #
# Based on a template by BASH3 Boilerplate v2.3.0 # Based on a template by BASH3 Boilerplate vv2.7.2
# http://bash3boilerplate.sh/#authors # http://bash3boilerplate.sh/#authors
# #
# The MIT License (MIT) # The MIT License (MIT)
@ -280,6 +280,7 @@ if [[ "${__b3bp_tmp_opts:-}" ]]; then
# repeatable flags, they increcemnt # repeatable flags, they increcemnt
__b3bp_tmp_varname="arg_${__b3bp_tmp_opt:0:1}" __b3bp_tmp_varname="arg_${__b3bp_tmp_opt:0:1}"
debug "cli arg ${__b3bp_tmp_varname} = (${__b3bp_tmp_default}) -> ${!__b3bp_tmp_varname}" debug "cli arg ${__b3bp_tmp_varname} = (${__b3bp_tmp_default}) -> ${!__b3bp_tmp_varname}"
# shellcheck disable=SC2004
__b3bp_tmp_value=$((${!__b3bp_tmp_varname} + 1)) __b3bp_tmp_value=$((${!__b3bp_tmp_varname} + 1))
printf -v "${__b3bp_tmp_varname}" '%s' "${__b3bp_tmp_value}" printf -v "${__b3bp_tmp_varname}" '%s' "${__b3bp_tmp_value}"
else else
@ -360,8 +361,7 @@ trap __b3bp_cleanup_before_exit EXIT
# requires `set -o errtrace` # requires `set -o errtrace`
__b3bp_err_report() { __b3bp_err_report() {
local error_code local error_code=${?}
error_code=${?}
error "Error in ${__file} in function ${1} on line ${2}" error "Error in ${__file} in function ${1} on line ${2}"
exit ${error_code} exit ${error_code}
} }
@ -446,7 +446,7 @@ info "$(echo -e "multiple lines example - line #1\\nmultiple lines example - lin
debug "Info useful to developers for debugging the application, not useful during operations." debug "Info useful to developers for debugging the application, not useful during operations."
info "Normal operational messages - may be harvested for reporting, measuring throughput, etc. - no action required." info "Normal operational messages - may be harvested for reporting, measuring throughput, etc. - no action required."
notice "Events that are unusual but not error conditions - might be summarized in an email to developers or admins to spot potential problems - no immediate action required." notice "Events that are unusual but not error conditions - might be summarized in an email to developers or admins to spot potential problems - no immediate action required."
warning "Warning messages, not an error, but indication that an error will occur if action is not taken, e.g. file system 85% full - each item must be resolved within a given time. This is a debug message" warning "Warning messages, not an error, but indication that an error will occur if action is not taken, e.g. file system 85% full - each item must be resolved within a given time."
error "Non-urgent failures, these should be relayed to developers or admins; each item must be resolved within a given time." error "Non-urgent failures, these should be relayed to developers or admins; each item must be resolved within a given time."
critical "Should be corrected immediately, but indicates failure in a primary system, an example is a loss of a backup ISP connection." critical "Should be corrected immediately, but indicates failure in a primary system, an example is a loss of a backup ISP connection."
alert "Should be corrected immediately, therefore notify staff who can fix the problem. An example would be the loss of a primary ISP connection." alert "Should be corrected immediately, therefore notify staff who can fix the problem. An example would be the loss of a primary ISP connection."

View File

@ -1,39 +1,29 @@
{ {
"name": "bash3boilerplate", "name": "bash3boilerplate",
"description": "Copypastable templates to write better bash scripts", "description": "Copypastable templates to write better bash scripts",
"version": "2.3.1", "version": "2.7.2",
"packageManager": "yarn@3.6.0+sha224.19e47520fa56c6146388fdeb438d9dcf6630c3f277a2e1180995c3bb",
"engines": {
"node": ">= 18",
"yarn": "3.6.0"
},
"scripts": { "scripts": {
"build:production": "LANYON_ENV=production lanyon build", "lint:shellcheck": "shellcheck --severity=${SHELLCHECK_SEVERITY:-info} $(find . -name '*.sh' -maxdepth 2)",
"build": "lanyon build", "lint:style": "test/style.pl $(find . -name '*.sh' -maxdepth 2)",
"deploy": "lanyon deploy", "lint": "npm-run-all -l 'lint:**'",
"encrypt": "lanyon encrypt", "release:major": "env SEMANTIC=major yarn release",
"inject": "./_scripts/inject.sh", "release:minor": "env SEMANTIC=minor yarn release",
"install:lanyon": "lanyon install", "release:patch": "env SEMANTIC=patch yarn release",
"lint": "shellcheck --shell=bash $(find . -name '*.sh' -maxdepth 2)", "release": "npm version ${SEMANTIC:-patch} -m \"Release %s\" && yarn version:replace && git commit main.sh src/*.sh -m 'Update version' && git push && git push --tags -f && npm publish",
"release:major": "env SEMANTIC=major npm run release", "test:debug:main:repeated": "env LOG_LEVEL=7 test/acceptance.sh main-repeated",
"release:minor": "env SEMANTIC=minor npm run release", "test:update": "env SAVE_FIXTURES=true yarn test",
"release:patch": "env SEMANTIC=patch npm run release",
"release": "npm version ${SEMANTIC:-patch} -m \"Release %s\" && npm run version:replace && git commit main.sh src/*.sh -m 'Update version' && git push && git push --tags && npm publish",
"serve:production": "LANYON_ENV=production lanyon serve",
"start:production": "npm-run-all build:production serve:production",
"start": "lanyon start",
"test:debug:main:repeated": "cross-env LOG_LEVEL=7 test/acceptance.sh main-repeated",
"test:update": "cross-env SAVE_FIXTURES=true npm run test",
"test": "test/acceptance.sh", "test": "test/acceptance.sh",
"upgrade:modules": "next-update --keep true --tldr",
"version:current": "node -e 'console.log(require(\"./package.json\").version)'", "version:current": "node -e 'console.log(require(\"./package.json\").version)'",
"version:replace": "replace 'v\\d+\\.\\d+\\.\\d+' \"v$(npm run --silent version:current)\" main.sh src/*.sh" "version:replace": "replace 'v\\d+\\.\\d+\\.\\d+' \"v$(npm run --silent version:current)\" main.sh src/*.sh"
}, },
"optionalDependencies": {
"fsevents": "*"
},
"dependencies": {},
"devDependencies": { "devDependencies": {
"cross-env": "3.1.3", "fakefile": "1.1.0",
"fakefile": "0.0.8", "npm-run-all": "4.1.5",
"lanyon": "0.1.7", "replace": "1.2.2"
"next-update": "1.5.1",
"npm-run-all": "3.1.2",
"replace": "0.3.0"
} }
} }

View File

@ -7,18 +7,19 @@
# #
# Limitations: # Limitations:
# #
# - All keys inside the .ini file must be unique, regardless of the use of sections # - All keys inside a section of the .ini file must be unique
# - Optional comment parameter for the creation of new entries
# #
# Usage as a function: # Usage as a function:
# #
# source ini_val.sh # source ini_val.sh
# ini_val data.ini connection.host 127.0.0.1 # ini_val data.ini connection.host 127.0.0.1 "Host name or IP address"
# #
# Usage as a command: # Usage as a command:
# #
# ini_val.sh data.ini connection.host 127.0.0.1 # ini_val.sh data.ini connection.host 127.0.0.1 "Host name or IP address"
# #
# Based on a template by BASH3 Boilerplate v2.3.0 # Based on a template by BASH3 Boilerplate vv2.7.2
# http://bash3boilerplate.sh/#authors # http://bash3boilerplate.sh/#authors
# #
# The MIT License (MIT) # The MIT License (MIT)
@ -30,44 +31,78 @@ function ini_val() {
local file="${1:-}" local file="${1:-}"
local sectionkey="${2:-}" local sectionkey="${2:-}"
local val="${3:-}" local val="${3:-}"
local comment="${4:-}"
local delim="=" local delim="="
local comment_delim=";"
local section="" local section=""
local key="" local key=""
local current=""
# add default section
local section_default="default"
if [[ ! -f "${file}" ]]; then
# touch file if not exists
touch "${file}"
fi
# Split on . for section. However, section is optional # Split on . for section. However, section is optional
IFS='.' read -r section key <<< "${sectionkey}" IFS='.' read -r section key <<< "${sectionkey}"
if [[ ! "${key}" ]]; then if [[ ! "${key}" ]]; then
key="${section}" key="${section}"
section="" # default section if not given
section="${section_default}"
fi fi
local current # get current value (if exists)
current=$(awk -F "${delim}" "/^${key}${delim}/ {for (i=2; i<NF; i++) printf \$i \" \"; print \$NF}" "${file}") current=$(sed -En "/^\[/{h;d;};G;s/^${key}([[:blank:]]*)${delim}(.*)\n\[${section}\]$/\2/p" "${file}"|awk '{$1=$1};1')
# get current comment (if exists)
current_comment=$(sed -En "/^\[${section}\]/,/^\[.*\]/ s|^(${comment_delim}\[${key}\])(.*)|\2|p" "${file}"|awk '{$1=$1};1')
if ! grep -q "\[${section}\]" "${file}"; then
# create section if not exists (empty line to seperate new section for better readability)
echo >> "${file}"
echo "[${section}]" >> "${file}"
fi
if [[ ! "${val}" ]]; then if [[ ! "${val}" ]]; then
# get a value # get a value
echo "${current}" echo "${current}"
else else
# set a value # set a value
if [[ ! "${current}" ]]; then
# doesn't exist yet, add
if [[ ! "${section}" ]]; then if [[ ! "${section}" ]]; then
# no section was given, add to bottom of file # if no section is given, propagate the default section
echo "${key}${delim}${val}" >> "${file}" section=${section_default}
else fi
if [[ ! "${comment}" ]]; then
# if no comment given, keep old comment
comment="${current_comment}"
fi
# maintenance area
# a) remove comment if new given / respect section
sed -i.bak "/^\[${section}\]/,/^\[.*\]/ s|^\(${comment_delim}\[${key}\] \).*$||" "${file}"
# b) remove old key / respect section
sed -i.bak "/^\[${section}\]/,/^\[.*\]/ s|^\(${key}=\).*$||" "${file}"
# c) remove all empty lines in ini file
sed -i.bak '/^[[:space:]]*$/d' "${file}"
# d) insert line break before every section for better readability
sed -i.bak $'s/^\\[/\\\n\\[/g' "${file}"
# add to section # add to section
sed -i.bak -e "/\\[${section}\\]/a ${key}${delim}${val}" "${file}" if [[ ! "${comment}" ]]; then
# this .bak dance is done for BSD/GNU portability: http://stackoverflow.com/a/22084103/151666 # add new key/value _without_ comment
rm -f "${file}.bak" RET="/\\[${section}\\]/a\\
fi ${key}${delim}${val}"
else else
# replace existing # add new key/value _with_ preceeding comment
sed -i.bak -e "/^${key}${delim}/s/${delim}.*/${delim}${val}/" "${file}" RET="/\\[${section}\\]/a\\
${comment_delim}[${key}] ${comment}\\
${key}${delim}${val}"
fi
sed -i.bak -e "${RET}" "${file}"
# this .bak dance is done for BSD/GNU portability: http://stackoverflow.com/a/22084103/151666 # this .bak dance is done for BSD/GNU portability: http://stackoverflow.com/a/22084103/151666
rm -f "${file}.bak" rm -f "${file}.bak"
fi fi
fi
} }
if [[ "${BASH_SOURCE[0]}" != "${0}" ]]; then if [[ "${BASH_SOURCE[0]}" != "${0}" ]]; then

View File

@ -20,7 +20,7 @@
# #
# megamount.sh smb://janedoe:abc123@192.168.0.1/documents /mnt/documents # megamount.sh smb://janedoe:abc123@192.168.0.1/documents /mnt/documents
# #
# Based on a template by BASH3 Boilerplate v2.3.0 # Based on a template by BASH3 Boilerplate vv2.7.2
# http://bash3boilerplate.sh/#authors # http://bash3boilerplate.sh/#authors
# #
# The MIT License (MIT) # The MIT License (MIT)

View File

@ -18,7 +18,7 @@
# #
# parse_url.sh 'http://johndoe:abc123@example.com:8080/index.html' # parse_url.sh 'http://johndoe:abc123@example.com:8080/index.html'
# #
# Based on a template by BASH3 Boilerplate v2.3.0 # Based on a template by BASH3 Boilerplate vv2.7.2
# http://bash3boilerplate.sh/#authors # http://bash3boilerplate.sh/#authors
# #
# The MIT License (MIT) # The MIT License (MIT)

View File

@ -16,7 +16,7 @@
# #
# ALLOW_REMAINDERS=1 templater.sh input.cfg output.cfg # ALLOW_REMAINDERS=1 templater.sh input.cfg output.cfg
# #
# Based on a template by BASH3 Boilerplate v2.3.0 # Based on a template by BASH3 Boilerplate vv2.7.2
# http://bash3boilerplate.sh/#authors # http://bash3boilerplate.sh/#authors
# #
# The MIT License (MIT) # The MIT License (MIT)

View File

@ -209,7 +209,6 @@ while IFS=$'\n' read -r bash; do
while IFS=$'\n' read -r file; do while IFS=$'\n' read -r file; do
[[ "${file}" =~ ^\./node_modules/ ]] && continue [[ "${file}" =~ ^\./node_modules/ ]] && continue
[[ "${file}" =~ ^\./website/\.lanyon/ ]] && continue
echo -n " ${file}.. " echo -n " ${file}.. "
@ -230,65 +229,4 @@ while IFS=$'\n' read -r bash; do
fi fi
done <<< "$(which -a bash 2>/dev/null)" done <<< "$(which -a bash 2>/dev/null)"
# do some shellcheck linting
if [[ "$(command -v shellcheck)" ]]; then
echo "==> ShellCheck"
pushd "${__root}" > /dev/null
failed="false"
while IFS=$'\n' read -r file; do
[[ "${file}" =~ ^\./node_modules/ ]] && continue
[[ "${file}" =~ ^\./website/ ]] && continue
echo -n " ${file}.. "
if ! shellcheck --shell=bash --external-sources --color=always \
"${file}" >> "${__accptstTmpDir}/shellcheck.err"; then
echo "✗"
failed="true"
continue
fi
echo "✓"
done <<< "$(find . -type f -iname '*.sh')"
popd > /dev/null
if [[ "${failed}" = "true" ]]; then
cat "${__accptstTmpDir}/shellcheck.err"
exit 1
fi
fi
# poor man's style guide checking
echo "==> b3bp style guide"
pushd "${__root}" > /dev/null
failed="false"
while IFS=$'\n' read -r file; do
[[ "${file}" =~ ^\./node_modules/ ]] && continue
[[ "${file}" =~ ^\./website/\.lanyon/ ]] && continue
echo -n " ${file}.. "
if ! "${__root}/test/style.pl" "${file}" >> "${__accptstTmpDir}/style.err"; then
echo "✗"
failed="true"
continue
fi
echo "✓"
done <<< "$(find . -type f -iname '*.sh')"
popd > /dev/null
if [[ "${failed}" = "true" ]]; then
echo
cat "${__accptstTmpDir}/style.err"
echo
exit 1
fi
exit 0 exit 0

View File

@ -17,7 +17,7 @@ ACCPTST:STDIO_REPLACE_DATETIMES
{datetime} UTC [ debug] Info useful to developers for debugging the application, not useful during operations. {datetime} UTC [ debug] Info useful to developers for debugging the application, not useful during operations.
{datetime} UTC [ info] Normal operational messages - may be harvested for reporting, measuring throughput, etc. - no action required. {datetime} UTC [ info] Normal operational messages - may be harvested for reporting, measuring throughput, etc. - no action required.
{datetime} UTC [ notice] Events that are unusual but not error conditions - might be summarized in an email to developers or admins to spot potential problems - no immediate action required. {datetime} UTC [ notice] Events that are unusual but not error conditions - might be summarized in an email to developers or admins to spot potential problems - no immediate action required.
{datetime} UTC [ warning] Warning messages, not an error, but indication that an error will occur if action is not taken, e.g. file system 85% full - each item must be resolved within a given time. This is a debug message {datetime} UTC [ warning] Warning messages, not an error, but indication that an error will occur if action is not taken, e.g. file system 85% full - each item must be resolved within a given time.
{datetime} UTC [ error] Non-urgent failures, these should be relayed to developers or admins; each item must be resolved within a given time. {datetime} UTC [ error] Non-urgent failures, these should be relayed to developers or admins; each item must be resolved within a given time.
{datetime} UTC [ critical] Should be corrected immediately, but indicates failure in a primary system, an example is a loss of a backup ISP connection. {datetime} UTC [ critical] Should be corrected immediately, but indicates failure in a primary system, an example is a loss of a backup ISP connection.
{datetime} UTC [ alert] Should be corrected immediately, therefore notify staff who can fix the problem. An example would be the loss of a primary ISP connection. {datetime} UTC [ alert] Should be corrected immediately, therefore notify staff who can fix the problem. An example would be the loss of a primary ISP connection.

View File

@ -2,7 +2,10 @@
exists exists
127.0.0.1 127.0.0.1
nginx, nodejs nginx, nodejs
--> command: Replace three values in-place and show result --> command: Replace three values in-place and show result
[default]
orphan=no more orphan=no more
[connection] [connection]
@ -10,11 +13,20 @@ host = 192.168.0.1
[software] [software]
packages=vim packages=vim
[comment]
;[command] got this new comment
command=works like a chame
;[new_command] last addition will be moved downwards again after next command
new_command=commented too
--> function: Read 3 values --> function: Read 3 values
exists exists
127.0.0.1 127.0.0.1
nginx, nodejs nginx, nodejs
--> function: Replace three values in-place and show result --> function: Replace three values in-place and show result
[default]
orphan=no more orphan=no more
[connection] [connection]
@ -22,3 +34,9 @@ host = 192.168.0.1
[software] [software]
packages=vim packages=vim
[comment]
;[command] got this new comment
command=works like a chame
;[new_command] last addition will be moved downwards again after next command
new_command=commented too

View File

@ -17,7 +17,7 @@ ACCPTST:STDIO_REPLACE_DATETIMES
{datetime} UTC [ debug] Info useful to developers for debugging the application, not useful during operations. {datetime} UTC [ debug] Info useful to developers for debugging the application, not useful during operations.
{datetime} UTC [ info] Normal operational messages - may be harvested for reporting, measuring throughput, etc. - no action required. {datetime} UTC [ info] Normal operational messages - may be harvested for reporting, measuring throughput, etc. - no action required.
{datetime} UTC [ notice] Events that are unusual but not error conditions - might be summarized in an email to developers or admins to spot potential problems - no immediate action required. {datetime} UTC [ notice] Events that are unusual but not error conditions - might be summarized in an email to developers or admins to spot potential problems - no immediate action required.
{datetime} UTC [ warning] Warning messages, not an error, but indication that an error will occur if action is not taken, e.g. file system 85% full - each item must be resolved within a given time. This is a debug message {datetime} UTC [ warning] Warning messages, not an error, but indication that an error will occur if action is not taken, e.g. file system 85% full - each item must be resolved within a given time.
{datetime} UTC [ error] Non-urgent failures, these should be relayed to developers or admins; each item must be resolved within a given time. {datetime} UTC [ error] Non-urgent failures, these should be relayed to developers or admins; each item must be resolved within a given time.
{datetime} UTC [ critical] Should be corrected immediately, but indicates failure in a primary system, an example is a loss of a backup ISP connection. {datetime} UTC [ critical] Should be corrected immediately, but indicates failure in a primary system, an example is a loss of a backup ISP connection.
{datetime} UTC [ alert] Should be corrected immediately, therefore notify staff who can fix the problem. An example would be the loss of a primary ISP connection. {datetime} UTC [ alert] Should be corrected immediately, therefore notify staff who can fix the problem. An example would be the loss of a primary ISP connection.

View File

@ -17,7 +17,7 @@ ACCPTST:STDIO_REPLACE_DATETIMES
{datetime} UTC [ debug] Info useful to developers for debugging the application, not useful during operations. {datetime} UTC [ debug] Info useful to developers for debugging the application, not useful during operations.
{datetime} UTC [ info] Normal operational messages - may be harvested for reporting, measuring throughput, etc. - no action required. {datetime} UTC [ info] Normal operational messages - may be harvested for reporting, measuring throughput, etc. - no action required.
{datetime} UTC [ notice] Events that are unusual but not error conditions - might be summarized in an email to developers or admins to spot potential problems - no immediate action required. {datetime} UTC [ notice] Events that are unusual but not error conditions - might be summarized in an email to developers or admins to spot potential problems - no immediate action required.
{datetime} UTC [ warning] Warning messages, not an error, but indication that an error will occur if action is not taken, e.g. file system 85% full - each item must be resolved within a given time. This is a debug message {datetime} UTC [ warning] Warning messages, not an error, but indication that an error will occur if action is not taken, e.g. file system 85% full - each item must be resolved within a given time.
{datetime} UTC [ error] Non-urgent failures, these should be relayed to developers or admins; each item must be resolved within a given time. {datetime} UTC [ error] Non-urgent failures, these should be relayed to developers or admins; each item must be resolved within a given time.
{datetime} UTC [ critical] Should be corrected immediately, but indicates failure in a primary system, an example is a loss of a backup ISP connection. {datetime} UTC [ critical] Should be corrected immediately, but indicates failure in a primary system, an example is a loss of a backup ISP connection.
{datetime} UTC [ alert] Should be corrected immediately, therefore notify staff who can fix the problem. An example would be the loss of a primary ISP connection. {datetime} UTC [ alert] Should be corrected immediately, therefore notify staff who can fix the problem. An example would be the loss of a primary ISP connection.

View File

@ -1,3 +1,4 @@
[default]
orphan=exists orphan=exists
[connection] [connection]

10
test/scenario/ini_val/run.sh Normal file → Executable file
View File

@ -17,11 +17,16 @@ echo "--> command: Read 3 values"
bash "${__root}/src/ini_val.sh" ./dummy.ini orphan bash "${__root}/src/ini_val.sh" ./dummy.ini orphan
bash "${__root}/src/ini_val.sh" ./dummy.ini connection.host bash "${__root}/src/ini_val.sh" ./dummy.ini connection.host
bash "${__root}/src/ini_val.sh" ./dummy.ini software.packages bash "${__root}/src/ini_val.sh" ./dummy.ini software.packages
bash "${__root}/src/ini_val.sh" ./dummy.ini comment.command
echo "--> command: Replace three values in-place and show result" echo "--> command: Replace three values in-place and show result"
bash "${__root}/src/ini_val.sh" ./dummy.ini orphan "no more" bash "${__root}/src/ini_val.sh" ./dummy.ini orphan "no more"
bash "${__root}/src/ini_val.sh" ./dummy.ini connection.host "192.168.0.1" bash "${__root}/src/ini_val.sh" ./dummy.ini connection.host "192.168.0.1"
bash "${__root}/src/ini_val.sh" ./dummy.ini software.packages "vim" bash "${__root}/src/ini_val.sh" ./dummy.ini software.packages "vim"
bash "${__root}/src/ini_val.sh" ./dummy.ini comment.command "commented" "this key is commented"
bash "${__root}/src/ini_val.sh" ./dummy.ini comment.new_command "commented too" "last addition will be moved downwards again after next command"
bash "${__root}/src/ini_val.sh" ./dummy.ini comment.command "works like a chame" "got this new comment"
cat dummy.ini cat dummy.ini
rm -f dummy.ini rm -f dummy.ini
@ -35,10 +40,15 @@ echo "--> function: Read 3 values"
ini_val ./dummy.ini orphan ini_val ./dummy.ini orphan
ini_val ./dummy.ini connection.host ini_val ./dummy.ini connection.host
ini_val ./dummy.ini software.packages ini_val ./dummy.ini software.packages
ini_val ./dummy.ini comment.command
echo "--> function: Replace three values in-place and show result" echo "--> function: Replace three values in-place and show result"
ini_val ./dummy.ini orphan "no more" ini_val ./dummy.ini orphan "no more"
ini_val ./dummy.ini connection.host "192.168.0.1" ini_val ./dummy.ini connection.host "192.168.0.1"
ini_val ./dummy.ini software.packages "vim" ini_val ./dummy.ini software.packages "vim"
ini_val ./dummy.ini comment.command "commented" "this key is commited"
ini_val ./dummy.ini comment.new_command "commented too" "last addition will be moved downwards again after next command"
ini_val ./dummy.ini comment.command "works like a chame" "got this new comment"
cat dummy.ini cat dummy.ini
rm -f dummy.ini rm -f dummy.ini

View File

@ -1 +0,0 @@
{rules: {}}

View File

@ -1 +0,0 @@
bash3boilerplate.sh

View File

@ -1,4 +0,0 @@
title: BASH3 Boilerplate
plugins:
- jekyll-redirect-from

View File

@ -1,84 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
{% if page.url == "/" %}
<title>{{page.title}}</title>
{% else %}
<title>{{page.title}} | {{site.title}}</title>
{% endif %}
<meta name="keywords" content="bash, template, scripting, command-line">
<meta name="description" content="BASH3 Boilerplate">
<link href='https://fonts.googleapis.com/css?family=Open+Sans:400,300,600,700' rel='stylesheet' type='text/css'>
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
<link rel="stylesheet" href="{{site.lanyon_assets.app.css}}" media="screen" charset="utf-8">
</head>
<body>
<header>
<div id="header-overlay"></div>
<a href="/">
<span id="logo"></span>
</a>
<div id="menu">
<i class="material-icons">menu</i>
<ul id="menu-items">
</ul>
</div>
<span id="more">
<i class="material-icons">expand_more</i>
</span>
</header>
<section id="content">
{% if page.url == "/" %}
<div class="Social">
<iframe src="http://ghbtns.com/github-btn.html?user=kvz&repo=bash3boilerplate&type=watch&count=true" allowtransparency="true" frameborder="0" scrolling="0" width="100" height="20"></iframe>
<a href="https://travis-ci.org/kvz/bash3boilerplate"><img src="https://travis-ci.org/kvz/bash3boilerplate.svg" alt="Build Status"></a>
</div>
{% endif %}
{{content}}
{% if page.url == "/" %}
<h2 id="activity-feed">On GitHub</h2>
<p>
BASH3 Boilerplate is a friendly group of folks further developing our
re-usable templates as we go.
We'd love to hear what you think <a href="https://github.com/kvz/bash3boilerplate">on GitHub</a>.
Here's what's been going on recently.
</p>
<div class="on-the-githubs" data-event-source="repos/kvz/bash3boilerplate">Loading...</div>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script src="//kvz.github.io/on-the-githubs/js/jquery.on-the-githubs.min.js"></script>
<script type="text/javascript">
$('.on-the-githubs').onthegithubs();
</script>
{% endif %}
<div class="Social">
<iframe src="http://ghbtns.com/github-btn.html?user=kvz&repo=bash3boilerplate&type=watch&count=true" allowtransparency="true" frameborder="0" scrolling="0" width="100" height="20"></iframe>
</div>
<p>
<small>
<hr />
Website design based on
the wonderful <a href="http://apex.run">apex.run</a>
with <a href="https://twitter.com/tjholowaychuk/status/744909762865696769">the author's consent</a>.
</small>
</p>
</section>
</body>
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.1.0/highlight.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.1.0/languages/bash.min.js"></script>
<script async src="{{site.lanyon_assets.app.js}}"></script>
<script>
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-63083-13', 'auto');
ga('send', 'pageview');
</script>
</html>

View File

@ -1,76 +0,0 @@
#!/usr/bin/env bash
# This file:
#
# - Injects markdown files into the ./website directory
# - Changes them a little to make them more suitable for Jekyll building
#
# Usage:
#
# ./inject.sh
#
# Based on a template by BASH3 Boilerplate v2.0.0
# http://bash3boilerplate.sh/#authors
#
# The MIT License (MIT)
# Copyright (c) 2013 Kevin van Zonneveld and contributors
# You are not obligated to bundle the LICENSE file with your b3bp projects as long
# as you leave these references intact in the header comments of your source files.
# Exit on error. Append || true if you expect an error.
set -o errexit
# Exit on error inside any functions or subshells.
set -o errtrace
# Do not allow use of undefined vars. Use ${VAR:-} to use an undefined VAR
set -o nounset
# Catch the error in case mysqldump fails (but gzip succeeds) in `mysqldump |gzip`
set -o pipefail
# Turn on traces, useful while debugging but commented out by default
# set -o xtrace
# Set magic variables for current file, directory, os, etc.
__dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
__file="${__dir}/$(basename "${BASH_SOURCE[0]}")"
__base="$(basename "${__file}" .sh)"
__root="$(cd "$(dirname "$(dirname "${__dir}")")" && pwd)"
pushd "${__root}"
# Offer the main template for download as http://bash3boilerplate.sh/main.sh
cp -v main.sh website/
for doc in "README" "FAQ" "CHANGELOG"; do
targetName="$(echo "${doc}" | awk '{print tolower($0)}')"
permalink="/${targetName}/"
subtitle="$(tr '[:lower:]' '[:upper:]' <<< "${targetName:0:1}")${targetName:1} | "
redirectFrom="/${doc}.md/"
backLink='\n\n<a href="/">&laquo; Home</a>'
if [[ "${doc}" = "README" ]]; then
targetName="index"
permalink="/"
subtitle=""
redirectFrom="nothing"
backLink=""
fi
cat <<EOF > "website/${targetName}.md"
---
layout: default
permalink: ${permalink}
redirect_from: ${redirectFrom}
title: ${subtitle}BASH3 Boilerplate Template for writing better Bash scripts
warning: This page is generated by ${__base}.sh based on ${doc}.md, please don't edit ${targetName}.md directly.
---
EOF
# If '<!--more-->' exists, only inject what comes after it, so you can have e.g. a ToC or buildbuttons
# on GitHub, without that also rendering in the site (site may have its own ToC rendering for instance)
if grep '<!--more-->' "${doc}.md"; then
sed -n -e '/<!--more-->/,$p' "${doc}.md" | tail -n +2 >> "website/${targetName}.md"
else
cat "${doc}.md" >> "website/${targetName}.md"
fi
# Add a "<- Back Home" link, if any
echo -e "${backLink}" >> "website/${targetName}.md"
echo "--> written website/${targetName}.md"
done
popd

View File

@ -1,13 +0,0 @@
require('./main.js')
require('./style.css')
require('./syntax.css')
// check if HMR is enabled
if (module.hot) {
module.hot.accept('./main.js', function () {
require('./main.js');
});
module.hot.accept('./style.css', function () {
require('./style.css');
});
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 563 KiB

File diff suppressed because one or more lines are too long

Binary file not shown.

Before

Width:  |  Height:  |  Size: 349 KiB

File diff suppressed because one or more lines are too long

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 543 KiB

File diff suppressed because one or more lines are too long

Binary file not shown.

Before

Width:  |  Height:  |  Size: 345 KiB

File diff suppressed because one or more lines are too long

View File

@ -1,55 +0,0 @@
// Backgrounds.
// var backgrounds = [1,2,3,4,5,6]
var backgrounds = [1]
// Highlighting.
hljs.initHighlighting()
// Storage.
var store = window.sessionStorage
// Background.
var background = store.getItem('background')
if (!background) {
var i = Math.random() * backgrounds.length | 0
background = backgrounds[i]
console.log('setting background to %s', background)
store.setItem('background', background)
}
// Body class for background.
var el = document.getElementById('header-overlay')
el.style.backgroundImage = 'url(/assets/images/' + background + '.jpg)'
// Attach class to #menu element depending on page offset.
document.addEventListener('DOMContentLoaded', chooseMenuColor)
window.onscroll = chooseMenuColor
function chooseMenuColor() {
var menuElement = document.getElementById('menu')
var menuTopOffset = 45
Math.floor(window.innerHeight * .20) < window.pageYOffset + menuTopOffset ?
menuElement.classList.remove('over-header') :
menuElement.classList.add('over-header')
}
function $get(selector) { return document.querySelector(selector) }
function $all(selector) {
return Array.prototype.slice.call(document.querySelectorAll(selector))
}
var container = $get('#menu-items')
// if (location.pathname !== '/') {
// var li = document.createElement('li');
// li.innerHTML = '<a href="/">&laquo; Home</a>';
// container.appendChild(li);
// }
$all('#content h2').forEach(function(el) {
var li = document.createElement('li');
li.innerHTML = '<a href="#' + el.id + '">' + el.innerHTML + '</a>';
container.appendChild(li);
})

View File

@ -1,345 +0,0 @@
body {
font: 16px/1.625 "Open Sans", "Helvetica Neue", "Helvetica", Arial, sans-serif;
-webkit-font-smoothing: antialiased;
text-rendering: optimizeLegibility;
color: #656a71;
margin: 0;
}
#header-overlay {
background: #131313 50% 100% no-repeat;
background-size: cover;
height: 20vh;
width: 100%;
opacity: 0;
-webkit-animation-name: overlay;
animation-name: overlay;
-webkit-animation-duration: 5s;
animation-duration: 5s;
-webkit-animation-delay: 1s;
animation-delay: 1s;
-webkit-animation-fill-mode: forwards;
animation-fill-mode: forwards;
}
@-webkit-keyframes overlay {
0% {
opacity: 0;
}
100% {
opacity: .25;
}
}
@keyframes overlay {
0% {
opacity: 0;
}
100% {
opacity: .25;
}
}
body.background-1 #header-overlay {
background-image: url(images/1.jpg);
}
body.background-4 #header-overlay {
background-image: url(images/1.jpg);
}
#logo {
display: block;
background: url(images/b3bp-logo.png) center;
background-repeat: no-repeat;
background-size: contain;
width: 180px;
height: 120px;
position: absolute;
top: 50%;
left: 50%;
margin-left: -100px;
margin-top: -60px;
-webkit-animation-name: logo;
animation-name: logo;
-webkit-animation-duration: 2s;
animation-duration: 2s;
-webkit-animation-fill-mode: forwards;
animation-fill-mode: forwards;
}
@-webkit-keyframes logo {
0% {
opacity: 0;
}
100% {
opacity: 1;
}
}
@keyframes logo {
0% {
opacity: 0;
}
100% {
opacity: 1;
}
}
#more {
position: absolute;
bottom: 10px;
left: 50%;
margin-left: -6px;
color: white;
opacity: 0;
-webkit-animation-name: move;
animation-name: move;
-webkit-animation-duration: 3s;
animation-duration: 3s;
-webkit-animation-delay: 3s;
animation-delay: 3s;
-webkit-animation-fill-mode: forwards;
animation-fill-mode: forwards;
-webkit-animation-timing-function: cubic-bezier(0.86, 0, 0.07, 1);
animation-timing-function: cubic-bezier(0.86, 0, 0.07, 1);
}
@-webkit-keyframes move {
0% {
opacity: 0;
bottom: 300px;
}
50% {
opacity: 1;
bottom: 10px;
}
90% {
opacity: 1;
bottom: 10px;
}
100% {
opacity: 0;
bottom: -10px;
}
}
@keyframes move {
0% {
opacity: 0;
bottom: 300px;
}
50% {
opacity: 1;
bottom: 10px;
}
90% {
opacity: 1;
bottom: 10px;
}
100% {
opacity: 0;
bottom: -10px;
}
}
#content {
padding: 100px 0;
max-width: 650px;
margin: 0 auto;
}
#menu {
position: fixed;
top: 35px;
right: 35px;
cursor: pointer;
background: transparent;
color: black;
padding: 7px;
border-radius: 1px;
line-height: 0;
}
#menu.over-header {
color: white;
}
#menu i {
font-size: 19px;
}
#menu:hover #menu-items {
opacity: 1;
visibility: visible;
}
#menu-items {
line-height: 1.7;
opacity: 0;
position: fixed;
visibility: hidden;
margin: 0;
padding: 20px;
font-size: 12px;
background: white;
color: #121212;
top: 67px;
right: 35px;
border-radius: 1px;
text-align: right;
}
#menu-items li a:hover {
text-decoration: underline;
}
#menu-items li {
list-style: none;
}
#menu-items li a {
color: #4C4C4C;
}
h1, h2, h3, h4 {
font-weight: 600;
margin-bottom: 0px;
color: #3b444f;
}
h1 { font-size: 2em; /* 2*16 = 32 */ }
h2 { font-size: 1.5em; /* 1.5*16 = 24 */ }
h3 { font-size: 1.17em; /* 1.17*16 = 18.72 */ }
h4 { font-size: 1em; /* 1*16 = 16 */ }
h5 { font-size: 0.83em; /* 0.83*16 = 13.28 */ }
h6 { font-size: 0.75em; /* 0.75*16 = 12 */ }
h1 {
/*margin-top: 75px;*/
}
h1::before {
/*display: block;
content: ' ';
border-top: 1px dotted #eee;
width: 35%;
margin: 0 auto 75px auto;*/
}
h2 {
margin-top: 50px;
}
h3 {
margin-top: 30px;
}
p > code,
li > code {
border: 1px solid #eee;
padding: 2px 10px;
border-radius: 3px;
font-size: .75rem;
color: #555;
white-space: nowrap;
}
header {
background: #131313;
position: relative;
}
a {
text-decoration: none;
color: #55A1E1;
}
a:hover {
text-decoration: underline;
}
hr {
margin: 1px;
border: none;
height: 1px;
/* Set the hr color */
color: gainsboro; /* old IE */
background-color: gainsboro; /* Modern Browsers */
}
.Social {
margin: 0 auto;
text-align: center;
}
.Social > * {
display: inline;
margin: 0;
padding: 0;
}
.on-the-githubs {
-webkit-margin-before: 1em;
-webkit-margin-after: 1em;
}
.on-the-githubs:after {
content: '';
display: table;
clear: both;
}
.on-the-githubs > li {
list-style-type: none;
margin: 0;
padding: 0;
/*height: 26px;*/
position: relative;
border-bottom: 1px solid rgba(gainsboro, 0.3);
margin-bottom: 10px;
}
.on-the-githubs > li:after {
content: '';
display: table;
clear: both;
}
.on-the-githubs > li p {
font-size: 15px;
line-height: 16px;
margin: 0 2px;
padding: 0;
display: inline-block;
float: left;
overflow: hidden;
max-width: 80%;
}
.on-the-githubs > li abbr {
font-size: 12px;
line-height: 16px;
position: absolute;
right: 0;
float: left;
text-align: right;
/*display: none*/
}
.on-the-githubs > li a {
font-weight: normal;
/*text-decoration: underline;*/
}
.on-the-githubs > li img {
float: left;
margin: 0 2px 0 0;
border-radius: 10px;
width: 18px;
height: 18px;
}

View File

@ -1,104 +0,0 @@
pre {
border-top-color: #ddd;
border-radius: 3px;
font-size: .75rem;
overflow-x: auto;
line-height: 1.3;
padding: 1.5rem;
background: #fff;
color: #333;
overflow-x: auto;
border: 1px solid #eee;
border-bottom-color: #ddd;
}
/*
XCode style (c) Angel Garcia <angelgarcia.mail@gmail.com>
*/
.hljs {
display: block;
}
.hljs-comment,
.hljs-quote {
color: #006a00;
}
.hljs-keyword,
.hljs-selector-tag,
.hljs-literal {
color: #aa0d91;
}
.hljs-name {
color: #008;
}
.hljs-variable,
.hljs-template-variable {
color: #660;
}
.hljs-string {
color: #c41a16;
}
.hljs-regexp,
.hljs-link {
color: #080;
}
.hljs-title,
.hljs-tag,
.hljs-symbol,
.hljs-bullet,
.hljs-number,
.hljs-meta {
color: #1c00cf;
}
.hljs-section,
.hljs-class .hljs-title,
.hljs-type,
.hljs-attr,
.hljs-built_in,
.hljs-builtin-name,
.hljs-params {
color: #5c2699;
}
.hljs-attribute,
.hljs-subst {
color: #000;
}
.hljs-formula {
background-color: #eee;
font-style: italic;
}
.hljs-addition {
background-color: #baeeba;
}
.hljs-deletion {
background-color: #ffc8bd;
}
.hljs-selector-id,
.hljs-selector-class {
color: #9b703f;
}
.hljs-doctag,
.hljs-strong {
font-weight: bold;
}
.hljs-emphasis {
font-style: italic;
}

11868
yarn.lock

File diff suppressed because it is too large Load Diff