Compare commits

..

109 Commits

Author SHA1 Message Date
8b97d38737 更新 Dockerfile
Some checks failed
CI / unit-tests (push) Has been cancelled
CI / unit-tests-0.19.0 (push) Has been cancelled
2025-10-17 00:39:50 +08:00
flowshadow
4064f848db 修改镜像地址
Some checks failed
CI / unit-tests (push) Has been cancelled
CI / unit-tests-0.19.0 (push) Has been cancelled
2025-10-17 00:13:36 +08:00
Jose Diaz-Gonzalez
304453ca47 Merge pull request #200 from dokku/dependabot/github_actions/softprops/action-gh-release-2.4.1
Some checks failed
CI / unit-tests (push) Has been cancelled
CI / unit-tests-0.19.0 (push) Has been cancelled
chore(deps): bump softprops/action-gh-release from 2.4.0 to 2.4.1
2025-10-13 00:03:48 -04:00
dependabot[bot]
7fc12d7d5a chore(deps): bump softprops/action-gh-release from 2.4.0 to 2.4.1
Bumps [softprops/action-gh-release](https://github.com/softprops/action-gh-release) from 2.4.0 to 2.4.1.
- [Release notes](https://github.com/softprops/action-gh-release/releases)
- [Changelog](https://github.com/softprops/action-gh-release/blob/master/CHANGELOG.md)
- [Commits](https://github.com/softprops/action-gh-release/compare/v2.4.0...v2.4.1)

---
updated-dependencies:
- dependency-name: softprops/action-gh-release
  dependency-version: 2.4.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-10-13 03:08:36 +00:00
Jose Diaz-Gonzalez
256a5d5050 Merge pull request #199 from dokku/dependabot/github_actions/softprops/action-gh-release-2.4.0
chore(deps): bump softprops/action-gh-release from 2.3.3 to 2.4.0
2025-10-07 13:57:24 -04:00
dependabot[bot]
9753eae0f3 chore(deps): bump softprops/action-gh-release from 2.3.3 to 2.4.0
Bumps [softprops/action-gh-release](https://github.com/softprops/action-gh-release) from 2.3.3 to 2.4.0.
- [Release notes](https://github.com/softprops/action-gh-release/releases)
- [Changelog](https://github.com/softprops/action-gh-release/blob/master/CHANGELOG.md)
- [Commits](https://github.com/softprops/action-gh-release/compare/v2.3.3...v2.4.0)

---
updated-dependencies:
- dependency-name: softprops/action-gh-release
  dependency-version: 2.4.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-10-07 03:06:17 +00:00
Jose Diaz-Gonzalez
98508d0959 Merge pull request #197 from dokku/dependabot/github_actions/softprops/action-gh-release-2.3.3
chore(deps): bump softprops/action-gh-release from 2.3.2 to 2.3.3
2025-09-07 23:35:04 -04:00
dependabot[bot]
f1b9179d38 chore(deps): bump softprops/action-gh-release from 2.3.2 to 2.3.3
Bumps [softprops/action-gh-release](https://github.com/softprops/action-gh-release) from 2.3.2 to 2.3.3.
- [Release notes](https://github.com/softprops/action-gh-release/releases)
- [Changelog](https://github.com/softprops/action-gh-release/blob/master/CHANGELOG.md)
- [Commits](https://github.com/softprops/action-gh-release/compare/v2.3.2...v2.3.3)

---
updated-dependencies:
- dependency-name: softprops/action-gh-release
  dependency-version: 2.3.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-09-08 03:05:19 +00:00
Jose Diaz-Gonzalez
2edcb132eb Merge pull request #196 from dokku/dependabot/github_actions/actions/setup-python-6
chore(deps): bump actions/setup-python from 5 to 6
2025-09-05 01:05:19 -04:00
dependabot[bot]
44effbc91f chore(deps): bump actions/setup-python from 5 to 6
Bumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.
- [Release notes](https://github.com/actions/setup-python/releases)
- [Commits](https://github.com/actions/setup-python/compare/v5...v6)

---
updated-dependencies:
- dependency-name: actions/setup-python
  dependency-version: '6'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-09-05 03:05:13 +00:00
Jose Diaz-Gonzalez
990abb08c8 Merge pull request #195 from dokku/dependabot/github_actions/actions/checkout-5
chore(deps): bump actions/checkout from 4 to 5
2025-08-12 11:38:21 -04:00
dependabot[bot]
df49bd6f0d chore(deps): bump actions/checkout from 4 to 5
Bumps [actions/checkout](https://github.com/actions/checkout) from 4 to 5.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v4...v5)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-version: '5'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-08-12 13:43:34 +00:00
Jose Diaz-Gonzalez
1ad912c399 Release 1.42.2
Some checks failed
tagged-release / tagged-release (push) Has been cancelled
2025-07-25 04:44:42 -04:00
Jose Diaz-Gonzalez
131872352e Merge pull request #194 from dokku/dependabot/docker/mysql-9.4.0
chore(deps): bump mysql from 9.3.0 to 9.4.0
2025-07-25 04:44:36 -04:00
dependabot[bot]
c111bd7be1 chore(deps): bump mysql from 9.3.0 to 9.4.0
Bumps mysql from 9.3.0 to 9.4.0.

---
updated-dependencies:
- dependency-name: mysql
  dependency-version: 9.4.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-07-23 03:51:16 +00:00
Jose Diaz-Gonzalez
6a51c6bb1b Merge pull request #193 from dokku/dependabot/github_actions/softprops/action-gh-release-2.3.2
chore(deps): bump softprops/action-gh-release from 2.2.2 to 2.3.2
2025-06-10 23:58:28 -04:00
dependabot[bot]
8796348928 chore(deps): bump softprops/action-gh-release from 2.2.2 to 2.3.2
Bumps [softprops/action-gh-release](https://github.com/softprops/action-gh-release) from 2.2.2 to 2.3.2.
- [Release notes](https://github.com/softprops/action-gh-release/releases)
- [Changelog](https://github.com/softprops/action-gh-release/blob/master/CHANGELOG.md)
- [Commits](https://github.com/softprops/action-gh-release/compare/v2.2.2...v2.3.2)

---
updated-dependencies:
- dependency-name: softprops/action-gh-release
  dependency-version: 2.3.2
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-06-11 03:07:20 +00:00
Jose Diaz-Gonzalez
033b19d680 Release 1.42.1
Some checks failed
tagged-release / tagged-release (push) Has been cancelled
2025-04-28 23:56:48 -04:00
Jose Diaz-Gonzalez
41cd62c666 Merge pull request #191 from dokku/fix-typo
docs: fix typo in generated docs
2025-04-28 23:42:27 -04:00
Jose Diaz-Gonzalez
b75ec6fb8f docs: regenerate readme 2025-04-28 23:41:15 -04:00
Jose Diaz-Gonzalez
03415b6f45 Merge pull request #190 from dokku/dependabot/github_actions/softprops/action-gh-release-2.2.2
chore(deps): bump softprops/action-gh-release from 2.2.1 to 2.2.2
2025-04-28 23:28:47 -04:00
Jose Diaz-Gonzalez
2f47264ee3 docs: correct typo in generated readme 2025-04-28 23:07:49 -04:00
dependabot[bot]
c9433c7cd8 chore(deps): bump softprops/action-gh-release from 2.2.1 to 2.2.2
Bumps [softprops/action-gh-release](https://github.com/softprops/action-gh-release) from 2.2.1 to 2.2.2.
- [Release notes](https://github.com/softprops/action-gh-release/releases)
- [Changelog](https://github.com/softprops/action-gh-release/blob/master/CHANGELOG.md)
- [Commits](https://github.com/softprops/action-gh-release/compare/v2.2.1...v2.2.2)

---
updated-dependencies:
- dependency-name: softprops/action-gh-release
  dependency-version: 2.2.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-04-21 04:03:13 +00:00
Jose Diaz-Gonzalez
963b43c8b3 Merge pull request #189 from dokku/update-workflows
chore: bump runs-on image from ubuntu-22.04 to ubuntu-24.04
2025-04-17 21:11:09 -04:00
Jose Diaz-Gonzalez
cdd8a6c731 fix: use maintained version of python 2025-04-17 20:46:19 -04:00
Jose Diaz-Gonzalez
4825d92487 chore: bump runs-on image from ubuntu-22.04 to ubuntu-24.04 2025-04-17 20:43:55 -04:00
Jose Diaz-Gonzalez
3079587e0b Release 1.42.0
Some checks failed
tagged-release / tagged-release (push) Has been cancelled
2025-04-15 04:00:07 -04:00
Jose Diaz-Gonzalez
dfe372bbbd Merge pull request #188 from dokku/dependabot/docker/mysql-9.3.0
chore(deps): bump mysql from 9.2.0 to 9.3.0
2025-04-15 03:57:15 -04:00
dependabot[bot]
d04dc75c81 chore(deps): bump mysql from 9.2.0 to 9.3.0
Bumps mysql from 9.2.0 to 9.3.0.

---
updated-dependencies:
- dependency-name: mysql
  dependency-version: 9.3.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-04-15 03:37:50 +00:00
Jose Diaz-Gonzalez
42dc05c473 Merge pull request #186 from dokku/maintained-action
ci: use maintained action for creating automated releases
2025-03-13 18:51:02 -05:00
Jose Diaz-Gonzalez
658ed34b64 ci: use maintained action for creating automated releases 2025-03-13 19:46:50 -04:00
Jose Diaz-Gonzalez
900d772398 Release 1.41.2
Some checks failed
tagged-release / tagged-release (push) Has been cancelled
2025-03-09 07:11:56 -04:00
Jose Diaz-Gonzalez
ea120dd613 Merge pull request #185 from dokku/7470-name-argument
docs: ensure --name flag is used in installation docs
2025-03-09 06:05:33 -05:00
Jose Diaz-Gonzalez
7d59d4ee36 docs: ensure --name flag is used in installation docs
Closes dokku/dokku#7470
2025-03-09 07:03:59 -04:00
Jose Diaz-Gonzalez
4ddf27d340 Release 1.41.1
Some checks failed
tagged-release / tagged-release (push) Has been cancelled
2025-02-02 00:29:21 -05:00
Jose Diaz-Gonzalez
6a75d5d509 Merge pull request #184 from dokku/dependabot/docker/mysql-9.2.0
chore(deps): bump mysql from 9.1.0 to 9.2.0
2025-02-01 23:29:07 -06:00
dependabot[bot]
31f737bb09 chore(deps): bump mysql from 9.1.0 to 9.2.0
Bumps mysql from 9.1.0 to 9.2.0.

---
updated-dependencies:
- dependency-name: mysql
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-23 03:22:53 +00:00
Jose Diaz-Gonzalez
d8c4d28fb0 Release 1.41.0
Some checks failed
tagged-release / tagged-release (push) Has been cancelled
2024-11-24 22:19:00 -05:00
Jose Diaz-Gonzalez
5c59f5adc1 Merge pull request #183 from dokku/use-gpg-public-key-encryption
feat: implement GPG Public Key encryption support
2024-11-24 21:05:15 -05:00
Jose Diaz-Gonzalez
c212d68183 feat: implement GPG Public Key encryption support 2024-11-24 20:21:59 -05:00
Jose Diaz-Gonzalez
3f5db87844 Merge pull request #181 from dokku/dependabot/docker/mysql-9.1.0
chore(deps): bump mysql from 9.0.1 to 9.1.0
2024-11-24 19:58:32 -05:00
Jose Diaz-Gonzalez
9e13103e04 Merge pull request #182 from dokku/enable-image-overrides
feat: enable env overrides for support images and update all to latest
2024-11-24 19:58:23 -05:00
Jose Diaz-Gonzalez
1896d0d3a4 feat: enable env overrides for support images and update all to latest 2024-11-24 19:15:23 -05:00
dependabot[bot]
b9349d3ae1 chore(deps): bump mysql from 9.0.1 to 9.1.0
Bumps mysql from 9.0.1 to 9.1.0.

---
updated-dependencies:
- dependency-name: mysql
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-16 03:22:43 +00:00
Jose Diaz-Gonzalez
e702e01092 Release 1.40.1
Some checks failed
tagged-release / tagged-release (push) Has been cancelled
2024-07-29 04:43:45 -04:00
Jose Diaz-Gonzalez
84ef0a54f6 Merge pull request #180 from dokku/dependabot/docker/mysql-9.0.1
chore(deps): bump mysql from 9.0.0 to 9.0.1
2024-07-29 04:43:27 -04:00
dependabot[bot]
5820f74282 chore(deps): bump mysql from 9.0.0 to 9.0.1
Bumps mysql from 9.0.0 to 9.0.1.

---
updated-dependencies:
- dependency-name: mysql
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-07-24 03:45:43 +00:00
Jose Diaz-Gonzalez
d04320b814 Release 1.40.0
Some checks failed
tagged-release / tagged-release (push) Has been cancelled
2024-07-07 23:02:50 -04:00
Jose Diaz-Gonzalez
840fc1fbc5 Merge pull request #179 from dokku/dependabot/docker/mysql-9.0.0
chore(deps): bump mysql from 8.4.0 to 9.0.0
2024-07-07 23:02:37 -04:00
dependabot[bot]
1c1b8e50b4 chore(deps): bump mysql from 8.4.0 to 9.0.0
Bumps mysql from 8.4.0 to 9.0.0.

---
updated-dependencies:
- dependency-name: mysql
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-07-03 03:28:53 +00:00
Jose Diaz-Gonzalez
5ef90f7c10 Release 1.39.0
Some checks failed
tagged-release / tagged-release (push) Has been cancelled
2024-06-30 13:47:18 -04:00
Jose Diaz-Gonzalez
a85e451f6d Merge pull request #175 from dokku/dependabot/docker/mysql-8.4.0
chore(deps): bump mysql from 8.3.0 to 8.4.0
2024-06-30 13:47:09 -04:00
dependabot[bot]
00eef2f230 chore(deps): bump mysql from 8.3.0 to 8.4.0
Bumps mysql from 8.3.0 to 8.4.0.

---
updated-dependencies:
- dependency-name: mysql
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-06-29 07:51:51 +00:00
Jose Diaz-Gonzalez
e997179643 Merge pull request #178 from dokku/exclude-SC1091
tests: exclude SC1091 from shellcheck rules
2024-06-29 03:48:44 -04:00
Jose Diaz-Gonzalez
ef6a5ed7d1 tests: exclude SC1091 from shellcheck rules 2024-06-29 03:44:56 -04:00
Jose Diaz-Gonzalez
05f594e9ba Merge pull request #177 from dokku/fix-tests
fix: use .DNSNames instead of .Aliases in tests
2024-06-29 03:41:00 -04:00
Jose Diaz-Gonzalez
4bc23d7556 fix: use .DNSNames instead of .Aliases in tests
Docker has changed their output in an unclear manner, but this is the correct way to check for what dns records are available for usage by apps.
2024-06-29 03:25:41 -04:00
Jose Diaz-Gonzalez
579964b63d Release 1.38.1
Some checks failed
tagged-release / tagged-release (push) Has been cancelled
2024-01-29 10:10:02 -05:00
Jose Diaz-Gonzalez
78ecc3b10d fix: use correct repository on arm64 ubuntu image 2024-01-29 10:09:17 -05:00
Jose Diaz-Gonzalez
1b0cd97539 Release 1.38.0
Some checks failed
tagged-release / tagged-release (push) Has been cancelled
2024-01-29 08:34:56 -05:00
Jose Diaz-Gonzalez
3305de6dbd Merge pull request #174 from dokku/dependabot/docker/mysql-8.3.0
chore(deps): bump mysql from 8.2.0 to 8.3.0
2024-01-29 08:34:42 -05:00
dependabot[bot]
1f4d7ceeb2 chore(deps): bump mysql from 8.2.0 to 8.3.0
Bumps mysql from 8.2.0 to 8.3.0.

---
updated-dependencies:
- dependency-name: mysql
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-01-22 03:43:24 +00:00
Jose Diaz-Gonzalez
9f0d37450b Merge pull request #173 from dokku/dependabot/github_actions/actions/upload-artifact-4
chore(deps): bump actions/upload-artifact from 3 to 4
2023-12-19 00:25:02 -05:00
dependabot[bot]
99a5d1c2e8 chore(deps): bump actions/upload-artifact from 3 to 4
Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 3 to 4.
- [Release notes](https://github.com/actions/upload-artifact/releases)
- [Commits](https://github.com/actions/upload-artifact/compare/v3...v4)

---
updated-dependencies:
- dependency-name: actions/upload-artifact
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-12-15 03:58:44 +00:00
Jose Diaz-Gonzalez
a181ee805e Release 1.37.1
Some checks failed
tagged-release / tagged-release (push) Has been cancelled
2023-12-09 23:56:07 -05:00
Jose Diaz-Gonzalez
709072c25e docs: update docs and generation script 2023-12-09 23:55:46 -05:00
Jose Diaz-Gonzalez
f2d6006d58 chore: fix typo 2023-12-09 13:51:12 -05:00
Jose Diaz-Gonzalez
63a51d0d31 chore: fix typo 2023-12-09 13:48:37 -05:00
Jose Diaz-Gonzalez
f59ba77174 Release 1.37.0
Some checks failed
tagged-release / tagged-release (push) Has been cancelled
2023-12-09 13:46:42 -05:00
Jose Diaz-Gonzalez
60a5f2012e Merge pull request #171 from dokku/dependabot/docker/mysql-8.2.0
chore(deps): bump mysql from 8.1.0 to 8.2.0
2023-12-09 13:46:26 -05:00
Jose Diaz-Gonzalez
b92439331e Merge pull request #172 from dokku/dependabot/github_actions/actions/setup-python-5
chore(deps): bump actions/setup-python from 4 to 5
2023-12-09 13:46:18 -05:00
dependabot[bot]
b7193d5b3e chore(deps): bump actions/setup-python from 4 to 5
Bumps [actions/setup-python](https://github.com/actions/setup-python) from 4 to 5.
- [Release notes](https://github.com/actions/setup-python/releases)
- [Commits](https://github.com/actions/setup-python/compare/v4...v5)

---
updated-dependencies:
- dependency-name: actions/setup-python
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-12-07 03:26:19 +00:00
dependabot[bot]
c77475be54 chore(deps): bump mysql from 8.1.0 to 8.2.0
Bumps mysql from 8.1.0 to 8.2.0.

---
updated-dependencies:
- dependency-name: mysql
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-30 03:28:04 +00:00
Jose Diaz-Gonzalez
b7e16d9325 Release 1.36.0
Some checks failed
tagged-release / tagged-release (push) Has been cancelled
2023-09-09 22:39:50 -04:00
Jose Diaz-Gonzalez
d9cd2649c6 Merge pull request #169 from dokku/dependabot/github_actions/actions/checkout-4
chore(deps): bump actions/checkout from 3 to 4
2023-09-07 00:11:47 -04:00
dependabot[bot]
a36b5f001f chore(deps): bump actions/checkout from 3 to 4
Bumps [actions/checkout](https://github.com/actions/checkout) from 3 to 4.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v3...v4)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-09-07 03:24:25 +00:00
Jose Diaz-Gonzalez
c505c47ef3 Merge pull request #170 from dokku/newer-ubuntu
feat: upgrade test suite from ubuntu 20.04 to 22.04
2023-09-06 23:24:04 -04:00
Jose Diaz-Gonzalez
2b497ed8b9 feat: upgrade test suite from ubuntu 20.04 to 22.04 2023-09-06 22:37:21 -04:00
Jose Diaz-Gonzalez
b778beae85 Release 1.35.0
Some checks failed
tagged-release / tagged-release (push) Has been cancelled
2023-08-05 23:23:42 -04:00
Jose Diaz-Gonzalez
d0c625e255 Merge pull request #168 from dokku/dependabot/docker/mysql-8.1.0
chore(deps): bump mysql from 8.0.34 to 8.1.0
2023-08-05 23:23:25 -04:00
dependabot[bot]
53ccb6ccd1 chore(deps): bump mysql from 8.0.34 to 8.1.0
Bumps mysql from 8.0.34 to 8.1.0.

---
updated-dependencies:
- dependency-name: mysql
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-08-03 03:05:04 +00:00
Jose Diaz-Gonzalez
31e89cad7d Release 1.34.1
Some checks failed
tagged-release / tagged-release (push) Has been cancelled
2023-07-30 16:09:41 -04:00
Jose Diaz-Gonzalez
8a33b6b7bc Merge pull request #167 from dokku/dependabot/docker/mysql-8.0.34
chore(deps): bump mysql from 8.0.33 to 8.0.34
2023-07-30 16:09:34 -04:00
dependabot[bot]
5f05e12f40 chore(deps): bump mysql from 8.0.33 to 8.0.34
Bumps mysql from 8.0.33 to 8.0.34.

---
updated-dependencies:
- dependency-name: mysql
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-07-25 03:57:05 +00:00
Jose Diaz-Gonzalez
0cd46e0572 Release 1.34.0
Some checks failed
tagged-release / tagged-release (push) Has been cancelled
2023-05-28 00:59:57 -04:00
Jose Diaz-Gonzalez
9e3761bc11 Release 1.32.2
Some checks failed
tagged-release / tagged-release (push) Has been cancelled
2023-04-27 22:01:29 -04:00
josegonzalez
834345bfef Merge pull request #166 from dokku/dependabot/docker/mysql-8.0.33
chore(deps): bump mysql from 8.0.32 to 8.0.33
2023-04-27 22:01:15 -04:00
dependabot[bot]
3a076b7142 chore(deps): bump mysql from 8.0.32 to 8.0.33
Bumps mysql from 8.0.32 to 8.0.33.

---
updated-dependencies:
- dependency-name: mysql
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-04-18 03:57:07 +00:00
Jose Diaz-Gonzalez
52773ace68 Release 1.32.1
Some checks failed
tagged-release / tagged-release (push) Has been cancelled
2023-03-05 05:23:02 -05:00
josegonzalez
8a08396a71 Merge pull request #152 from dokku/dependabot/docker/mysql-8.0.32
chore(deps): bump mysql from 8.0.31 to 8.0.32
2023-03-05 05:21:42 -05:00
josegonzalez
9354d90156 refactor: use root credentials to create database dump
This fixes an issue introduced in mysql 8.0.32 where we now need RELOAD and PROCESS to make a dump. Since we already import via root, exporting via root should be fine as well.
2023-03-05 04:46:02 -05:00
Jose Diaz-Gonzalez
57261263af Release 1.32.0
Some checks failed
tagged-release / tagged-release (push) Has been cancelled
2023-02-25 22:13:11 -05:00
josegonzalez
9ade1d6a93 Merge pull request #165 from dokku/error-when-link-exists
Show an error when an ambassador container already exists but we don't have expose configuration
2023-02-25 22:11:34 -05:00
Jose Diaz-Gonzalez
9dbbc876cf fix: show an error when an ambassador container already exists but we don't have expose configuration
Closes dokku/dokku-redis#200
2023-02-25 20:10:37 -05:00
Jose Diaz-Gonzalez
bb8936eddb Release 1.31.0
Some checks failed
tagged-release / tagged-release (push) Has been cancelled
2023-02-25 02:23:19 -05:00
josegonzalez
59639ab246 Merge pull request #163 from dokku/no-restart-link
Add ability to skip restarts on link and unlink
2023-02-25 02:13:08 -05:00
Jose Diaz-Gonzalez
e8d16b8e5d fix: update link docs to remove erroneous copy-paste 2023-02-25 01:50:30 -05:00
Jose Diaz-Gonzalez
14997a2a45 tests: link service before unlinking 2023-02-25 00:47:25 -05:00
Jose Diaz-Gonzalez
d36e828e99 chore: remove extra newline 2023-02-21 00:49:17 -05:00
Jose Diaz-Gonzalez
e5cc090faa fix: update tests to properly handle case where app is not running 2023-02-21 00:48:22 -05:00
Jose Diaz-Gonzalez
09f4c89712 fix: move arg-less flags to the front 2023-02-21 00:29:30 -05:00
Jose Diaz-Gonzalez
303d1bc1a0 tests: add output/status and flesh out restart tests a bit more 2023-02-21 00:08:53 -05:00
Jose Diaz-Gonzalez
6bf57ef184 tests: add test for --no-restart to link tests 2023-02-20 23:51:27 -05:00
Jose Diaz-Gonzalez
ff570fb808 tests: add test for --no-restart to unlink tests 2023-02-20 23:47:03 -05:00
Jose Diaz-Gonzalez
d1475dba0d chore: make all the service names used in the service_unlink tests the same 2023-02-20 23:40:09 -05:00
Jose Diaz-Gonzalez
09c94e20f8 chore: make all the service names used in the service_link tests the same 2023-02-20 23:35:12 -05:00
Jose Diaz-Gonzalez
e163e18150 feat: add ability to skip restarts on link and unlink
Refs dokku/dokku-redis#192
2023-02-20 23:26:44 -05:00
josegonzalez
fce19e6116 docs: update version in readme 2023-02-07 07:42:20 -05:00
dependabot[bot]
56bd3fa123 chore(deps): bump mysql from 8.0.31 to 8.0.32
Bumps mysql from 8.0.31 to 8.0.32.

---
updated-dependencies:
- dependency-name: mysql
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-02-07 12:29:05 +00:00
24 changed files with 541 additions and 199 deletions

View File

@@ -5,7 +5,7 @@ name: CI
on:
pull_request:
branches:
- '*'
- "*"
push:
branches:
- master
@@ -17,18 +17,18 @@ concurrency:
jobs:
unit-tests-master:
name: unit-tests
runs-on: ubuntu-20.04
runs-on: ubuntu-24.04
env:
DOKKU_VERSION: master
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v5
with:
fetch-depth: 0
- uses: actions/setup-python@v4
- uses: actions/setup-python@v6
with:
python-version: '3.7.x'
python-version: "3.13"
- run: make setup
@@ -51,7 +51,7 @@ jobs:
- run: make test
- uses: actions/upload-artifact@v3
- uses: actions/upload-artifact@v4
if: failure()
with:
name: tmp/test-results
@@ -59,18 +59,18 @@ jobs:
unit-tests-0_19_0:
name: unit-tests-0.19.0
runs-on: ubuntu-20.04
runs-on: ubuntu-24.04
env:
DOKKU_TAG: v0.19.0
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v5
with:
fetch-depth: 0
- uses: actions/setup-python@v4
- uses: actions/setup-python@v6
with:
python-version: '3.7.x'
python-version: "3.13"
- run: make setup
@@ -93,7 +93,7 @@ jobs:
- run: make test
- uses: actions/upload-artifact@v3
- uses: actions/upload-artifact@v4
if: failure()
with:
name: tmp/test-results

View File

@@ -5,15 +5,16 @@ name: "tagged-release"
on:
push:
tags:
- '*'
- "*"
jobs:
tagged-release:
name: tagged-release
runs-on: ubuntu-20.04
runs-on: ubuntu-24.04
steps:
- uses: "marvinpinto/action-automatic-releases@v1.2.1"
- name: Release
uses: softprops/action-gh-release@v2.4.1
with:
repo_token: "${{ secrets.GITHUB_TOKEN }}"
prerelease: false
generate_release_notes: true
make_latest: "true"

View File

@@ -1 +1 @@
FROM mysql:8.0.31
FROM mirror.ccs.tencentyun.com/library/mysql:9.4.0

View File

@@ -1,5 +1,6 @@
HARDWARE = $(shell uname -m)
SYSTEM_NAME = $(shell uname -s | tr '[:upper:]' '[:lower:]')
ARCH = $(shell dpkg --print-architecture)
SHFMT_VERSION = 3.0.2
XUNIT_TO_GITHUB_VERSION = 0.3.0
XUNIT_READER_VERSION = 0.1.0
@@ -21,7 +22,11 @@ ifneq ($(shell shellcheck --version >/dev/null 2>&1 ; echo $$?),0)
ifeq ($(SYSTEM_NAME),darwin)
brew install shellcheck
else
sudo add-apt-repository 'deb http://archive.ubuntu.com/ubuntu trusty-backports main restricted universe multiverse'
ifeq ($(ARCH),arm64)
sudo add-apt-repository 'deb http://ports.ubuntu.com/ubuntu-ports jammy-backports main restricted universe multiverse'
else
sudo add-apt-repository 'deb http://archive.ubuntu.com/ubuntu jammy-backports main restricted universe multiverse'
endif
sudo rm -rf /var/lib/apt/lists/* && sudo apt-get clean
sudo apt-get update -qq && sudo apt-get install -qq -y shellcheck
endif

View File

@@ -1,6 +1,6 @@
# dokku mysql [![Build Status](https://img.shields.io/github/actions/workflow/status/dokku/dokku-mysql/ci.yml?branch=master&style=flat-square "Build Status")](https://github.com/dokku/dokku-mysql/actions/workflows/ci.yml?query=branch%3Amaster) [![IRC Network](https://img.shields.io/badge/irc-libera-blue.svg?style=flat-square "IRC Libera")](https://webchat.libera.chat/?channels=dokku)
Official mysql plugin for dokku. Currently defaults to installing [mysql 8.0.31](https://hub.docker.com/_/mysql/).
Official mysql plugin for dokku. Currently defaults to installing [mysql 9.4.0](https://hub.docker.com/_/mysql/).
## Requirements
@@ -11,7 +11,7 @@ Official mysql plugin for dokku. Currently defaults to installing [mysql 8.0.31]
```shell
# on 0.19.x+
sudo dokku plugin:install https://github.com/dokku/dokku-mysql.git mysql
sudo dokku plugin:install https://github.com/dokku/dokku-mysql.git --name mysql
```
## Commands
@@ -24,8 +24,10 @@ mysql:backup-deauth <service> # remove backup authenticatio
mysql:backup-schedule <service> <schedule> <bucket-name> [--use-iam] # schedule a backup of the mysql service
mysql:backup-schedule-cat <service> # cat the contents of the configured backup cronfile for the service
mysql:backup-set-encryption <service> <passphrase> # set encryption for all future backups of mysql service
mysql:backup-set-public-key-encryption <service> <public-key-id> # set GPG Public Key encryption for all future backups of mysql service
mysql:backup-unschedule <service> # unschedule the backup of the mysql service
mysql:backup-unset-encryption <service> # unset encryption for future backups of the mysql service
mysql:backup-unset-public-key-encryption <service> # unset GPG Public Key encryption for future backups of the mysql service
mysql:clone <service> <new-service> [--clone-flags...] # create container <new-name> then copy data from <name> into <new-name>
mysql:connect <service> # connect to the service via the mysql connection tool
mysql:create <service> [--create-flags...] # create a mysql service
@@ -74,9 +76,9 @@ flags:
- `-m|--memory MEMORY`: container memory limit in megabytes (default: unlimited)
- `-N|--initial-network INITIAL_NETWORK`: the initial network to attach the service to
- `-p|--password PASSWORD`: override the user-level service password
- `-P|--post-create-network NETWORKS`: a comman-separated list of networks to attach the service container to after service creation
- `-P|--post-create-network NETWORKS`: a comma-separated list of networks to attach the service container to after service creation
- `-r|--root-password PASSWORD`: override the root-level service password
- `-S|--post-start-network NETWORKS`: a comman-separated list of networks to attach the service container to after service start
- `-S|--post-start-network NETWORKS`: a comma-separated list of networks to attach the service container to after service start
- `-s|--shm-size SHM_SIZE`: override shared memory size for mysql docker container
Create a mysql service named lollipop:
@@ -93,7 +95,7 @@ export MYSQL_IMAGE_VERSION="${PLUGIN_IMAGE_VERSION}"
dokku mysql:create lollipop
```
You can also specify custom environment variables to start the mysql service in semi-colon separated form.
You can also specify custom environment variables to start the mysql service in semicolon-separated form.
```shell
export MYSQL_CUSTOM_ENV="USER=alpha;HOST=beta"
@@ -200,6 +202,7 @@ flags:
- `-a|--alias "BLUE_DATABASE"`: an alternative alias to use for linking to an app via environment variable
- `-q|--querystring "pool=5"`: ampersand delimited querystring arguments to append to the service link
- `-n|--no-restart "false"`: whether or not to restart the app on link (default: true)
A mysql service can be linked to a container. This will use native docker links via the docker-options plugin. Here we link it to our `playground` app.
@@ -252,6 +255,10 @@ mysql2://mysql:SOME_PASSWORD@dokku-mysql-lollipop:3306/lollipop
dokku mysql:unlink <service> <app>
```
flags:
- `-n|--no-restart "false"`: whether or not to restart the app on unlink (default: true)
You can unlink a mysql service:
> NOTE: this will restart your app and unset related environment variables
@@ -338,7 +345,7 @@ Expose the service on the service's normal ports, allowing access to it from the
dokku mysql:expose lollipop 3306
```
Expose the service on the service's normal ports, with the first on a specified ip adddress (127.0.0.1):
Expose the service on the service's normal ports, with the first on a specified ip address (127.0.0.1):
```shell
dokku mysql:expose lollipop 127.0.0.1:3306
@@ -452,9 +459,9 @@ flags:
- `-i|--image IMAGE`: the image name to start the service with
- `-I|--image-version IMAGE_VERSION`: the image version to start the service with
- `-N|--initial-network INITIAL_NETWORK`: the initial network to attach the service to
- `-P|--post-create-network NETWORKS`: a comman-separated list of networks to attach the service container to after service creation
- `-R|--restart-apps "true"`: whether to force an app restart
- `-S|--post-start-network NETWORKS`: a comman-separated list of networks to attach the service container to after service start
- `-P|--post-create-network NETWORKS`: a comma-separated list of networks to attach the service container to after service creation
- `-R|--restart-apps "true"`: whether or not to force an app restart (default: false)
- `-S|--post-start-network NETWORKS`: a comma-separated list of networks to attach the service container to after service start
- `-s|--shm-size SHM_SIZE`: override shared memory size for mysql docker container
You can upgrade an existing service to a new image or image-version:
@@ -496,9 +503,9 @@ flags:
- `-m|--memory MEMORY`: container memory limit in megabytes (default: unlimited)
- `-N|--initial-network INITIAL_NETWORK`: the initial network to attach the service to
- `-p|--password PASSWORD`: override the user-level service password
- `-P|--post-create-network NETWORKS`: a comman-separated list of networks to attach the service container to after service creation
- `-P|--post-create-network NETWORKS`: a comma-separated list of networks to attach the service container to after service creation
- `-r|--root-password PASSWORD`: override the root-level service password
- `-S|--post-start-network NETWORKS`: a comman-separated list of networks to attach the service container to after service start
- `-S|--post-start-network NETWORKS`: a comma-separated list of networks to attach the service container to after service start
- `-s|--shm-size SHM_SIZE`: override shared memory size for mysql docker container
You can clone an existing service to a new one:
@@ -670,6 +677,19 @@ Set the GPG-compatible passphrase for encrypting backups for backups:
dokku mysql:backup-set-encryption lollipop
```
### set GPG Public Key encryption for all future backups of mysql service
```shell
# usage
dokku mysql:backup-set-public-key-encryption <service> <public-key-id>
```
Set the `GPG` Public Key for encrypting backups:
```shell
dokku mysql:backup-set-public-key-encryption lollipop
```
### unset encryption for future backups of the mysql service
```shell
@@ -683,6 +703,19 @@ Unset the `GPG` encryption passphrase for backups:
dokku mysql:backup-unset-encryption lollipop
```
### unset GPG Public Key encryption for future backups of the mysql service
```shell
# usage
dokku mysql:backup-unset-public-key-encryption <service>
```
Unset the `GPG` Public Key encryption for backups:
```shell
dokku mysql:backup-unset-public-key-encryption lollipop
```
### schedule a backup of the mysql service
```shell

2
Vagrantfile vendored
View File

@@ -1,7 +1,7 @@
# -*- mode: ruby -*-
# vi: set ft=ruby :
BOX_NAME = ENV["BOX_NAME"] || "bento/ubuntu-20.04"
BOX_NAME = ENV["BOX_NAME"] || "bento/ubuntu-24.04"
BOX_MEMORY = ENV["BOX_MEMORY"] || "2048"
DOKKU_VERSION = "master"

View File

@@ -1,15 +1,30 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from __future__ import print_function
import os
import re
def compile(service, version, variable, alias, image, scheme, ports, sponsors, options, unimplemented, dokku_version):
prefix = "\n\n".join([
def compile(
service,
version,
variable,
alias,
image,
scheme,
ports,
sponsors,
options,
unimplemented,
dokku_version,
):
prefix = "\n\n".join(
[
header(service),
description(service, image, version),
])
]
)
if len(sponsors) > 0:
prefix += "\n\n"
@@ -21,8 +36,19 @@ def compile(service, version, variable, alias, image, scheme, ports, sponsors, o
prefix,
requirements_section(dokku_version),
installation_section(service, dokku_version),
commands_section(service, variable, alias, image, scheme, ports, unimplemented),
usage_section(service, variable, alias, image, scheme, ports, options, unimplemented),
commands_section(
service, variable, alias, image, scheme, ports, unimplemented
),
usage_section(
service,
variable,
alias,
image,
scheme,
ports,
options,
unimplemented,
),
]
)
.replace("\n\n\n\n\n", "\n")
@@ -55,17 +81,25 @@ def sponsors_section(service, sponsors):
if len(sponsors) == 0:
return ""
sponsor_data = ["## Sponsors", "", f"The {service} plugin was generously sponsored by the following:", ""]
sponsor_data = [
"## Sponsors",
"",
f"The {service} plugin was generously sponsored by the following:",
"",
]
sponsor_data.extend([f"- [{s}](https://github.com/{s})" for s in sponsors])
return "\n".join(
sponsor_data
)
return "\n".join(sponsor_data)
def requirements_section(dokku_version):
return "\n".join(
["## Requirements", "", f"- dokku {dokku_version}", "- docker 1.8.x",]
[
"## Requirements",
"",
f"- dokku {dokku_version}",
"- docker 1.8.x",
]
)
@@ -76,7 +110,7 @@ def installation_section(service, dokku_version):
"",
"```shell",
f"# on {dokku_version}",
f"sudo dokku plugin:install https://github.com/dokku/dokku-{service}.git {service}",
f"sudo dokku plugin:install https://github.com/dokku/dokku-{service}.git --name {service}",
"```",
]
)
@@ -115,17 +149,31 @@ def commands_section(service, variable, alias, image, scheme, ports, unimplement
return "\n".join(content)
def usage_section(service, variable, alias, image, scheme, ports, options, unimplemented):
def usage_section(
service, variable, alias, image, scheme, ports, options, unimplemented
):
return "\n\n".join(
[
"## Usage",
f"Help for any commands can be displayed by specifying the command as an argument to {service}:help. Plugin help output in conjunction with any files in the `docs/` folder is used to generate the plugin documentation. Please consult the `{service}:help` command for any undocumented commands.",
usage_intro(service, variable, alias, image, scheme, ports, options, unimplemented),
usage_lifecycle(service, variable, alias, image, scheme, ports, options, unimplemented),
usage_automation(service, variable, alias, image, scheme, ports, options, unimplemented),
usage_data_management(service, variable, alias, image, scheme, ports, options, unimplemented),
usage_backup(service, variable, alias, image, scheme, ports, options, unimplemented),
usage_docker_pull(service, variable, alias, image, scheme, ports, options, unimplemented),
usage_intro(
service, variable, alias, image, scheme, ports, options, unimplemented
),
usage_lifecycle(
service, variable, alias, image, scheme, ports, options, unimplemented
),
usage_automation(
service, variable, alias, image, scheme, ports, options, unimplemented
),
usage_data_management(
service, variable, alias, image, scheme, ports, options, unimplemented
),
usage_backup(
service, variable, alias, image, scheme, ports, options, unimplemented
),
usage_docker_pull(
service, variable, alias, image, scheme, ports, options, unimplemented
),
]
)
@@ -135,11 +183,22 @@ def usage_intro(service, variable, alias, image, scheme, ports, options, unimple
content = ["### Basic Usage"]
return fetch_commands_content(
service, variable, alias, image, scheme, ports, options, unimplemented, commands, content
service,
variable,
alias,
image,
scheme,
ports,
options,
unimplemented,
commands,
content,
)
def usage_lifecycle(service, variable, alias, image, scheme, ports, options, unimplemented):
def usage_lifecycle(
service, variable, alias, image, scheme, ports, options, unimplemented
):
commands = [
"connect",
"enter",
@@ -160,11 +219,22 @@ def usage_lifecycle(service, variable, alias, image, scheme, ports, options, uni
]
return fetch_commands_content(
service, variable, alias, image, scheme, ports, options, unimplemented, commands, content
service,
variable,
alias,
image,
scheme,
ports,
options,
unimplemented,
commands,
content,
)
def usage_automation(service, variable, alias, image, scheme, ports, options, unimplemented):
def usage_automation(
service, variable, alias, image, scheme, ports, options, unimplemented
):
commands = ["app-links", "clone", "exists", "linked", "links"]
content = [
"### Service Automation",
@@ -174,11 +244,22 @@ def usage_automation(service, variable, alias, image, scheme, ports, options, un
]
return fetch_commands_content(
service, variable, alias, image, scheme, ports, options, unimplemented, commands, content
service,
variable,
alias,
image,
scheme,
ports,
options,
unimplemented,
commands,
content,
)
def usage_data_management(service, variable, alias, image, scheme, ports, options, unimplemented):
def usage_data_management(
service, variable, alias, image, scheme, ports, options, unimplemented
):
commands = ["import", "export"]
content = [
"### Data Management",
@@ -188,17 +269,30 @@ def usage_data_management(service, variable, alias, image, scheme, ports, option
]
return fetch_commands_content(
service, variable, alias, image, scheme, ports, options, unimplemented, commands, content
service,
variable,
alias,
image,
scheme,
ports,
options,
unimplemented,
commands,
content,
)
def usage_backup(service, variable, alias, image, scheme, ports, options, unimplemented):
def usage_backup(
service, variable, alias, image, scheme, ports, options, unimplemented
):
commands = [
"backup-auth",
"backup-deauth",
"backup",
"backup-set-encryption",
"backup-set-public-key-encryption",
"backup-unset-encryption",
"backup-unset-public-key-encryption",
"backup-schedule",
"backup-schedule-cat",
"backup-unschedule",
@@ -215,11 +309,22 @@ def usage_backup(service, variable, alias, image, scheme, ports, options, unimpl
]
return fetch_commands_content(
service, variable, alias, image, scheme, ports, options, unimplemented, commands, content
service,
variable,
alias,
image,
scheme,
ports,
options,
unimplemented,
commands,
content,
)
def usage_docker_pull(service, variable, alias, image, scheme, ports, options, unimplemented):
def usage_docker_pull(
service, variable, alias, image, scheme, ports, options, unimplemented
):
service_prefix = service.upper()
return "\n".join(
[
@@ -233,11 +338,30 @@ def usage_docker_pull(service, variable, alias, image, scheme, ports, options, u
def fetch_commands_content(
service, variable, alias, image, scheme, ports, options, unimplemented, commands, content
service,
variable,
alias,
image,
scheme,
ports,
options,
unimplemented,
commands,
content,
):
i = 0
for command in commands:
output = command_help(command, service, variable, alias, image, scheme, ports, options, unimplemented)
output = command_help(
command,
service,
variable,
alias,
image,
scheme,
ports,
options,
unimplemented,
)
if output == "":
continue
content.append(output)
@@ -275,7 +399,9 @@ def parse_args(line):
return " ".join(arguments)
def command_help(command, service, variable, alias, image, scheme, ports, options, unimplemented):
def command_help(
command, service, variable, alias, image, scheme, ports, options, unimplemented
):
if command in unimplemented:
return ""
@@ -285,7 +411,7 @@ def command_help(command, service, variable, alias, image, scheme, ports, option
"",
"```shell",
"# usage",
f"dokku {service}:{command} {data['arguments_string']}",
f"dokku {service}:{command} {data['arguments_string']}".strip(),
"```",
]
@@ -442,11 +568,11 @@ def process_sentence(sentence_lines):
parts = []
for word in sentence.strip().split(" "):
if word.isupper() and len(word) > 1:
for ending in [':', '.']:
for ending in [":", "."]:
if word.endswith(ending):
word = '`{0}`{1}'.format(word[:-1], ending)
word = "`{0}`{1}".format(word[:-1], ending)
else:
word = '`{0}`'.format(word)
word = "`{0}`".format(word)
parts.append(word)
text.append(" ".join(parts))
@@ -524,10 +650,22 @@ def main():
with open("plugin.toml") as f:
for line in f.readlines():
if line.startswith("sponsors"):
sponsors = re.search("\[([\"\w\s,_-]+)\]", line).group(1)
sponsors = [s.strip("\"") for s in sponsors.split(",")]
sponsors = re.search('\[(["\w\s,_-]+)\]', line).group(1)
sponsors = [s.strip('"') for s in sponsors.split(",")]
text = compile(service, version, variable, alias, image, scheme, ports, sponsors, options, unimplemented, "0.19.x+")
text = compile(
service,
version,
variable,
alias,
image,
scheme,
ports,
sponsors,
options,
unimplemented,
"0.19.x+",
)
base_path = os.path.dirname(os.path.dirname(os.path.realpath(__file__)))
readme_file = os.path.join(base_path, "README.md")

View File

@@ -62,7 +62,7 @@ fn-services-list() {
[[ -d $f ]] || continue
services+=("$f")
done
popd &>/dev/null || pushd "/tmp" >/dev/null
popd >/dev/null 2>&1 || pushd "/tmp" >/dev/null
if [[ "${#services[@]}" -eq 0 ]]; then
return
@@ -282,7 +282,7 @@ service_backup() {
BACKUP_TMPDIR=$(mktemp -d --tmpdir)
trap 'rm -rf "$BACKUP_TMPDIR" > /dev/null' RETURN INT TERM EXIT
"$DOCKER_BIN" container inspect "$ID" &>/dev/null || dokku_log_fail "Service container does not exist"
"$DOCKER_BIN" container inspect "$ID" >/dev/null 2>&1 || dokku_log_fail "Service container does not exist"
is_container_status "$ID" "Running" || dokku_log_fail "Service container is not running"
(service_export "$SERVICE" >"${BACKUP_TMPDIR}/export")
@@ -308,6 +308,10 @@ service_backup() {
BACKUP_PARAMETERS="$BACKUP_PARAMETERS -e ENCRYPTION_KEY=$(cat "$BACKUP_ENCRYPTION_CONFIG_ROOT/ENCRYPTION_KEY")"
fi
if [[ -f "$BACKUP_ENCRYPTION_CONFIG_ROOT/ENCRYPT_WITH_PUBLIC_KEY_ID" ]]; then
BACKUP_PARAMETERS="$BACKUP_PARAMETERS -e ENCRYPT_WITH_PUBLIC_KEY_ID=$(cat "$BACKUP_ENCRYPTION_CONFIG_ROOT/ENCRYPT_WITH_PUBLIC_KEY_ID")"
fi
# shellcheck disable=SC2086
"$DOCKER_BIN" container run --rm $BACKUP_PARAMETERS "$PLUGIN_S3BACKUP_IMAGE"
}
@@ -433,6 +437,16 @@ service_backup_set_encryption() {
echo "$ENCRYPTION_KEY" >"${SERVICE_BACKUP_ENCRYPTION_ROOT}/ENCRYPTION_KEY"
}
service_backup_set_public_key_encryption() {
declare desc="set up backup GPG Public Key encryption"
declare SERVICE="$1" ENCRYPT_WITH_PUBLIC_KEY_ID="$2"
local SERVICE_ROOT="${PLUGIN_DATA_ROOT}/${SERVICE}"
local SERVICE_BACKUP_ENCRYPTION_ROOT="${SERVICE_ROOT}/backup-encryption/"
mkdir "$SERVICE_BACKUP_ENCRYPTION_ROOT"
echo "$ENCRYPT_WITH_PUBLIC_KEY_ID" >"${SERVICE_BACKUP_ENCRYPTION_ROOT}/ENCRYPT_WITH_PUBLIC_KEY_ID"
}
service_backup_unschedule() {
declare desc="unschedule the backup of the service"
declare SERVICE="$1"
@@ -450,6 +464,15 @@ service_backup_unset_encryption() {
rm -rf "$SERVICE_BACKUP_ENCRYPTION_ROOT"
}
service_backup_unset_encryption() {
declare desc="remove backup encryption"
declare SERVICE="$1"
local SERVICE_ROOT="${PLUGIN_DATA_ROOT}/${SERVICE}"
local SERVICE_BACKUP_ENCRYPTION_ROOT="${SERVICE_ROOT}/backup-encryption/"
rm -rf "$SERVICE_BACKUP_ENCRYPTION_ROOT"
}
service_container_rm() {
declare desc="stop a service and remove the running container"
declare SERVICE="$1"
@@ -457,7 +480,7 @@ service_container_rm() {
local ID
service_pause "$SERVICE"
ID=$("$DOCKER_BIN" container ps -aq --no-trunc --filter "name=^/$SERVICE_NAME$" --format '{{ .ID }}') || true
ID=$("$DOCKER_BIN" container ps -aq --no-trunc --filter "name=^/$SERVICE_NAME$") || true
# this may be 'true' in tests...
if [[ -z "$ID" ]] || [[ "$ID" == "true" ]]; then
return 0
@@ -483,7 +506,7 @@ service_enter() {
local SERVICE_ROOT="$PLUGIN_DATA_ROOT/$SERVICE"
local ID="$(cat "$SERVICE_ROOT/ID")"
"$DOCKER_BIN" container inspect "$ID" &>/dev/null || dokku_log_fail "Service container does not exist"
"$DOCKER_BIN" container inspect "$ID" >/dev/null 2>&1 || dokku_log_fail "Service container does not exist"
is_container_status "$ID" "Running" || dokku_log_fail "Service container is not running"
local EXEC_CMD=""
@@ -631,8 +654,9 @@ service_link() {
fi
[[ -n "$SERVICE_QUERYSTRING" ]] && SERVICE_URL="${SERVICE_URL}?${SERVICE_QUERYSTRING}"
plugn trigger service-action post-link "$PLUGIN_COMMAND_PREFIX" "$SERVICE" "$APP"
if [[ "$DOKKU_GLOBAL_FLAGS" == *"--no-restart"* ]]; then
if [[ "$DOKKU_GLOBAL_FLAGS" == *"--no-restart"* ]] || [[ "$SERVICE_RESTART_APPS" == "false" ]]; then
config_set --no-restart "$APP" "${ALIAS}_URL=$SERVICE_URL"
dokku_log_verbose "Skipping restart of linked app"
else
config_set "$APP" "${ALIAS}_URL=$SERVICE_URL"
fi
@@ -690,7 +714,7 @@ service_logs() {
DOKKU_LOGS_ARGS+=" --follow"
fi
"$DOCKER_BIN" container inspect "$ID" &>/dev/null || dokku_log_fail "Service container does not exist"
"$DOCKER_BIN" container inspect "$ID" >/dev/null 2>&1 || dokku_log_fail "Service container does not exist"
is_container_status "$ID" "Running" || dokku_log_warn "Service logs may not be output as service is not running"
# shellcheck disable=SC2086
@@ -714,6 +738,7 @@ service_parse_args() {
"--initial-network") set -- "$@" "-N" ;;
"--image") set -- "$@" "-i" ;;
"--memory") set -- "$@" "-m" ;;
"--no-restart") set -- "$@" "-n" ;;
"--password") set -- "$@" "-p" ;;
"--post-create-network") set -- "$@" "-P" ;;
"--post-start-network") set -- "$@" "-S" ;;
@@ -727,7 +752,7 @@ service_parse_args() {
done
OPTIND=1
while getopts "a:c:C:d:i:I:m:n:N:p:P:q:R:r:s:S:u:" opt; do
while getopts "na:c:C:d:i:I:m:n:N:p:P:q:R:r:s:S:u:" opt; do
case "$opt" in
a)
SERVICE_ALIAS="${OPTARG^^}"
@@ -751,6 +776,9 @@ service_parse_args() {
m)
export SERVICE_MEMORY=$OPTARG
;;
n)
export SERVICE_RESTART_APPS=false
;;
N)
export SERVICE_INITIAL_NETWORK=$OPTARG
;;
@@ -805,39 +833,36 @@ service_root_password() {
service_port_expose() {
declare desc="wrapper for exposing service ports"
declare SERVICE="$1"
service_start "$SERVICE" "true"
service_port_unpause "$SERVICE" "true" "${@:2}"
}
service_port_pause() {
declare desc="pause service exposure"
declare SERVICE="$1" LOG_FAIL="$2"
declare SERVICE="$1" PORTS=(${@:2})
local SERVICE_ROOT="$PLUGIN_DATA_ROOT/$SERVICE"
local EXPOSED_NAME="$(get_service_name "$SERVICE").ambassador"
local PORT_FILE="$SERVICE_ROOT/PORT"
local SERVICE_NAME="$(get_service_name "$SERVICE")"
local EXPOSED_NAME="$SERVICE_NAME.ambassador"
if [[ "$LOG_FAIL" == "true" ]]; then
[[ ! -f "$PORT_FILE" ]] && dokku_log_fail "Service not exposed"
else
[[ ! -f "$PORT_FILE" ]] && return 0
if [[ ${#PORTS[@]} -eq 0 ]]; then
# shellcheck disable=SC2206
PORTS=(${PORTS[@]:-$(get_random_ports ${#PLUGIN_DATASTORE_PORTS[@]})})
fi
local GREP_NAME="^/${EXPOSED_NAME}$"
local CONTAINER_NAME="$("$DOCKER_BIN" container ps -f name="$GREP_NAME" --format "{{.Names}}")"
if [[ -z "$CONTAINER_NAME" ]]; then
if [[ "$LOG_FAIL" == "true" ]]; then
dokku_log_info1 "Service $SERVICE unexposed"
fi
return
[[ "${#PORTS[@]}" != "${#PLUGIN_DATASTORE_PORTS[@]}" ]] && dokku_log_fail "${#PLUGIN_DATASTORE_PORTS[@]} ports to be exposed need to be provided in the following order: ${PLUGIN_DATASTORE_PORTS[*]}"
if [[ -s "$PORT_FILE" ]]; then
# shellcheck disable=SC2207
PORTS=($(cat "$PORT_FILE"))
dokku_log_fail "Service $SERVICE already exposed on port(s) ${PORTS[*]}"
fi
if "$DOCKER_BIN" container inspect "$EXPOSED_NAME" >/dev/null 2>&1; then
dokku_log_warn "Service $SERVICE has an untracked expose container, removing"
"$DOCKER_BIN" container stop "$EXPOSED_NAME" >/dev/null 2>&1 || true
"$DOCKER_BIN" container rm "$EXPOSED_NAME" >/dev/null 2>&1 || true
if [[ "$LOG_FAIL" == "true" ]]; then
dokku_log_info1 "Service $SERVICE unexposed"
suppress_output "$DOCKER_BIN" container rm "$EXPOSED_NAME"
fi
echo "${PORTS[@]}" >"$PORT_FILE"
service_start "$SERVICE" "true"
service_port_reconcile_status "$SERVICE"
dokku_log_info1 "Service $SERVICE exposed on port(s) [container->host]: $(service_exposed_ports "$SERVICE")"
}
service_port_unexpose() {
@@ -845,39 +870,41 @@ service_port_unexpose() {
declare SERVICE="$1"
local SERVICE_ROOT="$PLUGIN_DATA_ROOT/$SERVICE"
local PORT_FILE="$SERVICE_ROOT/PORT"
service_port_pause "$SERVICE" "true"
rm -rf "$PORT_FILE"
service_port_reconcile_status "$SERVICE"
dokku_log_info1 "Service $SERVICE unexposed"
}
service_port_unpause() {
declare desc="start service exposure"
declare SERVICE="$1" LOG_FAIL="$2"
service_port_reconcile_status() {
declare SERVICE="$1"
local SERVICE_ROOT="$PLUGIN_DATA_ROOT/$SERVICE"
local SERVICE_NAME="$(get_service_name "$SERVICE")"
local EXPOSED_NAME="${SERVICE_NAME}.ambassador"
local PORT_FILE="$SERVICE_ROOT/PORT"
# shellcheck disable=SC2068
local PORTS=(${@:3})
# shellcheck disable=SC2068
PORTS=(${PORTS[@]:-$(get_random_ports ${#PLUGIN_DATASTORE_PORTS[@]})})
local ID=$(cat "$SERVICE_ROOT/ID")
local SERVICE_NAME="$(get_service_name "$SERVICE")"
local EXPOSED_NAME="$SERVICE_NAME.ambassador"
[[ "${#PORTS[@]}" != "${#PLUGIN_DATASTORE_PORTS[@]}" ]] && dokku_log_fail "${#PLUGIN_DATASTORE_PORTS[@]} ports to be exposed need to be provided in the following order: ${PLUGIN_DATASTORE_PORTS[*]}"
if [[ "$LOG_FAIL" == "true" ]]; then
[[ -f "$PORT_FILE" ]] && PORTS=($(cat "$PORT_FILE")) && dokku_log_fail "Service $SERVICE already exposed on port(s) ${PORTS[*]}"
else
[[ ! -f "$PORT_FILE" ]] && return 0
PORTS=($(cat "$PORT_FILE"))
if [[ ! -s "$PORT_FILE" ]]; then
if "$DOCKER_BIN" container inspect "$EXPOSED_NAME" >/dev/null 2>&1; then
"$DOCKER_BIN" container stop "$EXPOSED_NAME" >/dev/null 2>&1 || true
suppress_output "$DOCKER_BIN" container rm "$EXPOSED_NAME"
return $?
fi
return
fi
echo "${PORTS[@]}" >"$PORT_FILE"
if is_container_status "$EXPOSED_NAME" "Running"; then
return
fi
if "$DOCKER_BIN" container inspect "$EXPOSED_NAME" >/dev/null 2>&1; then
suppress_output "$DOCKER_BIN" container start "$EXPOSED_NAME"
return $?
fi
# shellcheck disable=SC2207
PORTS=($(cat "$PORT_FILE"))
# shellcheck disable=SC2046
"$DOCKER_BIN" container run -d --link "$SERVICE_NAME:$PLUGIN_COMMAND_PREFIX" --name "$EXPOSED_NAME" $(docker_ports_options "${PORTS[@]}") --restart always --label dokku=ambassador --label "dokku.ambassador=$PLUGIN_COMMAND_PREFIX" "$PLUGIN_AMBASSADOR_IMAGE" >/dev/null
if [[ "$LOG_FAIL" == "true" ]]; then
dokku_log_info1 "Service $SERVICE exposed on port(s) [container->host]: $(service_exposed_ports "$SERVICE")"
fi
}
service_promote() {
@@ -935,13 +962,15 @@ service_pause() {
declare SERVICE="$1"
local SERVICE_ROOT="$PLUGIN_DATA_ROOT/$SERVICE"
local SERVICE_NAME="$(get_service_name "$SERVICE")"
local ID=$("$DOCKER_BIN" container ps -aq --no-trunc --filter "name=^/$SERVICE_NAME$" --format '{{ .ID }}') || true
local ID=$("$DOCKER_BIN" container ps -aq --no-trunc --filter "name=^/$SERVICE_NAME$") || true
[[ -z $ID ]] && dokku_log_warn "Service is already paused" && return 0
if [[ -n $ID ]]; then
dokku_log_info2_quiet "Pausing container"
"$DOCKER_BIN" container stop "$SERVICE_NAME" >/dev/null
service_port_pause "$SERVICE"
if "$DOCKER_BIN" container inspect "$ID" >/dev/null 2>&1; then
"$DOCKER_BIN" container stop "$SERVICE_NAME.ambassador" >/dev/null 2>&1 || true
fi
dokku_log_verbose_quiet "Container paused"
else
dokku_log_verbose_quiet "No container exists for $SERVICE"
@@ -971,8 +1000,9 @@ service_unlink() {
[[ -z ${LINK[*]} ]] && dokku_log_fail "Not linked to app $APP"
plugn trigger service-action post-unlink "$PLUGIN_COMMAND_PREFIX" "$SERVICE" "$APP"
if [[ "$DOKKU_GLOBAL_FLAGS" == *"--no-restart"* ]]; then
if [[ "$DOKKU_GLOBAL_FLAGS" == *"--no-restart"* ]] || [[ "$SERVICE_RESTART_APPS" == "false" ]]; then
config_unset --no-restart "$APP" "${LINK[@]}"
dokku_log_verbose "Skipping restart of linked app"
else
config_unset "$APP" "${LINK[@]}"
fi

8
config
View File

@@ -28,9 +28,9 @@ if [[ -n $DOKKU_API_VERSION ]]; then
export PLUGIN_BASE_PATH="$PLUGIN_ENABLED_PATH"
fi
export PLUGIN_BUSYBOX_IMAGE="busybox:1.34.1-uclibc"
export PLUGIN_AMBASSADOR_IMAGE="dokku/ambassador:0.5.0"
export PLUGIN_S3BACKUP_IMAGE="dokku/s3backup:0.14.0"
export PLUGIN_WAIT_IMAGE="dokku/wait:0.6.0"
export PLUGIN_BUSYBOX_IMAGE=${PLUGIN_BUSYBOX_IMAGE:=busybox:1.37.0-uclibc}
export PLUGIN_AMBASSADOR_IMAGE=${PLUGIN_AMBASSADOR_IMAGE:=dokku/ambassador:0.8.2}
export PLUGIN_S3BACKUP_IMAGE=${PLUGIN_S3BACKUP_IMAGE:=dokku/s3backup:0.18.0}
export PLUGIN_WAIT_IMAGE=${PLUGIN_WAIT_IMAGE:=dokku/wait:0.9.3}
export MYSQL_CONFIG_OPTIONS=${MYSQL_CONFIG_OPTIONS:=""}

View File

@@ -141,6 +141,8 @@ service_create_container() {
done < <(fn-plugin-property-get "$PLUGIN_COMMAND_PREFIX" "$SERVICE" "post-create-network" | tr "," "\n")
fi
suppress_output "$DOCKER_BIN" container start "$(cat "$SERVICE_ROOT/ID")"
service_port_reconcile_status "$SERVICE"
if [[ -n "$(fn-plugin-property-get "$PLUGIN_COMMAND_PREFIX" "$SERVICE" "post-start-network")" ]]; then
dokku_log_verbose_quiet "Connecting to networks after container start"
while read -r line || [[ -n "$line" ]]; do
@@ -166,12 +168,10 @@ service_export() {
local SERVICE_ROOT="$PLUGIN_DATA_ROOT/$SERVICE"
local SERVICE_NAME="$(get_service_name "$SERVICE")"
local DATABASE_NAME="$(get_database_name "$SERVICE")"
local PASSWORD="$(service_password "$SERVICE")"
local ROOTPASSWORD="$(service_root_password "$SERVICE")"
[[ -n $SSH_TTY ]] && stty -opost
"$DOCKER_BIN" container exec "$SERVICE_NAME" bash -c "printf '[client]\ndefault-character-set=utf8mb4\npassword=$PASSWORD\n' > /root/credentials.cnf"
"$DOCKER_BIN" container exec "$SERVICE_NAME" mysqldump --defaults-extra-file=/root/credentials.cnf --user=mysql --single-transaction --no-tablespaces --quick "$DATABASE_NAME"
"$DOCKER_BIN" container exec "$SERVICE_NAME" rm /root/credentials.cnf
"$DOCKER_BIN" container exec "$SERVICE_NAME" mysqldump --default-character-set=utf8mb4 --user=root --password="$ROOTPASSWORD" --single-transaction --no-tablespaces --quick "$DATABASE_NAME"
status=$?
[[ -n $SSH_TTY ]] && stty opost
exit $status
@@ -196,7 +196,7 @@ service_start() {
local QUIET="$2"
local SERVICE_ROOT="$PLUGIN_DATA_ROOT/$SERVICE"
local SERVICE_NAME="$(get_service_name "$SERVICE")"
local ID=$("$DOCKER_BIN" container ps -aq --no-trunc --filter "status=running" --filter "name=^/$SERVICE_NAME$" --format '{{ .ID }}') || true
local ID=$("$DOCKER_BIN" container ps -aq --no-trunc --filter "status=running" --filter "name=^/$SERVICE_NAME$") || true
if [[ -n $ID ]]; then
[[ -z $QUIET ]] && dokku_log_warn "Service is already started"
if [[ ! -f "$SERVICE_ROOT/ID" ]] || [[ "$(cat "$SERVICE_ROOT/ID")" != "$ID" ]]; then
@@ -207,13 +207,13 @@ service_start() {
fi
dokku_log_info2_quiet "Starting container"
local PREVIOUS_ID=$("$DOCKER_BIN" container ps -aq --no-trunc --filter "status=exited" --filter "name=^/$SERVICE_NAME$" --format '{{ .ID }}') || true
local PREVIOUS_ID=$("$DOCKER_BIN" container ps -aq --no-trunc --filter "status=exited" --filter "name=^/$SERVICE_NAME$") || true
local ROOTPASSWORD="$(service_root_password "$SERVICE")"
local PASSWORD="$(service_password "$SERVICE")"
if [[ -n $PREVIOUS_ID ]]; then
"$DOCKER_BIN" container start "$PREVIOUS_ID" >/dev/null
service_port_unpause "$SERVICE"
service_port_reconcile_status "$SERVICE"
dokku_log_info2 "Container started"
elif service_image_exists "$SERVICE" && [[ -n "$ROOTPASSWORD" ]] && [[ -n "$PASSWORD" ]]; then
service_create_container "$SERVICE"

View File

@@ -1,4 +1,4 @@
[plugin]
description = "dokku mysql service plugin"
version = "1.30.1"
version = "1.42.2"
[plugin.config]

View File

@@ -0,0 +1,25 @@
#!/usr/bin/env bash
source "$(dirname "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)")/config"
set -eo pipefail
[[ $DOKKU_TRACE ]] && set -x
source "$PLUGIN_CORE_AVAILABLE_PATH/common/functions"
source "$(dirname "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)")/functions"
service-backup-set-public-key-encryption-cmd() {
#E set the GPG Public Key for encrypting backups
#E dokku $PLUGIN_COMMAND_PREFIX:backup-set-public-key-encryption lollipop
#A service, service to run command against
#A public-key-id, a GPG Public Key ID (or fingerprint) to use for encryption. Must be uploaded to the GPG keyserver beforehand.
declare desc="set GPG Public Key encryption for all future backups of $PLUGIN_SERVICE service"
local cmd="$PLUGIN_COMMAND_PREFIX:backup-set-public-key-encryption" argv=("$@")
[[ ${argv[0]} == "$cmd" ]] && shift 1
declare SERVICE="$1" PUBLIC_KEY_ID="$2"
is_implemented_command "$cmd" || dokku_log_fail "Not yet implemented"
[[ -z "$SERVICE" ]] && dokku_log_fail "Please specify a valid name for the service"
[[ -z "$PUBLIC_KEY_ID" ]] && dokku_log_fail "Please specify a valid GPG Public Key ID (or fingerprint)"
verify_service_name "$SERVICE"
service_backup_set_public_key_encryption "$SERVICE" "$PUBLIC_KEY_ID"
}
service-backup-set-public-key-encryption-cmd "$@"

View File

@@ -0,0 +1,23 @@
#!/usr/bin/env bash
source "$(dirname "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)")/config"
set -eo pipefail
[[ $DOKKU_TRACE ]] && set -x
source "$PLUGIN_CORE_AVAILABLE_PATH/common/functions"
source "$(dirname "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)")/functions"
service-backup-unset-public-key-encryption-cmd() {
#E unset the GPG Public Key encryption for backups
#E dokku $PLUGIN_COMMAND_PREFIX:backup-unset-public-key-encryption lollipop
#A service, service to run command against
declare desc="unset GPG Public Key encryption for future backups of the $PLUGIN_SERVICE service"
local cmd="$PLUGIN_COMMAND_PREFIX:backup-unset-public-key-encryption" argv=("$@")
[[ ${argv[0]} == "$cmd" ]] && shift 1
declare SERVICE="$1"
is_implemented_command "$cmd" || dokku_log_fail "Not yet implemented" # TODO: [22.03.2024 by Mykola]
[[ -z "$SERVICE" ]] && dokku_log_fail "Please specify a valid name for the service"
verify_service_name "$SERVICE"
service_backup_unset_public_key_encryption "$SERVICE" # TODO: [22.03.2024 by Mykola]
}
service-backup-unset-encryption-cmd "$@"

View File

@@ -17,9 +17,9 @@ service-clone-cmd() {
#F -m|--memory MEMORY, container memory limit in megabytes (default: unlimited)
#F -N|--initial-network INITIAL_NETWORK, the initial network to attach the service to
#F -p|--password PASSWORD, override the user-level service password
#F -P|--post-create-network NETWORKS, a comman-separated list of networks to attach the service container to after service creation
#F -P|--post-create-network NETWORKS, a comma-separated list of networks to attach the service container to after service creation
#F -r|--root-password PASSWORD, override the root-level service password
#F -S|--post-start-network NETWORKS, a comman-separated list of networks to attach the service container to after service start
#F -S|--post-start-network NETWORKS, a comma-separated list of networks to attach the service container to after service start
#F -s|--shm-size SHM_SIZE, override shared memory size for $PLUGIN_COMMAND_PREFIX docker container
declare desc="create container <new-name> then copy data from <name> into <new-name>"
local cmd="$PLUGIN_COMMAND_PREFIX:clone" argv=("$@")

View File

@@ -14,7 +14,7 @@ service-create-cmd() {
#E export ${PLUGIN_VARIABLE}_IMAGE_VERSION="${PLUGIN_IMAGE_VERSION}"
#E dokku $PLUGIN_COMMAND_PREFIX:create lollipop
#E you can also specify custom environment variables to start
#E the ${PLUGIN_COMMAND_PREFIX} service in semi-colon separated form.
#E the ${PLUGIN_COMMAND_PREFIX} service in semicolon-separated form.
#E export ${PLUGIN_VARIABLE}_CUSTOM_ENV="USER=alpha;HOST=beta"
#E dokku $PLUGIN_COMMAND_PREFIX:create lollipop
#A service, service to run command against
@@ -25,9 +25,9 @@ service-create-cmd() {
#F -m|--memory MEMORY, container memory limit in megabytes (default: unlimited)
#F -N|--initial-network INITIAL_NETWORK, the initial network to attach the service to
#F -p|--password PASSWORD, override the user-level service password
#F -P|--post-create-network NETWORKS, a comman-separated list of networks to attach the service container to after service creation
#F -P|--post-create-network NETWORKS, a comma-separated list of networks to attach the service container to after service creation
#F -r|--root-password PASSWORD, override the root-level service password
#F -S|--post-start-network NETWORKS, a comman-separated list of networks to attach the service container to after service start
#F -S|--post-start-network NETWORKS, a comma-separated list of networks to attach the service container to after service start
#F -s|--shm-size SHM_SIZE, override shared memory size for $PLUGIN_COMMAND_PREFIX docker container
declare desc="create a $PLUGIN_SERVICE service"
local cmd="$PLUGIN_COMMAND_PREFIX:create" argv=("$@")

View File

@@ -8,7 +8,7 @@ source "$(dirname "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)")/functions"
service-expose-cmd() {
#E expose the service on the service's normal ports, allowing access to it from the public interface (0.0.0.0)
#E dokku $PLUGIN_COMMAND_PREFIX:expose lollipop ${PLUGIN_DATASTORE_PORTS[@]}
#E expose the service on the service's normal ports, with the first on a specified ip adddress (127.0.0.1)
#E expose the service on the service's normal ports, with the first on a specified ip address (127.0.0.1)
#E dokku $PLUGIN_COMMAND_PREFIX:expose lollipop 127.0.0.1:${PLUGIN_DATASTORE_PORTS[@]}
#A service, service to run command against
#A ports, a list of ports to run against

View File

@@ -42,6 +42,7 @@ service-link-cmd() {
#A app, app to run command against
#F -a|--alias "BLUE_DATABASE", an alternative alias to use for linking to an app via environment variable
#F -q|--querystring "pool=5", ampersand delimited querystring arguments to append to the service link
#F -n|--no-restart "false", whether or not to restart the app on link (default: true)
declare desc="link the $PLUGIN_SERVICE service to the app"
local cmd="$PLUGIN_COMMAND_PREFIX:link" argv=("$@")
[[ ${argv[0]} == "$cmd" ]] && shift 1

View File

@@ -11,6 +11,7 @@ service-unlink-cmd() {
#E dokku $PLUGIN_COMMAND_PREFIX:unlink lollipop playground
#A service, service to run command against
#A app, app to run command against
#F -n|--no-restart "false", whether or not to restart the app on unlink (default: true)
declare desc="unlink the $PLUGIN_SERVICE service from the app"
local cmd="$PLUGIN_COMMAND_PREFIX:unlink" argv=("$@")
[[ ${argv[0]} == "$cmd" ]] && shift 1

View File

@@ -15,9 +15,9 @@ service-upgrade-cmd() {
#F -i|--image IMAGE, the image name to start the service with
#F -I|--image-version IMAGE_VERSION, the image version to start the service with
#F -N|--initial-network INITIAL_NETWORK, the initial network to attach the service to
#F -P|--post-create-network NETWORKS, a comman-separated list of networks to attach the service container to after service creation
#F -R|--restart-apps "true", whether to force an app restart
#F -S|--post-start-network NETWORKS, a comman-separated list of networks to attach the service container to after service start
#F -P|--post-create-network NETWORKS, a comma-separated list of networks to attach the service container to after service creation
#F -R|--restart-apps "true", whether or not to force an app restart (default: false)
#F -S|--post-start-network NETWORKS, a comma-separated list of networks to attach the service container to after service start
#F -s|--shm-size SHM_SIZE, override shared memory size for $PLUGIN_COMMAND_PREFIX docker container
declare desc="upgrade service <service> to the specified versions"
local cmd="$PLUGIN_COMMAND_PREFIX:upgrade" argv=("$@")

View File

@@ -48,7 +48,7 @@ teardown() {
assert_output_contains bridge 0
assert_output_contains custom-network
run docker inspect dokku.$PLUGIN_COMMAND_PREFIX.ls -f '{{range $net,$v := .NetworkSettings.Networks}}{{range $k,$alias := $v.Aliases}}{{printf "alias:%s\n" $alias}}{{end}}{{end}}'
run docker inspect dokku.$PLUGIN_COMMAND_PREFIX.ls -f '{{range $net,$v := .NetworkSettings.Networks}}{{range $k,$alias := $v.DNSNames}}{{printf "alias:%s\n" $alias}}{{end}}{{end}}'
echo "output: $output"
echo "status: $status"
assert_success
@@ -120,7 +120,7 @@ teardown() {
assert_output_contains custom-network
assert_output_contains bridge
run docker inspect dokku.$PLUGIN_COMMAND_PREFIX.ls -f '{{range $net,$v := .NetworkSettings.Networks}}{{range $k,$alias := $v.Aliases}}{{printf "alias:%s\n" $alias}}{{end}}{{end}}'
run docker inspect dokku.$PLUGIN_COMMAND_PREFIX.ls -f '{{range $net,$v := .NetworkSettings.Networks}}{{range $k,$alias := $v.DNSNames}}{{printf "alias:%s\n" $alias}}{{end}}{{end}}'
echo "output: $output"
echo "status: $status"
assert_success
@@ -192,7 +192,7 @@ teardown() {
assert_output_contains bridge
assert_output_contains custom-network
run docker inspect dokku.$PLUGIN_COMMAND_PREFIX.ls -f '{{range $net,$v := .NetworkSettings.Networks}}{{range $k,$alias := $v.Aliases}}{{printf "alias:%s\n" $alias}}{{end}}{{end}}'
run docker inspect dokku.$PLUGIN_COMMAND_PREFIX.ls -f '{{range $net,$v := .NetworkSettings.Networks}}{{range $k,$alias := $v.DNSNames}}{{printf "alias:%s\n" $alias}}{{end}}{{end}}'
echo "output: $output"
echo "status: $status"
assert_success
@@ -258,7 +258,7 @@ teardown() {
assert_output_contains bridge
assert_output_contains custom-network
run docker inspect dokku.$PLUGIN_COMMAND_PREFIX.lsa -f '{{range $net,$v := .NetworkSettings.Networks}}{{range $k,$alias := $v.Aliases}}{{printf "alias:%s\n" $alias}}{{end}}{{end}}'
run docker inspect dokku.$PLUGIN_COMMAND_PREFIX.lsa -f '{{range $net,$v := .NetworkSettings.Networks}}{{range $k,$alias := $v.DNSNames}}{{printf "alias:%s\n" $alias}}{{end}}{{end}}'
echo "output: $output"
echo "status: $status"
assert_success

View File

@@ -2,29 +2,65 @@
load test_helper
setup() {
dokku "$PLUGIN_COMMAND_PREFIX:create" l
dokku "$PLUGIN_COMMAND_PREFIX:create" ls
}
teardown() {
dokku --force "$PLUGIN_COMMAND_PREFIX:destroy" l
dokku --force "$PLUGIN_COMMAND_PREFIX:destroy" ls
}
@test "($PLUGIN_COMMAND_PREFIX:expose) error when there are no arguments" {
run dokku "$PLUGIN_COMMAND_PREFIX:expose"
echo "output: $output"
echo "status: $status"
assert_failure
assert_contains "${lines[*]}" "Please specify a valid name for the service"
}
@test "($PLUGIN_COMMAND_PREFIX:expose) error when service does not exist" {
run dokku "$PLUGIN_COMMAND_PREFIX:expose" not_existing_service
echo "output: $output"
echo "status: $status"
assert_failure
assert_contains "${lines[*]}" "service not_existing_service does not exist"
}
@test "($PLUGIN_COMMAND_PREFIX:expose) error when already exposed" {
run dokku "$PLUGIN_COMMAND_PREFIX:expose" ls
echo "output: $output"
echo "status: $status"
assert_success
run dokku "$PLUGIN_COMMAND_PREFIX:expose" ls
echo "output: $output"
echo "status: $status"
assert_failure
assert_contains "${lines[*]}" "Service ls already exposed on port(s)"
run sudo rm "$PLUGIN_DATA_ROOT/ls/PORT"
echo "output: $output"
echo "status: $status"
assert_success
run dokku "$PLUGIN_COMMAND_PREFIX:expose" ls
echo "output: $output"
echo "status: $status"
assert_success
assert_contains "${lines[*]}" "Service ls has an untracked expose container, removing"
}
@test "($PLUGIN_COMMAND_PREFIX:expose) success when not providing custom ports" {
run dokku "$PLUGIN_COMMAND_PREFIX:expose" l
run dokku "$PLUGIN_COMMAND_PREFIX:expose" ls
echo "output: $output"
echo "status: $status"
assert_success
[[ "${lines[*]}" =~ exposed\ on\ port\(s\)\ \[container\-\>host\]\:\ [[:digit:]]+ ]]
}
@test "($PLUGIN_COMMAND_PREFIX:expose) success when providing custom ports" {
run dokku "$PLUGIN_COMMAND_PREFIX:expose" l 4242
run dokku "$PLUGIN_COMMAND_PREFIX:expose" ls 4242
echo "output: $output"
echo "status: $status"
assert_success
assert_contains "${lines[*]}" "exposed on port(s) [container->host]: 3306->4242"
}

View File

@@ -2,14 +2,14 @@
load test_helper
setup() {
dokku "$PLUGIN_COMMAND_PREFIX:create" l
dokku "$PLUGIN_COMMAND_PREFIX:create" m
dokku "$PLUGIN_COMMAND_PREFIX:create" ls
dokku "$PLUGIN_COMMAND_PREFIX:create" ms
dokku apps:create my-app
}
teardown() {
dokku --force "$PLUGIN_COMMAND_PREFIX:destroy" m
dokku --force "$PLUGIN_COMMAND_PREFIX:destroy" l
dokku --force "$PLUGIN_COMMAND_PREFIX:destroy" ms
dokku --force "$PLUGIN_COMMAND_PREFIX:destroy" ls
dokku --force apps:destroy my-app
}
@@ -22,7 +22,7 @@ teardown() {
}
@test "($PLUGIN_COMMAND_PREFIX:link) error when the app argument is missing" {
run dokku "$PLUGIN_COMMAND_PREFIX:link" l
run dokku "$PLUGIN_COMMAND_PREFIX:link" ls
echo "output: $output"
echo "status: $status"
assert_contains "${lines[*]}" "Please specify an app to run the command on"
@@ -30,7 +30,7 @@ teardown() {
}
@test "($PLUGIN_COMMAND_PREFIX:link) error when the app does not exist" {
run dokku "$PLUGIN_COMMAND_PREFIX:link" l not_existing_app
run dokku "$PLUGIN_COMMAND_PREFIX:link" ls not_existing_app
echo "output: $output"
echo "status: $status"
assert_contains "${lines[*]}" "App not_existing_app does not exist"
@@ -46,73 +46,97 @@ teardown() {
}
@test "($PLUGIN_COMMAND_PREFIX:link) error when the service is already linked to app" {
dokku "$PLUGIN_COMMAND_PREFIX:link" l my-app
run dokku "$PLUGIN_COMMAND_PREFIX:link" l my-app
dokku "$PLUGIN_COMMAND_PREFIX:link" ls my-app
run dokku "$PLUGIN_COMMAND_PREFIX:link" ls my-app
echo "output: $output"
echo "status: $status"
assert_contains "${lines[*]}" "Already linked as DATABASE_URL"
assert_failure
dokku "$PLUGIN_COMMAND_PREFIX:unlink" l my-app
dokku "$PLUGIN_COMMAND_PREFIX:unlink" ls my-app
}
@test "($PLUGIN_COMMAND_PREFIX:link) exports DATABASE_URL to app" {
run dokku "$PLUGIN_COMMAND_PREFIX:link" l my-app
run dokku "$PLUGIN_COMMAND_PREFIX:link" ls my-app
echo "output: $output"
echo "status: $status"
url=$(dokku config:get my-app DATABASE_URL)
password="$(sudo cat "$PLUGIN_DATA_ROOT/l/PASSWORD")"
assert_contains "$url" "mysql://mysql:$password@dokku-mysql-l:3306/l"
password="$(sudo cat "$PLUGIN_DATA_ROOT/ls/PASSWORD")"
assert_contains "$url" "mysql://mysql:$password@dokku-mysql-ls:3306/ls"
assert_success
dokku "$PLUGIN_COMMAND_PREFIX:unlink" l my-app
dokku "$PLUGIN_COMMAND_PREFIX:unlink" ls my-app
}
@test "($PLUGIN_COMMAND_PREFIX:link) generates an alternate config url when DATABASE_URL already in use" {
dokku config:set my-app DATABASE_URL=mysql://user:pass@host:3306/db
dokku "$PLUGIN_COMMAND_PREFIX:link" l my-app
dokku "$PLUGIN_COMMAND_PREFIX:link" ls my-app
run dokku config my-app
assert_contains "${lines[*]}" "DOKKU_MYSQL_AQUA_URL"
assert_success
dokku "$PLUGIN_COMMAND_PREFIX:link" m my-app
dokku "$PLUGIN_COMMAND_PREFIX:link" ms my-app
run dokku config my-app
assert_contains "${lines[*]}" "DOKKU_MYSQL_BLACK_URL"
assert_success
dokku "$PLUGIN_COMMAND_PREFIX:unlink" m my-app
dokku "$PLUGIN_COMMAND_PREFIX:unlink" l my-app
dokku "$PLUGIN_COMMAND_PREFIX:unlink" ms my-app
dokku "$PLUGIN_COMMAND_PREFIX:unlink" ls my-app
}
@test "($PLUGIN_COMMAND_PREFIX:link) links to app with docker-options" {
dokku "$PLUGIN_COMMAND_PREFIX:link" l my-app
dokku "$PLUGIN_COMMAND_PREFIX:link" ls my-app
run dokku docker-options:report my-app
assert_contains "${lines[*]}" "--link dokku.mysql.l:dokku-mysql-l"
assert_contains "${lines[*]}" "--link dokku.mysql.ls:dokku-mysql-ls"
assert_success
dokku "$PLUGIN_COMMAND_PREFIX:unlink" l my-app
dokku "$PLUGIN_COMMAND_PREFIX:unlink" ls my-app
}
@test "($PLUGIN_COMMAND_PREFIX:link) uses apps MYSQL_DATABASE_SCHEME variable" {
dokku config:set my-app MYSQL_DATABASE_SCHEME=mysql2
dokku "$PLUGIN_COMMAND_PREFIX:link" l my-app
dokku "$PLUGIN_COMMAND_PREFIX:link" ls my-app
url=$(dokku config:get my-app DATABASE_URL)
password="$(sudo cat "$PLUGIN_DATA_ROOT/l/PASSWORD")"
assert_contains "$url" "mysql2://mysql:$password@dokku-mysql-l:3306/l"
password="$(sudo cat "$PLUGIN_DATA_ROOT/ls/PASSWORD")"
assert_contains "$url" "mysql2://mysql:$password@dokku-mysql-ls:3306/ls"
assert_success
dokku "$PLUGIN_COMMAND_PREFIX:unlink" l my-app
dokku "$PLUGIN_COMMAND_PREFIX:unlink" ls my-app
}
@test "($PLUGIN_COMMAND_PREFIX:link) adds a querystring" {
dokku "$PLUGIN_COMMAND_PREFIX:link" l my-app --querystring "pool=5"
dokku "$PLUGIN_COMMAND_PREFIX:link" ls my-app --querystring "pool=5"
url=$(dokku config:get my-app DATABASE_URL)
assert_contains "$url" "?pool=5"
assert_success
dokku "$PLUGIN_COMMAND_PREFIX:unlink" l my-app
dokku "$PLUGIN_COMMAND_PREFIX:unlink" ls my-app
}
@test "($PLUGIN_COMMAND_PREFIX:link) uses a specified config url when alias is specified" {
dokku "$PLUGIN_COMMAND_PREFIX:link" l my-app --alias "ALIAS"
dokku "$PLUGIN_COMMAND_PREFIX:link" ls my-app --alias "ALIAS"
url=$(dokku config:get my-app ALIAS_URL)
password="$(sudo cat "$PLUGIN_DATA_ROOT/l/PASSWORD")"
assert_contains "$url" "mysql://mysql:$password@dokku-mysql-l:3306/l"
password="$(sudo cat "$PLUGIN_DATA_ROOT/ls/PASSWORD")"
assert_contains "$url" "mysql://mysql:$password@dokku-mysql-ls:3306/ls"
assert_success
dokku "$PLUGIN_COMMAND_PREFIX:unlink" ls my-app
}
@test "($PLUGIN_COMMAND_PREFIX:link) respects --no-restart" {
run dokku "$PLUGIN_COMMAND_PREFIX:link" ls my-app
echo "output: $output"
echo "status: $status"
assert_output_contains "Skipping restart of linked app" 0
assert_success
run dokku "$PLUGIN_COMMAND_PREFIX:unlink" ls my-app
echo "output: $output"
echo "status: $status"
assert_success
run dokku "$PLUGIN_COMMAND_PREFIX:link" ls my-app --no-restart
echo "output: $output"
echo "status: $status"
assert_output_contains "Skipping restart of linked app"
assert_success
run dokku "$PLUGIN_COMMAND_PREFIX:unlink" ls my-app
echo "output: $output"
echo "status: $status"
assert_success
dokku "$PLUGIN_COMMAND_PREFIX:unlink" l my-app
}

View File

@@ -3,11 +3,11 @@ load test_helper
setup() {
dokku apps:create my-app
dokku "$PLUGIN_COMMAND_PREFIX:create" l
dokku "$PLUGIN_COMMAND_PREFIX:create" ls
}
teardown() {
dokku --force "$PLUGIN_COMMAND_PREFIX:destroy" l
dokku --force "$PLUGIN_COMMAND_PREFIX:destroy" ls
dokku --force apps:destroy my-app
}
@@ -17,12 +17,12 @@ teardown() {
}
@test "($PLUGIN_COMMAND_PREFIX:unlink) error when the app argument is missing" {
run dokku "$PLUGIN_COMMAND_PREFIX:unlink" l
run dokku "$PLUGIN_COMMAND_PREFIX:unlink" ls
assert_contains "${lines[*]}" "Please specify an app to run the command on"
}
@test "($PLUGIN_COMMAND_PREFIX:unlink) error when the app does not exist" {
run dokku "$PLUGIN_COMMAND_PREFIX:unlink" l not_existing_app
run dokku "$PLUGIN_COMMAND_PREFIX:unlink" ls not_existing_app
assert_contains "${lines[*]}" "App not_existing_app does not exist"
}
@@ -32,13 +32,13 @@ teardown() {
}
@test "($PLUGIN_COMMAND_PREFIX:unlink) error when service not linked to app" {
run dokku "$PLUGIN_COMMAND_PREFIX:unlink" l my-app
run dokku "$PLUGIN_COMMAND_PREFIX:unlink" ls my-app
assert_contains "${lines[*]}" "Not linked to app my-app"
}
@test "($PLUGIN_COMMAND_PREFIX:unlink) removes link from docker-options" {
dokku "$PLUGIN_COMMAND_PREFIX:link" l my-app >&2
dokku "$PLUGIN_COMMAND_PREFIX:unlink" l my-app
dokku "$PLUGIN_COMMAND_PREFIX:link" ls my-app >&2
dokku "$PLUGIN_COMMAND_PREFIX:unlink" ls my-app
check_value="Docker options build: Docker options deploy: --restart=on-failure:10 Docker options run:"
options=$(dokku --quiet docker-options:report my-app | xargs)
@@ -46,8 +46,32 @@ teardown() {
}
@test "($PLUGIN_COMMAND_PREFIX:unlink) unsets config url from app" {
dokku "$PLUGIN_COMMAND_PREFIX:link" l my-app >&2
dokku "$PLUGIN_COMMAND_PREFIX:unlink" l my-app
dokku "$PLUGIN_COMMAND_PREFIX:link" ls my-app >&2
dokku "$PLUGIN_COMMAND_PREFIX:unlink" ls my-app
config=$(dokku config:get my-app DATABASE_URL || true)
assert_equal "$config" ""
}
@test "($PLUGIN_COMMAND_PREFIX:unlink) respects --no-restart" {
run dokku "$PLUGIN_COMMAND_PREFIX:link" ls my-app
echo "output: $output"
echo "status: $status"
assert_success
run dokku "$PLUGIN_COMMAND_PREFIX:unlink" ls my-app
echo "output: $output"
echo "status: $status"
assert_output_contains "Skipping restart of linked app" 0
assert_success
run dokku "$PLUGIN_COMMAND_PREFIX:link" ls my-app
echo "output: $output"
echo "status: $status"
assert_success
run dokku "$PLUGIN_COMMAND_PREFIX:unlink" ls my-app --no-restart
echo "output: $output"
echo "status: $status"
assert_output_contains "Skipping restart of linked app"
assert_success
}

View File

@@ -1,4 +1,5 @@
# SC1090 - Can't follow non-constant source. Use a directive to specify location - https://github.com/koalaman/shellcheck/wiki/SC1090
# SC1091 - Not following - <https://github.com/koalaman/shellcheck/wiki/SC1091>
# SC2034 - Variable appears unused. Verify it or export it - https://github.com/koalaman/shellcheck/wiki/SC2034
# SC2155 - Declare and assign separately to avoid masking return values - https://github.com/koalaman/shellcheck/wiki/SC2155
# SC2206 - Quote to prevent word splitting/globbing, or split robustly with mapfile or read -a - https://github.com/koalaman/shellcheck/wiki/SC2206