Merge branch 'master' into new-website
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
FROM phusion/baseimage:focal-1.1.0
|
||||
FROM phusion/baseimage:focal-1.2.0
|
||||
|
||||
CMD ["/sbin/my_init"]
|
||||
|
||||
|
||||
29
HISTORY.md
29
HISTORY.md
@@ -1,5 +1,34 @@
|
||||
# History
|
||||
|
||||
## 0.27.5
|
||||
|
||||
Install/update via the bootstrap script:
|
||||
|
||||
```shell
|
||||
wget https://raw.githubusercontent.com/dokku/dokku/v0.27.5/bootstrap.sh
|
||||
sudo DOKKU_TAG=v0.27.5 bash bootstrap.sh
|
||||
```
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
- #5183: @josegonzalez Filter apps when verifying app names
|
||||
- #5199: @josegonzalez Revert "fix: Vector fails to start container due to --watch-config flag"
|
||||
- #5197: @holamendi fix: Vector fails to start container due to --watch-config flag
|
||||
- #5192: @josegonzalez Confirm installation of universe packages when installing on ubuntu
|
||||
- #5193: @josegonzalez Force-set correct permissions on env files
|
||||
- #5181: @josegonzalez Ensure we default SSH_NAME to NAME when filtering apps
|
||||
|
||||
### New Features
|
||||
|
||||
- #5196: @josegonzalez Disable herokuish usage on both armhf and arm64 platforms
|
||||
- #5194: @josegonzalez Upgrade base Dockerfile image to phusion/baseimage:focal-1.2.0
|
||||
|
||||
### Other
|
||||
|
||||
- #5200: @dependabot[bot] chore(deps): bump rack from 2.2.3 to 2.2.3.1 in /tests/apps/ruby
|
||||
- #5198: @dependabot[bot] chore(deps): bump grunt from 1.5.2 to 1.5.3 in /tests/apps/multi
|
||||
- #5187: @dependabot[bot] chore(deps-dev): bump heroku/heroku-buildpack-php from 216 to 217 in /tests/apps/php
|
||||
|
||||
## 0.27.4
|
||||
|
||||
Install/update via the bootstrap script:
|
||||
|
||||
@@ -87,8 +87,8 @@ Otherwise, you will need to import the keypair manually after installation using
|
||||
To install the latest stable release, run the following commands as a user who has access to `sudo`:
|
||||
|
||||
```shell
|
||||
wget https://raw.githubusercontent.com/dokku/dokku/v0.27.4/bootstrap.sh
|
||||
sudo DOKKU_TAG=v0.27.4 bash bootstrap.sh
|
||||
wget https://raw.githubusercontent.com/dokku/dokku/v0.27.5/bootstrap.sh
|
||||
sudo DOKKU_TAG=v0.27.5 bash bootstrap.sh
|
||||
```
|
||||
|
||||
You can then proceed to configure your server domain (via `dokku domains:set-global`) and user access (via `dokku ssh-keys:add`) to complete the installation.
|
||||
|
||||
@@ -63,7 +63,7 @@ install-requirements() {
|
||||
apt-get -qq -y --no-install-recommends install software-properties-common
|
||||
fi
|
||||
|
||||
add-apt-repository universe >/dev/null
|
||||
add-apt-repository -y universe >/dev/null
|
||||
apt-get update -qq >/dev/null
|
||||
;;
|
||||
esac
|
||||
|
||||
2
debian/control
vendored
2
debian/control
vendored
@@ -1,5 +1,5 @@
|
||||
Package: dokku
|
||||
Version: 0.27.4
|
||||
Version: 0.27.5
|
||||
Section: web
|
||||
Priority: optional
|
||||
Architecture: amd64
|
||||
|
||||
@@ -35,35 +35,35 @@ dokku plugin:list
|
||||
|
||||
```
|
||||
plugn: dev
|
||||
00_dokku-standard 0.27.4 enabled dokku core standard plugin
|
||||
20_events 0.27.4 enabled dokku core events logging plugin
|
||||
app-json 0.27.4 enabled dokku core app-json plugin
|
||||
apps 0.27.4 enabled dokku core apps plugin
|
||||
build-env 0.27.4 enabled dokku core build-env plugin
|
||||
buildpacks 0.27.4 enabled dokku core buildpacks plugin
|
||||
certs 0.27.4 enabled dokku core certificate management plugin
|
||||
checks 0.27.4 enabled dokku core checks plugin
|
||||
common 0.27.4 enabled dokku core common plugin
|
||||
config 0.27.4 enabled dokku core config plugin
|
||||
docker-options 0.27.4 enabled dokku core docker-options plugin
|
||||
domains 0.27.4 enabled dokku core domains plugin
|
||||
enter 0.27.4 enabled dokku core enter plugin
|
||||
git 0.27.4 enabled dokku core git plugin
|
||||
logs 0.27.4 enabled dokku core logs plugin
|
||||
network 0.27.4 enabled dokku core network plugin
|
||||
nginx-vhosts 0.27.4 enabled dokku core nginx-vhosts plugin
|
||||
plugin 0.27.4 enabled dokku core plugin plugin
|
||||
proxy 0.27.4 enabled dokku core proxy plugin
|
||||
ps 0.27.4 enabled dokku core ps plugin
|
||||
repo 0.27.4 enabled dokku core repo plugin
|
||||
resource 0.27.4 enabled dokku core resource plugin
|
||||
scheduler-docker-local 0.27.4 enabled dokku core scheduler-docker-local plugin
|
||||
shell 0.27.4 enabled dokku core shell plugin
|
||||
ssh-keys 0.27.4 enabled dokku core ssh-keys plugin
|
||||
storage 0.27.4 enabled dokku core storage plugin
|
||||
tags 0.27.4 enabled dokku core tags plugin
|
||||
tar 0.27.4 enabled dokku core tar plugin
|
||||
trace 0.27.4 enabled dokku core trace plugin
|
||||
00_dokku-standard 0.27.5 enabled dokku core standard plugin
|
||||
20_events 0.27.5 enabled dokku core events logging plugin
|
||||
app-json 0.27.5 enabled dokku core app-json plugin
|
||||
apps 0.27.5 enabled dokku core apps plugin
|
||||
build-env 0.27.5 enabled dokku core build-env plugin
|
||||
buildpacks 0.27.5 enabled dokku core buildpacks plugin
|
||||
certs 0.27.5 enabled dokku core certificate management plugin
|
||||
checks 0.27.5 enabled dokku core checks plugin
|
||||
common 0.27.5 enabled dokku core common plugin
|
||||
config 0.27.5 enabled dokku core config plugin
|
||||
docker-options 0.27.5 enabled dokku core docker-options plugin
|
||||
domains 0.27.5 enabled dokku core domains plugin
|
||||
enter 0.27.5 enabled dokku core enter plugin
|
||||
git 0.27.5 enabled dokku core git plugin
|
||||
logs 0.27.5 enabled dokku core logs plugin
|
||||
network 0.27.5 enabled dokku core network plugin
|
||||
nginx-vhosts 0.27.5 enabled dokku core nginx-vhosts plugin
|
||||
plugin 0.27.5 enabled dokku core plugin plugin
|
||||
proxy 0.27.5 enabled dokku core proxy plugin
|
||||
ps 0.27.5 enabled dokku core ps plugin
|
||||
repo 0.27.5 enabled dokku core repo plugin
|
||||
resource 0.27.5 enabled dokku core resource plugin
|
||||
scheduler-docker-local 0.27.5 enabled dokku core scheduler-docker-local plugin
|
||||
shell 0.27.5 enabled dokku core shell plugin
|
||||
ssh-keys 0.27.5 enabled dokku core ssh-keys plugin
|
||||
storage 0.27.5 enabled dokku core storage plugin
|
||||
tags 0.27.5 enabled dokku core tags plugin
|
||||
tar 0.27.5 enabled dokku core tar plugin
|
||||
trace 0.27.5 enabled dokku core trace plugin
|
||||
```
|
||||
|
||||
> Warning: All plugin commands other than `plugin:list` and `plugin:help` require sudo access and must be run directly from the Dokku server.
|
||||
|
||||
@@ -2,10 +2,10 @@
|
||||
<browserconfig>
|
||||
<msapplication>
|
||||
<tile>
|
||||
<square70x70logo src="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.27.4/docs/assets/favicons/mstile-70x70.png"/>
|
||||
<square150x150logo src="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.27.4/docs/assets/favicons/mstile-150x150.png"/>
|
||||
<square310x310logo src="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.27.4/docs/assets/favicons/mstile-310x310.png"/>
|
||||
<wide310x150logo src="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.27.4/docs/assets/favicons/mstile-310x150.png"/>
|
||||
<square70x70logo src="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.27.5/docs/assets/favicons/mstile-70x70.png"/>
|
||||
<square150x150logo src="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.27.5/docs/assets/favicons/mstile-150x150.png"/>
|
||||
<square310x310logo src="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.27.5/docs/assets/favicons/mstile-310x310.png"/>
|
||||
<wide310x150logo src="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.27.5/docs/assets/favicons/mstile-310x150.png"/>
|
||||
<TileColor>#da532c</TileColor>
|
||||
</tile>
|
||||
</msapplication>
|
||||
|
||||
@@ -2,37 +2,37 @@
|
||||
"name": "Dokku",
|
||||
"icons": [
|
||||
{
|
||||
"src": "https:\/\/cdn.jsdelivr.net\/dokku\/dokku@v0.27.4\/docs\/assets\/favicons\/android-chrome-36x36.png",
|
||||
"src": "https:\/\/cdn.jsdelivr.net\/dokku\/dokku@v0.27.5\/docs\/assets\/favicons\/android-chrome-36x36.png",
|
||||
"sizes": "36x36",
|
||||
"type": "image\/png",
|
||||
"density": "0.75"
|
||||
},
|
||||
{
|
||||
"src": "https:\/\/cdn.jsdelivr.net\/dokku\/dokku@v0.27.4\/docs\/assets\/favicons\/android-chrome-48x48.png",
|
||||
"src": "https:\/\/cdn.jsdelivr.net\/dokku\/dokku@v0.27.5\/docs\/assets\/favicons\/android-chrome-48x48.png",
|
||||
"sizes": "48x48",
|
||||
"type": "image\/png",
|
||||
"density": "1.0"
|
||||
},
|
||||
{
|
||||
"src": "https:\/\/cdn.jsdelivr.net\/dokku\/dokku@v0.27.4\/docs\/assets\/favicons\/android-chrome-72x72.png",
|
||||
"src": "https:\/\/cdn.jsdelivr.net\/dokku\/dokku@v0.27.5\/docs\/assets\/favicons\/android-chrome-72x72.png",
|
||||
"sizes": "72x72",
|
||||
"type": "image\/png",
|
||||
"density": "1.5"
|
||||
},
|
||||
{
|
||||
"src": "https:\/\/cdn.jsdelivr.net\/dokku\/dokku@v0.27.4\/docs\/assets\/favicons\/android-chrome-96x96.png",
|
||||
"src": "https:\/\/cdn.jsdelivr.net\/dokku\/dokku@v0.27.5\/docs\/assets\/favicons\/android-chrome-96x96.png",
|
||||
"sizes": "96x96",
|
||||
"type": "image\/png",
|
||||
"density": "2.0"
|
||||
},
|
||||
{
|
||||
"src": "https:\/\/cdn.jsdelivr.net\/dokku\/dokku@v0.27.4\/docs\/assets\/favicons\/android-chrome-144x144.png",
|
||||
"src": "https:\/\/cdn.jsdelivr.net\/dokku\/dokku@v0.27.5\/docs\/assets\/favicons\/android-chrome-144x144.png",
|
||||
"sizes": "144x144",
|
||||
"type": "image\/png",
|
||||
"density": "3.0"
|
||||
},
|
||||
{
|
||||
"src": "https:\/\/cdn.jsdelivr.net\/dokku\/dokku@v0.27.4\/docs\/assets\/favicons\/android-chrome-192x192.png",
|
||||
"src": "https:\/\/cdn.jsdelivr.net\/dokku\/dokku@v0.27.5\/docs\/assets\/favicons\/android-chrome-192x192.png",
|
||||
"sizes": "192x192",
|
||||
"type": "image\/png",
|
||||
"density": "4.0"
|
||||
|
||||
@@ -24,6 +24,6 @@
|
||||
"0.24.10",
|
||||
"0.25.7",
|
||||
"0.26.8",
|
||||
"0.27.4"
|
||||
"0.27.5"
|
||||
]
|
||||
}
|
||||
|
||||
@@ -29,7 +29,7 @@ The workflow looks like this:
|
||||
```shell
|
||||
# having dokku-arch in ../dokku-arch
|
||||
vagrant up build-arch
|
||||
# wait for "==> build-arch: ==> Finished making: dokku 0.27.4-2 (Mon Feb 22 23:20:37 CET 2016)"
|
||||
# wait for "==> build-arch: ==> Finished making: dokku 0.27.5-2 (Mon Feb 22 23:20:37 CET 2016)"
|
||||
cd ../dokku-arch
|
||||
git add PKGBUILD .SRCINFO
|
||||
git commit -m 'Update to dokku 0.9.9'
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
Pull the dokku/dokku image:
|
||||
|
||||
```shell
|
||||
docker pull dokku/dokku:0.27.4
|
||||
docker pull dokku/dokku:0.27.5
|
||||
```
|
||||
|
||||
Next, run the image.
|
||||
@@ -18,7 +18,7 @@ docker container run \
|
||||
--publish 8443:443 \
|
||||
--volume /var/lib/dokku:/mnt/dokku \
|
||||
--volume /var/run/docker.sock:/var/run/docker.sock \
|
||||
dokku/dokku:0.27.4
|
||||
dokku/dokku:0.27.5
|
||||
```
|
||||
|
||||
The above command will start a new docker container that is ready when a message similar to `Runit started as PID 12345` appears.
|
||||
|
||||
@@ -39,8 +39,8 @@ To install the latest stable version of Dokku, you can run the following shell c
|
||||
|
||||
```shell
|
||||
# for debian systems, installs Dokku via apt-get
|
||||
wget https://raw.githubusercontent.com/dokku/dokku/v0.27.4/bootstrap.sh;
|
||||
sudo DOKKU_TAG=v0.27.4 bash bootstrap.sh
|
||||
wget https://raw.githubusercontent.com/dokku/dokku/v0.27.5/bootstrap.sh;
|
||||
sudo DOKKU_TAG=v0.27.5 bash bootstrap.sh
|
||||
```
|
||||
|
||||
The installation process takes about 5-10 minutes, depending upon internet connection speed.
|
||||
|
||||
@@ -10,26 +10,26 @@
|
||||
<meta name="author" content="">
|
||||
<title>Dokku - The smallest PaaS implementation you've ever seen</title>
|
||||
|
||||
<link rel="apple-touch-icon" sizes="57x57" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.27.4/docs/assets/favicons/apple-touch-icon-57x57.png">
|
||||
<link rel="apple-touch-icon" sizes="60x60" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.27.4/docs/assets/favicons/apple-touch-icon-60x60.png">
|
||||
<link rel="apple-touch-icon" sizes="72x72" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.27.4/docs/assets/favicons/apple-touch-icon-72x72.png">
|
||||
<link rel="apple-touch-icon" sizes="76x76" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.27.4/docs/assets/favicons/apple-touch-icon-76x76.png">
|
||||
<link rel="apple-touch-icon" sizes="114x114" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.27.4/docs/assets/favicons/apple-touch-icon-114x114.png">
|
||||
<link rel="apple-touch-icon" sizes="120x120" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.27.4/docs/assets/favicons/apple-touch-icon-120x120.png">
|
||||
<link rel="apple-touch-icon" sizes="144x144" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.27.4/docs/assets/favicons/apple-touch-icon-144x144.png">
|
||||
<link rel="apple-touch-icon" sizes="152x152" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.27.4/docs/assets/favicons/apple-touch-icon-152x152.png">
|
||||
<link rel="apple-touch-icon" sizes="180x180" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.27.4/docs/assets/favicons/apple-touch-icon-180x180.png">
|
||||
<link rel="icon" type="image/png" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.27.4/docs/assets/favicons/favicon-32x32.png" sizes="32x32">
|
||||
<link rel="icon" type="image/png" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.27.4/docs/assets/favicons/android-chrome-192x192.png" sizes="192x192">
|
||||
<link rel="icon" type="image/png" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.27.4/docs/assets/favicons/favicon-96x96.png" sizes="96x96">
|
||||
<link rel="icon" type="image/png" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.27.4/docs/assets/favicons/favicon-16x16.png" sizes="16x16">
|
||||
<link rel="manifest" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.27.4/docs/assets/favicons/manifest.json">
|
||||
<link rel="shortcut icon" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.27.4/docs/assets/favicons/favicon.ico">
|
||||
<link rel="apple-touch-icon" sizes="57x57" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.27.5/docs/assets/favicons/apple-touch-icon-57x57.png">
|
||||
<link rel="apple-touch-icon" sizes="60x60" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.27.5/docs/assets/favicons/apple-touch-icon-60x60.png">
|
||||
<link rel="apple-touch-icon" sizes="72x72" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.27.5/docs/assets/favicons/apple-touch-icon-72x72.png">
|
||||
<link rel="apple-touch-icon" sizes="76x76" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.27.5/docs/assets/favicons/apple-touch-icon-76x76.png">
|
||||
<link rel="apple-touch-icon" sizes="114x114" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.27.5/docs/assets/favicons/apple-touch-icon-114x114.png">
|
||||
<link rel="apple-touch-icon" sizes="120x120" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.27.5/docs/assets/favicons/apple-touch-icon-120x120.png">
|
||||
<link rel="apple-touch-icon" sizes="144x144" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.27.5/docs/assets/favicons/apple-touch-icon-144x144.png">
|
||||
<link rel="apple-touch-icon" sizes="152x152" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.27.5/docs/assets/favicons/apple-touch-icon-152x152.png">
|
||||
<link rel="apple-touch-icon" sizes="180x180" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.27.5/docs/assets/favicons/apple-touch-icon-180x180.png">
|
||||
<link rel="icon" type="image/png" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.27.5/docs/assets/favicons/favicon-32x32.png" sizes="32x32">
|
||||
<link rel="icon" type="image/png" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.27.5/docs/assets/favicons/android-chrome-192x192.png" sizes="192x192">
|
||||
<link rel="icon" type="image/png" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.27.5/docs/assets/favicons/favicon-96x96.png" sizes="96x96">
|
||||
<link rel="icon" type="image/png" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.27.5/docs/assets/favicons/favicon-16x16.png" sizes="16x16">
|
||||
<link rel="manifest" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.27.5/docs/assets/favicons/manifest.json">
|
||||
<link rel="shortcut icon" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.27.5/docs/assets/favicons/favicon.ico">
|
||||
<meta name="apple-mobile-web-app-title" content="Dokku">
|
||||
<meta name="application-name" content="Dokku">
|
||||
<meta name="msapplication-TileColor" content="#da532c">
|
||||
<meta name="msapplication-TileImage" content="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.27.4/docs/assets/favicons/mstile-144x144.png">
|
||||
<meta name="msapplication-config" content="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.27.4/docs/assets/favicons/browserconfig.xml">
|
||||
<meta name="msapplication-TileImage" content="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.27.5/docs/assets/favicons/mstile-144x144.png">
|
||||
<meta name="msapplication-config" content="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.27.5/docs/assets/favicons/browserconfig.xml">
|
||||
<meta name="theme-color" content="#ffffff">
|
||||
|
||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.0-beta1/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-0evHe/X+R7YkIZDRvuzKMRqM+OrBnVFBL6DOitfPri4tjfHxaWutUpFmBp4vmVor" crossorigin="anonymous">
|
||||
@@ -38,14 +38,13 @@
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Lato:wght@400;700;900&display=swap" rel="stylesheet">
|
||||
<link href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.27.4/docs/assets/style.css" rel="stylesheet">
|
||||
<link href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.27.5/docs/assets/style.css" rel="stylesheet">
|
||||
<!-- <link href="./assets/style.css" rel="stylesheet"> -->
|
||||
<style>
|
||||
|
||||
</style>
|
||||
</head>
|
||||
|
||||
|
||||
<body>
|
||||
<header class="hero-section">
|
||||
<nav class="navbar navbar-expand-md navbar-dark py-3" id="mainNav">
|
||||
|
||||
@@ -9,26 +9,26 @@
|
||||
<meta name="author" content="">
|
||||
<title>Dokku - {{DOC_TITLE}}</title>
|
||||
|
||||
<link rel="apple-touch-icon" sizes="57x57" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.27.4/docs/assets/favicons/apple-touch-icon-57x57.png">
|
||||
<link rel="apple-touch-icon" sizes="60x60" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.27.4/docs/assets/favicons/apple-touch-icon-60x60.png">
|
||||
<link rel="apple-touch-icon" sizes="72x72" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.27.4/docs/assets/favicons/apple-touch-icon-72x72.png">
|
||||
<link rel="apple-touch-icon" sizes="76x76" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.27.4/docs/assets/favicons/apple-touch-icon-76x76.png">
|
||||
<link rel="apple-touch-icon" sizes="114x114" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.27.4/docs/assets/favicons/apple-touch-icon-114x114.png">
|
||||
<link rel="apple-touch-icon" sizes="120x120" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.27.4/docs/assets/favicons/apple-touch-icon-120x120.png">
|
||||
<link rel="apple-touch-icon" sizes="144x144" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.27.4/docs/assets/favicons/apple-touch-icon-144x144.png">
|
||||
<link rel="apple-touch-icon" sizes="152x152" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.27.4/docs/assets/favicons/apple-touch-icon-152x152.png">
|
||||
<link rel="apple-touch-icon" sizes="180x180" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.27.4/docs/assets/favicons/apple-touch-icon-180x180.png">
|
||||
<link rel="icon" type="image/png" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.27.4/docs/assets/favicons/favicon-32x32.png" sizes="32x32">
|
||||
<link rel="icon" type="image/png" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.27.4/docs/assets/favicons/android-chrome-192x192.png" sizes="192x192">
|
||||
<link rel="icon" type="image/png" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.27.4/docs/assets/favicons/favicon-96x96.png" sizes="96x96">
|
||||
<link rel="icon" type="image/png" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.27.4/docs/assets/favicons/favicon-16x16.png" sizes="16x16">
|
||||
<link rel="manifest" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.27.4/docs/assets/favicons/manifest.json">
|
||||
<link rel="shortcut icon" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.27.4/docs/assets/favicons/favicon.ico">
|
||||
<link rel="apple-touch-icon" sizes="57x57" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.27.5/docs/assets/favicons/apple-touch-icon-57x57.png">
|
||||
<link rel="apple-touch-icon" sizes="60x60" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.27.5/docs/assets/favicons/apple-touch-icon-60x60.png">
|
||||
<link rel="apple-touch-icon" sizes="72x72" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.27.5/docs/assets/favicons/apple-touch-icon-72x72.png">
|
||||
<link rel="apple-touch-icon" sizes="76x76" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.27.5/docs/assets/favicons/apple-touch-icon-76x76.png">
|
||||
<link rel="apple-touch-icon" sizes="114x114" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.27.5/docs/assets/favicons/apple-touch-icon-114x114.png">
|
||||
<link rel="apple-touch-icon" sizes="120x120" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.27.5/docs/assets/favicons/apple-touch-icon-120x120.png">
|
||||
<link rel="apple-touch-icon" sizes="144x144" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.27.5/docs/assets/favicons/apple-touch-icon-144x144.png">
|
||||
<link rel="apple-touch-icon" sizes="152x152" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.27.5/docs/assets/favicons/apple-touch-icon-152x152.png">
|
||||
<link rel="apple-touch-icon" sizes="180x180" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.27.5/docs/assets/favicons/apple-touch-icon-180x180.png">
|
||||
<link rel="icon" type="image/png" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.27.5/docs/assets/favicons/favicon-32x32.png" sizes="32x32">
|
||||
<link rel="icon" type="image/png" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.27.5/docs/assets/favicons/android-chrome-192x192.png" sizes="192x192">
|
||||
<link rel="icon" type="image/png" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.27.5/docs/assets/favicons/favicon-96x96.png" sizes="96x96">
|
||||
<link rel="icon" type="image/png" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.27.5/docs/assets/favicons/favicon-16x16.png" sizes="16x16">
|
||||
<link rel="manifest" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.27.5/docs/assets/favicons/manifest.json">
|
||||
<link rel="shortcut icon" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.27.5/docs/assets/favicons/favicon.ico">
|
||||
<meta name="apple-mobile-web-app-title" content="Dokku">
|
||||
<meta name="application-name" content="Dokku">
|
||||
<meta name="msapplication-TileColor" content="#da532c">
|
||||
<meta name="msapplication-TileImage" content="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.27.4/docs/assets/favicons/mstile-144x144.png">
|
||||
<meta name="msapplication-config" content="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.27.4/docs/assets/favicons/browserconfig.xml">
|
||||
<meta name="msapplication-TileImage" content="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.27.5/docs/assets/favicons/mstile-144x144.png">
|
||||
<meta name="msapplication-config" content="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.27.5/docs/assets/favicons/browserconfig.xml">
|
||||
<meta name="theme-color" content="#ffffff">
|
||||
|
||||
<script>
|
||||
@@ -48,7 +48,7 @@
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Lato:wght@400;700;900&display=swap" rel="stylesheet">
|
||||
|
||||
<link href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.27.4/docs/assets/style.css" rel="stylesheet">
|
||||
<link href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.27.5/docs/assets/style.css" rel="stylesheet">
|
||||
<!-- <link href="./assets/style.css" rel="stylesheet"> -->
|
||||
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.5.0/css/font-awesome.min.css" rel="stylesheet">
|
||||
<style>
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
[plugin]
|
||||
description = "dokku core standard plugin"
|
||||
version = "0.27.4"
|
||||
version = "0.27.5"
|
||||
[plugin.config]
|
||||
|
||||
@@ -8,6 +8,7 @@ cmd-report() {
|
||||
declare cmd="report"
|
||||
[[ "$1" == "$cmd" ]] && shift 1
|
||||
declare APP="$1"
|
||||
local ARCHITECTURE="$(dpkg --print-architecture 2>/dev/null || true)"
|
||||
|
||||
if [[ "$APP" == "--format" ]]; then
|
||||
dokku_log_fail "--format flag not supported on global report"
|
||||
@@ -23,8 +24,8 @@ cmd-report() {
|
||||
dokku_log_info1 "git version: $(git --version)"
|
||||
dokku_log_info1 "sigil version: $(sigil -v)"
|
||||
dokku_log_info1 "herokuish version: "
|
||||
if [[ "$(dpkg --print-architecture 2>/dev/null || true)" == "armhf" ]]; then
|
||||
dokku_log_warn "herokuish not supported on armhf architecture"
|
||||
if [[ "$ARCHITECTURE" == "armhf" ]] || [[ "$ARCHITECTURE" == "arm64" ]]; then
|
||||
dokku_log_warn "herokuish not supported on $ARCHITECTURE architecture"
|
||||
else
|
||||
"$DOCKER_BIN" container run $DOKKU_GLOBAL_RUN_ARGS --rm "$DOKKU_IMAGE" herokuish version | sed "s/^/ /"
|
||||
fi
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
[plugin]
|
||||
description = "dokku core events logging plugin"
|
||||
version = "0.27.4"
|
||||
version = "0.27.5"
|
||||
[plugin.config]
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
[plugin]
|
||||
description = "dokku core app-json plugin"
|
||||
version = "0.27.4"
|
||||
version = "0.27.5"
|
||||
[plugin.config]
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
[plugin]
|
||||
description = "dokku core apps plugin"
|
||||
version = "0.27.4"
|
||||
version = "0.27.5"
|
||||
[plugin.config]
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
[plugin]
|
||||
description = "dokku core builder-dockerfile plugin"
|
||||
version = "0.27.4"
|
||||
version = "0.27.5"
|
||||
[plugin.config]
|
||||
|
||||
@@ -7,8 +7,9 @@ trigger-builder-herokuish-builder-detect() {
|
||||
declare desc="builder-herokuish builder-detect plugin trigger"
|
||||
declare trigger="builder-detect"
|
||||
declare APP="$1" SOURCECODE_WORK_DIR="$2"
|
||||
local ARCHITECTURE="$(dpkg --print-architecture 2>/dev/null || true)"
|
||||
|
||||
if [[ "$(dpkg --print-architecture 2>/dev/null || true)" == "armhf" ]]; then
|
||||
if [[ "$ARCHITECTURE" == "armhf" ]] || [[ "$ARCHITECTURE" == "arm64" ]]; then
|
||||
return
|
||||
fi
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
[plugin]
|
||||
description = "dokku core builder-herokuish plugin"
|
||||
version = "0.27.4"
|
||||
version = "0.27.5"
|
||||
[plugin.config]
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
[plugin]
|
||||
description = "dokku core builder-null plugin"
|
||||
version = "0.27.4"
|
||||
version = "0.27.5"
|
||||
[plugin.config]
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
[plugin]
|
||||
description = "dokku core builder-pack plugin"
|
||||
version = "0.27.4"
|
||||
version = "0.27.5"
|
||||
[plugin.config]
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
[plugin]
|
||||
description = "dokku core builder plugin"
|
||||
version = "0.27.4"
|
||||
version = "0.27.5"
|
||||
[plugin.config]
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
[plugin]
|
||||
description = "dokku core buildpacks plugin"
|
||||
version = "0.27.4"
|
||||
version = "0.27.5"
|
||||
[plugin.config]
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
[plugin]
|
||||
description = "dokku core certificate management plugin"
|
||||
version = "0.27.4"
|
||||
version = "0.27.5"
|
||||
[plugin.config]
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
[plugin]
|
||||
description = "dokku core checks plugin"
|
||||
version = "0.27.4"
|
||||
version = "0.27.5"
|
||||
[plugin.config]
|
||||
|
||||
@@ -581,6 +581,11 @@ func VerifyAppName(appName string) error {
|
||||
return &AppDoesNotExist{appName}
|
||||
}
|
||||
|
||||
apps, _ := filterApps([]string{appName})
|
||||
if len(apps) != 1 {
|
||||
return &AppDoesNotExist{appName}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
|
||||
@@ -20,6 +20,10 @@ var (
|
||||
testEnvLine2 = "export testKey=TESTING"
|
||||
)
|
||||
|
||||
func setupTests() (err error) {
|
||||
return os.Setenv("PLUGIN_ENABLED_PATH", "/var/lib/dokku/plugins/enabled")
|
||||
}
|
||||
|
||||
func setupTestApp() (err error) {
|
||||
Expect(os.MkdirAll(testAppDir, 0644)).To(Succeed())
|
||||
b := []byte(testEnvLine + "\n")
|
||||
@@ -48,32 +52,37 @@ func teardownTestApp2() {
|
||||
|
||||
func TestCommonGetEnv(t *testing.T) {
|
||||
RegisterTestingT(t)
|
||||
Expect(setupTests()).To(Succeed())
|
||||
Expect(MustGetEnv("DOKKU_ROOT")).To(Equal("/home/dokku"))
|
||||
}
|
||||
|
||||
func TestCommonGetAppImageRepo(t *testing.T) {
|
||||
RegisterTestingT(t)
|
||||
Expect(setupTests()).To(Succeed())
|
||||
Expect(GetAppImageRepo("testapp")).To(Equal("dokku/testapp"))
|
||||
}
|
||||
|
||||
func TestCommonVerifyImageInvalid(t *testing.T) {
|
||||
RegisterTestingT(t)
|
||||
Expect(setupTests()).To(Succeed())
|
||||
Expect(VerifyImage("testapp")).To(Equal(false))
|
||||
}
|
||||
|
||||
func TestCommonVerifyAppNameInvalid(t *testing.T) {
|
||||
RegisterTestingT(t)
|
||||
err := VerifyAppName("1994testApp")
|
||||
Expect(err).To(HaveOccurred())
|
||||
Expect(setupTests()).To(Succeed())
|
||||
Expect(VerifyAppName("1994testApp")).To(HaveOccurred())
|
||||
}
|
||||
|
||||
func TestCommonVerifyAppName(t *testing.T) {
|
||||
RegisterTestingT(t)
|
||||
Expect(setupTests()).To(Succeed())
|
||||
Expect(setupTestApp()).To(Succeed())
|
||||
Expect(VerifyAppName(testAppName)).To(Succeed())
|
||||
teardownTestApp()
|
||||
|
||||
RegisterTestingT(t)
|
||||
Expect(setupTests()).To(Succeed())
|
||||
Expect(setupTestApp2()).To(Succeed())
|
||||
Expect(VerifyAppName(testAppName2)).To(Succeed())
|
||||
teardownTestApp2()
|
||||
@@ -81,13 +90,14 @@ func TestCommonVerifyAppName(t *testing.T) {
|
||||
|
||||
func TestCommonDokkuAppsError(t *testing.T) {
|
||||
RegisterTestingT(t)
|
||||
Expect(setupTests()).To(Succeed())
|
||||
_, err := DokkuApps()
|
||||
Expect(err).To(HaveOccurred())
|
||||
}
|
||||
|
||||
func TestCommonDokkuApps(t *testing.T) {
|
||||
RegisterTestingT(t)
|
||||
os.Setenv("PLUGIN_ENABLED_PATH", "/var/lib/dokku/plugins/enabled")
|
||||
Expect(setupTests()).To(Succeed())
|
||||
Expect(setupTestApp()).To(Succeed())
|
||||
apps, err := DokkuApps()
|
||||
Expect(err).NotTo(HaveOccurred())
|
||||
@@ -98,6 +108,7 @@ func TestCommonDokkuApps(t *testing.T) {
|
||||
|
||||
func TestCommonStripInlineComments(t *testing.T) {
|
||||
RegisterTestingT(t)
|
||||
Expect(setupTests()).To(Succeed())
|
||||
text := StripInlineComments(strings.Join([]string{testEnvLine, "# testing comment"}, " "))
|
||||
Expect(text).To(Equal(testEnvLine))
|
||||
}
|
||||
|
||||
@@ -250,23 +250,12 @@ is_valid_app_name_old() {
|
||||
verify_app_name() {
|
||||
declare desc="verify app name format and app existence"
|
||||
declare APP="$1"
|
||||
local VALID_NEW=false
|
||||
local VALID_OLD=false
|
||||
if fn-is-valid-app-name "$APP" 2>/dev/null; then
|
||||
VALID_NEW=true
|
||||
|
||||
if "$PLUGIN_CORE_AVAILABLE_PATH/common/common" --quiet verify-app-name "$APP"; then
|
||||
return 0
|
||||
fi
|
||||
|
||||
if fn-is-valid-app-name-old "$APP" 2>/dev/null; then
|
||||
VALID_OLD=true
|
||||
fi
|
||||
|
||||
if [[ "$VALID_NEW" == "false" ]] && [[ "$VALID_OLD" == "false" ]]; then
|
||||
dokku_log_fail "App name must begin with lowercase alphanumeric character, and cannot include uppercase characters, colons, or underscores"
|
||||
fi
|
||||
|
||||
[[ ! -d "$DOKKU_ROOT/$APP" ]] && DOKKU_FAIL_EXIT_CODE=20 dokku_log_fail "App $APP does not exist"
|
||||
|
||||
return 0
|
||||
DOKKU_FAIL_EXIT_CODE=20 dokku_log_fail "App $APP does not exist"
|
||||
}
|
||||
|
||||
verify_image() {
|
||||
|
||||
@@ -61,6 +61,19 @@ func LogFailWithError(err error) {
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
// LogFailWithErrorQuiet is the failure log formatter (with quiet option)
|
||||
// prints text to stderr and exits with the specified exit code
|
||||
// The error message is not printed if DOKKU_QUIET_OUTPUT has any value
|
||||
func LogFailWithErrorQuiet(err error) {
|
||||
if os.Getenv("DOKKU_QUIET_OUTPUT") == "" {
|
||||
fmt.Fprintln(os.Stderr, fmt.Sprintf(" ! %s", err.Error()))
|
||||
}
|
||||
if errExit, ok := err.(ErrWithExitCode); ok {
|
||||
os.Exit(errExit.ExitCode())
|
||||
}
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
// LogFailQuiet is the failure log formatter (with quiet option)
|
||||
// prints text to stderr and exits with status 1
|
||||
func LogFailQuiet(text string) {
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
[plugin]
|
||||
description = "dokku core common plugin"
|
||||
version = "0.27.4"
|
||||
version = "0.27.5"
|
||||
[plugin.config]
|
||||
|
||||
@@ -38,11 +38,14 @@ func main() {
|
||||
appName = "--global"
|
||||
}
|
||||
fmt.Print(common.GetAppScheduler(appName))
|
||||
case "verify-app-name":
|
||||
appName := flag.Arg(1)
|
||||
err = common.VerifyAppName(appName)
|
||||
default:
|
||||
err = fmt.Errorf("Invalid common command call: %v", cmd)
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
common.LogFailQuiet(err.Error())
|
||||
common.LogFailWithErrorQuiet(err)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,12 @@
|
||||
SUBCOMMANDS = subcommands/bundle subcommands/clear subcommands/export subcommands/get subcommands/keys subcommands/show subcommands/set subcommands/unset
|
||||
TRIGGERS = triggers/config-export triggers/config-get triggers/config-get-global
|
||||
BUILD = commands subcommands triggers
|
||||
BUILD = commands config_sub subcommands triggers
|
||||
PLUGIN_NAME = config
|
||||
|
||||
clean-config_sub:
|
||||
rm -rf config_sub
|
||||
|
||||
config_sub: clean-config_sub **/**/config_sub.go
|
||||
go build -ldflags="-s -w" $(GO_ARGS) -o config_sub src/config_sub/config_sub.go
|
||||
|
||||
include ../../common.mk
|
||||
|
||||
@@ -52,6 +52,7 @@ func SetMany(appName string, entries map[string]string, restart bool) (err error
|
||||
fmt.Println(prettyPrintEnvEntries(" ", entries))
|
||||
}
|
||||
env.Write()
|
||||
common.SetPermissions(env.Filename(), 0600)
|
||||
triggerUpdate(appName, "set", keys)
|
||||
}
|
||||
if !global && restart && env.GetBoolDefault("DOKKU_APP_RESTORE", true) {
|
||||
@@ -84,6 +85,7 @@ func UnsetMany(appName string, keys []string, restart bool) (err error) {
|
||||
}
|
||||
if changed {
|
||||
env.Write()
|
||||
common.SetPermissions(env.Filename(), 0600)
|
||||
triggerUpdate(appName, "unset", keys)
|
||||
}
|
||||
if !global && restart && env.GetBoolDefault("DOKKU_APP_RESTORE", true) {
|
||||
@@ -107,6 +109,7 @@ func UnsetAll(appName string, restart bool) (err error) {
|
||||
}
|
||||
if changed {
|
||||
env.Write()
|
||||
common.SetPermissions(env.Filename(), 0600)
|
||||
triggerUpdate(appName, "clear", []string{})
|
||||
}
|
||||
if !global && restart && env.GetBoolDefault("DOKKU_APP_RESTORE", true) {
|
||||
|
||||
@@ -18,6 +18,10 @@ var (
|
||||
globalConfigFile = strings.Join([]string{dokkuRoot, "ENV"}, "/")
|
||||
)
|
||||
|
||||
func setupTests() (err error) {
|
||||
return os.Setenv("PLUGIN_ENABLED_PATH", "/var/lib/dokku/plugins/enabled")
|
||||
}
|
||||
|
||||
func setupTestApp() (err error) {
|
||||
Expect(os.MkdirAll(testAppDir, 0766)).To(Succeed())
|
||||
b := []byte("export testKey=TESTING\n")
|
||||
@@ -38,6 +42,7 @@ func teardownTestApp() {
|
||||
|
||||
func TestConfigGetWithDefault(t *testing.T) {
|
||||
RegisterTestingT(t)
|
||||
Expect(setupTests()).To(Succeed())
|
||||
Expect(setupTestApp()).To(Succeed())
|
||||
Expect(GetWithDefault(testAppName, "unknownKey", "UNKNOWN")).To(Equal("UNKNOWN"))
|
||||
Expect(GetWithDefault(testAppName, "testKey", "testKey")).To(Equal("TESTING"))
|
||||
@@ -47,6 +52,7 @@ func TestConfigGetWithDefault(t *testing.T) {
|
||||
|
||||
func TestConfigGet(t *testing.T) {
|
||||
RegisterTestingT(t)
|
||||
Expect(setupTests()).To(Succeed())
|
||||
Expect(setupTestApp()).To(Succeed())
|
||||
defer teardownTestApp()
|
||||
|
||||
@@ -59,45 +65,48 @@ func TestConfigGet(t *testing.T) {
|
||||
|
||||
func TestConfigSetMany(t *testing.T) {
|
||||
RegisterTestingT(t)
|
||||
Expect(setupTests()).To(Succeed())
|
||||
Expect(setupTestApp()).To(Succeed())
|
||||
defer teardownTestApp()
|
||||
|
||||
expectValue(testAppName, "testKey", "TESTING")
|
||||
|
||||
vals := map[string]string{"testKey": "updated", "testKey2": "new"}
|
||||
Expect(SetMany(testAppName, vals, false)).To(Succeed())
|
||||
vals := []string{"testKey=updated", "testKey2=new"}
|
||||
Expect(CommandSet(testAppName, vals, false, true, false)).To(Succeed())
|
||||
expectValue(testAppName, "testKey", "updated")
|
||||
expectValue(testAppName, "testKey2", "new")
|
||||
|
||||
vals = map[string]string{"testKey": "updated_global", "testKey2": "new_global"}
|
||||
Expect(SetMany("", vals, false)).To(Succeed())
|
||||
vals = []string{"testKey=updated_global", "testKey2=new_global"}
|
||||
Expect(CommandSet("", vals, true, true, false)).To(Succeed())
|
||||
expectValue("", "testKey", "updated_global")
|
||||
expectValue("", "testKey2", "new_global")
|
||||
expectValue("", "globalKey", "GLOBAL_VALUE")
|
||||
expectValue(testAppName, "testKey", "updated")
|
||||
expectValue(testAppName, "testKey2", "new")
|
||||
|
||||
Expect(SetMany(testAppName+"does_not_exist", vals, false)).ToNot(Succeed())
|
||||
Expect(CommandSet(testAppName+"does_not_exist", vals, false, true, false)).ToNot(Succeed())
|
||||
}
|
||||
|
||||
func TestConfigUnsetAll(t *testing.T) {
|
||||
RegisterTestingT(t)
|
||||
Expect(setupTests()).To(Succeed())
|
||||
Expect(setupTestApp()).To(Succeed())
|
||||
defer teardownTestApp()
|
||||
|
||||
expectValue(testAppName, "testKey", "TESTING")
|
||||
expectValue("", "testKey", "GLOBAL_TESTING")
|
||||
|
||||
Expect(UnsetAll(testAppName, false)).To(Succeed())
|
||||
Expect(CommandClear(testAppName, false, true)).To(Succeed())
|
||||
expectNoValue(testAppName, "testKey")
|
||||
expectNoValue(testAppName, "noKey")
|
||||
expectNoValue(testAppName, "globalKey")
|
||||
|
||||
Expect(UnsetAll(testAppName+"does-not-exist", false)).ToNot(Succeed())
|
||||
Expect(CommandClear(testAppName+"does-not-exist", false, true)).ToNot(Succeed())
|
||||
}
|
||||
|
||||
func TestConfigUnsetMany(t *testing.T) {
|
||||
RegisterTestingT(t)
|
||||
Expect(setupTests()).To(Succeed())
|
||||
Expect(setupTestApp()).To(Succeed())
|
||||
defer teardownTestApp()
|
||||
|
||||
@@ -105,19 +114,20 @@ func TestConfigUnsetMany(t *testing.T) {
|
||||
expectValue("", "testKey", "GLOBAL_TESTING")
|
||||
|
||||
keys := []string{"testKey", "noKey"}
|
||||
Expect(UnsetMany(testAppName, keys, false)).To(Succeed())
|
||||
Expect(CommandUnset(testAppName, keys, false, true)).To(Succeed())
|
||||
expectNoValue(testAppName, "testKey")
|
||||
expectValue("", "testKey", "GLOBAL_TESTING")
|
||||
|
||||
Expect(UnsetMany(testAppName, keys, false)).To(Succeed())
|
||||
Expect(CommandUnset(testAppName, keys, false, true)).To(Succeed())
|
||||
expectNoValue(testAppName, "testKey")
|
||||
expectNoValue(testAppName, "globalKey")
|
||||
|
||||
Expect(UnsetMany(testAppName+"does-not-exist", keys, false)).ToNot(Succeed())
|
||||
Expect(CommandUnset(testAppName+"does-not-exist", keys, false, true)).ToNot(Succeed())
|
||||
}
|
||||
|
||||
func TestEnvironmentLoading(t *testing.T) {
|
||||
RegisterTestingT(t)
|
||||
Expect(setupTests()).To(Succeed())
|
||||
Expect(setupTestApp()).To(Succeed())
|
||||
defer teardownTestApp()
|
||||
|
||||
@@ -142,6 +152,7 @@ func TestEnvironmentLoading(t *testing.T) {
|
||||
|
||||
func TestInvalidKeys(t *testing.T) {
|
||||
RegisterTestingT(t)
|
||||
Expect(setupTests()).To(Succeed())
|
||||
Expect(setupTestApp()).To(Succeed())
|
||||
defer teardownTestApp()
|
||||
|
||||
@@ -158,6 +169,7 @@ func TestInvalidKeys(t *testing.T) {
|
||||
|
||||
func TestInvalidEnvOnDisk(t *testing.T) {
|
||||
RegisterTestingT(t)
|
||||
Expect(setupTests()).To(Succeed())
|
||||
Expect(setupTestApp()).To(Succeed())
|
||||
defer teardownTestApp()
|
||||
|
||||
|
||||
@@ -60,10 +60,6 @@ func newEnvFromString(rep string) (env *Env, err error) {
|
||||
|
||||
//LoadAppEnv loads an environment for the given app
|
||||
func LoadAppEnv(appName string) (env *Env, err error) {
|
||||
err = common.VerifyAppName(appName)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
appfile, err := getAppFile(appName)
|
||||
if err != nil {
|
||||
return
|
||||
@@ -92,6 +88,11 @@ func LoadGlobalEnv() (*Env, error) {
|
||||
return loadFromFile("<global>", getGlobalFile())
|
||||
}
|
||||
|
||||
// Filename returns the full path on disk to the file holding the env vars
|
||||
func (e *Env) Filename() string {
|
||||
return e.filename
|
||||
}
|
||||
|
||||
//Get an environment variable
|
||||
func (e *Env) Get(key string) (value string, ok bool) {
|
||||
value, ok = e.env[key]
|
||||
@@ -352,10 +353,6 @@ func loadFromFile(name string, filename string) (env *Env, err error) {
|
||||
}
|
||||
|
||||
func getAppFile(appName string) (string, error) {
|
||||
err := common.VerifyAppName(appName)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
return filepath.Join(common.MustGetEnv("DOKKU_ROOT"), appName, "ENV"), nil
|
||||
}
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ config_sub() {
|
||||
declare desc="executes a config subcommand"
|
||||
local name="$1"
|
||||
shift
|
||||
"$PLUGIN_AVAILABLE_PATH/config/subcommands/$name" "config:$name" "$@"
|
||||
"$PLUGIN_AVAILABLE_PATH/config/config_sub" "$name" "$@"
|
||||
}
|
||||
|
||||
config_export() {
|
||||
|
||||
@@ -1,13 +1,16 @@
|
||||
package config
|
||||
|
||||
import "fmt"
|
||||
import (
|
||||
"encoding/base64"
|
||||
"errors"
|
||||
"fmt"
|
||||
"os"
|
||||
"strings"
|
||||
|
||||
func export(appName string, global bool, merged bool, format string) error {
|
||||
appName, err := getAppNameOrGlobal(appName, global)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
"github.com/dokku/dokku/plugins/common"
|
||||
)
|
||||
|
||||
func export(appName string, merged bool, format string) error {
|
||||
env := getEnvironment(appName, merged)
|
||||
exportType := ExportFormatExports
|
||||
suffix := "\n"
|
||||
@@ -37,3 +40,113 @@ func export(appName string, global bool, merged bool, format string) error {
|
||||
fmt.Print(exported + suffix)
|
||||
return nil
|
||||
}
|
||||
|
||||
// SubBundle implements the logic for config:bundle without app name validation
|
||||
func SubBundle(appName string, merged bool) error {
|
||||
env := getEnvironment(appName, merged)
|
||||
return env.ExportBundle(os.Stdout)
|
||||
}
|
||||
|
||||
// SubClear implements the logic for config:clear without app name validation
|
||||
func SubClear(appName string, noRestart bool) error {
|
||||
return UnsetAll(appName, !noRestart)
|
||||
}
|
||||
|
||||
// SubExport implements the logic for config:export without app name validation
|
||||
func SubExport(appName string, merged bool, format string) error {
|
||||
return export(appName, merged, format)
|
||||
}
|
||||
|
||||
// SubGet implements the logic for config:get without app name validation
|
||||
func SubGet(appName string, keys []string, quoted bool) error {
|
||||
if len(keys) == 0 {
|
||||
return errors.New("Expected: key")
|
||||
}
|
||||
|
||||
if len(keys) != 1 {
|
||||
return fmt.Errorf("Unexpected argument(s): %v", keys[1:])
|
||||
}
|
||||
|
||||
value, ok := Get(appName, keys[0])
|
||||
if !ok {
|
||||
os.Exit(1)
|
||||
return nil
|
||||
}
|
||||
|
||||
if quoted {
|
||||
fmt.Printf("'%s'\n", singleQuoteEscape(value))
|
||||
} else {
|
||||
fmt.Printf("%s\n", value)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// SubKeys implements the logic for config:keys without app name validation
|
||||
func SubKeys(appName string, merged bool) error {
|
||||
env := getEnvironment(appName, merged)
|
||||
for _, k := range env.Keys() {
|
||||
fmt.Println(k)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// SubSet implements the logic for config:set without app name validation
|
||||
func SubSet(appName string, pairs []string, noRestart bool, encoded bool) error {
|
||||
if len(pairs) == 0 {
|
||||
return errors.New("At least one env pair must be given")
|
||||
}
|
||||
|
||||
updated := make(map[string]string)
|
||||
for _, e := range pairs {
|
||||
parts := strings.SplitN(e, "=", 2)
|
||||
if len(parts) == 1 {
|
||||
return fmt.Errorf("Invalid env pair: %v", e)
|
||||
}
|
||||
|
||||
key, value := parts[0], parts[1]
|
||||
if encoded {
|
||||
decoded, err := base64.StdEncoding.DecodeString(value)
|
||||
if err != nil {
|
||||
return fmt.Errorf("%s for key '%s'", err.Error(), key)
|
||||
}
|
||||
value = string(decoded)
|
||||
}
|
||||
updated[key] = value
|
||||
}
|
||||
|
||||
return SetMany(appName, updated, !noRestart)
|
||||
}
|
||||
|
||||
// SubShow implements the logic for config:show without app name validation
|
||||
func SubShow(appName string, merged bool, shell bool, export bool) error {
|
||||
env := getEnvironment(appName, merged)
|
||||
if shell && export {
|
||||
return errors.New("Only one of --shell and --export can be given")
|
||||
}
|
||||
if shell {
|
||||
common.LogWarn("Deprecated: Use 'config:export --format shell' instead")
|
||||
fmt.Print(env.Export(ExportFormatShell))
|
||||
} else if export {
|
||||
common.LogWarn("Deprecated: Use 'config:export --format exports' instead")
|
||||
fmt.Println(env.Export(ExportFormatExports))
|
||||
} else {
|
||||
contextName := "global"
|
||||
if appName != "" {
|
||||
contextName = appName
|
||||
}
|
||||
common.LogInfo2Quiet(contextName + " env vars")
|
||||
fmt.Println(env.Export(ExportFormatPretty))
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// SubUnset implements the logic for config:unset without app name validation
|
||||
func SubUnset(appName string, keys []string, noRestart bool) error {
|
||||
if len(keys) == 0 {
|
||||
return fmt.Errorf("At least one key must be given")
|
||||
}
|
||||
|
||||
return UnsetMany(appName, keys, !noRestart)
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
[plugin]
|
||||
description = "dokku core config plugin"
|
||||
version = "0.27.4"
|
||||
version = "0.27.5"
|
||||
[plugin.config]
|
||||
|
||||
112
plugins/config/src/config_sub/config_sub.go
Normal file
112
plugins/config/src/config_sub/config_sub.go
Normal file
@@ -0,0 +1,112 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
|
||||
"github.com/dokku/dokku/plugins/common"
|
||||
"github.com/dokku/dokku/plugins/config"
|
||||
|
||||
flag "github.com/spf13/pflag"
|
||||
)
|
||||
|
||||
func getKeys(args []string, global bool) []string {
|
||||
keys := args
|
||||
if !global && len(keys) > 0 {
|
||||
keys = keys[1:]
|
||||
}
|
||||
return keys
|
||||
}
|
||||
|
||||
// main entrypoint to all subcommands
|
||||
func main() {
|
||||
action := os.Args[1]
|
||||
|
||||
var err error
|
||||
appName := "--global"
|
||||
switch action {
|
||||
case "bundle":
|
||||
args := flag.NewFlagSet("bundle", flag.ExitOnError)
|
||||
global := args.Bool("global", false, "--global: use the global environment")
|
||||
merged := args.Bool("merged", false, "--merged: merge app environment and global environment")
|
||||
args.Parse(os.Args[2:])
|
||||
if !*global {
|
||||
appName = args.Arg(0)
|
||||
}
|
||||
err = config.SubBundle(appName, *merged)
|
||||
case "clear":
|
||||
args := flag.NewFlagSet("clear", flag.ExitOnError)
|
||||
global := args.Bool("global", false, "--global: use the global environment")
|
||||
noRestart := args.Bool("no-restart", false, "--no-restart: no restart")
|
||||
args.Parse(os.Args[2:])
|
||||
if !*global {
|
||||
appName = args.Arg(0)
|
||||
}
|
||||
err = config.SubClear(appName, *noRestart)
|
||||
case "export":
|
||||
args := flag.NewFlagSet("export", flag.ExitOnError)
|
||||
global := args.Bool("global", false, "--global: use the global environment")
|
||||
merged := args.Bool("merged", false, "--merged: merge app environment and global environment")
|
||||
format := args.String("format", "exports", "--format: [ docker-args | docker-args-keys | exports | envfile | json | json-list | pack-keys | pretty | shell ] which format to export as)")
|
||||
args.Parse(os.Args[2:])
|
||||
if !*global {
|
||||
appName = args.Arg(0)
|
||||
}
|
||||
err = config.SubExport(appName, *merged, *format)
|
||||
case "get":
|
||||
args := flag.NewFlagSet("get", flag.ExitOnError)
|
||||
global := args.Bool("global", false, "--global: use the global environment")
|
||||
quoted := args.Bool("quoted", false, "--quoted: get the value quoted")
|
||||
args.Parse(os.Args[2:])
|
||||
if !*global {
|
||||
appName = args.Arg(0)
|
||||
}
|
||||
keys := getKeys(args.Args(), *global)
|
||||
err = config.SubGet(appName, keys, *quoted)
|
||||
case "keys":
|
||||
args := flag.NewFlagSet("keys", flag.ExitOnError)
|
||||
global := args.Bool("global", false, "--global: use the global environment")
|
||||
merged := args.Bool("merged", false, "--merged: merge app environment and global environment")
|
||||
args.Parse(os.Args[2:])
|
||||
if !*global {
|
||||
appName = args.Arg(0)
|
||||
}
|
||||
err = config.SubKeys(appName, *merged)
|
||||
case "show":
|
||||
args := flag.NewFlagSet("show", flag.ExitOnError)
|
||||
global := args.Bool("global", false, "--global: use the global environment")
|
||||
merged := args.Bool("merged", false, "--merged: display the app's environment merged with the global environment")
|
||||
args.Parse(os.Args[2:])
|
||||
if !*global {
|
||||
appName = args.Arg(0)
|
||||
}
|
||||
err = config.SubShow(appName, *merged, false, false)
|
||||
case "set":
|
||||
args := flag.NewFlagSet("set", flag.ExitOnError)
|
||||
global := args.Bool("global", false, "--global: use the global environment")
|
||||
encoded := args.Bool("encoded", false, "--encoded: interpret VALUEs as base64")
|
||||
noRestart := args.Bool("no-restart", false, "--no-restart: no restart")
|
||||
args.Parse(os.Args[2:])
|
||||
if !*global {
|
||||
appName = args.Arg(0)
|
||||
}
|
||||
pairs := getKeys(args.Args(), *global)
|
||||
err = config.SubSet(appName, pairs, *noRestart, *encoded)
|
||||
case "unset":
|
||||
args := flag.NewFlagSet("unset", flag.ExitOnError)
|
||||
global := args.Bool("global", false, "--global: use the global environment")
|
||||
noRestart := args.Bool("no-restart", false, "--no-restart: no restart")
|
||||
args.Parse(os.Args[2:])
|
||||
if !*global {
|
||||
appName = args.Arg(0)
|
||||
}
|
||||
keys := getKeys(args.Args(), *global)
|
||||
err = config.SubUnset(appName, keys, *noRestart)
|
||||
default:
|
||||
err = fmt.Errorf("Invalid plugin config_sub call: %s", action)
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
common.LogFailWithError(err)
|
||||
}
|
||||
}
|
||||
@@ -1,156 +1,83 @@
|
||||
package config
|
||||
|
||||
import (
|
||||
"encoding/base64"
|
||||
"errors"
|
||||
"fmt"
|
||||
"os"
|
||||
"strings"
|
||||
|
||||
"github.com/dokku/dokku/plugins/common"
|
||||
)
|
||||
|
||||
// CommandBundle implements config:bundle
|
||||
// CommandBundle creates a tarball of a .env.d directory
|
||||
// containing env vars for the app
|
||||
func CommandBundle(appName string, global bool, merged bool) error {
|
||||
appName, err := getAppNameOrGlobal(appName, global)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
env := getEnvironment(appName, merged)
|
||||
return env.ExportBundle(os.Stdout)
|
||||
return SubBundle(appName, merged)
|
||||
}
|
||||
|
||||
// CommandClear implements config:clear
|
||||
// CommandClear unsets all environment variables in use
|
||||
func CommandClear(appName string, global bool, noRestart bool) error {
|
||||
appName, err := getAppNameOrGlobal(appName, global)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return UnsetAll(appName, !noRestart)
|
||||
return SubClear(appName, noRestart)
|
||||
}
|
||||
|
||||
// CommandExport implements config:export
|
||||
// CommandExport outputs all env vars (merged or not, global or not)
|
||||
// in the specified format for consumption by other tools
|
||||
func CommandExport(appName string, global bool, merged bool, format string) error {
|
||||
return export(appName, global, merged, format)
|
||||
appName, err := getAppNameOrGlobal(appName, global)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return SubExport(appName, merged, format)
|
||||
}
|
||||
|
||||
// CommandGet implements config:get
|
||||
// CommandGet gets the value for the specified environment variable
|
||||
func CommandGet(appName string, keys []string, global bool, quoted bool) error {
|
||||
appName, err := getAppNameOrGlobal(appName, global)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if len(keys) == 0 {
|
||||
return errors.New("Expected: key")
|
||||
}
|
||||
|
||||
if len(keys) != 1 {
|
||||
return fmt.Errorf("Unexpected argument(s): %v", keys[1:])
|
||||
}
|
||||
|
||||
value, ok := Get(appName, keys[0])
|
||||
if !ok {
|
||||
os.Exit(1)
|
||||
return nil
|
||||
}
|
||||
|
||||
if quoted {
|
||||
fmt.Printf("'%s'\n", singleQuoteEscape(value))
|
||||
} else {
|
||||
fmt.Printf("%s\n", value)
|
||||
}
|
||||
|
||||
return nil
|
||||
return SubGet(appName, keys, quoted)
|
||||
}
|
||||
|
||||
// CommandKeys implements config:keys
|
||||
// CommandKeys shows the keys set for the specified environment
|
||||
func CommandKeys(appName string, global bool, merged bool) error {
|
||||
appName, err := getAppNameOrGlobal(appName, global)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
env := getEnvironment(appName, merged)
|
||||
for _, k := range env.Keys() {
|
||||
fmt.Println(k)
|
||||
}
|
||||
return nil
|
||||
return SubKeys(appName, merged)
|
||||
}
|
||||
|
||||
// CommandSet implements config:set
|
||||
// CommandSet sets one or more environment variable pairs
|
||||
func CommandSet(appName string, pairs []string, global bool, noRestart bool, encoded bool) error {
|
||||
appName, err := getAppNameOrGlobal(appName, global)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if len(pairs) == 0 {
|
||||
return errors.New("At least one env pair must be given")
|
||||
}
|
||||
|
||||
updated := make(map[string]string)
|
||||
for _, e := range pairs {
|
||||
parts := strings.SplitN(e, "=", 2)
|
||||
if len(parts) == 1 {
|
||||
return fmt.Errorf("Invalid env pair: %v", e)
|
||||
}
|
||||
|
||||
key, value := parts[0], parts[1]
|
||||
if encoded {
|
||||
decoded, err := base64.StdEncoding.DecodeString(value)
|
||||
if err != nil {
|
||||
return fmt.Errorf("%s for key '%s'", err.Error(), key)
|
||||
}
|
||||
value = string(decoded)
|
||||
}
|
||||
updated[key] = value
|
||||
}
|
||||
|
||||
return SetMany(appName, updated, !noRestart)
|
||||
return SubSet(appName, pairs, noRestart, encoded)
|
||||
}
|
||||
|
||||
// CommandShow implements config:show
|
||||
// CommandShow pretty-prints the specified environment vaiables
|
||||
func CommandShow(appName string, global bool, merged bool, shell bool, export bool) error {
|
||||
appName, err := getAppNameOrGlobal(appName, global)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
env := getEnvironment(appName, merged)
|
||||
if shell && export {
|
||||
return errors.New("Only one of --shell and --export can be given")
|
||||
}
|
||||
if shell {
|
||||
common.LogWarn("Deprecated: Use 'config:export --format shell' instead")
|
||||
fmt.Print(env.Export(ExportFormatShell))
|
||||
} else if export {
|
||||
common.LogWarn("Deprecated: Use 'config:export --format exports' instead")
|
||||
fmt.Println(env.Export(ExportFormatExports))
|
||||
} else {
|
||||
contextName := "global"
|
||||
if appName != "" {
|
||||
contextName = appName
|
||||
}
|
||||
common.LogInfo2Quiet(contextName + " env vars")
|
||||
fmt.Println(env.Export(ExportFormatPretty))
|
||||
}
|
||||
|
||||
return nil
|
||||
return SubShow(appName, merged, shell, export)
|
||||
}
|
||||
|
||||
// CommandUnset implements config:unset
|
||||
// CommandUnset unsets one or more keys in a specified environment
|
||||
func CommandUnset(appName string, keys []string, global bool, noRestart bool) error {
|
||||
appName, err := getAppNameOrGlobal(appName, global)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if len(keys) == 0 {
|
||||
return fmt.Errorf("At least one key must be given")
|
||||
}
|
||||
|
||||
return UnsetMany(appName, keys, !noRestart)
|
||||
return SubUnset(appName, keys, noRestart)
|
||||
}
|
||||
|
||||
@@ -16,7 +16,13 @@ func TriggerConfigExport(appName string, global string, merged string, format st
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return export(appName, g, m, format)
|
||||
|
||||
appName, err = getAppNameOrGlobal(appName, g)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return export(appName, m, format)
|
||||
}
|
||||
|
||||
// TriggerConfigGet returns an app config value by key
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
[plugin]
|
||||
description = "dokku core cron plugin"
|
||||
version = "0.27.4"
|
||||
version = "0.27.5"
|
||||
[plugin.config]
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
[plugin]
|
||||
description = "dokku core docker-options plugin"
|
||||
version = "0.27.4"
|
||||
version = "0.27.5"
|
||||
[plugin.config]
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
[plugin]
|
||||
description = "dokku core domains plugin"
|
||||
version = "0.27.4"
|
||||
version = "0.27.5"
|
||||
[plugin.config]
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
[plugin]
|
||||
description = "dokku core enter plugin"
|
||||
version = "0.27.4"
|
||||
version = "0.27.5"
|
||||
[plugin.config]
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
[plugin]
|
||||
description = "dokku core git plugin"
|
||||
version = "0.27.4"
|
||||
version = "0.27.5"
|
||||
[plugin.config]
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
[plugin]
|
||||
description = "dokku core logs plugin"
|
||||
version = "0.27.4"
|
||||
version = "0.27.5"
|
||||
[plugin.config]
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
[plugin]
|
||||
description = "dokku core network plugin"
|
||||
version = "0.27.4"
|
||||
version = "0.27.5"
|
||||
[plugin.config]
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
[plugin]
|
||||
description = "dokku core nginx-vhosts plugin"
|
||||
version = "0.27.4"
|
||||
version = "0.27.5"
|
||||
[plugin.config]
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
[plugin]
|
||||
description = "dokku core plugin plugin"
|
||||
version = "0.27.4"
|
||||
version = "0.27.5"
|
||||
[plugin.config]
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
[plugin]
|
||||
description = "dokku core proxy plugin"
|
||||
version = "0.27.4"
|
||||
version = "0.27.5"
|
||||
[plugin.config]
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
[plugin]
|
||||
description = "dokku core ps plugin"
|
||||
version = "0.27.4"
|
||||
version = "0.27.5"
|
||||
[plugin.config]
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
[plugin]
|
||||
description = "dokku core registry plugin"
|
||||
version = "0.27.4"
|
||||
version = "0.27.5"
|
||||
[plugin.config]
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
[plugin]
|
||||
description = "dokku core repo plugin"
|
||||
version = "0.27.4"
|
||||
version = "0.27.5"
|
||||
[plugin.config]
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
[plugin]
|
||||
description = "dokku core resource plugin"
|
||||
version = "0.27.4"
|
||||
version = "0.27.5"
|
||||
[plugin.config]
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
[plugin]
|
||||
description = "dokku core run plugin"
|
||||
version = "0.27.4"
|
||||
version = "0.27.5"
|
||||
[plugin.config]
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
[plugin]
|
||||
description = "dokku core scheduler-docker-local plugin"
|
||||
version = "0.27.4"
|
||||
version = "0.27.5"
|
||||
[plugin.config]
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
[plugin]
|
||||
description = "dokku core scheduler-null plugin"
|
||||
version = "0.27.4"
|
||||
version = "0.27.5"
|
||||
[plugin.config]
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
[plugin]
|
||||
description = "dokku core scheduler plugin"
|
||||
version = "0.27.4"
|
||||
version = "0.27.5"
|
||||
[plugin.config]
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
[plugin]
|
||||
description = "dokku core shell plugin"
|
||||
version = "0.27.4"
|
||||
version = "0.27.5"
|
||||
[plugin.config]
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
[plugin]
|
||||
description = "dokku core ssh-keys plugin"
|
||||
version = "0.27.4"
|
||||
version = "0.27.5"
|
||||
[plugin.config]
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
[plugin]
|
||||
description = "dokku core storage plugin"
|
||||
version = "0.27.4"
|
||||
version = "0.27.5"
|
||||
[plugin.config]
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
[plugin]
|
||||
description = "dokku core trace plugin"
|
||||
version = "0.27.4"
|
||||
version = "0.27.5"
|
||||
[plugin.config]
|
||||
|
||||
14
tests/apps/multi/package-lock.json
generated
14
tests/apps/multi/package-lock.json
generated
@@ -11,7 +11,7 @@
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
"bower": "^1.8.0",
|
||||
"grunt": "~1.5.2",
|
||||
"grunt": "~1.5.3",
|
||||
"grunt-cli": "~1.4.3",
|
||||
"grunt-contrib-compass": "~1.1.1",
|
||||
"load-grunt-tasks": "~5.1.0",
|
||||
@@ -517,9 +517,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/grunt": {
|
||||
"version": "1.5.2",
|
||||
"resolved": "https://registry.npmjs.org/grunt/-/grunt-1.5.2.tgz",
|
||||
"integrity": "sha512-XCtfaIu72OyDqK24MjWiGC9SwlkuhkS1mrULr1xzuJ2XqAFhP3ZAchZGHJeSCY6mkaOXU4F7SbmmCF7xIVoC9w==",
|
||||
"version": "1.5.3",
|
||||
"resolved": "https://registry.npmjs.org/grunt/-/grunt-1.5.3.tgz",
|
||||
"integrity": "sha512-mKwmo4X2d8/4c/BmcOETHek675uOqw0RuA/zy12jaspWqvTp4+ZeQF1W+OTpcbncnaBsfbQJ6l0l4j+Sn/GmaQ==",
|
||||
"dependencies": {
|
||||
"dateformat": "~3.0.3",
|
||||
"eventemitter2": "~0.4.13",
|
||||
@@ -2110,9 +2110,9 @@
|
||||
}
|
||||
},
|
||||
"grunt": {
|
||||
"version": "1.5.2",
|
||||
"resolved": "https://registry.npmjs.org/grunt/-/grunt-1.5.2.tgz",
|
||||
"integrity": "sha512-XCtfaIu72OyDqK24MjWiGC9SwlkuhkS1mrULr1xzuJ2XqAFhP3ZAchZGHJeSCY6mkaOXU4F7SbmmCF7xIVoC9w==",
|
||||
"version": "1.5.3",
|
||||
"resolved": "https://registry.npmjs.org/grunt/-/grunt-1.5.3.tgz",
|
||||
"integrity": "sha512-mKwmo4X2d8/4c/BmcOETHek675uOqw0RuA/zy12jaspWqvTp4+ZeQF1W+OTpcbncnaBsfbQJ6l0l4j+Sn/GmaQ==",
|
||||
"requires": {
|
||||
"dateformat": "~3.0.3",
|
||||
"eventemitter2": "~0.4.13",
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
"author": "Al Johri",
|
||||
"dependencies": {
|
||||
"bower": "^1.8.0",
|
||||
"grunt": "~1.5.2",
|
||||
"grunt": "~1.5.3",
|
||||
"grunt-cli": "~1.4.3",
|
||||
"grunt-contrib-compass": "~1.1.1",
|
||||
"load-grunt-tasks": "~5.1.0",
|
||||
|
||||
10
tests/apps/php/composer.lock
generated
10
tests/apps/php/composer.lock
generated
@@ -1000,16 +1000,16 @@
|
||||
"packages-dev": [
|
||||
{
|
||||
"name": "heroku/heroku-buildpack-php",
|
||||
"version": "v216",
|
||||
"version": "v217",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/heroku/heroku-buildpack-php.git",
|
||||
"reference": "78a95ba0abdadf2546178d5a2f9ab8d9dcac092d"
|
||||
"reference": "5e95230f28b8d2375b27cc54cf3d78ef885f5b78"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/heroku/heroku-buildpack-php/zipball/78a95ba0abdadf2546178d5a2f9ab8d9dcac092d",
|
||||
"reference": "78a95ba0abdadf2546178d5a2f9ab8d9dcac092d",
|
||||
"url": "https://api.github.com/repos/heroku/heroku-buildpack-php/zipball/5e95230f28b8d2375b27cc54cf3d78ef885f5b78",
|
||||
"reference": "5e95230f28b8d2375b27cc54cf3d78ef885f5b78",
|
||||
"shasum": ""
|
||||
},
|
||||
"bin": [
|
||||
@@ -1037,7 +1037,7 @@
|
||||
"nginx",
|
||||
"php"
|
||||
],
|
||||
"time": "2022-04-14T16:00:42+00:00"
|
||||
"time": "2022-05-18T19:16:45+00:00"
|
||||
}
|
||||
],
|
||||
"aliases": [],
|
||||
|
||||
@@ -5,7 +5,7 @@ GEM
|
||||
eventmachine (1.2.7)
|
||||
mustermann (1.1.1)
|
||||
ruby2_keywords (~> 0.0.1)
|
||||
rack (2.2.3)
|
||||
rack (2.2.3.1)
|
||||
rack-protection (2.2.0)
|
||||
rack
|
||||
ruby2_keywords (0.0.5)
|
||||
|
||||
Reference in New Issue
Block a user