diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 7b1d82267..f0a2a7825 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -31,9 +31,10 @@ ], "overrideCommand": false, "postCreateCommand": "setup-dev-env", + "postStartCommand": "printenv > .vscode/devcontainer.env", "runArgs": [ "--init" ], "workspaceFolder": "/root/go/src/github.com/dokku/dokku", "workspaceMount": "type=bind,source=${localWorkspaceFolder},target=/root/go/src/github.com/dokku/dokku,consistency=cached" -} +} \ No newline at end of file diff --git a/.github/commands/bump-azure b/.github/commands/bump-azure index a40c381b0..fbb0b27b5 100755 --- a/.github/commands/bump-azure +++ b/.github/commands/bump-azure @@ -18,7 +18,11 @@ main() { cd tmp - $GH_FOLDER/bin/gh auth login --with-token <<<"$BOT_GITHUB_API_TOKEN" + if [[ -n "$BOT_GITHUB_API_TOKEN" ]]; then + $GH_FOLDER/bin/gh auth login --with-token <<<"$BOT_GITHUB_API_TOKEN" + else + echo "BOT_GITHUB_API_TOKEN is not set, skipping gh auth login" + fi echo "=====> Cloning quickstart templates" rm -rf azure-quickstart-templates >/dev/null @@ -35,15 +39,29 @@ main() { contents="$(jq --arg VERSION "$VERSION" '.parameters.dokkuVersion.defaultValue = $VERSION' application-workloads/dokku/dokku-vm/azuredeploy.json)" echo "${contents}" >application-workloads/dokku/dokku-vm/azuredeploy.json + # update the version in main.bicep + # the line being updated looks like this: + # param dokkuVersion string = '0.28.4' + # we need to update the value of dokkuVersion to the new version + sed -i "s/param dokkuVersion string = '[^']*'/param dokkuVersion string = '$VERSION'/" application-workloads/dokku/dokku-vm/main.bicep + echo "=====> Updating remote repository" git add application-workloads/dokku/dokku-vm git checkout -b dokku-$VERSION git commit -m "Update dokku-vm dokku version to $VERSION" - git remote set-url origin "https://$BOT_GITHUB_USERNAME:$BOT_GITHUB_API_TOKEN@github.com/dokku/azure-quickstart-templates.git" - git push -f origin dokku-$VERSION + if [[ -z "$BOT_GITHUB_API_TOKEN" ]] || [[ -z "$BOT_GITHUB_USERNAME" ]]; then + echo "BOT_GITHUB_API_TOKEN or BOT_GITHUB_USERNAME is not set, skipping git remote set-url" + else + git remote set-url origin "https://$BOT_GITHUB_USERNAME:$BOT_GITHUB_API_TOKEN@github.com/dokku/azure-quickstart-templates.git" + git push -f origin dokku-$VERSION + fi - echo "=====> Creating upstream pull request" - ../$GH_FOLDER/bin/gh pr create --head dokku:dokku-$VERSION --repo Azure/azure-quickstart-templates --title "Update dokku-vm dokku version to $VERSION" --body '' + if [[ -z "$BOT_GITHUB_API_TOKEN" ]] || [[ -z "$BOT_GITHUB_USERNAME" ]]; then + echo "BOT_GITHUB_API_TOKEN or BOT_GITHUB_USERNAME is not set, skipping gh pr create" + else + echo "=====> Creating upstream pull request" + ../$GH_FOLDER/bin/gh pr create --head dokku:dokku-$VERSION --repo Azure/azure-quickstart-templates --title "Update dokku-vm dokku version to $VERSION" --body '' + fi popd &>/dev/null } diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 5961e8dee..026074260 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -134,6 +134,13 @@ updates: open-pull-requests-limit: 2 labels: - "type: dependencies" + - package-ecosystem: gomod + directory: "/plugins/scheduler-k3s" + schedule: + interval: daily + open-pull-requests-limit: 2 + labels: + - "type: dependencies" - package-ecosystem: gomod directory: "/plugins/scheduler" schedule: @@ -267,6 +274,13 @@ updates: open-pull-requests-limit: 10 labels: - "type: dependencies" + - package-ecosystem: npm + directory: "/tests/apps/multi" + schedule: + interval: daily + open-pull-requests-limit: 10 + labels: + - "type: dependencies" - package-ecosystem: npm directory: "/tests/apps/nodejs-express" schedule: @@ -309,13 +323,6 @@ updates: open-pull-requests-limit: 10 labels: - "type: dependencies" - - package-ecosystem: npm - directory: "/tests/apps/.websocket.disabled" - schedule: - interval: daily - open-pull-requests-limit: 10 - labels: - - "type: dependencies" - package-ecosystem: github-actions directory: "/" schedule: diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index a456307be..1527e5964 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -24,7 +24,7 @@ jobs: skip: ${{ steps.check-commit.outputs.skip }} steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 with: ref: ${{ github.event.pull_request.head.sha }} @@ -53,7 +53,7 @@ jobs: timeout-minutes: 45 steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - name: set up qemu uses: docker/setup-qemu-action@v3 @@ -87,7 +87,7 @@ jobs: timeout-minutes: 20 steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - name: build-image uses: ./.github/actions/build-image @@ -97,11 +97,11 @@ jobs: build-image-arm64: name: build-image.linux/arm64 needs: build - runs-on: buildjet-4vcpu-ubuntu-2204-arm + runs-on: ubuntu-24.04-arm timeout-minutes: 20 steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - name: build-image uses: ./.github/actions/build-image @@ -117,10 +117,10 @@ jobs: matrix: ${{fromJson(needs.build.outputs.matrix)}} steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - name: download packages - uses: actions/download-artifact@v4 + uses: actions/download-artifact@v5 with: name: build path: build @@ -156,10 +156,10 @@ jobs: fail-fast: false steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - name: download packages - uses: actions/download-artifact@v4 + uses: actions/download-artifact@v5 with: name: build path: build @@ -190,10 +190,10 @@ jobs: GITHUB_NODE_INDEX: ${{ matrix.index }} steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - name: download packages - uses: actions/download-artifact@v4 + uses: actions/download-artifact@v5 with: name: build path: build @@ -230,7 +230,7 @@ jobs: steps: - name: download test-results - uses: actions/download-artifact@v4 + uses: actions/download-artifact@v5 with: path: test-results diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 0dca14ef4..4fe4fe5ab 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -42,7 +42,7 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@v4 + uses: actions/checkout@v5 # workaround for https://github.com/github/codeql/issues/14235 - name: Remove go.work file diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index 36a50067f..e58b3548c 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -16,12 +16,12 @@ jobs: runs-on: ubuntu-24.04 steps: - name: Cloning repo - uses: actions/checkout@v4 + uses: actions/checkout@v5 with: fetch-depth: 0 - name: "Setup python 3.10" - uses: actions/setup-python@v5 + uses: actions/setup-python@v6 with: python-version: '3.10' diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 83ba7affb..ecbf36432 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -20,9 +20,9 @@ jobs: runs-on: ubuntu-24.04 steps: - name: Clone - uses: actions/checkout@v4 + uses: actions/checkout@v5 - name: Run hadolint - uses: hadolint/hadolint-action@54c9adbab1582c2ef04b2016b760714a4bfde3cf + uses: hadolint/hadolint-action@2332a7b74a6de0dda2e2221d575162eba76ba5e5 # v3.0.0 => 4b5806eb9c6bee4954fc0e0cc3ad6175fc9782c1 markdown-lint: @@ -30,9 +30,9 @@ jobs: runs-on: ubuntu-24.04 steps: - name: Clone - uses: actions/checkout@v4 + uses: actions/checkout@v5 - name: Setup node - uses: actions/setup-node@v4 + uses: actions/setup-node@v5 with: node-version: '20' cache: 'npm' @@ -47,7 +47,7 @@ jobs: runs-on: ubuntu-24.04 steps: - name: Checkout code - uses: actions/checkout@v4 + uses: actions/checkout@v5 - name: Setup packer uses: hashicorp/setup-packer@main with: @@ -56,15 +56,9 @@ jobs: run: "make image/init/digitalocean" env: PACKER_GITHUB_API_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - name: Get changed files in the docs folder - id: changed-files-specific - uses: tj-actions/changed-files@v45.0.6 - with: - files: contrib/images/digitalocean/** - name: Run `packer validate` env: DIGITALOCEAN_TOKEN: ${{ secrets.DIGITALOCEAN_TOKEN }} - if: steps.changed-files-specific.outputs.any_changed == 'true' run: "make image/validate/digitalocean" shellcheck: @@ -72,7 +66,7 @@ jobs: runs-on: ubuntu-24.04 steps: - name: Clone - uses: actions/checkout@v4 + uses: actions/checkout@v5 - name: Run shellcheck uses: ludeeus/action-shellcheck@00cae500b08a931fb5698e11e79bfbd38e612a38 # 1.1.0 => 94e0aab03ca135d11a35e5bfc14e6746dc56e7e9 @@ -82,7 +76,7 @@ jobs: runs-on: ubuntu-24.04 steps: - name: Clone - uses: actions/checkout@v4 + uses: actions/checkout@v5 - name: Run shfmt uses: luizm/action-sh-checker@17bd25a6ee188d2b91f677060038f4ba37ba14b2 # v0.5.0 => edd0e45ecff35b05f162052b50df50976c1b74fc @@ -96,7 +90,7 @@ jobs: runs-on: ubuntu-24.04 steps: - name: Clone - uses: actions/checkout@v4 + uses: actions/checkout@v5 - name: Run yamllint uses: ibiqlik/action-yamllint@2576378a8e339169678f9939646ee3ee325e845c # v3.1.1 => 2576378a8e339169678f9939646ee3ee325e845c diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index b57ece2d0..e0ea6e94b 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -25,7 +25,7 @@ jobs: outputs: version: ${{ steps.version.outputs.version }} steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 with: fetch-depth: 0 @@ -84,7 +84,7 @@ jobs: needs: release steps: - name: Checkout code - uses: actions/checkout@v4 + uses: actions/checkout@v5 - name: Setup packer uses: hashicorp/setup-packer@main @@ -120,7 +120,7 @@ jobs: needs: release steps: - name: Checkout code - uses: actions/checkout@v4 + uses: actions/checkout@v5 - name: Bump Azure Template env: BOT_GITHUB_USERNAME: ${{ secrets.HOMEBREW_GITHUB_USERNAME }} @@ -147,6 +147,10 @@ jobs: brew untap homebrew/core || true echo "====> Untapping homebrew/cask" brew untap homebrew/cask || true + echo "====> Untapping aws/tap" + brew untap aws/tap || true + echo "====> Untapping hashicorp/tap" + brew untap hashicorp/tap || true echo "====> Uninstalling openssl@1.1" brew uninstall openssl@1.1 || true echo "====> Uninstalling ruby@3.0" @@ -154,7 +158,7 @@ jobs: echo "====> Running brew cleanup" brew cleanup || true - name: Brew doctor - run: brew doctor + run: brew doctor || true - name: Brew config run: brew config - name: Bump Homebrew Formula diff --git a/Dockerfile b/Dockerfile index fa6bbc546..f598c5230 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM phusion/baseimage:noble-1.0.0 +FROM phusion/baseimage:noble-1.0.2 CMD ["/sbin/my_init"] @@ -16,15 +16,23 @@ RUN addgroup --gid $DOKKU_GID dokku \ COPY ./tests/dhparam.pem /tmp/dhparam.pem COPY ./build/package/ /tmp +ENV DOKKU_INIT_SYSTEM=sv + SHELL ["/bin/bash", "-o", "pipefail", "-c"] # hadolint ignore=DL3005,DL3008 RUN mkdir -p /etc/apt/keyrings \ && mkdir -p /etc/apt/keyrings \ - && apt-get remove -y systemd && apt-get autoremove -y && apt-get update && apt-get install -y --no-install-recommends gpg lsb-release \ + && apt-get remove -y systemd && apt-get autoremove -y && apt-get update && apt-get -y --no-install-recommends install gpg lsb-release openssl openssh-server rsync software-properties-common \ && curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg \ && echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null \ + && add-apt-repository ppa:cncf-buildpacks/pack-cli \ && apt-get update \ - && apt-get -y --no-install-recommends install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin \ + && apt-get -y --no-install-recommends install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin pack-cli \ + && curl -o /tmp/nixpacks.bash -sSL https://nixpacks.com/install.sh \ + && chmod +x /tmp/nixpacks.bash \ + && NIXPACKS_BIN_DIR=/usr/bin BIN_DIR=/usr/bin /tmp/nixpacks.bash \ + && test -x /usr/bin/nixpacks \ + && rm -rf /tmp/nixpacks.bash \ && echo "dokku dokku/hostname string $DOKKU_HOSTNAME" | debconf-set-selections \ && echo "dokku dokku/skip_key_file boolean $DOKKU_SKIP_KEY_FILE" | debconf-set-selections \ && echo "dokku dokku/vhost_enable boolean $DOKKU_VHOST_ENABLE" | debconf-set-selections \ @@ -34,8 +42,7 @@ RUN mkdir -p /etc/apt/keyrings \ && cp /tmp/dhparam.pem /etc/nginx/dhparam.pem \ && apt-get update \ && apt-get upgrade -y \ - && apt-get -y --no-install-recommends --only-upgrade install openssl openssh-server \ - && DOKKU_INIT_SYSTEM=sv apt-get -y --no-install-recommends install rsync "/tmp/dokku-$(dpkg --print-architecture).deb" \ + && apt-get -y --no-install-recommends install lambda-builder "/tmp/dokku-$(dpkg --print-architecture).deb" \ && apt-get purge -y syslog-ng-core \ && apt-get autoremove -y \ && apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* diff --git a/HISTORY.md b/HISTORY.md index d3697b2e5..9a8fad043 100644 --- a/HISTORY.md +++ b/HISTORY.md @@ -1,5 +1,617 @@ # History +## 0.36.7 + +Install/update via the bootstrap script: + +```shell +wget -NP . https://dokku.com/install/v0.36.7/bootstrap.sh +sudo DOKKU_TAG=v0.36.7 bash bootstrap.sh +``` + +### Bug Fixes + +- #7981: @josegonzalez Only install software-properties-common on Ubuntu and older Debian installations +- #7979: @josegonzalez Skip invalid apps when listing applications +- #7977: @kminek Remove server_tokens directive from main nginx config if present (com… +- #7974: @josegonzalez Ensure lsb_release is available on debian systems + +### New Features + +- #7978: @josegonzalez Add ability to list global cron tasks +- #7975: @josegonzalez Create SecurityContext for k3s scheduler from docker-options + +### Dependencies + +- #7972: @dependabot[bot] chore(deps): bump k8s.io/kubectl from 0.34.0 to 0.34.1 in /plugins/scheduler-k3s +- #7973: @dependabot[bot] chore(deps): bump helm.sh/helm/v3 from 3.18.6 to 3.19.0 in /plugins/scheduler-k3s +- #7971: @dependabot[bot] chore(deps): bump k8s.io/client-go from 0.34.0 to 0.34.1 in /plugins/scheduler-k3s +- #7970: @dependabot[bot] chore(deps): bump k8s.io/api from 0.34.0 to 0.34.1 in /plugins/scheduler-k3s +- #7966: @dependabot[bot] chore(deps): bump github.com/fluxcd/pkg/kustomize from 1.19.0 to 1.22.0 in /plugins/scheduler-k3s +- #7963: @dependabot[bot] chore(deps): bump google.golang.org/grpc from 1.75.0 to 1.75.1 in /tests/apps/gogrpc +- #7964: @dependabot[bot] chore(deps): bump traefik from 3.5.1 to 3.5.2 in /plugins/traefik-vhosts +- #7965: @dependabot[bot] chore(deps): bump k8s.io/apimachinery from 0.34.0 to 0.34.1 in /plugins/scheduler-k3s +- #7961: @dependabot[bot] chore(deps): bump golang.org/x/crypto from 0.41.0 to 0.42.0 in /plugins/common +- #7960: @dependabot[bot] chore(deps): bump google.golang.org/protobuf from 1.36.8 to 1.36.9 in /tests/apps/gogrpc + +### Other + +- #7968: @josegonzalez chore: bump herokuish version from 0.11.0 to 0.11.3 +- #7962: @dependabot[bot] chore(deps): bump django from 5.1.10 to 5.1.12 in /tests/apps/dockerfile-release + +## 0.36.6 + +Install/update via the bootstrap script: + +```shell +wget -NP . https://dokku.com/install/v0.36.6/bootstrap.sh +sudo DOKKU_TAG=v0.36.6 bash bootstrap.sh +``` + +### Bug Fixes + +- #7955: @josegonzalez Ensure that the nixpacks bin is installed in /usr/bin/nixpacks in Docker image +- #7953: @josegonzalez Set correct label for nixpacks builder +- #7942: @josegonzalez Ensure the code is copied over to the new app on clone or rebase +- #7941: @josegonzalez Do not generate an https url when there is no SSL certificate +- #7940: @josegonzalez Silence openresty extract warnings during the deploy process + +### Tests + +- #7954: @josegonzalez Respect DOKKU_DOMAIN when deploying in tests +- #7943: @josegonzalez Remove unused test app +- #7939: @josegonzalez Add test for ensuring run commands work with pack-based builds + +### Dependencies + +- #7958: @dependabot[bot] chore(deps): bump helm.sh/helm/v3 from 3.18.5 to 3.18.6 in /plugins/scheduler-k3s +- #7952: @dependabot[bot] chore(deps): bump golang.org/x/sync from 0.16.0 to 0.17.0 in /plugins/common +- #7951: @dependabot[bot] chore(deps): bump golang from 1.25.0 to 1.25.1 in /tests/apps/gogrpc +- #7950: @dependabot[bot] chore(deps): bump golang from 1.25.0 to 1.25.1 in /tests/apps/go-fail-postdeploy +- #7949: @dependabot[bot] chore(deps): bump golang from 1.25.0 to 1.25.1 in /tests/apps/zombies-dockerfile-no-tini +- #7947: @dependabot[bot] chore(deps): bump golang from 1.25.0 to 1.25.1 in /tests/apps/zombies-dockerfile-tini +- #7945: @dependabot[bot] chore(deps): bump golang from 1.25.0 to 1.25.1 in /tests/apps/go-fail-predeploy +- #7946: @dependabot[bot] chore(deps): bump mkdocs-material from 9.6.18 to 9.6.19 in /docs/_build + +## 0.36.5 + +Install/update via the bootstrap script: + +```shell +wget -NP . https://dokku.com/install/v0.36.5/bootstrap.sh +sudo DOKKU_TAG=v0.36.5 bash bootstrap.sh +``` + +### New Features + +- #7937: @josegonzalez Add support for Debian Trixie + +## 0.36.4 + +Install/update via the bootstrap script: + +```shell +wget -NP . https://dokku.com/install/v0.36.4/bootstrap.sh +sudo DOKKU_TAG=v0.36.4 bash bootstrap.sh +``` + +### Bug Fixes + +- #7914: @josegonzalez Fix nginx configuration building in k3s scheduler + +### Dependencies + +- #7935: @dependabot[bot] chore(deps): update markdown requirement from <3.9,>=3.2.1 to >=3.2.1,<3.10 in /docs/_build +- #7936: @dependabot[bot] chore(deps): bump github.com/go-openapi/jsonpointer from 0.21.2 to 0.22.0 in /plugins/scheduler-k3s +- #7931: @dependabot[bot] chore(deps): bump github.com/traefik/traefik/v2 from 2.11.28 to 2.11.29 in /plugins/scheduler-k3s +- #7932: @dependabot[bot] chore(deps): bump actions/setup-python from 5 to 6 +- #7933: @dependabot[bot] chore(deps): bump actions/setup-node from 4 to 5 +- #7934: @dependabot[bot] chore(deps): bump hadolint/hadolint-action from 3.1.0 to 3.2.0 +- #7920: @dependabot[bot] chore(deps): bump github.com/spf13/pflag from 1.0.9 to 1.0.10 in /plugins/common +- #7887: @dependabot[bot] chore(deps): bump github.com/onsi/gomega from 1.38.0 to 1.38.2 in /plugins/common +- #7847: @dependabot[bot] chore(deps): bump timberio/vector from 0.48.0-debian to 0.49.0-debian in /plugins/logs +- #7890: @dependabot[bot] chore(deps): bump k8s.io/kubernetes from 1.33.2 to 1.34.0 in /plugins/scheduler-k3s +- #7881: @dependabot[bot] chore(deps): bump byjg/easy-haproxy from 4.5.0 to 4.6.0 in /plugins/haproxy-vhosts +- #7880: @dependabot[bot] chore(deps): bump beautifulsoup4 from 4.13.4 to 4.13.5 in /docs/_build +- #7888: @dependabot[bot] chore(deps): bump soupsieve from 2.7 to 2.8 in /docs/_build +- #7902: @dependabot[bot] chore(deps): bump github.com/spf13/pflag from 1.0.7 to 1.0.9 in /plugins/common +- #7891: @dependabot[bot] chore(deps): bump k8s.io/kubectl from 0.33.3 to 0.34.0 in /plugins/scheduler-k3s +- #7895: @dependabot[bot] chore(deps): bump traefik from 3.5.0 to 3.5.1 in /plugins/traefik-vhosts + +## 0.36.3 + +Install/update via the bootstrap script: + +```shell +wget -NP . https://dokku.com/install/v0.36.3/bootstrap.sh +sudo DOKKU_TAG=v0.36.3 bash bootstrap.sh +``` + +### New Features + +- #7878: @josegonzalez Allow specifying base64-encoded values in vector-sink DSN urls + +### Dependencies + +- #7873: @dependabot[bot] chore(deps): bump github.com/go-openapi/jsonpointer from 0.21.1 to 0.21.2 in /plugins/scheduler-k3s +- #7874: @dependabot[bot] chore(deps): bump k8s.io/api from 0.33.3 to 0.33.4 in /plugins/scheduler-k3s +- #7875: @dependabot[bot] chore(deps): bump mkdocs-material from 9.6.17 to 9.6.18 in /docs/_build + +## 0.36.2 + +Install/update via the bootstrap script: + +```shell +wget -NP . https://dokku.com/install/v0.36.2/bootstrap.sh +sudo DOKKU_TAG=v0.36.2 bash bootstrap.sh +``` + +### Bug Fixes + +- #7872: @josegonzalez Correct issues when scaling non-web processes for the scheduler-k3s plugin + +### Refactors + +- #7871: @josegonzalez Remove public exposure of DOKKU_APP_TYPE in favor of builder detected property + +### Dependencies + +- #7868: @dependabot[bot] chore(deps): bump grunt-cli from 1.4.3 to 1.5.0 in /tests/apps/multi +- #7869: @dependabot[bot] chore(deps): bump bower from 1.8.12 to 1.8.14 in /tests/apps/multi +- #7870: @dependabot[bot] chore(deps): bump tmp from 0.2.4 to 0.2.5 in /tests/apps/multi +- #7867: @dependabot[bot] chore(deps): bump grunt from 1.5.3 to 1.6.1 in /tests/apps/multi +- #7866: @dependabot[bot] chore(deps): bump github.com/fluxcd/pkg/kustomize from 1.18.0 to 1.19.0 in /plugins/scheduler-k3s +- #7862: @dependabot[bot] chore(deps): bump google.golang.org/protobuf from 1.36.7 to 1.36.8 in /tests/apps/gogrpc + +### Other + +- #7864: @josegonzalez chore(deps): add dependabot entries for plugins/scheduler-k3s and tests/apps/multi + +## 0.36.1 + +Install/update via the bootstrap script: + +```shell +wget -NP . https://dokku.com/install/v0.36.1/bootstrap.sh +sudo DOKKU_TAG=v0.36.1 bash bootstrap.sh +``` + +### Bug Fixes + +- #7846: @josegonzalez Correct issue in parsing escaped plus signs in vector sink values +- #7841: @leksyib14 Fix handling of equals sign in vector sink values +- #7844: @josegonzalez Do not change permissions on config directory symlinks + +### Tests + +- #7848: @josegonzalez Ensure tests properly fetch data from json output +- #7845: @josegonzalez Use the official github actions arm64 runner + +### Dependencies + +- #7861: @dependabot[bot] chore(deps): bump google.golang.org/grpc from 1.74.2 to 1.75.0 in /tests/apps/gogrpc +- #7860: @dependabot[bot] chore(deps): bump flask from 3.1.1 to 3.1.2 in /tests/apps/python-flask +- #7859: @dependabot[bot] chore(deps): bump flask from 3.1.1 to 3.1.2 in /tests/apps/multi +- #7856: @dependabot[bot] chore(deps): bump mkdocs-material from 9.6.16 to 9.6.17 in /docs/_build +- #7857: @dependabot[bot] chore(deps): bump python from 3.13.6-alpine to 3.13.7-alpine in /docs/_build +- #7858: @dependabot[bot] chore(deps): bump python from 3.13.6-bookworm to 3.13.7-bookworm in /tests/apps/dockerfile-release +- #7855: @dependabot[bot] chore(deps): bump org.eclipse.jetty:jetty-servlet from 11.0.25 to 11.0.26 in /tests/apps/java +- #7849: @dependabot[bot] chore(deps): bump golang from 1.24.6 to 1.25.0 in /tests/apps/zombies-dockerfile-tini +- #7850: @dependabot[bot] chore(deps): bump golang from 1.24.6 to 1.25.0 in /tests/apps/go-fail-predeploy +- #7851: @dependabot[bot] chore(deps): bump golang from 1.24.6 to 1.25.0 in /tests/apps/go-fail-postdeploy +- #7852: @dependabot[bot] chore(deps): bump golang from 1.24.6 to 1.25.0 in /tests/apps/gogrpc +- #7853: @dependabot[bot] chore(deps): bump golang from 1.24.6 to 1.25.0 in /tests/apps/zombies-dockerfile-no-tini +- #7842: @dependabot[bot] chore(deps): bump actions/checkout from 4 to 5 +- #7821: @dependabot[bot] chore(deps): bump traefik from 3.4.4 to 3.5.0 in /plugins/traefik-vhosts +- #7843: @josegonzalez Bump go modules +- #7824: @dependabot[bot] chore(deps): bump mkdocs-material from 9.6.15 to 9.6.16 in /docs/_build +- #7823: @dependabot[bot] chore(deps): bump pymdown-extensions from 10.16 to 10.16.1 in /docs/_build +- #7831: @dependabot[bot] chore(deps): bump google.golang.org/protobuf from 1.36.6 to 1.36.7 in /tests/apps/gogrpc +- #7839: @dependabot[bot] chore(deps): bump python from 3.13.5-bookworm to 3.13.6-bookworm in /tests/apps/dockerfile-release +- #7838: @dependabot[bot] chore(deps): bump python from 3.13.5-alpine to 3.13.6-alpine in /docs/_build +- #7837: @dependabot[bot] chore(deps): bump golang.org/x/crypto from 0.40.0 to 0.41.0 in /plugins/common +- #7836: @dependabot[bot] chore(deps): bump golang from 1.24.5 to 1.24.6 in /tests/apps/zombies-dockerfile-tini +- #7835: @dependabot[bot] chore(deps): bump golang from 1.24.5 to 1.24.6 in /tests/apps/zombies-dockerfile-no-tini +- #7834: @dependabot[bot] chore(deps): bump golang from 1.24.5 to 1.24.6 in /tests/apps/go-fail-postdeploy +- #7833: @dependabot[bot] chore(deps): bump golang from 1.24.5 to 1.24.6 in /tests/apps/gogrpc +- #7832: @dependabot[bot] chore(deps): bump golang from 1.24.5 to 1.24.6 in /tests/apps/go-fail-predeploy +- #7828: @dependabot[bot] chore(deps): bump actions/download-artifact from 4 to 5 + +### Other + +- #7854: @dependabot[bot] chore(deps): bump helm.sh/helm/v3 from 3.18.4 to 3.18.5 in /plugins/scheduler-k3s +- #7825: @dependabot[bot] chore(deps): bump github.com/traefik/traefik/v2 from 2.11.26 to 2.11.28 in /plugins/scheduler-k3s +- #7830: @dependabot[bot] chore(deps): bump tmp from 0.2.1 to 0.2.4 in /tests/apps/multi +- #7829: @dependabot[bot] chore(deps): bump github.com/go-acme/lego/v4 from 4.24.0 to 4.25.2 in /plugins/scheduler-k3s + +## 0.36.0 + +Install/update via the bootstrap script: + +```shell +wget -NP . https://dokku.com/install/v0.36.0/bootstrap.sh +sudo DOKKU_TAG=v0.36.0 bash bootstrap.sh +``` + +See the [0.36.0 migration guide](/docs/appendices/0.36.0-migration-guide.md) for more information on migrating to 0.36.0. + +### Backwards Compatibility Breaks + +- #7442: @turicas Update how domains:clear works and add domains:reset command +- #7577: @josegonzalez Migrate DOKKU_DOCKER_STOP_TIMEOUT to ps setting + +### Bug Fixes + +- #7579: @josegonzalez Stop all app containers when calling ps:stop +- #7820: @josegonzalez Ignore brew doctor warnings when releasing Dokku as a homebrew formula +- #7811: @slava-sh Fix issue deploying from a tar file +- #7781: @josegonzalez Update gitignore to remove compiled triggers from repo + +### New Features + +- #7780: @josegonzalez Export the devcontainer environment to allow docker exec to work +- #7776: @josegonzalez Add kustomize support for applying helm charts +- #7773: @josegonzalez Use values.yaml correctly within internal Kubernetes Helm Chart +- #7769: @devopswithnaman Improve error handling in docker operations +- #7578: @josegonzalez Add ability to set maintenance mode for all cron tasks running for an app +- #7504: @josegonzalez Only redeploy formations that have had their values changed +- #7499: @nonZero Add support for custom nginx service command +- #7812: @CiTroNaK Allow specifying a custom top-level label key for the caddy proxy + +### Removals + +- #7818: @josegonzalez Drop support for Ubuntu 20.04 +- #7774: @josegonzalez Remove ansi escape characters that dropped the remote: prefix in deploy output + +### Refactors + +- #7816: @josegonzalez Use helper go functions to handle extracting files from a repository + +### Documentation + +- #7777: @coorasse Fix typo in 0.36.0 migration guide +- #7761: @largemouth Fix struct name in comment +- #7760: @olleolleolle Drop dokku-client gem, homepage 404s +- #7759: @olleolleolle Drop mention of dokkufy gem archived in 2017 +- #7755: @olleolleolle Update checkout action version in github actions documentation + +### Tests + +- #7762: @josegonzalez Reference new packeto buildpack urls + +### Dependencies + +- #7815: @dependabot[bot] chore(deps): bump github.com/onsi/gomega from 1.37.0 to 1.38.0 in /plugins/config +- #7814: @dependabot[bot] chore(deps): bump google.golang.org/grpc from 1.73.0 to 1.74.2 in /tests/apps/gogrpc +- #7810: @dependabot[bot] chore(deps): bump github.com/spf13/pflag from 1.0.6 to 1.0.7 in /plugins/config +- #7792: @dependabot[bot] chore(deps): bump ruby from 3.4.4 to 3.4.5 in /tests/apps/dockerfile-entrypoint +- #7791: @dependabot[bot] chore(deps): bump traefik from 3.4.1 to 3.4.4 in /plugins/traefik-vhosts +- #7790: @dependabot[bot] chore(deps): bump golang.org/x/crypto from 0.39.0 to 0.40.0 in /plugins/common +- #7787: @dependabot[bot] chore(deps): bump golang from 1.24.4 to 1.24.5 in /tests/apps/zombies-dockerfile-no-tini +- #7786: @dependabot[bot] chore(deps): bump golang from 1.24.4 to 1.24.5 in /tests/apps/zombies-dockerfile-tini +- #7785: @dependabot[bot] chore(deps): bump golang from 1.24.4 to 1.24.5 in /tests/apps/go-fail-predeploy +- #7784: @dependabot[bot] chore(deps): bump golang from 1.24.4 to 1.24.5 in /tests/apps/gogrpc +- #7783: @dependabot[bot] chore(deps): bump golang from 1.24.4 to 1.24.5 in /tests/apps/go-fail-postdeploy +- #7782: @josegonzalez Update golang dependencies in scheduler-k3s plugin +- #7779: @josegonzalez Update golang to 1.24 +- #7775: @dependabot[bot] chore(deps): bump mvdan.cc/sh/v3 from 3.11.0 to 3.12.0 in /plugins/cron +- #7772: @dependabot[bot] chore(deps): bump timberio/vector from 0.47.0-debian to 0.48.0-debian in /plugins/logs +- #7771: @dependabot[bot] chore(deps): bump mkdocs-material from 9.6.14 to 9.6.15 in /docs/_build +- #7768: @dependabot[bot] chore(deps): bump thin from 1.8.2 to 2.0.1 in /tests/apps/ruby +- #7766: @dependabot[bot] chore(deps): bump lucaslorentz/caddy-docker-proxy from 2.9 to 2.10 in /plugins/caddy-vhosts +- #7765: @dependabot[bot] chore(deps): bump pygments from 2.19.1 to 2.19.2 in /docs/_build +- #7763: @dependabot[bot] chore(deps): bump pymdown-extensions from 10.15 to 10.16 in /docs/_build +- #7757: @dependabot[bot] chore(deps): bump python from 3.13.4-alpine to 3.13.5-alpine in /docs/_build +- #7756: @dependabot[bot] chore(deps): bump python from 3.13.4-bookworm to 3.13.5-bookworm in /tests/apps/dockerfile-release +- #7754: @dependabot[bot] chore(deps): bump requests from 2.32.0 to 2.32.4 in /tests/apps/lambda-python +- #7753: @dependabot[bot] chore(deps): bump zipp from 3.22.0 to 3.23.0 in /docs/_build +- #7749: @josegonzalez chore: update herokuish from 0.10.3 to 0.11.0 +- #7748: @josegonzalez chore: update docker-container-healthchecker from 0.11.5 to 0.14.0 +- #7628: @dependabot[bot] chore(deps): bump express from 4.21.2 to 5.1.0 in /tests/apps/nodejs-express-noappjson +- #7621: @dependabot[bot] chore(deps): bump express from 4.21.2 to 5.1.0 in /tests/apps/nodejs-express +- #7819: @dependabot[bot] chore(deps): bump brace-expansion from 1.1.11 to 1.1.12 in /tests/apps/multi + +## 0.35.20 + +Install/update via the bootstrap script: + +```shell +wget -NP . https://dokku.com/install/v0.35.20/bootstrap.sh +sudo DOKKU_TAG=v0.35.20 bash bootstrap.sh +``` + +### Bug Fixes + +- #7726: @josegonzalez Ensure compose projects are spawned from the /tmp directory +- #7725: @josegonzalez Uninstall hashicorp tap to fix formula releases + +### Dependencies + +- #7735: @dependabot[bot] chore(deps): bump google.golang.org/grpc from 1.72.2 to 1.73.0 in /tests/apps/gogrpc +- #7737: @dependabot[bot] chore(deps): bump python from 3.13.3-alpine to 3.13.4-alpine in /docs/_build +- #7738: @dependabot[bot] chore(deps): bump python from 3.13.3-bookworm to 3.13.4-bookworm in /tests/apps/dockerfile-release +- #7745: @dependabot[bot] chore(deps): bump golang.org/x/crypto from 0.38.0 to 0.39.0 in /plugins/common +- #7740: @dependabot[bot] chore(deps): bump golang from 1.24.3 to 1.24.4 in /tests/apps/gogrpc +- #7741: @dependabot[bot] chore(deps): bump golang from 1.24.3 to 1.24.4 in /tests/apps/go-fail-postdeploy +- #7742: @dependabot[bot] chore(deps): bump golang from 1.24.3 to 1.24.4 in /tests/apps/zombies-dockerfile-tini +- #7743: @dependabot[bot] chore(deps): bump golang from 1.24.3 to 1.24.4 in /tests/apps/go-fail-predeploy +- #7744: @dependabot[bot] chore(deps): bump golang from 1.24.3 to 1.24.4 in /tests/apps/zombies-dockerfile-no-tini +- #7730: @dependabot[bot] chore(deps): bump traefik from 3.4.0 to 3.4.1 in /plugins/traefik-vhosts +- #7729: @dependabot[bot] chore(deps): bump zipp from 3.21.0 to 3.22.0 in /docs/_build +- #7727: @dependabot[bot] chore(deps): bump google.golang.org/grpc from 1.72.1 to 1.72.2 in /tests/apps/gogrpc + +### Other + +- #7746: @dependabot[bot] chore(deps): bump django from 5.0.14 to 5.1.10 in /tests/apps/dockerfile-release +- #7731: @dependabot[bot] chore(deps): bump github.com/traefik/traefik/v2 from 2.11.24 to 2.11.25 in /plugins/scheduler-k3s + +## 0.35.19 + +Install/update via the bootstrap script: + +```shell +wget -NP . https://dokku.com/install/v0.35.19/bootstrap.sh +sudo DOKKU_TAG=v0.35.19 bash bootstrap.sh +``` + +### Bug Fixes + +- #7686: @josegonzalez Untap aws/tap to correct issues in formula release + +### Documentation + +- #7707: @swrobel Remove duplicate hostname plugin +- #7687: @d9i Fix cron key in app.json docs +- #7677: @plafue Add continuous integration example for woodpecker ci + +### Tests + +- #7585: @josegonzalez Add test to prove Dokku respects the Procfile when deploying from an image +- #7678: @josegonzalez Revert "fix: update CID count in ps tests" + +### Dependencies + +- #7692: @dependabot[bot] chore(deps): bump golang.org/x/crypto from 0.37.0 to 0.38.0 in /plugins/common +- #7626: @dependabot[bot] chore(deps): bump express from 4.21.2 to 5.1.0 in /tests/apps/dockerfile +- #7693: @dependabot[bot] chore(deps): bump traefik from 3.3.5 to 3.4.0 in /plugins/traefik-vhosts +- #7694: @dependabot[bot] chore(deps): bump golang from 1.24.2 to 1.24.3 in /tests/apps/go-fail-postdeploy +- #7695: @dependabot[bot] chore(deps): bump node from 23-alpine to 24-alpine in /tests/apps/dockerfile-procfile-bad +- #7696: @dependabot[bot] chore(deps): bump golang from 1.24.2 to 1.24.3 in /tests/apps/gogrpc +- #7697: @dependabot[bot] chore(deps): bump golang from 1.24.2 to 1.24.3 in /tests/apps/go-fail-predeploy +- #7698: @dependabot[bot] chore(deps): bump node from 23-alpine to 24-alpine in /tests/apps/dockerfile-procfile +- #7699: @dependabot[bot] chore(deps): bump golang from 1.24.2 to 1.24.3 in /tests/apps/zombies-dockerfile-no-tini +- #7700: @dependabot[bot] chore(deps): bump golang from 1.24.2 to 1.24.3 in /tests/apps/zombies-dockerfile-tini +- #7701: @dependabot[bot] chore(deps): bump node from 23-alpine to 24-alpine in /tests/apps/dockerfile +- #7702: @dependabot[bot] chore(deps): bump node from 23-alpine to 24-alpine in /tests/apps/dockerfile-app-json-formations +- #7704: @dependabot[bot] chore(deps): bump rack from 2.2.13 to 2.2.14 in /tests/apps/ruby +- #7711: @dependabot[bot] chore(deps): bump flask from 3.1.0 to 3.1.1 in /tests/apps/multi +- #7712: @dependabot[bot] chore(deps): bump flask from 3.1.0 to 3.1.1 in /tests/apps/python-flask +- #7713: @dependabot[bot] chore(deps): bump pyyaml-env-tag from 0.1 to 1.1 in /docs/_build +- #7714: @dependabot[bot] chore(deps): bump mkdocs-material from 9.6.12 to 9.6.14 in /docs/_build +- #7715: @dependabot[bot] chore(deps): bump google.golang.org/grpc from 1.72.0 to 1.72.1 in /tests/apps/gogrpc +- #7716: @dependabot[bot] chore(deps): bump ruby from 3.4.3 to 3.4.4 in /tests/apps/dockerfile-entrypoint +- #7718: @dependabot[bot] chore(deps): bump timberio/vector from 0.46.1-debian to 0.47.0-debian in /plugins/logs +- #7703: @dependabot[bot] chore(deps): bump node from 23-alpine to 24-alpine in /tests/apps/dockerfile-noexpose +- #7688: @dependabot[bot] chore(deps): bump pymdown-extensions from 10.14.3 to 10.15 in /docs/_build +- #7689: @dependabot[bot] chore(deps): bump importlib-metadata from 8.6.1 to 8.7.0 in /docs/_build +- #7671: @dependabot[bot] chore(deps): bump golang.org/x/net from 0.36.0 to 0.38.0 in /tests/apps/gogrpc +- #7681: @dependabot[bot] chore(deps): bump google.golang.org/grpc from 1.71.1 to 1.72.0 in /tests/apps/gogrpc +- #7680: @dependabot[bot] chore(deps): bump soupsieve from 2.6 to 2.7 in /docs/_build +- #7682: @dependabot[bot] chore(deps): bump packaging from 24.2 to 25.0 in /docs/_build +- #7673: @dependabot[bot] chore(deps): bump golang.org/x/net from 0.37.0 to 0.38.0 in /plugins/common +- #7675: @dependabot[bot] chore(deps): bump byjg/easy-haproxy from 4.4.0 to 4.5.0 in /plugins/haproxy-vhosts +- #7676: @dependabot[bot] chore(deps): bump mkdocs-material from 9.6.11 to 9.6.12 in /docs/_build + +### Other + +- #7723: @josegonzalez Revert "chore(deps): bump helm.sh/helm/v3 from 3.14.2 to 3.17.3 in /plugins/scheduler-k3s" +- #7645: @dependabot[bot] chore(deps): bump helm.sh/helm/v3 from 3.14.2 to 3.17.3 in /plugins/scheduler-k3s +- #7717: @dependabot[bot] chore(deps): bump setuptools from 70.0.0 to 78.1.1 in /tests/apps/dockerfile-release +- #7719: @d1ceward Fix: Add missing `systemctl` path detection in nginx-vhost plugin +- #7679: @dependabot[bot] chore(deps): bump github.com/traefik/traefik/v2 from 2.11.15 to 2.11.24 in /plugins/scheduler-k3s + +## 0.35.18 + +Install/update via the bootstrap script: + +```shell +wget -NP . https://dokku.com/install/v0.35.18/bootstrap.sh +sudo DOKKU_TAG=v0.35.18 bash bootstrap.sh +``` + +### Bug Fixes + +- #7669: @josegonzalez fix: update CID count in ps tests + +### Dependencies + +- #7668: @dependabot[bot] chore(deps): bump timberio/vector from 0.43.1-debian to 0.46.1-debian in /plugins/logs +- #7670: @dependabot[bot] chore(deps): bump beautifulsoup4 from 4.13.3 to 4.13.4 in /docs/_build +- #7630: @dependabot[bot] chore(deps): bump express from 4.21.2 to 5.1.0 in /tests/apps/gitsubmodules +- #7666: @dependabot[bot] chore(deps): bump golang.org/x/crypto from 0.36.0 to 0.37.0 in /plugins/common +- #7618: @dependabot[bot] chore(deps): bump express from 4.21.2 to 5.1.0 in /tests/apps/.websocket.disabled +- #7620: @dependabot[bot] chore(deps): bump express from 4.21.2 to 5.1.0 in /tests/apps/dockerfile-procfile-bad +- #7622: @dependabot[bot] chore(deps): bump express from 4.21.2 to 5.1.0 in /tests/apps/dockerfile-procfile +- #7629: @dependabot[bot] chore(deps): bump express from 5.0.1 to 5.1.0 in /tests/apps/checks-root +- #7623: @dependabot[bot] chore(deps): bump express from 4.21.2 to 5.1.0 in /tests/apps/dockerfile-noexpose +- #7627: @dependabot[bot] chore(deps): bump express from 4.21.2 to 5.1.0 in /tests/apps/nodejs-express-noprocfile +- #7631: @dependabot[bot] chore(deps): bump express from 4.21.2 to 5.1.0 in /tests/apps/dockerfile-app-json-formations +- #7667: @dependabot[bot] chore(deps): bump ruby from 3.4.2 to 3.4.3 in /tests/apps/dockerfile-entrypoint + +### Other + +- #7661: @josegonzalez chore: bump dokku-event-listener from 0.17.0 to 0.17.2 +- #7660: @josegonzalez chore: bump plugn from 0.15.3 to 0.16.0 +- #7659: @josegonzalez chore: bump gliderlabs-sigil from 0.11.0 to 0.11.4 +- #7656: @josegonzalez chore: bump netrc from 0.10.0 to 0.10.2 +- #7655: @josegonzalez chore: bump lambda-builder from 0.8.0 to 0.9.1 +- #7663: @josegonzalez chore: bump herokuish from 0.10.2 to 0.10.3 +- #7662: @josegonzalez chore: bump dokku-update from 0.9.4 to 0.9.6 +- #7658: @josegonzalez chore: bump sshcommand from 0.19.0 to 0.20.0 +- #7657: @josegonzalez chore: bump procfile-util from 0.19.0 to 0.20.3 +- #7654: @josegonzalez chore: bump docker-image-builder from 0.8.0 to 0.8.1 +- #7653: @josegonzalez chore: bump docker-container-healthchecker from 0.11.0 to 0.11.5 + +## 0.35.17 + +Install/update via the bootstrap script: + +```shell +wget -NP . https://dokku.com/install/v0.35.17/bootstrap.sh +sudo DOKKU_TAG=v0.35.17 bash bootstrap.sh +``` + +### Bug Fixes + +- #7606: @josegonzalez fix: bump dokku version in main.bicep when bumping azure versions +- #7650: @josegonzalez fix: set the correct default ingress class for k3s clusters +- #7649: @josegonzalez fix: decrease default in-use keda resources +- #7587: @turicas Correctly name paketo chown option +- #7584: @josegonzalez Install all builder binaries in Dokku docker image +- #7580: @josegonzalez Do not set network flag when building dockerfile images +- #7575: @josegonzalez Restore the git head ref when running repo:gc +- #7574: @josegonzalez fix: do not write VHOST file if the DOKKU_ROOT directory does not exist + +### New Features + +- #7648: @josegonzalez feat: add ability to ship k3s container logs via vector +- #7581: @josegonzalez Allow --volume flags to be passed to pack at buildtime +- #7583: @josegonzalez Send Host header when running container checks in docker-local +- #7572: @josegonzalez Add support for setting shm-size for kubernetes deployments + +### Documentation + +- #7652: @josegonzalez docs: use a cid-file in the plugin example +- #7647: @closeobserve Fix some golang docblock comments +- #7586: @turicas Remove `--` from `--git-url` in plugin installation docs + +### Dependencies + +- #7603: @dependabot[bot] chore(deps): bump org.eclipse.jetty:jetty-servlet from 11.0.24 to 11.0.25 in /tests/apps/java +- #7641: @dependabot[bot] chore(deps): bump golang.org/x/sync from 0.12.0 to 0.13.0 in /plugins/scheduler-docker-local +- #7639: @dependabot[bot] chore(deps): bump github.com/onsi/gomega from 1.36.2 to 1.37.0 in /plugins/common +- #7646: @dependabot[bot] chore(deps): bump phusion/baseimage from noble-1.0.0 to noble-1.0.2 +- #7610: @dependabot[bot] chore(deps): bump google.golang.org/protobuf from 1.36.5 to 1.36.6 in /tests/apps/gogrpc +- #7619: @dependabot[bot] chore(deps): bump google.golang.org/grpc from 1.71.0 to 1.71.1 in /tests/apps/gogrpc +- #7624: @dependabot[bot] chore(deps): bump traefik from 3.3.4 to 3.3.5 in /plugins/traefik-vhosts +- #7632: @dependabot[bot] chore(deps): bump golang from 1.24.1 to 1.24.2 in /tests/apps/go-fail-postdeploy +- #7633: @dependabot[bot] chore(deps): bump golang from 1.24.1 to 1.24.2 in /tests/apps/zombies-dockerfile-tini +- #7634: @dependabot[bot] chore(deps): bump golang from 1.24.1 to 1.24.2 in /tests/apps/go-fail-predeploy +- #7643: @dependabot[bot] chore(deps): bump python from 3.13.2-bookworm to 3.13.3-bookworm in /tests/apps/dockerfile-release +- #7635: @dependabot[bot] chore(deps): bump golang from 1.24.1 to 1.24.2 in /tests/apps/gogrpc +- #7636: @dependabot[bot] chore(deps): bump golang from 1.24.1 to 1.24.2 in /tests/apps/zombies-dockerfile-no-tini +- #7613: @dependabot[bot] chore(deps): bump pyparsing from 3.2.1 to 3.2.3 in /docs/_build +- #7625: @dependabot[bot] chore(deps): bump mkdocs-material from 9.6.8 to 9.6.11 in /docs/_build +- #7644: @dependabot[bot] chore(deps): bump python from 3.13.2-alpine to 3.13.3-alpine in /docs/_build +- #7651: @dependabot[bot] chore(deps): update markdown requirement from <3.8,>=3.2.1 to >=3.2.1,<3.9 in /docs/_build +- #7595: @dependabot[bot] chore(deps): bump tj-actions/changed-files from 45.0.7 to 45.0.8 +- #7593: @dependabot[bot] chore(deps): bump mkdocs-material from 9.6.7 to 9.6.8 in /docs/_build +- #7589: @dependabot[bot] chore(deps): bump golang.org/x/net from 0.34.0 to 0.36.0 in /tests/apps/gogrpc +- #7588: @dependabot[bot] chore(deps): bump rack from 2.2.12 to 2.2.13 in /tests/apps/ruby +- #7570: @dependabot[bot] chore(deps): bump mvdan.cc/sh/v3 from 3.10.0 to 3.11.0 in /plugins/cron +- #7569: @dependabot[bot] chore(deps): bump golang.org/x/crypto from 0.35.0 to 0.36.0 in /plugins/common +- #7568: @dependabot[bot] chore(deps): bump jinja2 from 3.1.5 to 3.1.6 in /docs/_build + +### Other + +- #7601: @dependabot[bot] chore(deps): bump github.com/expr-lang/expr from 1.15.8 to 1.17.0 in /plugins/scheduler-k3s +- #7602: @dependabot[bot] chore(deps): bump github.com/containerd/containerd from 1.7.20 to 1.7.27 in /plugins/scheduler-k3s +- #7637: @dependabot[bot] chore(deps): bump django from 5.0.13 to 5.0.14 in /tests/apps/dockerfile-release +- #7607: @dependabot[bot] chore(deps): bump gunicorn from 22.0.0 to 23.0.0 in /tests/apps/dockerfile-release +- #7596: @josegonzalez Drop compromisde tj-actions/changed-files from Ci +- #7582: @josegonzalez Add ability to disable vhosts for all apps +- #7576: @josegonzalez fix: properly handle NoAppsExist in network:rebuild-all and buildpacks:set +- #7571: @dependabot[bot] chore(deps): bump django from 5.0.11 to 5.0.13 in /tests/apps/dockerfile-release + +## 0.35.16 + +Install/update via the bootstrap script: + +```shell +wget -NP . https://dokku.com/install/v0.35.16/bootstrap.sh +sudo DOKKU_TAG=v0.35.16 bash bootstrap.sh +``` + +### Bug Fixes + +- #7502: @josegonzalez Ensure all report subcommands exit 0 when there is no app + +### New Features + +- #7545: @josegonzalez feat: delegate authorized_keys file validation to sshcommand + +### Documentation + +- #7547: @creature Fix display of numbered list in troubleshooting docs +- #7542: @creature Include troubleshooting details about app A being served when app B was expected due to in-app SSL redirects +- #7530: @josegonzalez Finish sentence in docker-options documentation +- #7527: @2x2xplz Add swapoff to commands when creating or updating swap space +- #7526: @ebuckthal Update vector container volume mount description + +### Dependencies + +- #7565: @dependabot[bot] chore(deps): bump golang.org/x/sync from 0.11.0 to 0.12.0 in /plugins/common +- #7566: @dependabot[bot] chore(deps): bump rack from 2.2.11 to 2.2.12 in /tests/apps/ruby +- #7567: @dependabot[bot] chore(deps): bump jinja2 from 3.1.5 to 3.1.6 in /tests/apps/python-flask +- #7563: @dependabot[bot] chore(deps): bump golang from 1.24.0 to 1.24.1 in /tests/apps/zombies-dockerfile-tini +- #7561: @dependabot[bot] chore(deps): bump golang from 1.24.0 to 1.24.1 in /tests/apps/gogrpc +- #7558: @dependabot[bot] chore(deps): bump golang from 1.24.0 to 1.24.1 in /tests/apps/zombies-dockerfile-no-tini +- #7562: @dependabot[bot] chore(deps): bump golang from 1.24.0 to 1.24.1 in /tests/apps/go-fail-predeploy +- #7555: @dependabot[bot] chore(deps): bump mkdocs-material from 9.6.5 to 9.6.7 in /docs/_build +- #7564: @dependabot[bot] chore(deps): bump golang from 1.24.0 to 1.24.1 in /tests/apps/go-fail-postdeploy +- #7560: @dependabot[bot] chore(deps): bump golang.org/x/sync from 0.11.0 to 0.12.0 in /plugins/scheduler-docker-local +- #7559: @dependabot[bot] chore(deps): bump google.golang.org/grpc from 1.70.0 to 1.71.0 in /tests/apps/gogrpc +- #7553: @dependabot[bot] chore(deps): bump traefik from 3.3.3 to 3.3.4 in /plugins/traefik-vhosts +- #7551: @dependabot[bot] chore(deps): bump golang.org/x/crypto from 0.33.0 to 0.35.0 in /plugins/common +- #7550: @dependabot[bot] chore(deps): bump github.com/go-jose/go-jose/v4 from 4.0.4 to 4.0.5 in /plugins/scheduler-k3s +- #7548: @dependabot[bot] chore(deps): bump dokku/openresty-docker-proxy from 0.9.2 to 0.9.3 in /plugins/openresty-vhosts +- #7541: @dependabot[bot] chore(deps): bump ruby from 3.4.1 to 3.4.2 in /tests/apps/dockerfile-entrypoint +- #7537: @dependabot[bot] chore(deps): bump k8s.io/kubernetes from 1.29.7 to 1.29.14 in /plugins/scheduler-k3s +- #7536: @dependabot[bot] chore(deps): bump golang from 1.23.6 to 1.24.0 in /tests/apps/zombies-dockerfile-no-tini +- #7535: @dependabot[bot] chore(deps): bump golang from 1.23.6 to 1.24.0 in /tests/apps/zombies-dockerfile-tini +- #7534: @dependabot[bot] chore(deps): bump golang from 1.23.6 to 1.24.0 in /tests/apps/go-fail-predeploy +- #7533: @dependabot[bot] chore(deps): bump golang from 1.23.6 to 1.24.0 in /tests/apps/go-fail-postdeploy +- #7532: @dependabot[bot] chore(deps): bump golang from 1.23.6 to 1.24.0 in /tests/apps/gogrpc +- #7531: @dependabot[bot] chore(deps): bump rack from 2.2.8.1 to 2.2.11 in /tests/apps/ruby +- #7525: @dependabot[bot] chore(deps): bump golang.org/x/crypto from 0.32.0 to 0.33.0 in /plugins/common +- #7543: @dependabot[bot] chore(deps): bump mkdocs-material from 9.6.4 to 9.6.5 in /docs/_build +- #7512: @dependabot[bot] chore(deps): bump golang.org/x/sync from 0.10.0 to 0.11.0 in /plugins/common +- #7513: @dependabot[bot] chore(deps): bump tj-actions/changed-files from 45.0.6 to 45.0.7 +- #7514: @dependabot[bot] chore(deps): bump golang from 1.23.5 to 1.23.6 in /tests/apps/gogrpc +- #7515: @dependabot[bot] chore(deps): bump golang from 1.23.5 to 1.23.6 in /tests/apps/go-fail-predeploy +- #7516: @dependabot[bot] chore(deps): bump golang from 1.23.5 to 1.23.6 in /tests/apps/go-fail-postdeploy +- #7517: @dependabot[bot] chore(deps): bump golang from 1.23.5 to 1.23.6 in /tests/apps/zombies-dockerfile-tini +- #7518: @dependabot[bot] chore(deps): bump beautifulsoup4 from 4.13.1 to 4.13.3 in /docs/_build +- #7519: @dependabot[bot] chore(deps): bump golang from 1.23.5 to 1.23.6 in /tests/apps/zombies-dockerfile-no-tini +- #7521: @dependabot[bot] chore(deps): bump google.golang.org/protobuf from 1.36.4 to 1.36.5 in /tests/apps/gogrpc +- #7522: @dependabot[bot] chore(deps): bump python from 3.13.1-bookworm to 3.13.2-bookworm in /tests/apps/dockerfile-release +- #7523: @dependabot[bot] chore(deps): bump python from 3.13.1-alpine to 3.13.2-alpine in /docs/_build +- #7528: @dependabot[bot] chore(deps): bump mkdocs-material from 9.6.2 to 9.6.4 in /docs/_build +- #7510: @dependabot[bot] chore(deps): bump mkdocs-material from 9.6.1 to 9.6.2 in /docs/_build +- #7507: @dependabot[bot] chore(deps): bump traefik from 3.3.2 to 3.3.3 in /plugins/traefik-vhosts +- #7505: @dependabot[bot] chore(deps): bump pymdown-extensions from 10.14.2 to 10.14.3 in /docs/_build +- #7506: @dependabot[bot] chore(deps): bump beautifulsoup4 from 4.12.3 to 4.13.1 in /docs/_build +- #7508: @dependabot[bot] chore(deps): bump dokku/openresty-docker-proxy from 0.9.1 to 0.9.2 in /plugins/openresty-vhosts +- #7482: @dependabot[bot] chore(deps): bump github.com/spf13/pflag from 1.0.5 to 1.0.6 in /plugins/common +- #7500: @dependabot[bot] chore(deps): bump golang.org/x/net from 0.30.0 to 0.33.0 in /tests/apps/gogrpc +- #7501: @dependabot[bot] chore(deps): bump github.com/traefik/traefik/v2 from 2.11.14 to 2.11.15 in /plugins/scheduler-k3s +- #7497: @dependabot[bot] chore(deps): bump mkdocs-material from 9.5.49 to 9.6.1 in /docs/_build +- #7479: @dependabot[bot] chore(deps): bump pymdown-extensions from 10.14 to 10.14.2 in /docs/_build +- #7477: @dependabot[bot] chore(deps): bump google.golang.org/grpc from 1.69.4 to 1.70.0 in /tests/apps/gogrpc +- #7476: @dependabot[bot] chore(deps): bump google.golang.org/protobuf from 1.36.2 to 1.36.4 in /tests/apps/gogrpc +- #7469: @dependabot[bot] chore(deps): bump golang from 1.23.4 to 1.23.5 in /tests/apps/go-fail-postdeploy +- #7468: @dependabot[bot] chore(deps): bump golang from 1.23.4 to 1.23.5 in /tests/apps/go-fail-predeploy +- #7467: @dependabot[bot] chore(deps): bump golang from 1.23.4 to 1.23.5 in /tests/apps/zombies-dockerfile-no-tini +- #7465: @dependabot[bot] chore(deps): bump golang from 1.23.4 to 1.23.5 in /tests/apps/zombies-dockerfile-tini +- #7466: @dependabot[bot] chore(deps): bump golang from 1.23.4 to 1.23.5 in /tests/apps/gogrpc +- #7462: @dependabot[bot] chore(deps): bump traefik from 3.3.1 to 3.3.2 in /plugins/traefik-vhosts +- #7460: @dependabot[bot] chore(deps): bump django from 5.0.10 to 5.0.11 in /tests/apps/dockerfile-release +- #7474: @dependabot[bot] chore(deps): bump importlib-metadata from 8.5.0 to 8.6.1 in /docs/_build + +### Other + +- #7554: @josegonzalez fix: update test for newer git version + ## 0.35.15 Install/update via the bootstrap script: diff --git a/README.md b/README.md index d761f12e2..21c3a7292 100644 --- a/README.md +++ b/README.md @@ -74,7 +74,7 @@ Support us with a monthly donation and help us continue our activities. [[Become A fresh VM running any of the following operating systems: -- Ubuntu 20.04 / 22.04 / 24.04 (amd64/arm64) - Any currently supported release +- Ubuntu 22.04 / 24.04 (amd64/arm64) - Any currently supported release - Debian 11+ (amd64/arm64) An SSH keypair that can be used for application deployment. If this exists before installation, it will be automatically imported into dokku. @@ -85,8 +85,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 -NP . https://dokku.com/install/v0.35.15/bootstrap.sh -sudo DOKKU_TAG=v0.35.15 bash bootstrap.sh +wget -NP . https://dokku.com/install/v0.36.7/bootstrap.sh +sudo DOKKU_TAG=v0.36.7 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. diff --git a/bootstrap.sh b/bootstrap.sh index 21b65d3c1..b3653a756 100755 --- a/bootstrap.sh +++ b/bootstrap.sh @@ -3,7 +3,7 @@ set -eo pipefail [[ $TRACE ]] && set -x # A script to bootstrap dokku. -# It expects to be run on Ubuntu 20.04/22.04/24.04 via 'sudo` +# It expects to be run on Ubuntu 22.04/24.04 via 'sudo` # If installing a tag higher than 0.3.13, it may install dokku via a package (so long as the package is higher than 0.3.13) # It checks out the dokku source code from GitHub into ~/dokku and then runs 'make install' from dokku source. @@ -12,7 +12,7 @@ set -eo pipefail # That's good because it prevents our output overlapping with wget's. # It also means that we can't run a partially downloaded script. -SUPPORTED_VERSIONS="Debian [11, 12], Ubuntu [20.04, 22.04, 24.04]" +SUPPORTED_VERSIONS="Debian [11, 12, 13], Ubuntu [22.04, 24.04]" log-fail() { declare desc="log fail formatter" @@ -48,9 +48,15 @@ install-requirements() { apt-get update -qq >/dev/null apt-get -qq -y --no-install-recommends install gpg-agent fi - if ! dpkg -l | grep -q software-properties-common; then + if ! command -v lsb_release &>/dev/null; then apt-get update -qq >/dev/null - apt-get -qq -y --no-install-recommends install software-properties-common + apt-get -qq -y --no-install-recommends install lsb-release + fi + if [[ "$DOKKU_DISTRO_VERSION" -lt "13" ]]; then + if ! dpkg -l | grep -q software-properties-common; then + apt-get update -qq >/dev/null + apt-get -qq -y --no-install-recommends install software-properties-common + fi fi ;; ubuntu) @@ -122,7 +128,22 @@ install-dokku-from-source() { log-fail "This installation script requires apt-get. For manual installation instructions, consult https://dokku.com/docs/getting-started/advanced-installation/" fi - apt-get -qq -y --no-install-recommends install sudo git make software-properties-common + apt-get -qq -y --no-install-recommends install sudo git make + case "$DOKKU_DISTRO" in + debian) + if [[ "$DOKKU_DISTRO_VERSION" -lt "13" ]]; then + if ! dpkg -l | grep -q software-properties-common; then + apt-get -qq -y --no-install-recommends install software-properties-common + fi + fi + ;; + ubuntu) + if ! dpkg -l | grep -q software-properties-common; then + apt-get -qq -y --no-install-recommends install software-properties-common + fi + ;; + esac + cd /root if [[ ! -d /root/dokku ]]; then git clone "$DOKKU_REPO" /root/dokku @@ -160,7 +181,7 @@ install-dokku-from-deb-package() { local NO_INSTALL_RECOMMENDS=${DOKKU_NO_INSTALL_RECOMMENDS:=""} local OS_ID - if ! in-array "$DOKKU_DISTRO_VERSION" "20.04" "22.04" "24.04" "10" "11" "12"; then + if ! in-array "$DOKKU_DISTRO_VERSION" "22.04" "24.04" "10" "11" "12" "13"; then log-fail "Unsupported Linux distribution. Only the following versions are supported: $SUPPORTED_VERSIONS" fi @@ -188,17 +209,17 @@ install-dokku-from-deb-package() { fi if [[ "$DOKKU_DISTRO" == "ubuntu" ]]; then - OS_IDS=("focal" "jammy" "noble") + OS_IDS=("jammy" "noble") if ! in-array "$OS_ID" "${OS_IDS[@]}"; then OS_ID="noble" fi elif [[ "$DOKKU_DISTRO" == "debian" ]]; then - OS_IDS=("bullseye" "bookworm") + OS_IDS=("bullseye" "bookworm" "trixie") if ! in-array "$OS_ID" "${OS_IDS[@]}"; then OS_ID="bookworm" fi elif [[ "$DOKKU_DISTRO" == "raspbian" ]]; then - OS_IDS=("bullseye" "bookworm") + OS_IDS=("bullseye" "bookworm" "trixie") if ! in-array "$OS_ID" "${OS_IDS[@]}"; then OS_ID="bookworm" fi diff --git a/common.mk b/common.mk index b0a70e0b2..226d35e60 100644 --- a/common.mk +++ b/common.mk @@ -1,7 +1,7 @@ GO_ARGS ?= GO_PLUGIN_MAKE_TARGET ?= build GO_REPO_ROOT := /go/src/github.com/dokku/dokku -BUILD_IMAGE := ccr.ccs.tencentyun.com/miaogai/golang:1.23.0 +BUILD_IMAGE := ccr.ccs.tencentyun.com/miaogai/golang:1.25.1 GO_BUILD_CACHE ?= /tmp/dokku-go-build-cache GO_MOD_CACHE ?= /tmp/dokku-go-mod-mod GO_ROOT_MOUNT ?= $$PWD/../..:$(GO_REPO_ROOT) diff --git a/contrib/dependencies.json b/contrib/dependencies.json index 087d3f71e..cf19569ca 100644 --- a/contrib/dependencies.json +++ b/contrib/dependencies.json @@ -2,94 +2,94 @@ "dependencies": [ { "name": "docker-container-healthchecker", - "version": "0.11.0", + "version": "0.14.0", "urls": { - "amd64": "https://hotfix-1256173281.cos.ap-shanghai.myqcloud.com/download/dokku/docker-container-healthchecker-linux-amd64", - "arm64": "https://hotfix-1256173281.cos.ap-shanghai.myqcloud.com/download/dokku/docker-container-healthchecker-linux-arm64" + "amd64": "https://gh-proxy.com/https://github.com/dokku/docker-container-healthchecker/releases/download/v0.14.0/docker-container-healthchecker-linux-amd64", + "arm64": "https://gh-proxy.com/https://github.com/dokku/docker-container-healthchecker/releases/download/v0.14.0/docker-container-healthchecker-linux-arm64" } }, { "name": "docker-image-labeler", - "version": "0.8.0", + "version": "0.8.1", "urls": { - "amd64": "https://hotfix-1256173281.cos.ap-shanghai.myqcloud.com/download/dokku/docker-image-labeler-linux-amd64", - "arm64": "https://hotfix-1256173281.cos.ap-shanghai.myqcloud.com/download/dokku/docker-image-labeler-linux-arm64" + "amd64": "https://gh-proxy.com/https://github.com/dokku/docker-image-labeler/releases/download/v0.8.1/docker-image-labeler-linux-amd64", + "arm64": "https://gh-proxy.com/https://github.com/dokku/docker-image-labeler/releases/download/v0.8.1/docker-image-labeler-linux-arm64" } }, { "name": "lambda-builder", - "version": "0.8.0", + "version": "0.9.1", "urls": { - "amd64": "https://hotfix-1256173281.cos.ap-shanghai.myqcloud.com/download/dokku/lambda-builder-linux-amd64", - "arm64": "https://hotfix-1256173281.cos.ap-shanghai.myqcloud.com/download/dokku/lambda-builder-linux-arm64" + "amd64": "https://gh-proxy.com/https://github.com/dokku/lambda-builder/releases/download/v0.9.1/lambda-builder-linux-amd64", + "arm64": "https://gh-proxy.com/https://github.com/dokku/lambda-builder/releases/download/v0.9.1/lambda-builder-linux-arm64" } }, { "name": "netrc", - "version": "0.10.0", + "version": "0.10.2", "urls": { - "amd64": "https://hotfix-1256173281.cos.ap-shanghai.myqcloud.com/download/dokku/netrc-linux-amd64", - "arm64": "https://hotfix-1256173281.cos.ap-shanghai.myqcloud.com/download/dokku/netrc-linux-arm64" + "amd64": "https://gh-proxy.com/https://github.com/dokku/netrc/releases/download/v0.10.2/netrc-linux-amd64", + "arm64": "https://gh-proxy.com/https://github.com/dokku/netrc/releases/download/v0.10.2/netrc-linux-arm64" } }, { "name": "procfile-util", - "version": "0.19.0", + "version": "0.20.3", "urls": { - "amd64": "https://hotfix-1256173281.cos.ap-shanghai.myqcloud.com/download/dokku/procfile-util-linux-amd64", - "arm64": "https://hotfix-1256173281.cos.ap-shanghai.myqcloud.com/download/dokku/procfile-util-linux-arm64" + "amd64": "https://gh-proxy.com/https://github.com/dokku/procfile-util/releases/download/v0.20.3/procfile-util-linux-amd64", + "arm64": "https://gh-proxy.com/https://github.com/dokku/procfile-util/releases/download/v0.20.3/procfile-util-linux-arm64" } }, { "name": "sshcommand", - "version": "0.18.0", + "version": "0.20.0", "urls": { - "amd64": "https://hotfix-1256173281.cos.ap-shanghai.myqcloud.com/download/dokku/sshcommand", - "arm64": "https://hotfix-1256173281.cos.ap-shanghai.myqcloud.com/download/dokku/sshcommand" + "amd64": "https://gh-proxy.com/https://github.com/dokku/sshcommand/releases/download/v0.20.0/sshcommand", + "arm64": "https://gh-proxy.com/https://github.com/dokku/sshcommand/releases/download/v0.20.0/sshcommand" } } ], "predependencies": [ { "name": "gliderlabs-sigil", - "version": "0.11.0", + "version": "0.11.4", "urls": { - "amd64": "https://hotfix-1256173281.cos.ap-shanghai.myqcloud.com/download/dokku/sigil-linux-amd64", - "arm64": "https://hotfix-1256173281.cos.ap-shanghai.myqcloud.com/download/dokku/sigil-linux-arm64" + "amd64": "https://gh-proxy.com/https://github.com/gliderlabs/sigil/releases/download/v0.11.4/sigil-linux-amd64", + "arm64": "https://gh-proxy.com/https://github.com/gliderlabs/sigil/releases/download/v0.11.4/sigil-linux-arm64" } }, { "name": "plugn", - "version": "0.15.3", + "version": "0.16.0", "urls": { - "amd64": "https://hotfix-1256173281.cos.ap-shanghai.myqcloud.com/download/dokku/plugn-linux-amd64", - "arm64": "https://hotfix-1256173281.cos.ap-shanghai.myqcloud.com/download/dokku/plugn-linux-arm64" + "amd64": "https://gh-proxy.com/https://github.com/dokku/plugn/releases/download/v0.16.0/plugn-linux-amd64", + "arm64": "https://gh-proxy.com/https://github.com/dokku/plugn/releases/download/v0.16.0/plugn-linux-arm64" } } ], "recommendations": [ { "name": "dokku-event-listener", - "version": "0.17.0", + "version": "0.17.2", "urls": { - "amd64": "https://hotfix-1256173281.cos.ap-shanghai.myqcloud.com/download/dokku/dokku-event-listener-linux-amd64", - "arm64": "https://hotfix-1256173281.cos.ap-shanghai.myqcloud.com/download/dokku/dokku-event-listener-linux-arm64" + "amd64": "https://gh-proxy.com/https://github.com/dokku/dokku-event-listener/releases/download/v0.17.2/dokku-event-listener-linux-amd64", + "arm64": "https://gh-proxy.com/https://github.com/dokku/dokku-event-listener/releases/download/v0.17.2/dokku-event-listener-linux-arm64" } }, { "name": "dokku-update", - "version": "0.9.4", + "version": "0.9.6", "urls": { - "amd64": "https://hotfix-1256173281.cos.ap-shanghai.myqcloud.com/download/dokku/dokku-update", - "arm64": "https://hotfix-1256173281.cos.ap-shanghai.myqcloud.com/download/dokku/dokku-update" + "amd64": "https://gh-proxy.com/https://github.com/dokku/dokku-update/releases/download/v0.9.6/dokku-update", + "arm64": "https://gh-proxy.com/https://github.com/dokku/dokku-update/releases/download/v0.9.6/dokku-update" } }, { "name": "herokuish", - "version": "0.10.2", + "version": "0.11.3", "urls": { - "amd64": "https://hotfix-1256173281.cos.ap-shanghai.myqcloud.com/download/dokku/herokuish_0.10.2_linux_x86_64.tgz", - "arm64": "https://hotfix-1256173281.cos.ap-shanghai.myqcloud.com/download/dokku/herokuish_0.10.2_linux_x86_64.tgz" + "amd64": "https://gh-proxy.com/https://github.com/gliderlabs/herokuish/releases/download/v0.11.3/herokuish_0.11.3_linux_x86_64.tgz", + "arm64": "https://gh-proxy.com/https://github.com/gliderlabs/herokuish/releases/download/v0.11.3/herokuish_0.11.3_linux_x86_64.tgz" } } ] diff --git a/contrib/images/digitalocean/in_parts/100-image-check b/contrib/images/digitalocean/in_parts/100-image-check index 18d3a8109..763020b6d 100755 --- a/contrib/images/digitalocean/in_parts/100-image-check +++ b/contrib/images/digitalocean/in_parts/100-image-check @@ -355,7 +355,7 @@ function checkFirewall { elif [[ $OS == "CentOS Linux" ]] || [[ $OS == "CentOS Stream" ]] || [[ $OS == "Rocky Linux" ]] || [[ $OS == "AlmaLinux" ]]; then if [ -f /usr/lib/systemd/system/csf.service ]; then fw="csf" - if [[ $(systemctl status $fw >/dev/null 2>&1) ]]; then + if systemctl status $fw >/dev/null 2>&1; then FW_VER="\e[32m[PASS]\e[0m Firewall service (${fw}) is active\n" ((PASS++)) diff --git a/contrib/release-dokku b/contrib/release-dokku index f71c39ee0..47cd19b63 100755 --- a/contrib/release-dokku +++ b/contrib/release-dokku @@ -134,7 +134,7 @@ fn-publish-package() { [[ "$RELEASE_TYPE" == "raspbian" ]] && DIST=raspbian if [[ "$RELEASE_TYPE" == "raspbian" ]]; then - OS_IDS=("bullseye" "bookworm") + OS_IDS=("bullseye" "bookworm" "trixie") for OS_ID in "${OS_IDS[@]}"; do log-info "(release-dokku) pushing deb to packagecloud.com/${REPOSITORY}/${DIST}" package_cloud push "${REPOSITORY}/${DIST}/${OS_ID}" "$PACKAGE_NAME" @@ -144,7 +144,7 @@ fn-publish-package() { fi done elif [[ "$DIST" == "ubuntu" ]]; then - OS_IDS=("focal" "jammy" "noble") + OS_IDS=("jammy" "noble") for OS_ID in "${OS_IDS[@]}"; do log-info "(release-dokku) pushing ${RELEASE_TYPE} to packagecloud.com/${REPOSITORY}/${DIST}" package_cloud push "${REPOSITORY}/${DIST}/${OS_ID}" "$PACKAGE_NAME" @@ -155,7 +155,7 @@ fn-publish-package() { done DIST=debian - OS_IDS=("bullseye" "bookworm") + OS_IDS=("bullseye" "bookworm" "trixie") for OS_ID in "${OS_IDS[@]}"; do log-info "(release-dokku) pushing ${RELEASE_TYPE} to packagecloud.com/${REPOSITORY}/${DIST}" package_cloud push "${REPOSITORY}/${DIST}/${OS_ID}" "$PACKAGE_NAME" @@ -183,9 +183,9 @@ fn-replace-version() { fn-repo-merged-requests() { declare desc="Retrieves all pull request ids since a given release of dokku" - declare TAG="$1" IS_PATCH="$2" + declare CURRENT_VERSION="$1" NEXT_VERSION="$2" IS_PATCH="$3" if [[ "$IS_PATCH" == "true" ]]; then - git log "v${TAG}..HEAD" --oneline | grep "Merge pull request" | cut -d' ' -f 5 | cut -d '#' -f2 + git log "v${CURRENT_VERSION}..HEAD" --oneline | grep "Merge pull request" | cut -d' ' -f 5 | cut -d '#' -f2 else curl -u "$RELEASE_GITHUB_USERNAME:$RELEASE_GITHUB_API_TOKEN" --fail -sS "https://api.github.com/search/issues?q=repo:dokku/dokku+milestone:v${NEXT_VERSION}+is:pr&per_page=100" | jq '.items[].number' fi @@ -256,7 +256,7 @@ fn-repo-update-history-and-commit() { mkdir -p /tmp/github-data - for PULL_REQUEST_ID in $(fn-repo-merged-requests "$CURRENT_VERSION" "$IS_PATCH"); do + for PULL_REQUEST_ID in $(fn-repo-merged-requests "$CURRENT_VERSION" "$NEXT_VERSION" "$IS_PATCH"); do ISSUE_FILE="/tmp/github-data/${PULL_REQUEST_ID}.json" if [[ ! -f "$ISSUE_FILE" ]]; then while true; do diff --git a/debian/control b/debian/control index ea1321e31..c5b5734bc 100644 --- a/debian/control +++ b/debian/control @@ -1,5 +1,5 @@ Package: dokku -Version: 0.35.15 +Version: 0.36.7 Section: web Priority: optional Architecture: amd64 diff --git a/docker/etc/sudoers.d/dokku-docker b/docker/etc/sudoers.d/dokku-docker index 1b5466a42..bebd88538 100644 --- a/docker/etc/sudoers.d/dokku-docker +++ b/docker/etc/sudoers.d/dokku-docker @@ -1 +1 @@ -dokku ALL=NOPASSWD:SETENV:/usr/bin/docker,/usr/bin/docker-container-healthchecker,/usr/bin/docker-image-labeler,/usr/bin/pack +dokku ALL=NOPASSWD:SETENV:/usr/bin/docker,/usr/bin/docker-container-healthchecker,/usr/bin/docker-image-labeler,/usr/bin/lambda-builder,/usr/bin/nixpacks,/usr/bin/pack diff --git a/docker/usr/local/bin/lambda-builder b/docker/usr/local/bin/lambda-builder new file mode 100644 index 000000000..cc1b50e9c --- /dev/null +++ b/docker/usr/local/bin/lambda-builder @@ -0,0 +1,20 @@ +#!/usr/bin/env bash +set -eo pipefail +[[ $TRACE ]] && set -x + +main() { + declare desc="re-runs lambda-builder commands as sudo" + local LAMBDA_BUILDER_BIN="" + if [[ -x "/usr/bin/lambda-builder" ]]; then + LAMBDA_BUILDER_BIN="/usr/bin/lambda-builder" + fi + + if [[ -z "$LAMBDA_BUILDER_BIN" ]]; then + echo "! No lambda-builder binary found" 1>&2 + exit 1 + fi + + sudo -E "$LAMBDA_BUILDER_BIN" "$@" +} + +main "$@" diff --git a/docker/usr/local/bin/nixpacks b/docker/usr/local/bin/nixpacks new file mode 100644 index 000000000..e690254b9 --- /dev/null +++ b/docker/usr/local/bin/nixpacks @@ -0,0 +1,20 @@ +#!/usr/bin/env bash +set -eo pipefail +[[ $TRACE ]] && set -x + +main() { + declare desc="re-runs nixpacks commands as sudo" + local NIXPACKS_BIN="" + if [[ -x "/usr/bin/nixpacks" ]]; then + NIXPACKS_BIN="/usr/bin/nixpacks" + fi + + if [[ -z "$NIXPACKS_BIN" ]]; then + echo "! No nixpacks binary found" 1>&2 + exit 1 + fi + + sudo -E "$NIXPACKS_BIN" "$@" +} + +main "$@" diff --git a/docs/_build/Dockerfile b/docs/_build/Dockerfile index ecce03345..dd9356f7f 100644 --- a/docs/_build/Dockerfile +++ b/docs/_build/Dockerfile @@ -1,4 +1,4 @@ -FROM python:3.13.1-alpine +FROM python:3.13.7-alpine WORKDIR /usr/src/app diff --git a/docs/_build/requirements.txt b/docs/_build/requirements.txt index a8e317216..8b25b2844 100644 --- a/docs/_build/requirements.txt +++ b/docs/_build/requirements.txt @@ -1,23 +1,23 @@ -beautifulsoup4==4.12.3 +beautifulsoup4==4.14.2 click==8.1.8 ghp-import==2.1.0 -importlib-metadata==8.5.0 -Jinja2==3.1.5 -Markdown>=3.2.1,<3.8 -MarkupSafe==3.0.2 +importlib-metadata==8.7.0 +Jinja2==3.1.6 +Markdown>=3.2.1,<3.10 +MarkupSafe==3.0.3 mergedeep==1.3.4 mkdocs==1.6.1 mkdocs-exclude==1.0.2 -mkdocs-material==9.5.49 +mkdocs-material==9.6.21 mkdocs-material-extensions==1.3.1 -packaging==24.2 -Pygments==2.19.1 -pymdown-extensions==10.14 -pyparsing==3.2.1 +packaging==25.0 +Pygments==2.19.2 +pymdown-extensions==10.16.1 +pyparsing==3.2.5 python-dateutil==2.9.0.post0 -PyYAML==6.0.2 -pyyaml_env_tag==0.1 +PyYAML==6.0.3 +pyyaml_env_tag==1.1 six==1.17.0 -soupsieve==2.6 +soupsieve==2.8 watchdog==6.0.0 -zipp==3.21.0 +zipp==3.23.0 diff --git a/docs/advanced-usage/docker-options.md b/docs/advanced-usage/docker-options.md index 03f2455f5..1c8664cbb 100644 --- a/docs/advanced-usage/docker-options.md +++ b/docs/advanced-usage/docker-options.md @@ -23,7 +23,7 @@ Dokku deploys your app in multiple "phases" and the `docker-options` plugin allo - `build`: The `build` phase is used to provide container options that are available during the build process for use by the various builders. - A given builder may strip out or ignore options that are unsupported by the builder in question - as an example, the `dockerfile` builder does not support mounted volumes. - `deploy`: The `deploy` phase is used to provide container options that are set on _deployed_ process types. This covers every process type specified in an app `Procfile` as well as any default processes your app may deploy. - - The `deploy` phase is usually the correct phase to add options for + - The `deploy` phase is usually the correct phase to add options for running containers. - `run`: The `run` phase is used to provide container options to one-off containers created by `dokku run`, `dokku run:detached`, and any cron tasks specified in your `app.json`. > [!IMPORTANT] diff --git a/docs/advanced-usage/persistent-storage.md b/docs/advanced-usage/persistent-storage.md index a9b337867..d2289976a 100644 --- a/docs/advanced-usage/persistent-storage.md +++ b/docs/advanced-usage/persistent-storage.md @@ -74,8 +74,8 @@ By default, permissions are set for usage with Herokuish buildpacks. These permi - This is used for apps deployed with Buildpacks via Herokuish. - `--chown heroku`: Use `1000:1000` as the folder permissions. - This is used for apps deployed with Cloud Native Buildpacks using the `heroku/builder` builder. -- `--chown packeto`: Use `2000:2000` as the folder permissions. - - This is used for apps deployed with Cloud Native Buildpacks using the `cloudfoundry/cnb` or `packeto` builders. +- `--chown paketo`: Use `2000:2000` as the folder permissions. + - This is used for apps deployed with Cloud Native Buildpacks using the `cloudfoundry/cnb` or `paketo` builders. - `--chown root`: Use `0:0` as the folder permissions. - This is used for containers that run their processes as root, as is typical for most Dockerfile or Docker image deploys. - `--chown false`: Skips the `chown` call. diff --git a/docs/advanced-usage/plugin-management.md b/docs/advanced-usage/plugin-management.md index 6915ab8bd..43d80ea12 100644 --- a/docs/advanced-usage/plugin-management.md +++ b/docs/advanced-usage/plugin-management.md @@ -6,7 +6,7 @@ ``` plugin:disable # Disable an installed plugin (third-party only) plugin:enable # Enable a previously disabled plugin -plugin:install [--core|--git-url] [--committish branch|commit|tag] [--name custom-plugin-name] # Optionally download git-url (and pin to the specified branch/commit/tag) & run install trigger for active plugins (or only core ones) +plugin:install [--core|git-url] [--committish branch|commit|tag] [--name custom-plugin-name] # Optionally download git-url (and pin to the specified branch/commit/tag) & run install trigger for active plugins (or only core ones) plugin:installed # Checks if a plugin is installed plugin:install-dependencies [--core] # Run install-dependencies trigger for active plugins (or only core ones) plugin:list # Print active plugins @@ -36,35 +36,35 @@ dokku plugin:list ``` plugn: dev - 00_dokku-standard 0.35.15 enabled dokku core standard plugin - 20_events 0.35.15 enabled dokku core events logging plugin - app-json 0.35.15 enabled dokku core app-json plugin - apps 0.35.15 enabled dokku core apps plugin - build-env 0.35.15 enabled dokku core build-env plugin - buildpacks 0.35.15 enabled dokku core buildpacks plugin - certs 0.35.15 enabled dokku core certificate management plugin - checks 0.35.15 enabled dokku core checks plugin - common 0.35.15 enabled dokku core common plugin - config 0.35.15 enabled dokku core config plugin - docker-options 0.35.15 enabled dokku core docker-options plugin - domains 0.35.15 enabled dokku core domains plugin - enter 0.35.15 enabled dokku core enter plugin - git 0.35.15 enabled dokku core git plugin - logs 0.35.15 enabled dokku core logs plugin - network 0.35.15 enabled dokku core network plugin - nginx-vhosts 0.35.15 enabled dokku core nginx-vhosts plugin - plugin 0.35.15 enabled dokku core plugin plugin - proxy 0.35.15 enabled dokku core proxy plugin - ps 0.35.15 enabled dokku core ps plugin - repo 0.35.15 enabled dokku core repo plugin - resource 0.35.15 enabled dokku core resource plugin - scheduler-docker-local 0.35.15 enabled dokku core scheduler-docker-local plugin - shell 0.35.15 enabled dokku core shell plugin - ssh-keys 0.35.15 enabled dokku core ssh-keys plugin - storage 0.35.15 enabled dokku core storage plugin - tags 0.35.15 enabled dokku core tags plugin - tar 0.35.15 enabled dokku core tar plugin - trace 0.35.15 enabled dokku core trace plugin + 00_dokku-standard 0.36.7 enabled dokku core standard plugin + 20_events 0.36.7 enabled dokku core events logging plugin + app-json 0.36.7 enabled dokku core app-json plugin + apps 0.36.7 enabled dokku core apps plugin + build-env 0.36.7 enabled dokku core build-env plugin + buildpacks 0.36.7 enabled dokku core buildpacks plugin + certs 0.36.7 enabled dokku core certificate management plugin + checks 0.36.7 enabled dokku core checks plugin + common 0.36.7 enabled dokku core common plugin + config 0.36.7 enabled dokku core config plugin + docker-options 0.36.7 enabled dokku core docker-options plugin + domains 0.36.7 enabled dokku core domains plugin + enter 0.36.7 enabled dokku core enter plugin + git 0.36.7 enabled dokku core git plugin + logs 0.36.7 enabled dokku core logs plugin + network 0.36.7 enabled dokku core network plugin + nginx-vhosts 0.36.7 enabled dokku core nginx-vhosts plugin + plugin 0.36.7 enabled dokku core plugin plugin + proxy 0.36.7 enabled dokku core proxy plugin + ps 0.36.7 enabled dokku core ps plugin + repo 0.36.7 enabled dokku core repo plugin + resource 0.36.7 enabled dokku core resource plugin + scheduler-docker-local 0.36.7 enabled dokku core scheduler-docker-local plugin + shell 0.36.7 enabled dokku core shell plugin + ssh-keys 0.36.7 enabled dokku core ssh-keys plugin + storage 0.36.7 enabled dokku core storage plugin + tags 0.36.7 enabled dokku core tags plugin + tar 0.36.7 enabled dokku core tar plugin + trace 0.36.7 enabled dokku core trace plugin ``` > [!WARNING] diff --git a/docs/appendices/0.36.0-migration-guide.md b/docs/appendices/0.36.0-migration-guide.md new file mode 100644 index 000000000..2caeca288 --- /dev/null +++ b/docs/appendices/0.36.0-migration-guide.md @@ -0,0 +1,12 @@ +# 0.36.0 Migration Guide + +## Changes + +- Process stop timeouts are now configured via the `ps` property `stop-timeout-seconds`. Existing `DOKKU_DOCKER_STOP_TIMEOUT` environment variables will be automatically migrated to the new value. +- Processes now default to a `30` second stop timeout. +- The `domains:clear` command no longer runs domain setup after clearing the domains. Use `domains:reset` or run `domains:setup` manually to have the same effect. +- The deprecated `DOKKU_DISABLE_ANSI_PREFIX_REMOVAL` setting has been removed. Dokku deploys no longer use shell escape codes to modify output, and thus deploy output may now contain `remote:` as a prefix in each lines output. + +## Deprecations + +Ubuntu 20.04 is now a deprecated installation target. The operating system will be considered EOL by Canonical in April 2025. Users are encouraged to upgrade to Ubuntu 24.04 or consider switching their instllation method to the [Docker-based installation method](/docs/getting-started/install/docker.md) to avoid any disruption in usage. diff --git a/docs/appendices/file-formats/app-json.md b/docs/appendices/file-formats/app-json.md index 1254d09f1..189a892b8 100644 --- a/docs/appendices/file-formats/app-json.md +++ b/docs/appendices/file-formats/app-json.md @@ -9,7 +9,7 @@ ```json { - "crons": [ + "cron": [ { "command": "echo 'hello'", "schedule": "0 1 * * *" diff --git a/docs/assets/favicons/browserconfig.xml b/docs/assets/favicons/browserconfig.xml index 8cc30e50f..c6c54ee70 100644 --- a/docs/assets/favicons/browserconfig.xml +++ b/docs/assets/favicons/browserconfig.xml @@ -2,10 +2,10 @@ - - - - + + + + #da532c diff --git a/docs/assets/favicons/manifest.json b/docs/assets/favicons/manifest.json index 3b382f357..aa14d418b 100644 --- a/docs/assets/favicons/manifest.json +++ b/docs/assets/favicons/manifest.json @@ -2,37 +2,37 @@ "name": "Dokku", "icons": [ { - "src": "https:\/\/cdn.jsdelivr.net\/dokku\/dokku@v0.35.15\/docs\/assets\/favicons\/android-chrome-36x36.png", + "src": "https:\/\/cdn.jsdelivr.net\/dokku\/dokku@v0.36.7\/docs\/assets\/favicons\/android-chrome-36x36.png", "sizes": "36x36", "type": "image\/png", "density": "0.75" }, { - "src": "https:\/\/cdn.jsdelivr.net\/dokku\/dokku@v0.35.15\/docs\/assets\/favicons\/android-chrome-48x48.png", + "src": "https:\/\/cdn.jsdelivr.net\/dokku\/dokku@v0.36.7\/docs\/assets\/favicons\/android-chrome-48x48.png", "sizes": "48x48", "type": "image\/png", "density": "1.0" }, { - "src": "https:\/\/cdn.jsdelivr.net\/dokku\/dokku@v0.35.15\/docs\/assets\/favicons\/android-chrome-72x72.png", + "src": "https:\/\/cdn.jsdelivr.net\/dokku\/dokku@v0.36.7\/docs\/assets\/favicons\/android-chrome-72x72.png", "sizes": "72x72", "type": "image\/png", "density": "1.5" }, { - "src": "https:\/\/cdn.jsdelivr.net\/dokku\/dokku@v0.35.15\/docs\/assets\/favicons\/android-chrome-96x96.png", + "src": "https:\/\/cdn.jsdelivr.net\/dokku\/dokku@v0.36.7\/docs\/assets\/favicons\/android-chrome-96x96.png", "sizes": "96x96", "type": "image\/png", "density": "2.0" }, { - "src": "https:\/\/cdn.jsdelivr.net\/dokku\/dokku@v0.35.15\/docs\/assets\/favicons\/android-chrome-144x144.png", + "src": "https:\/\/cdn.jsdelivr.net\/dokku\/dokku@v0.36.7\/docs\/assets\/favicons\/android-chrome-144x144.png", "sizes": "144x144", "type": "image\/png", "density": "3.0" }, { - "src": "https:\/\/cdn.jsdelivr.net\/dokku\/dokku@v0.35.15\/docs\/assets\/favicons\/android-chrome-192x192.png", + "src": "https:\/\/cdn.jsdelivr.net\/dokku\/dokku@v0.36.7\/docs\/assets\/favicons\/android-chrome-192x192.png", "sizes": "192x192", "type": "image\/png", "density": "4.0" diff --git a/docs/assets/versions.json b/docs/assets/versions.json index 610d0d6ea..e0884373a 100644 --- a/docs/assets/versions.json +++ b/docs/assets/versions.json @@ -32,6 +32,7 @@ "0.32.4", "0.33.9", "0.34.9", - "0.35.15" + "0.35.20", + "0.36.7" ] } diff --git a/docs/community/clients.md b/docs/community/clients.md index ca7e5a771..3f5d16359 100644 --- a/docs/community/clients.md +++ b/docs/community/clients.md @@ -28,26 +28,6 @@ gem install dokku-cli See [documentation here](https://github.com/SebastianSzturo/dokku-cli) for more information. -## (ruby) DokkuClient - -DokkuClient is another rubygem that acts as a client for your Dokku installation with built-in support for certain external plugins. You can install it via the following shell command (assuming you have ruby and rubygems installed): - -```shell -gem install dokku_client -``` - -See [documentation here](https://github.com/netguru/dokku_client) for more information. - -## (ruby) Dokkufy - -Dokkufy is a rubygem that handles automation of certain tasks, such as Dokku setup, plugin installation, etc. You can install it via the following shell command (assuming you have ruby and rubygems installed): - -```shell -gem install dokkufy -``` - -See [documentation here](https://github.com/cbetta/dokkufy) for more information. - ## (ruby) Dockland Dockland is a rubygem that acts as a client for your Dokku installation. You can install it via the following shell command (assuming you have ruby and rubygems installed): diff --git a/docs/community/plugins.md b/docs/community/plugins.md index e38bece40..cf6ce1d69 100644 --- a/docs/community/plugins.md +++ b/docs/community/plugins.md @@ -123,7 +123,6 @@ The following plugins are available and provided by Dokku maintainers. Please f | [Host post-build command hook](https://github.com/baikunz/dokku-post-deploy-script) | [baikunz][] | 0.4.0+ | | [Host pre-build command hook](https://github.com/fteychene/dokku-build-hook) | [fteychene][] | 0.4.0+ | | [Hostname](https://github.com/michaelshobbs/dokku-hostname) | [michaelshobbs][] | 0.4.0+ | -| [Hostname](https://github.com/michaelshobbs/dokku-hostname) | [michaelshobbs][] | 0.4.0+ | | [HTTP Auth Secure Apps](https://github.com/matto1990/dokku-secure-apps) | [matto1990][] | 0.4.0+ | | [Image Size Limit](https://github.com/Tashows/dokku-image-size-limit) | [Tashows][] | | | [Litestream](https://github.com/AxelTheGerman/dokku-litestream)4 | [AxelTheGerman][] | 0.27.0+ | diff --git a/docs/configuration/domains.md b/docs/configuration/domains.md index ef815b620..120157f45 100644 --- a/docs/configuration/domains.md +++ b/docs/configuration/domains.md @@ -13,6 +13,7 @@ domains:enable # Enable VHOST support domains:remove [ ...] # Remove domains from app domains:remove-global [ ...] # Remove global domain names domains:report [|--global] [] # Displays a domains report for one or more apps +domains:reset # Reset app domains to global-configured domains domains:set [ ...] # Set domains for app domains:set-global [ ...] # Set global domain names ``` @@ -33,7 +34,7 @@ If an FQDN such as `dokku.org` is used as the application name, the global virtu You can optionally override this in a plugin by implementing the `nginx-hostname` plugin trigger. If the `nginx-hostname` plugin has no output, the normal hostname algorithm will be executed. See the [plugin trigger documentation](/docs/development/plugin-triggers.md#nginx-hostname) for more information. -## Disabling VHOSTS +## Enabling and disabling VHOSTS If desired, it is possible to disable vhosts with the domains plugin. @@ -41,8 +42,21 @@ If desired, it is possible to disable vhosts with the domains plugin. dokku domains:disable node-js-app ``` +Vhosts can also be disabled for all apps: + +```shell +dokku domains:disable --all +``` + On subsequent deploys, the nginx virtualhost will be discarded. This is useful when deploying internal-facing services that should not be publicly routeable. As of 0.4.0, nginx will still be configured to proxy your app on some random high port. This allows internal services to maintain the same port between deployments. You may change this port by setting `DOKKU_PROXY_PORT` and/or `DOKKU_PROXY_SSL_PORT` (for services configured to use SSL.) +To re-enable, run the `domains:enable` subcommand: + +```shell +dokku domains:enable node-js-app +dokku domains:enable --all +``` + The domains plugin allows you to specify custom domains for applications. This plugin is aware of any ssl certificates that are imported via `certs:add`. Be aware that disabling domains (with `domains:disable`) will override any custom domains. ```shell @@ -62,6 +76,9 @@ dokku domains:remove node-js-app dokku.me # set all custom domains for app dokku domains:set node-js-app dokku.me dokku.org + +# delete all app domains and configure available global domains on it +dokku domains:reset node-js-app ``` ## Displaying domains reports for an app diff --git a/docs/configuration/environment-variables.md b/docs/configuration/environment-variables.md index 3734d44c6..d2c21fd50 100644 --- a/docs/configuration/environment-variables.md +++ b/docs/configuration/environment-variables.md @@ -8,7 +8,7 @@ The `config` plugin provides the following commands to manage your variables: config:show (|--global) Pretty-print an app or global environment config:bundle (|--global) [--merged] Bundle environment into tarfile config:clear (|--global) Clears environment variables -config:export (|--global) [--envfile] Export a global or app environment +config:export (|--global) [--format ] Export a global or app environment config:get (|--global) KEY Display a global or app-specific config value config:keys (|--global) [--merged] Show keys set in environment config:set [--encoded] [--no-restart] (|--global) KEY1=VALUE1 [KEY2=VALUE2 ...] Set one or more config vars @@ -101,7 +101,6 @@ The following config variables have special meanings and can be set in a variety | `DOKKU_APP_PROXY_TYPE` | `nginx` | `dokku proxy:set` | | | `DOKKU_APP_RESTORE` | `1` | `dokku config:set`
`dokku ps:stop` | | | `DOKKU_APP_SHELL` | `/bin/bash` | `dokku config:set` | Allows users to change the default shell used by Dokku for `dokku enter` and execution of deployment tasks. | -| `DOKKU_APP_TYPE` | `herokuish` | Auto-detected by using buildpacks or dockerfile | | | `DOKKU_CHECKS_DISABLED` | none | `dokku checks:disable` | | | `DOKKU_CHECKS_ENABLED` | none | `dokku checks:enable` | | | `DOKKU_CHECKS_SKIPPED` | none | `dokku checks:skip` | | @@ -110,9 +109,7 @@ The following config variables have special meanings and can be set in a variety | `DOKKU_CHECKS_ATTEMPTS` | `5` | `dokku config:set` | Number of retries for to run for a specific check before marking it as a failure | `DOKKU_DEFAULT_CHECKS_WAIT` | `10` | `dokku config:set` | If no user-defined checks are specified - or if the process being checked is not a `web` process - this is the period of time Dokku will wait before checking that a container is still running. | | `DOKKU_DISABLE_PROXY` | none | `dokku proxy:disable`
`dokku proxy:enable` | Disables the proxy in front of your application, resulting in publicly routing the docker container. | -| `DOKKU_DISABLE_ANSI_PREFIX_REMOVAL` | none | `dokku config:set`
`/etc/environment`
`~dokku/.dokkurc`
`~dokku/.dokkurc/*` | Disables removal of the ANSI prefix during deploys. Can be used in cases where the client deployer does not understand ansi escape codes. | | `DOKKU_DISABLE_APP_AUTOCREATION` | none | `dokku config:set` | Disables automatic creation of a non-existent app on deploy. | -| `DOKKU_DOCKER_STOP_TIMEOUT` | `10` | `dokku config:set` | Configurable grace period given to the `docker stop` command. If a container has not stopped by this time, a `kill -9` signal or equivalent is sent in order to force-terminate the container. Both the `ps:stop` and `apps:destroy` commands _also_ respect this value. If not specified, the docker defaults for the [docker stop command](https://docs.docker.com/engine/reference/commandline/stop/) will be used.| | `DOKKU_DOCKERFILE_CACHE_BUILD` | none | `dokku config:set` | | | `DOKKU_DOCKERFILE_START_CMD` | none | `dokku config:set` | | | `DOKKU_PARALLEL_ARGUMENTS`. | none | `dokku config:set` | Allows passing custom arguments to parallel for `ps:*all` commands | diff --git a/docs/deployment/continuous-integration/generic.md b/docs/deployment/continuous-integration/generic.md index 22154a923..2e9692a6a 100644 --- a/docs/deployment/continuous-integration/generic.md +++ b/docs/deployment/continuous-integration/generic.md @@ -11,6 +11,7 @@ Assuming a Docker image can be run as a CI task with environment variables injec - [gitlab-ci](https://about.gitlab.com/stages-devops-lifecycle/continuous-integration/) - [semaphoreci](https://semaphoreci.com/) - [travisci](https://travis-ci.com/) +- [woodpecker ci](https://woodpecker-ci.org/) ## Simple Usage diff --git a/docs/deployment/continuous-integration/github-actions.md b/docs/deployment/continuous-integration/github-actions.md index 19d9921d6..0a052d732 100644 --- a/docs/deployment/continuous-integration/github-actions.md +++ b/docs/deployment/continuous-integration/github-actions.md @@ -16,7 +16,7 @@ jobs: runs-on: ubuntu-24.04 steps: - name: Cloning repo - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: fetch-depth: 0 diff --git a/docs/deployment/continuous-integration/woodpecker-ci.md b/docs/deployment/continuous-integration/woodpecker-ci.md new file mode 100644 index 000000000..4c6fcda6a --- /dev/null +++ b/docs/deployment/continuous-integration/woodpecker-ci.md @@ -0,0 +1,29 @@ +# Woodpecker CI + +[Woodpecker CI](https://woodpecker-ci.org/docs/intro) can be used to automatically deploy a Dokku application via the official [dokku/ci-docker-image](https://github.com/dokku/ci-docker-image). The simplest example is as follows: + +```yaml +when: + - event: push + branch: main + +clone: + git: + image: woodpeckerci/plugin-git + settings: + partial: false + depth: 0 + +steps: + - name: deploy + image: dokku/ci-docker-image + environment: + GIT_REMOTE_URL: ssh://dokku@dokku.me:22/appname + SSH_PRIVATE_KEY: + from_secret: DOKKU_ME_SSH_DEPLOY_KEY + commands: + - dokku-deploy +``` + +- The standard `clone` stage is replaced with one that performs a complete clone of the repository (the default is a shallow clone, which dokku would reject). +- A `GIT_REMOTE_URL` and a `SSH_PRIVATE_KEY` (with help of the `from_secret` directive) suffice to carry out a deployment. \ No newline at end of file diff --git a/docs/deployment/logs.md b/docs/deployment/logs.md index 3fd7e2048..ee58053f9 100644 --- a/docs/deployment/logs.md +++ b/docs/deployment/logs.md @@ -116,10 +116,12 @@ dokku logs:vector-start --vector-image timberio/vector:latest-debian The `vector` container will be started with the following volume mounts: -- `/var/lib/dokku/data/logs/vector.json:/etc/vector/vector.json` +- `/var/lib/dokku/data/logs:/etc/vector` - `/var/run/docker.sock:/var/run/docker.sock` - `/var/log/dokku/apps:/var/log/dokku/apps` +The `/etc/vector` mount includes the `vector.json` configuration file, but also may be used to provide extra files to the vector container. + The final volume mount - `/var/log/dokku/apps` - may be used for users that wish to ship logs to a file on disk that may be later logrotated. This directory is owned by the `dokku` user and group, with permissions set to `0755`. At this time, log-rotation is not configured for this directory. #### Stopping the Vector container @@ -232,6 +234,19 @@ For some sinks - such as the `http` sink - it may be useful to use special chara dokku logs:set test vector-sink "http://?uri=https%3A//loggerservice.com%3A1234/%3Ftoken%3Dabc1234%26type%3Dvector" ``` +For kubernetes, it may be necessary to use template syntax - `{{ .parent.child }}` - in the sink configuration. Naively using brackets will fail due to the Helm chart install process assuming that the template should be interpreted at Helm install time vs by Vector itself. To avoid this, use `base64enc:` values (available only for top-level properties at this time). The following example shows how to use `{{ pod }}` as a value. + +```shell +# encode the value with a Helm `print` statement wrapper +encoded="$(echo '{{ print "{{ pod }}" }}' | base64)" +# the value of encoded should be: e3sgcHJpbnQgInt7IHBvZCB9fSIgfX0K + +# set the value +dokku logs:set test vector-sink "http://?process=base64enc%3A${encoded}" +``` + +This will transform the value to it's encoded form when configuring Vector sinks for Kubernetes. + Please read the [sink documentation](https://vector.dev/docs/reference/configuration/sinks/) for your sink of choice to configure the sink as desired. ##### Configuring the app label diff --git a/docs/deployment/schedulers/k3s.md b/docs/deployment/schedulers/k3s.md index 34a6106b7..2846949e9 100644 --- a/docs/deployment/schedulers/k3s.md +++ b/docs/deployment/schedulers/k3s.md @@ -134,110 +134,43 @@ When attaching an worker or server node, the K3s plugin will look at the IP asso dokku scheduler-k3s:set --global network-interface eth1 ``` -### Changing deploy timeouts +### Changing deployment settings -By default, app deploys will timeout after 300s. To customize this value, set the `deploy-timeout` property via `scheduler-k3s:set`: +The k3s plugin provides a number of settings that can be used to managed deployments on a per-app basis. The following table outlines ones not covered elsewhere: + +| Name | Description | Global Default | +|-----------------------|---------------------------------------------------|--------------------| +| `deploy-timeout` | Controls when app deploys will timeout in seconds | `300s` | +| `kustomize-root-path` | Controls the folder context from the deployed repository used for Kustomize | `config/kustomize` | +| `image-pull-secrets` | Name of a kubernetes secret used to auth against a registry | Contents of `~/.docker/config.json` from Dokku server | +| `namespace` | Controls the namespace used for resource creation | `default` | +| `rollback-on-failure` | Whether to rollback failed deploys | `false` | +| `shm-size` | Default shared memory size for pods | Kubernetes default | + +All settings can be set via the `scheduler-k3s:set` command. Using `deploy-timeout` as an example: ```shell dokku scheduler-k3s:set node-js-app deploy-timeout 60s ``` -The default value may be set by passing an empty value for the option: +The default value may be set by passing an empty value for the option in question: ```shell dokku scheduler-k3s:set node-js-app deploy-timeout ``` -The `deploy-timeout` property can also be set globally. The global default is `300s`. +Properties can also be set globally. If not set for an app, the global value will apply. ```shell dokku scheduler-k3s:set --global deploy-timeout 60s ``` -The default value may be set by passing an empty value for the option. +The global default value may be set by passing an empty value for the option. ```shell dokku scheduler-k3s:set --global deploy-timeout ``` -### Customizing the namespace - -By default, app deploys will run against the `default` Kubernetes namespace. To customize this value, set the `namespace` property via `scheduler-k3s:set`: - -```shell -dokku scheduler-k3s:set node-js-app namespace lollipop -``` - -The default value may be set by passing an empty value for the option: - -```shell -dokku scheduler-k3s:set node-js-app namespace -``` - -The `namespace` property can also be set globally. The global default is `default`. - -```shell -dokku scheduler-k3s:set --global namespace 60s -``` - -The default value may be set by passing an empty value for the option. - -```shell -dokku scheduler-k3s:set --global namespace -``` - -### Enabling rollback on failure - -By default, app deploys do not rollback on failure. To enable this functionality, set the `rollback-on-failure` property via `scheduler-k3s:set`: - -```shell -dokku scheduler-k3s:set node-js-app rollback-on-failure true -``` - -The default value may be set by passing an empty value for the option: - -```shell -dokku scheduler-k3s:set node-js-app rollback-on-failure -``` - -The `rollback-on-failure` property can also be set globally. The global default is `false`. - -```shell -dokku scheduler-k3s:set --global rollback-on-failure false -``` - -The default value may be set by passing an empty value for the option. - -```shell -dokku scheduler-k3s:set --global rollback-on-failure -``` - -### Using image pull secrets - -When authenticating against a registry via `registry:login`, the scheduler-k3s plugin will authenticate all servers in the cluster against the registry specified. If desired, an image pull secret can be used instead. To customize this value, set the `image-pull-secrets` property via `scheduler-k3s:set`: - -```shell -dokku scheduler-k3s:set node-js-app image-pull-secrets lollipop -``` - -The default value may be set by passing an empty value for the option: - -```shell -dokku scheduler-k3s:set node-js-app image-pull-secrets -``` - -The `image-pull-secrets` property can also be set globally. The global default is empty string, and k3s will use Dokku's locally configured `~/.docker/config.json` for any private registry pulls. - -```shell -dokku scheduler-k3s:set --global image-pull-secrets 60s -``` - -The default value may be set by passing an empty value for the option. - -```shell -dokku scheduler-k3s:set --global image-pull-secrets -``` - ### SSL Certificates #### Enabling letsencrypt integration @@ -433,7 +366,6 @@ dokku scheduler-k3s:ensure-charts Once the chart is configured, an `http` trigger can be specified like so: - ```json { "formation": { @@ -529,6 +461,30 @@ dokku scheduler-k3s:autoscaling-auth:report node-js-app --include-metadata Datadog datadogSite: us5.datadoghq.com ``` +### Integrating Kustomize + +Dokku supports integration with [Kustomize](https://kustomize.io/) to further customize the generated helm charts for app deployments. For example, a `config/kustomize/kustomization.yaml` file with the following contents will override the scale for each process deployed to `3`: + +```yaml +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization +resources: +- rendered.yaml +patches: +- patch: |- + - op: replace + path: /spec/replicas + value: 3 + target: + group: apps + version: v1 + kind: Deployment +``` + +When using Kustomize with Dokku, all Kustomize-files _must_ be placed in the `config/kustomize` folder, with a `kustomization.yaml` file being the entrypoint to Kustomize. Dokku will render the helm chart to a `rendered.yaml` file, and then execute Kustomize with the `config/kustomize` folder as the context. + +See the [Kustomize](https://kustomize.io/) website for more details on how to use Kustomize. + ### Using kubectl remotely > [!WARNING] @@ -583,7 +539,6 @@ dokku scheduler-k3s:set --global chart.cert-manager.version 1.13.3 > [!NOTE] > Properties follow dot-notation, and are expanded according to Helm's internal logic. See the [Helm documentation](https://helm.sh/docs/helm/helm_install/#helm-install) for `helm install` for further details. - To unset a chart property, omit the value from the `scheduler-k3s:set` call: ```shell @@ -599,7 +554,7 @@ dokku scheduler-k3s:ensure-charts --force Alternatively, a comma separated list of chart names can be specified to only force install the specified charts: ```shell -dokku scheduler-k3s:ensure-charts --force --chart-names cert-manager +dokku scheduler-k3s:ensure-charts --charts cert-manager ``` ## Scheduler Interface @@ -613,6 +568,11 @@ This plugin implements various functionality through `plugn` triggers to integra - `apps:clone` - `apps:destroy` - `apps:rename` +- `docker-options`: + - The following docker options are translated into their kubernetes equivalents: + - `--cap-add` + - `--cap-drop` + - `--privileged` - `cron` - `enter` - `deploy` @@ -643,7 +603,20 @@ The following Dokku functionality is not implemented at this time. ### Logging support -App logs for the `logs` command are fetched by Dokku from running containers via the `kubectl` cli. Persisting logs via Vector is not implemented at this time. Users may choose to configure the Vector Kubernetes integration directly by following [this guide](https://vector.dev/docs/setup/installation/platforms/kubernetes/). +App logs for the `logs` command are fetched by Dokku from running containers via the Kubernetes api. While the `k3s` scheduler does not integrate with the `logs:vector-*` subcommands, it does respect the global `vector-sink` logs property. When that property is set, the `scheduler-k3s:ensure-charts` command can be utilized to reconfigure vector to ship kubernetes logs to the provided sink. + +To setup log shipping, configure the global `vector-sink` property for the `logs` plugin.. Note that this can be run before _or_ after the `scheduler-k3s:ensure-charts` command - if run before, the `scheduler-k3s:ensure-charts` subcommand will pick up the value. + +```shell +dokku logs:set --global vector-sink "console://?encoding[codec]=json" +``` + +Next, run the `scheduler-k3s:ensure-charts` command with the `vector` chart to force the `k3s` scheduler to reconfigure vector with the specified sink: + +```shell +dokku scheduler-k3s:ensure-charts --charts vector +``` +Please see the [vector logs documentation](/docs/deployment/logs.md#configuring-a-log-sink) for more information on specifying vector sinks. ### Supported Resource Management Properties diff --git a/docs/deployment/schedulers/scheduler-management.md b/docs/deployment/schedulers/scheduler-management.md index 0189092bf..4fac3ce0f 100644 --- a/docs/deployment/schedulers/scheduler-management.md +++ b/docs/deployment/schedulers/scheduler-management.md @@ -98,7 +98,7 @@ At this time, the following dokku commands are used to implement a complete sche - `apps:clone`: handles app cloning - triggers: post-app-clone-setup - `cron`: generates cron tasks for the app - - triggers: cron-write + - triggers: scheduler-cron-write - `deploy`: deploys app proceses and checks the status of a deploy - triggers: scheduler-app-status, scheduler-deploy, scheduler-is-deployed, scheduler-logs-failed - `enter`: enters a running container @@ -112,7 +112,9 @@ At this time, the following dokku commands are used to implement a complete sche - `run:logs`: fetches running container logs - triggers: scheduler-run-logs - `ps:stop`: stops app processes - - triggers: scheduler-stop + - triggers: scheduler-stop, scheduler-cron-write +- `ps:start`: starts app processes + - triggers: scheduler-deploy, scheduler-cron-write - `ps:inspect`: outputs inspect output for processes in an app - triggers: scheduler-inspect diff --git a/docs/deployment/zero-downtime-deploys.md b/docs/deployment/zero-downtime-deploys.md index b811b2d1e..e769b2193 100644 --- a/docs/deployment/zero-downtime-deploys.md +++ b/docs/deployment/zero-downtime-deploys.md @@ -36,12 +36,15 @@ dokku checks:set node-js-app wait-to-retire 30 Defaults to `60`. +## Setting stop grace period + +You can set the `stop-timeout-seconds` property on the `ps` plugin to change this value (default: `30`). See the [process management documentation](/docs/processes/process-management.md#changing-process-management-settings) for more information. + ## Configuring check settings using the `config` plugin There are certain settings that can be configured via environment variables: - `DOKKU_DEFAULT_CHECKS_WAIT`: (default: `10`) If no user-defined checks are specified - or if the process being checked is not a `web` process - this is the period of time Dokku will wait before checking that a container is still running. -- `DOKKU_DOCKER_STOP_TIMEOUT`: (default: `10`) Configurable grace period given to the `docker stop` command. If a container has not stopped by this time, a `kill -9` signal or equivalent is sent in order to force-terminate the container. Both the `ps:stop` and `apps:destroy` commands *also* respect this value. If not specified, the Docker defaults for the [`docker stop` command](https://docs.docker.com/engine/reference/commandline/stop/) will be used. The following settings may also be specified in the `app.json` file, though are available as environment variables in order to ease application reuse. diff --git a/docs/development/plugin-triggers.md b/docs/development/plugin-triggers.md index 0a6427377..43bbab731 100644 --- a/docs/development/plugin-triggers.md +++ b/docs/development/plugin-triggers.md @@ -119,6 +119,21 @@ set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x # TODO ``` +### `app-json-is-valid` + +- Description: Checks to see if the provided app.json file is valid +- Invoked by: Appjson extraction during deployment +- Arguments: `$APP $APP_JSON_PATH` +- Example: + +```shell +#!/usr/bin/env bash + +set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x + +# TODO +``` + ### `app-maybe-create` - Description: Creates an app (gated by whether this is globally enabled or not) @@ -583,22 +598,6 @@ DOKKU_SCHEDULER="$1" # TODO ``` -### `cron-write` - -- Description: Force triggers writing out cron entries -- Invoked by: -- Arguments: -- Example: - -```shell -#!/usr/bin/env bash - -set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x -source "$PLUGIN_CORE_AVAILABLE_PATH/common/functions" - -# TODO -``` - ### `dependencies` - Description: Used to install system-level dependencies. @@ -1700,7 +1699,7 @@ curl "http://httpstat.us/200" ### `post-domains-update` - Description: Allows you to run commands once the domain for an app has been updated. It also sends in the command that has been used. This can be "add", "clear" or "remove". The third argument will be the optional list of domains -- Invoked by: `dokku domains:add`, `dokku domains:clear`, `dokku domains:remove`, `dokku domains:set` +- Invoked by: `dokku domains:add`, `dokku domains:clear`, `dokku domains:remove`, `dokku domains:reset`, `dokku domains:set` - Arguments: `$APP` `action name` `domains` - Example: @@ -2051,7 +2050,9 @@ CMD="cat > gm && \ dpkg -s graphicsmagick &>/dev/null || \ (apt-get update -qq && apt-get -qq -y --no-install-recommends install graphicsmagick && apt-get clean)" -CID=$(docker run $DOKKU_GLOBAL_RUN_ARGS -i -a stdin $IMAGE /bin/bash -c "$CMD") +CID_FILE=/tmp/cid-file +docker run $DOKKU_GLOBAL_RUN_ARGS -i -a stdin --cidfile /tmp/cid-file "$IMAGE" /bin/bash -c "$CMD" +CID="$(cat "$CID_FILE")" test $(docker wait $CID) -eq 0 DOCKER_COMMIT_LABEL_ARGS=("--change" "LABEL org.label-schema.schema-version=1.0" "--change" "LABEL org.label-schema.vendor=dokku" "--change" "LABEL com.dokku.app-name=$APP") docker commit "${DOCKER_COMMIT_LABEL_ARGS[@]}" $CID $IMAGE >/dev/null @@ -2443,6 +2444,26 @@ DOKKU_SCHEDULER="$1"; APP="$2"; # TODO ``` +### `scheduler-cron-write` + +> [!WARNING] +> The scheduler plugin trigger apis are under development and may change +> between minor releases until the 1.0 release. + +- Description: Force triggers writing out cron entries. Arguments are optional. +- Invoked by: `ps:start`, `ps:stop`, `cron:set` +- Arguments: `$DOKKU_SCHEDULER $APP` +- Example: + +```shell +#!/usr/bin/env bash + +set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x +source "$PLUGIN_CORE_AVAILABLE_PATH/common/functions" + +# TODO +``` + ### `scheduler-deploy` > [!WARNING] @@ -2588,6 +2609,7 @@ DOKKU_SCHEDULER="$1"; APP="$2"; > [!WARNING] > The scheduler plugin trigger apis are under development and may change > between minor releases until the 1.0 release. + - Description: Allows you to run scheduler commands when retrieving failed container logs - Invoked by: `dokku nginx:access-logs` and `dokku nginx:error-logs` - Arguments: `$DOKKU_SCHEDULER $APP $PROXY_TYPE $LOG_TYPE $TAIL $NUM_LINES` diff --git a/docs/development/release-process.md b/docs/development/release-process.md index 5d8e15d34..653bbabee 100644 --- a/docs/development/release-process.md +++ b/docs/development/release-process.md @@ -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.35.15-2 (Mon Feb 22 23:20:37 CET 2016)" +# wait for "==> build-arch: ==> Finished making: dokku 0.36.7-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' diff --git a/docs/development/testing.md b/docs/development/testing.md index 669449a24..1daaca2be 100644 --- a/docs/development/testing.md +++ b/docs/development/testing.md @@ -13,7 +13,7 @@ All pull requests have tests run against them on [GitHub Actions](https://github If you wish to skip tests for a particular commit, e.g. documentation changes, you may add the `[ci skip]` designator to your commit message. Commits that _should_ be tested but have the above designator will not be merged. -While we do provide official packages for a variety of platforms, as our test suite currently runs on Ubuntu Noble 24.04, we only provide official installation support for that platform and the supported LTS releases of Ubuntu (currently 20.04, 22.04, and 24.04). +While we do provide official packages for a variety of platforms, as our test suite currently runs on Ubuntu Noble 24.04, we only provide official installation support for that platform and the supported LTS releases of Ubuntu (currently 22.04, and 24.04). ## Local Test Execution diff --git a/docs/getting-started/advanced-installation.md b/docs/getting-started/advanced-installation.md index e0b1fc913..36e83f685 100644 --- a/docs/getting-started/advanced-installation.md +++ b/docs/getting-started/advanced-installation.md @@ -89,6 +89,7 @@ cd /var touch swap.img chmod 600 swap.img +swapoff /var/swap.img dd if=/dev/zero of=/var/swap.img bs=1024k count=1000 mkswap /var/swap.img swapon /var/swap.img @@ -96,5 +97,8 @@ free echo "/var/swap.img none swap sw 0 0" >> /etc/fstab ``` +Note: it may be necessary to call swapoff, mkswap and swapon explicitly: `sudo /sbin/swapoff /var/swap.img`, etc. [Reference](https://www.digitalocean.com/community/tutorials/how-to-configure-virtual-memory-swap-file-on-a-vps) + +[Add'l Reference](https://serverfault.com/questions/994297/increase-swap-file-size-that-already-exists-ec-2-linux) diff --git a/docs/getting-started/install/docker.md b/docs/getting-started/install/docker.md index dee36725c..2f28cd454 100644 --- a/docs/getting-started/install/docker.md +++ b/docs/getting-started/install/docker.md @@ -3,7 +3,7 @@ Pull the dokku/dokku image: ```shell -docker pull dokku/dokku:0.35.15 +docker pull dokku/dokku:0.36.7 ``` Next, run the image. @@ -19,7 +19,7 @@ docker container run -d \ --publish 8443:443 \ --volume /var/lib/dokku:/mnt/dokku \ --volume /var/run/docker.sock:/var/run/docker.sock \ - dokku/dokku:0.35.15 + dokku/dokku:0.36.7 ``` Alternatively, you can use `docker-compose.yml`: @@ -27,7 +27,7 @@ Alternatively, you can use `docker-compose.yml`: ```yaml services: dokku: - image: dokku/dokku:0.35.15 + image: dokku/dokku:0.36.7 container_name: dokku network_mode: bridge ports: @@ -83,7 +83,7 @@ redis: https://github.com/dokku/dokku-redis.git The alternative is to build a custom docker image via a custom Dockerfile. This Dockerfile can run any `plugin:install` command. Note that the version installed at that time will be the one that persists. Below is an example Dockerfile showing this method. ```Dockerfile -FROM dokku/dokku:0.35.15 +FROM dokku/dokku:0.36.7 RUN dokku plugin:install https://github.com/dokku/dokku-postgres.git postgres RUN dokku plugin:install https://github.com/dokku/dokku-redis.git redis ``` diff --git a/docs/getting-started/installation/index.md b/docs/getting-started/installation/index.md index 6a916124d..82e4066da 100644 --- a/docs/getting-started/installation/index.md +++ b/docs/getting-started/installation/index.md @@ -9,7 +9,7 @@ Dokku is an extensible, open source Platform as a Service that runs on a single To start using Dokku, you'll need a system that meets the following minimum requirements: - A fresh installation of any of the following operating systems: - - [Ubuntu 20.04/22.04/24.04](https://www.ubuntu.com/download) + - [Ubuntu 22.04/24.04](https://www.ubuntu.com/download) - [Debian 11+ x64](https://www.debian.org/distrib/) - A server with one of the following architectures - AMD64 (alternatively known as `x86_64`), commonly used for Intel cloud servers @@ -37,8 +37,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 -NP . https://dokku.com/install/v0.35.15/bootstrap.sh -sudo DOKKU_TAG=v0.35.15 bash bootstrap.sh +wget -NP . https://dokku.com/install/v0.36.7/bootstrap.sh +sudo DOKKU_TAG=v0.36.7 bash bootstrap.sh ``` The installation process takes about 5-10 minutes, depending upon internet connection speed. diff --git a/docs/getting-started/troubleshooting.md b/docs/getting-started/troubleshooting.md index 0645869dd..e95c1ebbc 100644 --- a/docs/getting-started/troubleshooting.md +++ b/docs/getting-started/troubleshooting.md @@ -226,11 +226,21 @@ sudo ufw disable ### I can't connect to my application because the server is sending an invalid response, or can't provide a secure connection -This isn't usually an issue with Dokku, but rather an app config problem. This can happen when your application is configured to enforce secure connections/HSTS, but you don't have SSL set up for the app. +This is normally a config problem with your app, rather than an issue with Dokku. -In Rails at least, if your `application.rb` or `environmnents/production.rb` include the line `configure.force_ssl = true` which includes HSTS, try commenting that out and redeploying. +One common cause is an application configured to enforce secure connections/HSTS, but SSL is not set up. In Ruby on Rails, if your `application.rb` or `config/environments/production.rb` include the line `configure.force_ssl = true`, try commenting that line out and redeploying. If this solves the issue temporarily, longer-term you should consider [configuring SSL](/docs/configuration/ssl.md). + + +### I deployed a new application, but an existing application is being served when I visit it + +This problem has the same cause as the previous issue: your application is attempting to enforce SSL, but SSL is not configured. Disabling SSL enforcement should solve the problem. + +The underlying cause is best understood with an example. Let's say you already have `https://apples.example.com/` working, and you're trying to deploy `bananas.example.com/`. But whenever you visit `bananas.example.com` you see `apples.example.com` instead. This is caused by `bananas.example.com` forcing SSL: + +1. Your browser sends a request to `http://bananas.example.com`. +1. `bananas.example.com` issues a redirect to `https://bananas.example.com`. +1. Your browser sends a request to `https://bananas.example.com`. But you haven't configured SSL for `bananas.example.com` yet! So this request ends up routed to `https://apples.example.com`, which _does_ have an SSL config. -If this solves the issue temporarily, longer term you should consider [configuring SSL](/docs/configuration/ssl.md). ### My application deploys properly, but won't load in browser "connection refused" diff --git a/docs/home.html b/docs/home.html index bd8652f06..348bb0d86 100644 --- a/docs/home.html +++ b/docs/home.html @@ -10,26 +10,26 @@ Dokku - The smallest PaaS implementation you've ever seen - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + - - + + @@ -38,7 +38,7 @@ - + @@ -98,7 +98,7 @@
-
Latest release v0.35.15
+
Latest release v0.36.7

An open source PAAS alternative to Heroku.

Dokku helps you build and manage the lifecycle of applications from building to scaling.

@@ -125,7 +125,7 @@

$ - sudo DOKKU_TAG=v0.35.15 bash bootstrap.sh + sudo DOKKU_TAG=v0.36.7 bash bootstrap.sh


diff --git a/docs/networking/proxies/caddy.md b/docs/networking/proxies/caddy.md index fe2f6b9c7..b56ab994d 100644 --- a/docs/networking/proxies/caddy.md +++ b/docs/networking/proxies/caddy.md @@ -117,6 +117,16 @@ dokku caddy:set --global log-level DEBUG After modifying, the Caddy container will need to be restarted. +### Changing the label key for the app + +The default label key for the app is `caddy`. This can be changed by setting the `label-key` property: + +```shell +dokku caddy:set node-js-app label-key caddy_0 +``` + +This will update the app's label key to `caddy_0`. The label key is used to identify the app in the Caddy configuration. If you change the label key, you will need to restart or rebuild the app to apply the updates. + ### SSL Configuration The caddy plugin only supports automatic ssl certificates from it's letsencrypt integration. Managed certificates provided by the `certs` plugin are ignored. diff --git a/docs/networking/proxies/nginx.md b/docs/networking/proxies/nginx.md index 062224116..bd6b5d92a 100644 --- a/docs/networking/proxies/nginx.md +++ b/docs/networking/proxies/nginx.md @@ -332,6 +332,7 @@ Changing these value globally or on a per-app basis will require rebuilding the | keepalive-timeout | `75s` | string | Timeout (with units) during which a keep-alive client connection will stay open on the server side | | lingering-timeout | `5s` | string | Timeout (with units) is the maximum waiting time for more client data to arrive | | nginx-conf-sigil-path | `nginx.conf.sigil` | string | Path in the repository to the `nginx.conf.sigil` file | +| nginx-service-command | | string | Full path to an executable script or binary to invoke instead of the system's init process when interacting with nginx | | proxy-buffer-size | `8k` (# is os pagesize) | string | Size of the buffer used for reading the first part of proxied server response | | proxy-buffering | `on` | string | Enables or disables buffering of responses from the proxied server | | proxy-buffers | `8 8k` | string | Number and size of the buffers used for reading the proxied server response, for a single connection | @@ -487,7 +488,7 @@ See the [customizing hostnames documentation](/docs/configuration/domains.md#cus ### Disabling VHOSTS -See the [disabling vhosts documentation](/docs/configuration/domains.md#disabling-vhosts) for more information on how to disable domain usage for your app. +See the [enabling and disabling vhosts documentation](/docs/configuration/domains.md#enabling-and-disabling-vhosts) for more information on how to disable domain usage for your app. ### SSL Configuration diff --git a/docs/networking/proxy-management.md b/docs/networking/proxy-management.md index 6b1ec7f55..173b2e868 100644 --- a/docs/networking/proxy-management.md +++ b/docs/networking/proxy-management.md @@ -158,6 +158,8 @@ At this time, the following dokku commands are used to interact with a complete - triggers: `pre-enable-vhost` - `domains:remove`: Removes a domain from an app. - triggers: `post-domains-update` +- `domains:reset`: Reset app domains to global-configured domains. + - triggers: `post-domains-update` - `domains:set`: Sets all domains for a given app. - triggers: `post-domains-update` - `proxy:build-config`: Builds - or rebuilds - external proxy configuration. diff --git a/docs/processes/process-management.md b/docs/processes/process-management.md index abc64ebac..86b80982e 100644 --- a/docs/processes/process-management.md +++ b/docs/processes/process-management.md @@ -107,6 +107,38 @@ proctype: qty web: 1 ``` +### Changing process management settings + +The `ps` plugin provides a number of settings that can be used to managed deployments on a per-app basis. The following table outlines ones not covered elsewhere: + +| Name | Description | Global Default | +|-----------------------|---------------------------------------------------|--------------------| +| `stop-timeout` | Configurable grace period given to the `docker stop` command. If a container has not stopped by this time, a `kill -9` signal or equivalent is sent in order to force-terminate the container. Both the `ps:stop` and `apps:destroy` commands *also* respect this value. If not specified, the Docker defaults for the [`docker stop` command](https://docs.docker.com/engine/reference/commandline/stop/) will be used. | `30` | + +All settings can be set via the `ps:set` command. Using `stop-timeout` as an example: + +```shell +dokku ps:set node-js-app stop-timeout 60 +``` + +The default value may be set by passing an empty value for the option in question: + +```shell +dokku ps:set node-js-app stop-timeout +``` + +Properties can also be set globally. If not set for an app, the global value will apply. + +```shell +dokku ps:set --global stop-timeout 60 +``` + +The global default value may be set by passing an empty value for the option. + +```shell +dokku ps:set --global stop-timeout +``` + ### Defining Processes #### Procfile diff --git a/docs/processes/scheduled-cron-tasks.md b/docs/processes/scheduled-cron-tasks.md index 145c890c6..76c3f2232 100644 --- a/docs/processes/scheduled-cron-tasks.md +++ b/docs/processes/scheduled-cron-tasks.md @@ -53,39 +53,39 @@ When running scheduled cron tasks, there are a few items to be aware of: - Scheduled cron tasks are supported on a per-scheduler basis, and are currently only implemented by the `docker-local` scheduler. - Tasks for _all_ apps managed by the `docker-local` scheduler are written to a single crontab file owned by the `dokku` user. The `dokku` user's crontab should be considered reserved for this purpose. -#### Specifying a MAILFROM value -> [!IMPORTANT] -> New as of 0.35.14 +### Changing cron management settings -Users can specify a value for `MAILFROM` via the global `mailfrom` cron property by using the `cron:set` command. +The `cron` plugin provides a number of settings that can be used to managed deployments on a per-app basis. The following table outlines ones not covered elsewhere: + +| Name | Description | Level | Global Default | +|-----------------------|----------------------------------------------------------------|-------------|----------------| +| `mailfrom` | Sets the `MAILFROM` variable in a cron file for cron reporting | Global-only | empty string | +| `maintenance` | Whether to have cron running for the app or not. | App-only | `false` | +| `mailto` | Sets the `MAILTO` variable in a cron file for cron reporting | Global-only | empty string | + +All settings can be set via the `cron:set` command. Using `maintenance` as an example: ```shell -dokku cron:set --global mailfrom example@example.com +dokku cron:set node-js-app maintenance true ``` -All output for individual cron runs will be sent from the specified email. - -Cron emails can be reset to use the system email by running the `cron:set` command for the global `mailfrom` property with no value. +The default value may be set by passing an empty value for the option in question: ```shell -dokku cron:set --global mailfrom +dokku cron:set node-js-app maintenance ``` -#### Specifying a MAILTO value - -By default, cron tasks complete and do not perform any reporting. Users can specify a value for `MAILTO` via the global `mailto` cron property by using the `cron:set` command. +If a property can be set globally - such as `mailto`, use the `--global` flag. If not set for an app, the global value will apply if it exists. ```shell -dokku cron:set --global mailto example@example.com +dokku cron:set --global maintenance true ``` -All output for individual cron runs will be sent to the specified email. - -Cron emails can be disabled by running the `cron:set` command for the global `mailto` property with no value. +The global default value may be set by passing an empty value for the option. ```shell -dokku cron:set --global mailto +dokku cron:set --global maintenance ``` #### Listing Cron tasks @@ -112,6 +112,17 @@ dokku cron:list node-js-app --format json [{"id":"cGhwPT09cGhwIHRlc3QucGhwPT09QGRhaWx5","app":"node-js-app","command":"node index.js","schedule":"@daily"}] ``` +To fetch global tasks, use the `--global` flag: + +```shell +dokku cron:list --global +``` + +``` +ID Schedule Command +5cruaotm4yzzpnjlsdunblj8qyjp @daily /bin/true +``` + #### Executing a cron task on the fly Cron tasks can be invoked via the `cron:run` command. This command takes an `app` argument and a `cron id` (retrievable from `cron:list` output). diff --git a/docs/template.html b/docs/template.html index 4bf88f594..aa268098c 100644 --- a/docs/template.html +++ b/docs/template.html @@ -9,26 +9,26 @@ Dokku - {{DOC_TITLE}} - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + - - + + - - - - -{{{body}}} - - \ No newline at end of file diff --git a/tests/apps/checks-root/package-lock.json b/tests/apps/checks-root/package-lock.json index fe36c9e13..8055f97f6 100644 --- a/tests/apps/checks-root/package-lock.json +++ b/tests/apps/checks-root/package-lock.json @@ -27,90 +27,24 @@ "node": ">= 0.6" } }, - "node_modules/array-flatten": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-3.0.0.tgz", - "integrity": "sha512-zPMVc3ZYlGLNk4mpK1NzP2wg0ml9t7fUgDsayR5Y5rSzxQilzR9FGu/EH2jQOcKSAeAfWeylyW8juy3OkWRvNA==", - "license": "MIT" - }, "node_modules/body-parser": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.0.1.tgz", - "integrity": "sha512-PagxbjvuPH6tv0f/kdVbFGcb79D236SLcDTs6DrQ7GizJ88S1UWP4nMXFEo/I4fdhGRGabvFfFjVGm3M7U8JwA==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.0.tgz", + "integrity": "sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg==", "license": "MIT", "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.5", - "debug": "3.1.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.5.2", - "on-finished": "2.4.1", - "qs": "6.13.0", + "bytes": "^3.1.2", + "content-type": "^1.0.5", + "debug": "^4.4.0", + "http-errors": "^2.0.0", + "iconv-lite": "^0.6.3", + "on-finished": "^2.4.1", + "qs": "^6.14.0", "raw-body": "^3.0.0", - "type-is": "~1.6.18", - "unpipe": "1.0.0" + "type-is": "^2.0.0" }, "engines": { - "node": ">= 0.10" - } - }, - "node_modules/body-parser/node_modules/debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/body-parser/node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/body-parser/node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/body-parser/node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/body-parser/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, - "node_modules/body-parser/node_modules/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "license": "MIT", - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, - "engines": { - "node": ">= 0.6" + "node": ">=18" } }, "node_modules/bytes": { @@ -122,17 +56,27 @@ "node": ">= 0.8" } }, - "node_modules/call-bind": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", - "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", "license": "MIT", "dependencies": { - "es-define-property": "^1.0.0", "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.1" + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" }, "engines": { "node": ">= 0.4" @@ -180,12 +124,12 @@ } }, "node_modules/debug": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", - "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", "license": "MIT", "dependencies": { - "ms": "2.1.2" + "ms": "^2.1.3" }, "engines": { "node": ">=6.0" @@ -196,23 +140,6 @@ } } }, - "node_modules/define-data-property": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", - "license": "MIT", - "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/depd": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", @@ -222,14 +149,18 @@ "node": ">= 0.8" } }, - "node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" + "node": ">= 0.4" } }, "node_modules/ee-first": { @@ -248,13 +179,10 @@ } }, "node_modules/es-define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", - "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.2.4" - }, "engines": { "node": ">= 0.4" } @@ -268,6 +196,18 @@ "node": ">= 0.4" } }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", @@ -284,89 +224,64 @@ } }, "node_modules/express": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/express/-/express-5.0.1.tgz", - "integrity": "sha512-ORF7g6qGnD+YtUG9yx4DFoqCShNMmUKiXuT5oWMHiOvt/4WFbHC6yCwQMTSBMno7AqntNCAzzcnnjowRkTL9eQ==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/express/-/express-5.1.0.tgz", + "integrity": "sha512-DT9ck5YIRU+8GYzzU5kT3eHGA5iL+1Zd0EutOmTE9Dtk+Tvuzd23VBU+ec7HPNSTxXYO55gPV/hq4pSBJDjFpA==", + "license": "MIT", "dependencies": { "accepts": "^2.0.0", - "body-parser": "^2.0.1", + "body-parser": "^2.2.0", "content-disposition": "^1.0.0", - "content-type": "~1.0.4", - "cookie": "0.7.1", + "content-type": "^1.0.5", + "cookie": "^0.7.1", "cookie-signature": "^1.2.1", - "debug": "4.3.6", - "depd": "2.0.0", - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "^2.0.0", - "fresh": "2.0.0", - "http-errors": "2.0.0", + "debug": "^4.4.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "finalhandler": "^2.1.0", + "fresh": "^2.0.0", + "http-errors": "^2.0.0", "merge-descriptors": "^2.0.0", - "methods": "~1.1.2", "mime-types": "^3.0.0", - "on-finished": "2.4.1", - "once": "1.4.0", - "parseurl": "~1.3.3", - "proxy-addr": "~2.0.7", - "qs": "6.13.0", - "range-parser": "~1.2.1", - "router": "^2.0.0", - "safe-buffer": "5.2.1", + "on-finished": "^2.4.1", + "once": "^1.4.0", + "parseurl": "^1.3.3", + "proxy-addr": "^2.0.7", + "qs": "^6.14.0", + "range-parser": "^1.2.1", + "router": "^2.2.0", "send": "^1.1.0", - "serve-static": "^2.1.0", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "^2.0.0", - "utils-merge": "1.0.1", - "vary": "~1.1.2" + "serve-static": "^2.2.0", + "statuses": "^2.0.1", + "type-is": "^2.0.1", + "vary": "^1.1.2" }, "engines": { "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/finalhandler": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.0.0.tgz", - "integrity": "sha512-MX6Zo2adDViYh+GcxxB1dpO43eypOGUOL12rLCOTMQv/DfIbpSJUy4oQIIZhVZkH9e+bZWKMon0XHFEju16tkQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.0.tgz", + "integrity": "sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q==", "license": "MIT", "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" + "debug": "^4.4.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "on-finished": "^2.4.1", + "parseurl": "^1.3.3", + "statuses": "^2.0.1" }, "engines": { "node": ">= 0.8" } }, - "node_modules/finalhandler/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/finalhandler/node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/finalhandler/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, "node_modules/forwarded": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", @@ -395,16 +310,21 @@ } }, "node_modules/get-intrinsic": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", - "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", "license": "MIT", "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -413,34 +333,23 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/gopd": { + "node_modules/get-proto": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", "license": "MIT", "dependencies": { - "get-intrinsic": "^1.1.3" + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">= 0.4" } }, - "node_modules/has-property-descriptors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", - "license": "MIT", - "dependencies": { - "es-define-property": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-proto": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", - "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", "license": "MIT", "engines": { "node": ">= 0.4" @@ -450,9 +359,9 @@ } }, "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", "license": "MIT", "engines": { "node": ">= 0.4" @@ -490,12 +399,12 @@ } }, "node_modules/iconv-lite": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.5.2.tgz", - "integrity": "sha512-kERHXvpSaB4aU3eANwidg79K8FlrN77m8G9V+0vOR3HYaRifrlwMEpT7ZBJqLSEIHnEgJTHcWK82wwLwwKwtag==", + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "license": "MIT", "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" + "safer-buffer": ">= 2.1.2 < 3.0.0" }, "engines": { "node": ">=0.10.0" @@ -522,6 +431,15 @@ "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==", "license": "MIT" }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/media-typer": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", @@ -543,40 +461,31 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, "node_modules/mime-db": { - "version": "1.53.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.53.0.tgz", - "integrity": "sha512-oHlN/w+3MQ3rba9rqFr6V/ypF10LSkdwUysQL7GkXoTgIWeV+tcXGA852TBxH+gsh8UWoyhR1hKcoMJTuWflpg==", + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/mime-types": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.0.tgz", - "integrity": "sha512-XqoSHeCGjVClAmoGFG3lVFqQFRIrTVw2OH3axRqAcfaw+gHWIfnASS92AV+Rl/mk0MupgZTRHQOjxY6YVnzK5w==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.1.tgz", + "integrity": "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==", "license": "MIT", "dependencies": { - "mime-db": "^1.53.0" + "mime-db": "^1.54.0" }, "engines": { "node": ">= 0.6" } }, "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "license": "MIT" }, "node_modules/negotiator": { @@ -589,9 +498,9 @@ } }, "node_modules/object-inspect": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", - "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", "license": "MIT", "engines": { "node": ">= 0.4" @@ -631,9 +540,9 @@ } }, "node_modules/path-to-regexp": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.1.0.tgz", - "integrity": "sha512-Bqn3vc8CMHty6zuD+tG23s6v2kwxslHEhTj4eYaVKGIEB+YX/2wd0/rgXLFD9G9id9KCtbVy/3ZgmvZjpa0UdQ==", + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.2.0.tgz", + "integrity": "sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ==", "license": "MIT", "engines": { "node": ">=16" @@ -653,12 +562,12 @@ } }, "node_modules/qs": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", - "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", + "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", "license": "BSD-3-Clause", "dependencies": { - "side-channel": "^1.0.6" + "side-channel": "^1.1.0" }, "engines": { "node": ">=0.6" @@ -691,34 +600,20 @@ "node": ">= 0.8" } }, - "node_modules/raw-body/node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/router": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/router/-/router-2.0.0.tgz", - "integrity": "sha512-dIM5zVoG8xhC6rnSN8uoAgFARwTE7BQs8YwHEvK0VCmfxQXMaOuA1uiR1IPwsW7JyK5iTt7Od/TC9StasS2NPQ==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz", + "integrity": "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==", "license": "MIT", "dependencies": { - "array-flatten": "3.0.0", - "is-promise": "4.0.0", - "methods": "~1.1.2", - "parseurl": "~1.3.3", - "path-to-regexp": "^8.0.0", - "setprototypeof": "1.2.0", - "utils-merge": "1.0.1" + "debug": "^4.4.0", + "depd": "^2.0.0", + "is-promise": "^4.0.0", + "parseurl": "^1.3.3", + "path-to-regexp": "^8.0.0" }, "engines": { - "node": ">= 0.10" + "node": ">= 18" } }, "node_modules/safe-buffer": { @@ -748,19 +643,18 @@ "license": "MIT" }, "node_modules/send": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/send/-/send-1.1.0.tgz", - "integrity": "sha512-v67WcEouB5GxbTWL/4NeToqcZiAWEq90N888fczVArY8A79J0L4FD7vj5hm3eUMua5EpoQ59wa/oovY6TLvRUA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/send/-/send-1.2.0.tgz", + "integrity": "sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw==", "license": "MIT", "dependencies": { "debug": "^4.3.5", - "destroy": "^1.2.0", "encodeurl": "^2.0.0", "escape-html": "^1.0.3", "etag": "^1.8.1", - "fresh": "^0.5.2", + "fresh": "^2.0.0", "http-errors": "^2.0.0", - "mime-types": "^2.1.35", + "mime-types": "^3.0.1", "ms": "^2.1.3", "on-finished": "^2.4.1", "range-parser": "^1.2.1", @@ -770,74 +664,21 @@ "node": ">= 18" } }, - "node_modules/send/node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/send/node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/send/node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/send/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "license": "MIT" - }, "node_modules/serve-static": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.1.0.tgz", - "integrity": "sha512-A3We5UfEjG8Z7VkDv6uItWw6HY2bBSBJT1KtVESn6EOoOr2jAxNhxWCLY3jDE2WcuHXByWju74ck3ZgLwL8xmA==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.0.tgz", + "integrity": "sha512-61g9pCh0Vnh7IutZjtLGGpTA355+OPn2TyDv/6ivP2h/AdAVX9azsoxmg2/M6nZeQZNYBEwIcsne1mJd9oQItQ==", "license": "MIT", "dependencies": { "encodeurl": "^2.0.0", "escape-html": "^1.0.3", "parseurl": "^1.3.3", - "send": "^1.0.0" + "send": "^1.2.0" }, "engines": { "node": ">= 18" } }, - "node_modules/set-function-length": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", - "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", - "license": "MIT", - "dependencies": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/setprototypeof": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", @@ -845,15 +686,69 @@ "license": "ISC" }, "node_modules/side-channel": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", - "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4", - "object-inspect": "^1.13.1" + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" }, "engines": { "node": ">= 0.4" @@ -881,9 +776,9 @@ } }, "node_modules/type-is": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.0.tgz", - "integrity": "sha512-gd0sGezQYCbWSbkZr75mln4YBidWUN60+devscpLF5mtRDUpiaTvKpBNrdaCvel1NdR2k6vclXybU5fBd2i+nw==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz", + "integrity": "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==", "license": "MIT", "dependencies": { "content-type": "^1.0.5", @@ -903,15 +798,6 @@ "node": ">= 0.8" } }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", - "license": "MIT", - "engines": { - "node": ">= 0.4.0" - } - }, "node_modules/vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", diff --git a/tests/apps/dockerfile-app-json-formations/Dockerfile b/tests/apps/dockerfile-app-json-formations/Dockerfile index 8df90883d..2be706d67 100644 --- a/tests/apps/dockerfile-app-json-formations/Dockerfile +++ b/tests/apps/dockerfile-app-json-formations/Dockerfile @@ -1,4 +1,4 @@ -FROM node:23-alpine +FROM node:24-alpine RUN apk add --no-cache bash diff --git a/tests/apps/dockerfile-app-json-formations/package.json b/tests/apps/dockerfile-app-json-formations/package.json index 5b48de14b..32f763bb3 100644 --- a/tests/apps/dockerfile-app-json-formations/package.json +++ b/tests/apps/dockerfile-app-json-formations/package.json @@ -2,7 +2,7 @@ "name": "node-example", "version": "0.0.1", "dependencies": { - "express": "4.21.x" + "express": "5.1.x" }, "engines": { "node": "4.2.x" diff --git a/tests/apps/dockerfile-entrypoint/Dockerfile b/tests/apps/dockerfile-entrypoint/Dockerfile index d8143f6f3..a1bf6752e 100644 --- a/tests/apps/dockerfile-entrypoint/Dockerfile +++ b/tests/apps/dockerfile-entrypoint/Dockerfile @@ -1,4 +1,4 @@ -FROM ruby:3.4.1 +FROM ruby:3.4.6 RUN mkdir /app WORKDIR /app diff --git a/tests/apps/dockerfile-noexpose/Dockerfile b/tests/apps/dockerfile-noexpose/Dockerfile index a2bd79f17..4a01ffa2a 100644 --- a/tests/apps/dockerfile-noexpose/Dockerfile +++ b/tests/apps/dockerfile-noexpose/Dockerfile @@ -1,4 +1,4 @@ -FROM node:23-alpine +FROM node:24-alpine RUN apk add --no-cache bash diff --git a/tests/apps/dockerfile-noexpose/package.json b/tests/apps/dockerfile-noexpose/package.json index 84913e3a0..154c4e8a7 100644 --- a/tests/apps/dockerfile-noexpose/package.json +++ b/tests/apps/dockerfile-noexpose/package.json @@ -7,7 +7,7 @@ "start": "node index.js" }, "dependencies": { - "express": "^4.0.0" + "express": "^5.1.0" }, "engines": { "node": "4.2.x" diff --git a/tests/apps/dockerfile-procfile-bad/Dockerfile b/tests/apps/dockerfile-procfile-bad/Dockerfile index 8df90883d..2be706d67 100644 --- a/tests/apps/dockerfile-procfile-bad/Dockerfile +++ b/tests/apps/dockerfile-procfile-bad/Dockerfile @@ -1,4 +1,4 @@ -FROM node:23-alpine +FROM node:24-alpine RUN apk add --no-cache bash diff --git a/tests/apps/dockerfile-procfile-bad/package.json b/tests/apps/dockerfile-procfile-bad/package.json index 5b48de14b..32f763bb3 100644 --- a/tests/apps/dockerfile-procfile-bad/package.json +++ b/tests/apps/dockerfile-procfile-bad/package.json @@ -2,7 +2,7 @@ "name": "node-example", "version": "0.0.1", "dependencies": { - "express": "4.21.x" + "express": "5.1.x" }, "engines": { "node": "4.2.x" diff --git a/tests/apps/dockerfile-procfile/Dockerfile b/tests/apps/dockerfile-procfile/Dockerfile index 8df90883d..2be706d67 100644 --- a/tests/apps/dockerfile-procfile/Dockerfile +++ b/tests/apps/dockerfile-procfile/Dockerfile @@ -1,4 +1,4 @@ -FROM node:23-alpine +FROM node:24-alpine RUN apk add --no-cache bash diff --git a/tests/apps/dockerfile-procfile/package.json b/tests/apps/dockerfile-procfile/package.json index 5b48de14b..32f763bb3 100644 --- a/tests/apps/dockerfile-procfile/package.json +++ b/tests/apps/dockerfile-procfile/package.json @@ -2,7 +2,7 @@ "name": "node-example", "version": "0.0.1", "dependencies": { - "express": "4.21.x" + "express": "5.1.x" }, "engines": { "node": "4.2.x" diff --git a/tests/apps/dockerfile-release/Dockerfile b/tests/apps/dockerfile-release/Dockerfile index f3d3f0ced..9f6fe3ece 100644 --- a/tests/apps/dockerfile-release/Dockerfile +++ b/tests/apps/dockerfile-release/Dockerfile @@ -1,4 +1,4 @@ -FROM python:3.13.1-bookworm +FROM python:3.13.7-bookworm RUN pip install --user pipenv ENV PATH="${PATH}:/root/.local/bin" diff --git a/tests/apps/dockerfile-release/Pipfile.lock b/tests/apps/dockerfile-release/Pipfile.lock index 959b9bd14..cd3888c7b 100644 --- a/tests/apps/dockerfile-release/Pipfile.lock +++ b/tests/apps/dockerfile-release/Pipfile.lock @@ -18,11 +18,11 @@ "default": { "asgiref": { "hashes": [ - "sha256:3e1e3ecc849832fe52ccf2cb6686b7a55f82bb1d6aee72a58826471390335e47", - "sha256:c343bd80a0bec947a9860adb4c432ffa7db769836c64238fc34bdc3fec84d590" + "sha256:0b61526596219d70396548fc003635056856dba5d0d086f86476f10b33c75960", + "sha256:a0249afacb66688ef258ffe503528360443e2b9a8d8c4581b6ebefa58c841ef1" ], - "markers": "python_version >= '3.8'", - "version": "==3.8.1" + "markers": "python_version >= '3.9'", + "version": "==3.9.2" }, "dj-database-url": { "hashes": [ @@ -34,12 +34,12 @@ }, "django": { "hashes": [ - "sha256:0f6cbc56cc298b0451d20a5120c6a8731e9073330fb5d84295c23c151a1eb300", - "sha256:c8fab2c553750933c8e7f5f95e5507e138e6acf6c2b4581cb691e70fe3ed747b" + "sha256:06f257f79dc4c17f3f9e23b106a4c5ed1335abecbe731e83c598c941d14fbeed", + "sha256:543ff21679f15e80edfc01fe7ea35f8291b6d4ea589433882913626a7c1cf929" ], "index": "pypi", "markers": "python_version >= '3.10'", - "version": "==5.0.10" + "version": "==5.1.13" }, "djangorestframework": { "hashes": [ @@ -52,20 +52,20 @@ }, "gunicorn": { "hashes": [ - "sha256:350679f91b24062c86e386e198a15438d53a7a8207235a78ba1b53df4c4378d9", - "sha256:4a0b436239ff76fb33f11c07a16482c521a7e09c1ce3cc293c2330afe01bec63" + "sha256:ec400d38950de4dfd418cff8328b2c8faed0edb0d517d3394e457c317908ca4d", + "sha256:f014447a0101dc57e294f6c18ca6b40227a4c90e9bdb586042628030cba004ec" ], "index": "pypi", "markers": "python_version >= '3.7'", - "version": "==22.0.0" + "version": "==23.0.0" }, "packaging": { "hashes": [ - "sha256:2ddfb553fdf02fb784c234c7ba6ccc288296ceabec964ad2eae3777778130bc5", - "sha256:eb82c5e3e56209074766e6885bb04b8c38a0c015d0a30036ebe7ece34c9989e9" + "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759", + "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f" ], - "markers": "python_version >= '3.7'", - "version": "==24.0" + "markers": "python_version >= '3.8'", + "version": "==24.2" }, "psycopg2-binary": { "hashes": [ @@ -153,20 +153,20 @@ }, "setuptools": { "hashes": [ - "sha256:54faa7f2e8d2d11bcd2c07bed282eef1046b5c080d1c32add737d7b5817b1ad4", - "sha256:f211a66637b8fa059bb28183da127d4e86396c991a942b028c6650d4319c3fd0" + "sha256:c3a9c4211ff4c309edb8b8c4f1cbfa7ae324c4ba9f91ff254e3d305b9fd54561", + "sha256:fcc17fd9cd898242f6b4adfaca46137a9edef687f43e6f78469692a5e70d851d" ], "index": "pypi", - "markers": "python_version >= '3.8'", - "version": "==70.0.0" + "markers": "python_version >= '3.9'", + "version": "==78.1.1" }, "sqlparse": { "hashes": [ - "sha256:9e37b35e16d1cc652a2545f0997c1deb23ea28fa1f3eefe609eee3063c3b105f", - "sha256:e99bc85c78160918c3e1d9230834ab8d80fc06c59d03f8db2618f65f65dda55e" + "sha256:09f67787f56a0b16ecdbde1bfc7f5d9c3371ca683cfeaa8e6ff60b4807ec9272", + "sha256:cf2196ed3418f3ba5de6af7e82c694a9fbdbfecccdfc72e281548517081f16ca" ], "markers": "python_version >= '3.8'", - "version": "==0.5.2" + "version": "==0.5.3" }, "whitenoise": { "hashes": [ diff --git a/tests/apps/dockerfile/Dockerfile b/tests/apps/dockerfile/Dockerfile index 46d28f5b9..65dc60482 100644 --- a/tests/apps/dockerfile/Dockerfile +++ b/tests/apps/dockerfile/Dockerfile @@ -1,4 +1,4 @@ -FROM node:23-alpine +FROM node:24-alpine RUN apk add --no-cache bash diff --git a/tests/apps/dockerfile/package.json b/tests/apps/dockerfile/package.json index 84913e3a0..154c4e8a7 100644 --- a/tests/apps/dockerfile/package.json +++ b/tests/apps/dockerfile/package.json @@ -7,7 +7,7 @@ "start": "node index.js" }, "dependencies": { - "express": "^4.0.0" + "express": "^5.1.0" }, "engines": { "node": "4.2.x" diff --git a/tests/apps/dockerfile/second.Dockerfile b/tests/apps/dockerfile/second.Dockerfile index 9cef60491..cc818ea17 100644 --- a/tests/apps/dockerfile/second.Dockerfile +++ b/tests/apps/dockerfile/second.Dockerfile @@ -1,4 +1,4 @@ -FROM node:23-alpine +FROM node:24-alpine RUN apk add --no-cache bash diff --git a/tests/apps/gitsubmodules/package.json b/tests/apps/gitsubmodules/package.json index 48c471bdf..aac71a77e 100644 --- a/tests/apps/gitsubmodules/package.json +++ b/tests/apps/gitsubmodules/package.json @@ -2,7 +2,7 @@ "name": "node-example", "version": "0.0.1", "dependencies": { - "express": "~4.21.0" + "express": "~5.1.0" }, "engines": { "node": "4.2.x" diff --git a/tests/apps/go-fail-postdeploy/Dockerfile b/tests/apps/go-fail-postdeploy/Dockerfile index 888654f6f..32f1fe19d 100644 --- a/tests/apps/go-fail-postdeploy/Dockerfile +++ b/tests/apps/go-fail-postdeploy/Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.23.4 +FROM golang:1.25.1 EXPOSE 3000/tcp diff --git a/tests/apps/go-fail-predeploy/Dockerfile b/tests/apps/go-fail-predeploy/Dockerfile index 888654f6f..32f1fe19d 100644 --- a/tests/apps/go-fail-predeploy/Dockerfile +++ b/tests/apps/go-fail-predeploy/Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.23.4 +FROM golang:1.25.1 EXPOSE 3000/tcp diff --git a/tests/apps/gogrpc/Dockerfile b/tests/apps/gogrpc/Dockerfile index c27278a08..4b3e69fdf 100644 --- a/tests/apps/gogrpc/Dockerfile +++ b/tests/apps/gogrpc/Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.23.4 +FROM golang:1.25.1 RUN mkdir /app WORKDIR /app diff --git a/tests/apps/gogrpc/go.mod b/tests/apps/gogrpc/go.mod index 14ed7a77b..48689d4ef 100644 --- a/tests/apps/gogrpc/go.mod +++ b/tests/apps/gogrpc/go.mod @@ -1,17 +1,17 @@ module github.com/dokku/dokko/tests/apps/gorpc -go 1.23.2 +go 1.25.1 require ( - golang.org/x/net v0.30.0 // indirect - golang.org/x/sys v0.26.0 // indirect - golang.org/x/text v0.19.0 // indirect - google.golang.org/grpc v1.69.4 + golang.org/x/net v0.41.0 // indirect + golang.org/x/sys v0.33.0 // indirect + golang.org/x/text v0.26.0 // indirect + google.golang.org/grpc v1.75.1 ) require ( google.golang.org/grpc/examples v0.0.0-20240118175532-987df1309236 - google.golang.org/protobuf v1.36.2 + google.golang.org/protobuf v1.36.10 ) -require google.golang.org/genproto/googleapis/rpc v0.0.0-20241015192408-796eee8c2d53 // indirect +require google.golang.org/genproto/googleapis/rpc v0.0.0-20250707201910-8d1bb00bc6a7 // indirect diff --git a/tests/apps/gogrpc/go.sum b/tests/apps/gogrpc/go.sum index 22989898a..170f546bb 100644 --- a/tests/apps/gogrpc/go.sum +++ b/tests/apps/gogrpc/go.sum @@ -1,34 +1,38 @@ -github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY= -github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= +github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI= +github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= -github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= -github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= +github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -go.opentelemetry.io/otel v1.31.0 h1:NsJcKPIW0D0H3NgzPDHmo0WW6SptzPdqg/L1zsIm2hY= -go.opentelemetry.io/otel v1.31.0/go.mod h1:O0C14Yl9FgkjqcCZAsE053C13OaddMYr/hz6clDkEJE= -go.opentelemetry.io/otel/metric v1.31.0 h1:FSErL0ATQAmYHUIzSezZibnyVlft1ybhy4ozRPcF2fE= -go.opentelemetry.io/otel/metric v1.31.0/go.mod h1:C3dEloVbLuYoX41KpmAhOqNriGbA+qqH6PQ5E5mUfnY= -go.opentelemetry.io/otel/sdk v1.31.0 h1:xLY3abVHYZ5HSfOg3l2E5LUj2Cwva5Y7yGxnSW9H5Gk= -go.opentelemetry.io/otel/sdk v1.31.0/go.mod h1:TfRbMdhvxIIr/B2N2LQW2S5v9m3gOQ/08KsbbO5BPT0= -go.opentelemetry.io/otel/sdk/metric v1.31.0 h1:i9hxxLJF/9kkvfHppyLL55aW7iIJz4JjxTeYusH7zMc= -go.opentelemetry.io/otel/sdk/metric v1.31.0/go.mod h1:CRInTMVvNhUKgSAMbKyTMxqOBC0zgyxzW55lZzX43Y8= -go.opentelemetry.io/otel/trace v1.31.0 h1:ffjsj1aRouKewfr85U2aGagJ46+MvodynlQ1HYdmJys= -go.opentelemetry.io/otel/trace v1.31.0/go.mod h1:TXZkRk7SM2ZQLtR6eoAWQFIHPvzQ06FJAsO1tJg480A= -golang.org/x/net v0.30.0 h1:AcW1SDZMkb8IpzCdQUaIq2sP4sZ4zw+55h6ynffypl4= -golang.org/x/net v0.30.0/go.mod h1:2wGyMJ5iFasEhkwi13ChkO/t1ECNC4X4eBKkVFyYFlU= -golang.org/x/sys v0.26.0 h1:KHjCJyddX0LoSTb3J+vWpupP9p0oznkqVk/IfjymZbo= -golang.org/x/sys v0.26.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/text v0.19.0 h1:kTxAhCbGbxhK0IwgSKiMO5awPoDQ0RpfiVYBfK860YM= -golang.org/x/text v0.19.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY= -google.golang.org/genproto/googleapis/rpc v0.0.0-20241015192408-796eee8c2d53 h1:X58yt85/IXCx0Y3ZwN6sEIKZzQtDEYaBWrDvErdXrRE= -google.golang.org/genproto/googleapis/rpc v0.0.0-20241015192408-796eee8c2d53/go.mod h1:GX3210XPVPUjJbTUbvwI8f2IpZDMZuPJWDzDuebbviI= -google.golang.org/grpc v1.69.4 h1:MF5TftSMkd8GLw/m0KM6V8CMOCY6NZ1NQDPGFgbTt4A= -google.golang.org/grpc v1.69.4/go.mod h1:vyjdE6jLBI76dgpDojsFGNaHlxdjXN9ghpnd2o7JGZ4= +go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA= +go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A= +go.opentelemetry.io/otel v1.37.0 h1:9zhNfelUvx0KBfu/gb+ZgeAfAgtWrfHJZcAqFC228wQ= +go.opentelemetry.io/otel v1.37.0/go.mod h1:ehE/umFRLnuLa/vSccNq9oS1ErUlkkK71gMcN34UG8I= +go.opentelemetry.io/otel/metric v1.37.0 h1:mvwbQS5m0tbmqML4NqK+e3aDiO02vsf/WgbsdpcPoZE= +go.opentelemetry.io/otel/metric v1.37.0/go.mod h1:04wGrZurHYKOc+RKeye86GwKiTb9FKm1WHtO+4EVr2E= +go.opentelemetry.io/otel/sdk v1.37.0 h1:ItB0QUqnjesGRvNcmAcU0LyvkVyGJ2xftD29bWdDvKI= +go.opentelemetry.io/otel/sdk v1.37.0/go.mod h1:VredYzxUvuo2q3WRcDnKDjbdvmO0sCzOvVAiY+yUkAg= +go.opentelemetry.io/otel/sdk/metric v1.37.0 h1:90lI228XrB9jCMuSdA0673aubgRobVZFhbjxHHspCPc= +go.opentelemetry.io/otel/sdk/metric v1.37.0/go.mod h1:cNen4ZWfiD37l5NhS+Keb5RXVWZWpRE+9WyVCpbo5ps= +go.opentelemetry.io/otel/trace v1.37.0 h1:HLdcFNbRQBE2imdSEgm/kwqmQj1Or1l/7bW6mxVK7z4= +go.opentelemetry.io/otel/trace v1.37.0/go.mod h1:TlgrlQ+PtQO5XFerSPUYG0JSgGyryXewPGyayAWSBS0= +golang.org/x/net v0.41.0 h1:vBTly1HeNPEn3wtREYfy4GZ/NECgw2Cnl+nK6Nz3uvw= +golang.org/x/net v0.41.0/go.mod h1:B/K4NNqkfmg07DQYrbwvSluqCJOOXwUjeb/5lOisjbA= +golang.org/x/sys v0.33.0 h1:q3i8TbbEz+JRD9ywIRlyRAQbM0qF7hu24q3teo2hbuw= +golang.org/x/sys v0.33.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= +golang.org/x/text v0.26.0 h1:P42AVeLghgTYr4+xUnTRKDMqpar+PtX7KWuNQL21L8M= +golang.org/x/text v0.26.0/go.mod h1:QK15LZJUUQVJxhz7wXgxSy/CJaTFjd0G+YLonydOVQA= +gonum.org/v1/gonum v0.16.0 h1:5+ul4Swaf3ESvrOnidPp4GZbzf0mxVQpDCYUQE7OJfk= +gonum.org/v1/gonum v0.16.0/go.mod h1:fef3am4MQ93R2HHpKnLk4/Tbh/s0+wqD5nfa6Pnwy4E= +google.golang.org/genproto/googleapis/rpc v0.0.0-20250707201910-8d1bb00bc6a7 h1:pFyd6EwwL2TqFf8emdthzeX+gZE1ElRq3iM8pui4KBY= +google.golang.org/genproto/googleapis/rpc v0.0.0-20250707201910-8d1bb00bc6a7/go.mod h1:qQ0YXyHHx3XkvlzUtpXDkS29lDSafHMZBAZDc03LQ3A= +google.golang.org/grpc v1.75.1 h1:/ODCNEuf9VghjgO3rqLcfg8fiOP0nSluljWFlDxELLI= +google.golang.org/grpc v1.75.1/go.mod h1:JtPAzKiq4v1xcAB2hydNlWI2RnF85XXcV0mhKXr2ecQ= google.golang.org/grpc/examples v0.0.0-20240118175532-987df1309236 h1:wTUkwrodi4IuWD3kYkMUwCU8BhwFaqDywrXmsthCvQA= google.golang.org/grpc/examples v0.0.0-20240118175532-987df1309236/go.mod h1:j5uROIAAgi3YmtiETMt1LW0d/lHqQ7wwrIY4uGRXLQ4= -google.golang.org/protobuf v1.36.2 h1:R8FeyR1/eLmkutZOM5CWghmo5itiG9z0ktFlTVLuTmU= -google.golang.org/protobuf v1.36.2/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= +google.golang.org/protobuf v1.36.10 h1:AYd7cD/uASjIL6Q9LiTjz8JLcrh/88q5UObnmY3aOOE= +google.golang.org/protobuf v1.36.10/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco= diff --git a/tests/apps/java/pom.xml b/tests/apps/java/pom.xml index d63569a02..1a44cfa81 100644 --- a/tests/apps/java/pom.xml +++ b/tests/apps/java/pom.xml @@ -10,7 +10,7 @@ org.eclipse.jetty jetty-servlet - 11.0.24 + 11.0.26 javax.servlet diff --git a/tests/apps/lambda-python/requirements.txt b/tests/apps/lambda-python/requirements.txt index 3cfc7073b..480d0c4bb 100644 --- a/tests/apps/lambda-python/requirements.txt +++ b/tests/apps/lambda-python/requirements.txt @@ -1 +1 @@ -requests==2.32.0 \ No newline at end of file +requests==2.32.4 \ No newline at end of file diff --git a/tests/apps/multi/package-lock.json b/tests/apps/multi/package-lock.json index 8402c0032..f325cefff 100644 --- a/tests/apps/multi/package-lock.json +++ b/tests/apps/multi/package-lock.json @@ -10,12 +10,12 @@ "hasInstallScript": true, "license": "ISC", "dependencies": { - "bower": "^1.8.0", - "grunt": "~1.5.3", - "grunt-cli": "~1.4.3", + "bower": "^1.8.14", + "grunt": "~1.6.1", + "grunt-cli": "~1.5.0", "grunt-contrib-compass": "~1.1.1", "load-grunt-tasks": "~5.1.0", - "tmp": "0.2.1" + "tmp": "0.2.5" }, "engines": { "node": "12.x.x", @@ -149,9 +149,9 @@ } }, "node_modules/bower": { - "version": "1.8.12", - "resolved": "https://registry.npmjs.org/bower/-/bower-1.8.12.tgz", - "integrity": "sha512-u1xy9SrwwoPlgjuHNjhV+YUPVdqyBj2ALBxuzeIUKXaPI2i2xypGgxqXkuHcITGdi5yBj5JuXgyMvgiWiS1S3Q==", + "version": "1.8.14", + "resolved": "https://registry.npmjs.org/bower/-/bower-1.8.14.tgz", + "integrity": "sha512-8Rq058FD91q9Nwthyhw0la9fzpBz0iwZTrt51LWl+w+PnJgZk9J+5wp3nibsJcIUPglMYXr4NRBaR+TUj0OkBQ==", "bin": { "bower": "bin/bower" }, @@ -160,9 +160,9 @@ } }, "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -263,9 +263,9 @@ } }, "node_modules/dateformat": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", - "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==", + "version": "4.6.3", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-4.6.3.tgz", + "integrity": "sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==", "engines": { "node": "*" } @@ -376,29 +376,17 @@ } }, "node_modules/findup-sync": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.3.0.tgz", - "integrity": "sha1-N5MKpdgWt3fANEXhlmzGeQpMCxY=", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-5.0.0.tgz", + "integrity": "sha512-MzwXju70AuyflbgeOhzvQWAvvQdo1XL0A9bVvlXsYcFEBM87WR4OakL4OfZq+QRmr+duJubio+UtNQCPsVESzQ==", "dependencies": { - "glob": "~5.0.0" + "detect-file": "^1.0.0", + "is-glob": "^4.0.3", + "micromatch": "^4.0.4", + "resolve-dir": "^1.0.1" }, "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/findup-sync/node_modules/glob": { - "version": "5.0.15", - "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", - "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", - "dependencies": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" + "node": ">= 10.13.0" } }, "node_modules/fined": { @@ -446,7 +434,7 @@ "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" }, "node_modules/function-bind": { "version": "1.1.1", @@ -473,6 +461,7 @@ "version": "7.1.7", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "deprecated": "Glob versions prior to v9 are no longer supported", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -517,43 +506,41 @@ } }, "node_modules/grunt": { - "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==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/grunt/-/grunt-1.6.1.tgz", + "integrity": "sha512-/ABUy3gYWu5iBmrUSRBP97JLpQUm0GgVveDCp6t3yRNIoltIYw7rEj3g5y1o2PGPR2vfTRGa7WC/LZHLTXnEzA==", "dependencies": { - "dateformat": "~3.0.3", + "dateformat": "~4.6.2", "eventemitter2": "~0.4.13", "exit": "~0.1.2", - "findup-sync": "~0.3.0", + "findup-sync": "~5.0.0", "glob": "~7.1.6", "grunt-cli": "~1.4.3", "grunt-known-options": "~2.0.0", "grunt-legacy-log": "~3.0.0", "grunt-legacy-util": "~2.0.1", - "iconv-lite": "~0.4.13", + "iconv-lite": "~0.6.3", "js-yaml": "~3.14.0", "minimatch": "~3.0.4", - "mkdirp": "~1.0.4", - "nopt": "~3.0.6", - "rimraf": "~3.0.2" + "nopt": "~3.0.6" }, "bin": { "grunt": "bin/grunt" }, "engines": { - "node": ">=8" + "node": ">=16" } }, "node_modules/grunt-cli": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/grunt-cli/-/grunt-cli-1.4.3.tgz", - "integrity": "sha512-9Dtx/AhVeB4LYzsViCjUQkd0Kw0McN2gYpdmGYKtE2a5Yt7v1Q+HYZVWhqXc/kGnxlMtqKDxSwotiGeFmkrCoQ==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/grunt-cli/-/grunt-cli-1.5.0.tgz", + "integrity": "sha512-rILKAFoU0dzlf22SUfDtq2R1fosChXXlJM5j7wI6uoW8gwmXDXzbUvirlKZSYCdXl3LXFbR+8xyS+WFo+b6vlA==", "dependencies": { "grunt-known-options": "~2.0.0", "interpret": "~1.1.0", "liftup": "~3.0.1", - "nopt": "~4.0.1", - "v8flags": "~3.2.0" + "nopt": "~5.0.0", + "v8flags": "^4.0.1" }, "bin": { "grunt": "bin/grunt" @@ -563,15 +550,17 @@ } }, "node_modules/grunt-cli/node_modules/nopt": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz", - "integrity": "sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", "dependencies": { - "abbrev": "1", - "osenv": "^0.1.4" + "abbrev": "1" }, "bin": { "nopt": "bin/nopt.js" + }, + "engines": { + "node": ">=6" } }, "node_modules/grunt-contrib-compass": { @@ -674,6 +663,47 @@ "node": ">= 8" } }, + "node_modules/grunt/node_modules/grunt-cli": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/grunt-cli/-/grunt-cli-1.4.3.tgz", + "integrity": "sha512-9Dtx/AhVeB4LYzsViCjUQkd0Kw0McN2gYpdmGYKtE2a5Yt7v1Q+HYZVWhqXc/kGnxlMtqKDxSwotiGeFmkrCoQ==", + "dependencies": { + "grunt-known-options": "~2.0.0", + "interpret": "~1.1.0", + "liftup": "~3.0.1", + "nopt": "~4.0.1", + "v8flags": "~3.2.0" + }, + "bin": { + "grunt": "bin/grunt" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/grunt/node_modules/grunt-cli/node_modules/nopt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz", + "integrity": "sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==", + "dependencies": { + "abbrev": "1", + "osenv": "^0.1.4" + }, + "bin": { + "nopt": "bin/nopt.js" + } + }, + "node_modules/grunt/node_modules/v8flags": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.2.0.tgz", + "integrity": "sha512-mH8etigqMfiGWdeXpaaqGfs6BndypxusHHcv2qSHyZkGEznCd/qAXCWWRzeowtL54147cktFOC4P5y+kl8d8Jg==", + "dependencies": { + "homedir-polyfill": "^1.0.1" + }, + "engines": { + "node": ">= 0.10" + } + }, "node_modules/has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", @@ -718,11 +748,11 @@ "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==" }, "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" + "safer-buffer": ">= 2.1.2 < 3.0.0" }, "engines": { "node": ">=0.10.0" @@ -742,7 +772,8 @@ "node_modules/inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -1089,17 +1120,6 @@ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" }, - "node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/multimatch": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-4.0.0.tgz", @@ -1185,7 +1205,7 @@ "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "dependencies": { "wrappy": "1" } @@ -1201,7 +1221,7 @@ "node_modules/os-homedir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", + "integrity": "sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==", "engines": { "node": ">=0.10.0" } @@ -1218,6 +1238,7 @@ "version": "0.1.5", "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", + "deprecated": "This package is no longer supported.", "dependencies": { "os-homedir": "^1.0.0", "os-tmpdir": "^1.0.0" @@ -1302,7 +1323,7 @@ "node_modules/path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", "engines": { "node": ">=0.10.0" } @@ -1515,20 +1536,6 @@ "node": ">=8" } }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", @@ -1655,14 +1662,11 @@ } }, "node_modules/tmp": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", - "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", - "dependencies": { - "rimraf": "^3.0.0" - }, + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.5.tgz", + "integrity": "sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==", "engines": { - "node": ">=8.17.0" + "node": ">=14.14" } }, "node_modules/to-regex-range": { @@ -1715,14 +1719,11 @@ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" }, "node_modules/v8flags": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.2.0.tgz", - "integrity": "sha512-mH8etigqMfiGWdeXpaaqGfs6BndypxusHHcv2qSHyZkGEznCd/qAXCWWRzeowtL54147cktFOC4P5y+kl8d8Jg==", - "dependencies": { - "homedir-polyfill": "^1.0.1" - }, + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-4.0.1.tgz", + "integrity": "sha512-fcRLaS4H/hrZk9hYwbdRM35D0U8IYMfEClhXxCivOojl+yTRAZH3Zy2sSy6qVCiGbV9YAtPssP6jaChqC9vPCg==", "engines": { - "node": ">= 0.10" + "node": ">= 10.13.0" } }, "node_modules/validate-npm-package-license": { @@ -1748,7 +1749,7 @@ "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" } }, "dependencies": { @@ -1843,14 +1844,14 @@ } }, "bower": { - "version": "1.8.12", - "resolved": "https://registry.npmjs.org/bower/-/bower-1.8.12.tgz", - "integrity": "sha512-u1xy9SrwwoPlgjuHNjhV+YUPVdqyBj2ALBxuzeIUKXaPI2i2xypGgxqXkuHcITGdi5yBj5JuXgyMvgiWiS1S3Q==" + "version": "1.8.14", + "resolved": "https://registry.npmjs.org/bower/-/bower-1.8.14.tgz", + "integrity": "sha512-8Rq058FD91q9Nwthyhw0la9fzpBz0iwZTrt51LWl+w+PnJgZk9J+5wp3nibsJcIUPglMYXr4NRBaR+TUj0OkBQ==" }, "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -1924,9 +1925,9 @@ "integrity": "sha1-RsJ/+rH/sTeO8hJZchNxn+YCvJM=" }, "dateformat": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", - "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==" + "version": "4.6.3", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-4.6.3.tgz", + "integrity": "sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==" }, "decamelize": { "version": "1.2.0", @@ -2003,25 +2004,14 @@ } }, "findup-sync": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.3.0.tgz", - "integrity": "sha1-N5MKpdgWt3fANEXhlmzGeQpMCxY=", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-5.0.0.tgz", + "integrity": "sha512-MzwXju70AuyflbgeOhzvQWAvvQdo1XL0A9bVvlXsYcFEBM87WR4OakL4OfZq+QRmr+duJubio+UtNQCPsVESzQ==", "requires": { - "glob": "~5.0.0" - }, - "dependencies": { - "glob": { - "version": "5.0.15", - "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", - "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", - "requires": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - } + "detect-file": "^1.0.0", + "is-glob": "^4.0.3", + "micromatch": "^4.0.4", + "resolve-dir": "^1.0.1" } }, "fined": { @@ -2057,7 +2047,7 @@ "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" }, "function-bind": { "version": "1.1.1", @@ -2110,46 +2100,76 @@ } }, "grunt": { - "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==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/grunt/-/grunt-1.6.1.tgz", + "integrity": "sha512-/ABUy3gYWu5iBmrUSRBP97JLpQUm0GgVveDCp6t3yRNIoltIYw7rEj3g5y1o2PGPR2vfTRGa7WC/LZHLTXnEzA==", "requires": { - "dateformat": "~3.0.3", + "dateformat": "~4.6.2", "eventemitter2": "~0.4.13", "exit": "~0.1.2", - "findup-sync": "~0.3.0", + "findup-sync": "~5.0.0", "glob": "~7.1.6", "grunt-cli": "~1.4.3", "grunt-known-options": "~2.0.0", "grunt-legacy-log": "~3.0.0", "grunt-legacy-util": "~2.0.1", - "iconv-lite": "~0.4.13", + "iconv-lite": "~0.6.3", "js-yaml": "~3.14.0", "minimatch": "~3.0.4", - "mkdirp": "~1.0.4", - "nopt": "~3.0.6", - "rimraf": "~3.0.2" + "nopt": "~3.0.6" + }, + "dependencies": { + "grunt-cli": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/grunt-cli/-/grunt-cli-1.4.3.tgz", + "integrity": "sha512-9Dtx/AhVeB4LYzsViCjUQkd0Kw0McN2gYpdmGYKtE2a5Yt7v1Q+HYZVWhqXc/kGnxlMtqKDxSwotiGeFmkrCoQ==", + "requires": { + "grunt-known-options": "~2.0.0", + "interpret": "~1.1.0", + "liftup": "~3.0.1", + "nopt": "~4.0.1", + "v8flags": "~3.2.0" + }, + "dependencies": { + "nopt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz", + "integrity": "sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==", + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + } + } + } + }, + "v8flags": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.2.0.tgz", + "integrity": "sha512-mH8etigqMfiGWdeXpaaqGfs6BndypxusHHcv2qSHyZkGEznCd/qAXCWWRzeowtL54147cktFOC4P5y+kl8d8Jg==", + "requires": { + "homedir-polyfill": "^1.0.1" + } + } } }, "grunt-cli": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/grunt-cli/-/grunt-cli-1.4.3.tgz", - "integrity": "sha512-9Dtx/AhVeB4LYzsViCjUQkd0Kw0McN2gYpdmGYKtE2a5Yt7v1Q+HYZVWhqXc/kGnxlMtqKDxSwotiGeFmkrCoQ==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/grunt-cli/-/grunt-cli-1.5.0.tgz", + "integrity": "sha512-rILKAFoU0dzlf22SUfDtq2R1fosChXXlJM5j7wI6uoW8gwmXDXzbUvirlKZSYCdXl3LXFbR+8xyS+WFo+b6vlA==", "requires": { "grunt-known-options": "~2.0.0", "interpret": "~1.1.0", "liftup": "~3.0.1", - "nopt": "~4.0.1", - "v8flags": "~3.2.0" + "nopt": "~5.0.0", + "v8flags": "^4.0.1" }, "dependencies": { "nopt": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz", - "integrity": "sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", "requires": { - "abbrev": "1", - "osenv": "^0.1.4" + "abbrev": "1" } } } @@ -2263,11 +2283,11 @@ "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==" }, "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "requires": { - "safer-buffer": ">= 2.1.2 < 3" + "safer-buffer": ">= 2.1.2 < 3.0.0" } }, "indent-string": { @@ -2281,7 +2301,7 @@ "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", "requires": { "once": "^1.3.0", "wrappy": "1" @@ -2550,11 +2570,6 @@ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" }, - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" - }, "multimatch": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-4.0.0.tgz", @@ -2622,7 +2637,7 @@ "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "requires": { "wrappy": "1" } @@ -2635,7 +2650,7 @@ "os-homedir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" + "integrity": "sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==" }, "os-tmpdir": { "version": "1.0.2", @@ -2706,7 +2721,7 @@ "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==" }, "path-parse": { "version": "1.0.7", @@ -2860,14 +2875,6 @@ "resolve-from": "^5.0.0" } }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "requires": { - "glob": "^7.1.3" - } - }, "safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", @@ -2966,12 +2973,9 @@ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" }, "tmp": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", - "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", - "requires": { - "rimraf": "^3.0.0" - } + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.5.tgz", + "integrity": "sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==" }, "to-regex-range": { "version": "5.0.1", @@ -3013,12 +3017,9 @@ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" }, "v8flags": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.2.0.tgz", - "integrity": "sha512-mH8etigqMfiGWdeXpaaqGfs6BndypxusHHcv2qSHyZkGEznCd/qAXCWWRzeowtL54147cktFOC4P5y+kl8d8Jg==", - "requires": { - "homedir-polyfill": "^1.0.1" - } + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-4.0.1.tgz", + "integrity": "sha512-fcRLaS4H/hrZk9hYwbdRM35D0U8IYMfEClhXxCivOojl+yTRAZH3Zy2sSy6qVCiGbV9YAtPssP6jaChqC9vPCg==" }, "validate-npm-package-license": { "version": "3.0.4", @@ -3040,7 +3041,7 @@ "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" } } } diff --git a/tests/apps/multi/package.json b/tests/apps/multi/package.json index 57db9ba80..8c804beed 100644 --- a/tests/apps/multi/package.json +++ b/tests/apps/multi/package.json @@ -1,12 +1,12 @@ { "author": "Al Johri", "dependencies": { - "bower": "^1.8.0", - "grunt": "~1.5.3", - "grunt-cli": "~1.4.3", + "bower": "^1.8.14", + "grunt": "~1.6.1", + "grunt-cli": "~1.5.0", "grunt-contrib-compass": "~1.1.1", "load-grunt-tasks": "~5.1.0", - "tmp": "0.2.1" + "tmp": "0.2.5" }, "description": "Test application for heroku multi buildpack.", "engines": { diff --git a/tests/apps/multi/requirements.txt b/tests/apps/multi/requirements.txt index d907d9263..52114619d 100644 --- a/tests/apps/multi/requirements.txt +++ b/tests/apps/multi/requirements.txt @@ -1,2 +1,2 @@ -Flask==3.1.0 +Flask==3.1.2 gunicorn==23.0.0 diff --git a/tests/apps/nodejs-express-noappjson/package.json b/tests/apps/nodejs-express-noappjson/package.json index 444351953..d6ab60955 100644 --- a/tests/apps/nodejs-express-noappjson/package.json +++ b/tests/apps/nodejs-express-noappjson/package.json @@ -2,9 +2,9 @@ "name": "node-example", "version": "0.0.1", "dependencies": { - "express": "4.21.x" + "express": "5.1.x" }, "engines": { - "node": "4.2.x" + "node": "18.x.x" } } diff --git a/tests/apps/nodejs-express-noprocfile/package.json b/tests/apps/nodejs-express-noprocfile/package.json index abb708eaf..8899e04c7 100644 --- a/tests/apps/nodejs-express-noprocfile/package.json +++ b/tests/apps/nodejs-express-noprocfile/package.json @@ -2,7 +2,7 @@ "name": "node-example", "version": "0.0.1", "dependencies": { - "express": "4.21.x" + "express": "5.1.x" }, "engines": { "node": "4.2.x" diff --git a/tests/apps/nodejs-express/package.json b/tests/apps/nodejs-express/package.json index 444351953..d6ab60955 100644 --- a/tests/apps/nodejs-express/package.json +++ b/tests/apps/nodejs-express/package.json @@ -2,9 +2,9 @@ "name": "node-example", "version": "0.0.1", "dependencies": { - "express": "4.21.x" + "express": "5.1.x" }, "engines": { - "node": "4.2.x" + "node": "18.x.x" } } diff --git a/tests/apps/python-flask/requirements.txt b/tests/apps/python-flask/requirements.txt index e146262c0..05cd00c8c 100644 --- a/tests/apps/python-flask/requirements.txt +++ b/tests/apps/python-flask/requirements.txt @@ -1,5 +1,5 @@ -Flask==3.1.0 -Jinja2==3.1.5 +Flask==3.1.2 +Jinja2==3.1.6 Werkzeug==3.1.3 gunicorn==23.0.0 diff --git a/tests/apps/python/project2.toml b/tests/apps/python/project2.toml index 67df953e6..ff4dc30cf 100644 --- a/tests/apps/python/project2.toml +++ b/tests/apps/python/project2.toml @@ -10,7 +10,7 @@ uri = "./cnb/1" uri = "./cnb/1" [[build.buildpacks]] -uri = "gcr.io/paketo-buildpacks/python" +uri = "docker.io/paketobuildpacks/python" [[order.group]] -uri = "gcr.io/paketo-buildpacks/procfile" +uri = "docker.io/paketobuildpacks/procfile" diff --git a/tests/apps/ruby/Gemfile.lock b/tests/apps/ruby/Gemfile.lock index 04b32959b..16be2d061 100644 --- a/tests/apps/ruby/Gemfile.lock +++ b/tests/apps/ruby/Gemfile.lock @@ -4,9 +4,10 @@ GEM base64 (0.2.0) daemons (1.4.1) eventmachine (1.2.7) + logger (1.7.0) mustermann (3.0.0) ruby2_keywords (~> 0.0.1) - rack (2.2.8.1) + rack (2.2.19) rack-protection (3.2.0) base64 (>= 0.1.0) rack (~> 2.2, >= 2.2.4) @@ -16,10 +17,11 @@ GEM rack (~> 2.2, >= 2.2.4) rack-protection (= 3.2.0) tilt (~> 2.0) - thin (1.8.2) + thin (2.0.1) daemons (~> 1.0, >= 1.0.9) eventmachine (~> 1.0, >= 1.0.4) - rack (>= 1, < 3) + logger + rack (>= 1, < 4) tilt (2.3.0) PLATFORMS diff --git a/tests/apps/zombies-buildpack/go.mod b/tests/apps/zombies-buildpack/go.mod index 71ef5bc2e..c56c8785f 100644 --- a/tests/apps/zombies-buildpack/go.mod +++ b/tests/apps/zombies-buildpack/go.mod @@ -1,3 +1,3 @@ module dokku.me/web -go 1.23.2 +go 1.25.1 diff --git a/tests/apps/zombies-dockerfile-no-tini/Dockerfile b/tests/apps/zombies-dockerfile-no-tini/Dockerfile index fa0c52849..c0ba06c14 100644 --- a/tests/apps/zombies-dockerfile-no-tini/Dockerfile +++ b/tests/apps/zombies-dockerfile-no-tini/Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.23.4 +FROM golang:1.25.1 ADD . /go/src/github.com/dokku/apps/web WORKDIR /go/src/github.com/dokku/apps/web diff --git a/tests/apps/zombies-dockerfile-no-tini/go.mod b/tests/apps/zombies-dockerfile-no-tini/go.mod index 71ef5bc2e..c56c8785f 100644 --- a/tests/apps/zombies-dockerfile-no-tini/go.mod +++ b/tests/apps/zombies-dockerfile-no-tini/go.mod @@ -1,3 +1,3 @@ module dokku.me/web -go 1.23.2 +go 1.25.1 diff --git a/tests/apps/zombies-dockerfile-tini/Dockerfile b/tests/apps/zombies-dockerfile-tini/Dockerfile index b7a6dd162..18996edf4 100644 --- a/tests/apps/zombies-dockerfile-tini/Dockerfile +++ b/tests/apps/zombies-dockerfile-tini/Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.23.4 +FROM golang:1.25.1 ADD . /go/src/github.com/dokku/apps/web WORKDIR /go/src/github.com/dokku/apps/web diff --git a/tests/apps/zombies-dockerfile-tini/go.mod b/tests/apps/zombies-dockerfile-tini/go.mod index 71ef5bc2e..c56c8785f 100644 --- a/tests/apps/zombies-dockerfile-tini/go.mod +++ b/tests/apps/zombies-dockerfile-tini/go.mod @@ -1,3 +1,3 @@ module dokku.me/web -go 1.23.2 +go 1.25.1 diff --git a/tests/unit/build-env.bats b/tests/unit/build-env.bats index dd83f1e36..3f5e87ff8 100644 --- a/tests/unit/build-env.bats +++ b/tests/unit/build-env.bats @@ -75,7 +75,7 @@ teardown() { echo "status: $status" assert_success - run /bin/bash -c "dokku --quiet config:get $TEST_APP DOKKU_APP_TYPE" + run /bin/bash -c "dokku builder:report $TEST_APP --builder-detected" echo "output: $output" echo "status: $status" assert_output "herokuish" diff --git a/tests/unit/builder-dockerfile.bats b/tests/unit/builder-dockerfile.bats index 34c80520b..569f6a914 100644 --- a/tests/unit/builder-dockerfile.bats +++ b/tests/unit/builder-dockerfile.bats @@ -94,3 +94,15 @@ EOF echo "status: $status" assert_output "3001/udp 3000/tcp 3003" } + +@test "(builder-dockerfile) ps:rebuild fetches files from image" { + run /bin/bash -c "dokku --trace git:from-image $TEST_APP dokku/smoke-test-app:dockerfile" + echo "output: $output" + echo "status: $status" + assert_success + + run /bin/bash -c "dokku ps:rebuild $TEST_APP" + echo "output: $output" + echo "status: $status" + assert_success +} diff --git a/tests/unit/builder-nixpacks.bats b/tests/unit/builder-nixpacks.bats index 39285c183..5fe1dfbbf 100644 --- a/tests/unit/builder-nixpacks.bats +++ b/tests/unit/builder-nixpacks.bats @@ -25,7 +25,7 @@ teardown() { echo "status: $status" assert_success - run deploy_app python dokku@dokku.me:$TEST_APP inject_requirements_txt + run deploy_app python dokku@$DOKKU_DOMAIN:$TEST_APP inject_requirements_txt echo "output: $output" echo "status: $status" assert_success diff --git a/tests/unit/builder-pack.bats b/tests/unit/builder-pack.bats index 551db0901..489c7f96f 100644 --- a/tests/unit/builder-pack.bats +++ b/tests/unit/builder-pack.bats @@ -74,6 +74,27 @@ teardown() { assert_output_contains 'Installing dependencies using pip' } +@test "(builder-pack) run" { + run /bin/bash -c "dokku builder:set $TEST_APP selected pack" + echo "output: $output" + echo "status: $status" + assert_success + + run deploy_app python dokku@$DOKKU_DOMAIN:$TEST_APP initialize_for_cnb + echo "output: $output" + echo "status: $status" + assert_success + assert_output_contains 'from cnb stack' + assert_output_contains 'Building with buildpack 1' 0 + assert_output_contains 'Installing dependencies using pip' + + run /bin/bash -c "dokku run $TEST_APP python task.py test" + echo "output: $output" + echo "status: $status" + assert_success + assert_output "['task.py', 'test']" +} + @test "(builder-pack) git:from-image without a Procfile" { run /bin/bash -c "dokku git:from-image $TEST_APP dokku/smoke-test-gradle-app:1" echo "output: $output" diff --git a/tests/unit/caddy.bats b/tests/unit/caddy.bats index d48d41196..0155cda71 100644 --- a/tests/unit/caddy.bats +++ b/tests/unit/caddy.bats @@ -50,6 +50,34 @@ teardown() { assert_output_contains "python/http.server" } +@test "(caddy) custom label key" { + run /bin/bash -c "dokku builder-herokuish:set $TEST_APP allowed true" + echo "output: $output" + echo "status: $status" + assert_success + + run /bin/bash -c "dokku proxy:set $TEST_APP caddy" + echo "output: $output" + echo "status: $status" + assert_success + + run /bin/bash -c "dokku caddy:set $TEST_APP label-key caddy_0" + echo "output: $output" + echo "status: $status" + assert_success + + run deploy_app + echo "output: $output" + echo "status: $status" + assert_success + + run /bin/bash -c "docker inspect $TEST_APP.web.1 --format '{{ index .Config.Labels \"caddy_0\" }}'" + echo "output: $output" + echo "status: $status" + assert_success + assert_output "$TEST_APP.${DOKKU_DOMAIN}:80" +} + @test "(caddy) multiple domains" { run /bin/bash -c "dokku proxy:set $TEST_APP caddy" echo "output: $output" diff --git a/tests/unit/cron.bats b/tests/unit/cron.bats index 097104af9..77a22c2ea 100644 --- a/tests/unit/cron.bats +++ b/tests/unit/cron.bats @@ -14,7 +14,6 @@ version = "0.0.1" [plugin.config] EOF cp /var/lib/dokku/plugins/available/cron-entries/plugin.toml /var/lib/dokku/plugins/enabled/cron-entries/plugin.toml - } teardown() { @@ -121,11 +120,17 @@ teardown() { echo "echo '@daily;/bin/true'" >/var/lib/dokku/plugins/enabled/cron-entries/cron-entries chmod +x /var/lib/dokku/plugins/enabled/cron-entries/cron-entries - run /bin/bash -c "dokku plugin:trigger cron-write" + run /bin/bash -c "dokku plugin:trigger scheduler-cron-write" echo "output: $output" echo "status: $status" assert_success + run /bin/bash -c "dokku cron:list --global --format json" + echo "output: $output" + echo "status: $status" + assert_success + assert_output '[{"id":"5cruaotm4yzzpnjlsdunblj8qyjp","command":"/bin/true","global":true,"schedule":"@daily","maintenance":false}]' + run /bin/bash -c "cat /var/spool/cron/crontabs/dokku" echo "output: $output" echo "status: $status" @@ -136,7 +141,7 @@ teardown() { echo "echo '@daily;/bin/true;/var/log/dokku/log.log'" >/var/lib/dokku/plugins/enabled/cron-entries/cron-entries chmod +x /var/lib/dokku/plugins/enabled/cron-entries/cron-entries - run /bin/bash -c "dokku plugin:trigger cron-write" + run /bin/bash -c "dokku plugin:trigger scheduler-cron-write" echo "output: $output" echo "status: $status" assert_success @@ -151,7 +156,7 @@ teardown() { echo "[[ \$1 == 'docker-local' ]] && echo '@daily;/bin/true'" >/var/lib/dokku/plugins/enabled/cron-entries/cron-entries chmod +x /var/lib/dokku/plugins/enabled/cron-entries/cron-entries - run /bin/bash -c "dokku plugin:trigger cron-write" + run /bin/bash -c "dokku plugin:trigger scheduler-cron-write" echo "output: $output" echo "status: $status" assert_success @@ -166,7 +171,7 @@ teardown() { echo "[[ \$1 == 'kubernetes' ]] && echo '@daily;/bin/true'" >/var/lib/dokku/plugins/enabled/cron-entries/cron-entries chmod +x /var/lib/dokku/plugins/enabled/cron-entries/cron-entries - run /bin/bash -c "dokku plugin:trigger cron-write" + run /bin/bash -c "dokku plugin:trigger scheduler-cron-write" echo "output: $output" echo "status: $status" assert_success diff --git a/tests/unit/domains.bats b/tests/unit/domains.bats index 24f0571d5..33a88fa08 100644 --- a/tests/unit/domains.bats +++ b/tests/unit/domains.bats @@ -188,7 +188,7 @@ teardown() { assert_output_contains a--domain.with--hyphens } -@test "(domains) domains:clear" { +@test "(domains) domains:reset" { run /bin/bash -c "dokku domains:add $TEST_APP test.app.${DOKKU_DOMAIN}" echo "output: $output" echo "status: $status" @@ -199,7 +199,7 @@ teardown() { echo "status: $status" assert_success - run /bin/bash -c "dokku domains:clear $TEST_APP" + run /bin/bash -c "dokku domains:reset $TEST_APP" echo "output: $output" echo "status: $status" assert_success @@ -347,8 +347,8 @@ teardown() { echo "status: $status" assert_success - # run domains:clear in order to invoke default vhost creation - run /bin/bash -c "dokku --quiet domains:clear test.dokku.test" + # run domains:reset in order to invoke default vhost creation + run /bin/bash -c "dokku --quiet domains:reset test.dokku.test" echo "output: $output" echo "status: $status" assert_success @@ -410,3 +410,25 @@ teardown() { assert_success assert_output_contains "Detected IPv4 domain name with nginx proxy enabled." 0 } + +@test "(domains) https:443" { + run /bin/bash -c "dokku domains:set $TEST_APP $TEST_APP.${DOKKU_DOMAIN}" + echo "output: $output" + echo "status: $status" + assert_success + + run /bin/bash -c "dokku git:from-image $TEST_APP cockpithq/cockpit:core-latest" + echo "output: $output" + echo "status: $status" + assert_success + assert_output_contains "http://$TEST_APP.${DOKKU_DOMAIN}" 2 + assert_output_contains "http://$TEST_APP.${DOKKU_DOMAIN}:2019" + assert_output_contains "udp://$TEST_APP.${DOKKU_DOMAIN}:443" + assert_output_contains "http://$TEST_APP.${DOKKU_DOMAIN}:443" 0 + + run /bin/bash -c "dokku ports:report $TEST_APP --ports-map-detected" + echo "output: $output" + echo "status: $status" + assert_success + assert_output "http:2019:2019 http:80:80 https:443:443 udp:443:443" +} diff --git a/tests/unit/git_1.bats b/tests/unit/git_1.bats index 2c24971d7..6bbbbe372 100644 --- a/tests/unit/git_1.bats +++ b/tests/unit/git_1.bats @@ -83,11 +83,15 @@ teardown() { echo "status: $status" assert_success + run /bin/bash -c "dokku enter $TEST_APP web git status" + echo "output: $output" + echo "status: $status" + assert_success + run /bin/bash -c "dokku enter $TEST_APP web ls .git" echo "output: $output" echo "status: $status" assert_success - assert_output_contains "branches" assert_output_contains "config" assert_output_contains "description" assert_output_contains "HEAD" diff --git a/tests/unit/logs.bats b/tests/unit/logs.bats index 274f477ec..b7fc1c2ae 100644 --- a/tests/unit/logs.bats +++ b/tests/unit/logs.bats @@ -239,6 +239,49 @@ teardown() { assert_output_not_exists } +@test "(logs) logs:set equals in uri" { + run create_app + echo "output: $output" + echo "status: $status" + assert_success + + run /bin/bash -c "dokku logs:set $TEST_APP vector-sink 'loki://?endpoint=https://host&encoding[codec]=text&auth[token]=foobar%3D&auth[strategy]=bearer'" + echo "output: $output" + echo "status: $status" + assert_success + assert_output_contains "Setting vector-sink" + assert_output_contains "Writing updated vector config to /var/lib/dokku/data/logs/vector.json" + # type: loki + # endpoint: https://host + # encoding[codec]: text + # auth[token]: foobar= + # auth[strategy]: bearer + + run /bin/bash -c "jq -r '.sinks[\"docker-sink:$TEST_APP\"].auth.strategy' /var/lib/dokku/data/logs/vector.json" + echo "output: $output" + echo "status: $status" + assert_success + assert_output "bearer" + + run /bin/bash -c "jq -r '.sinks[\"docker-sink:$TEST_APP\"].auth.token' /var/lib/dokku/data/logs/vector.json" + echo "output: $output" + echo "status: $status" + assert_success + assert_output "foobar=" + + run /bin/bash -c "jq -r '.sinks[\"docker-sink:$TEST_APP\"].endpoint' /var/lib/dokku/data/logs/vector.json" + echo "output: $output" + echo "status: $status" + assert_success + assert_output "https://host" + + run /bin/bash -c "jq -r '.sinks[\"docker-sink:$TEST_APP\"].encoding.codec' /var/lib/dokku/data/logs/vector.json" + echo "output: $output" + echo "status: $status" + assert_success + assert_output "text" +} + @test "(logs) logs:set escaped uri" { run create_app echo "output: $output" diff --git a/tests/unit/openresty.bats b/tests/unit/openresty.bats index e1b13aa66..f7e5d6c5c 100644 --- a/tests/unit/openresty.bats +++ b/tests/unit/openresty.bats @@ -38,7 +38,7 @@ teardown() { echo "status: $status" assert_success - run deploy_app python dokku@dokku.me:$TEST_APP convert_to_dockerfile + run deploy_app python dokku@$DOKKU_DOMAIN:$TEST_APP convert_to_dockerfile echo "output: $output" echo "status: $status" assert_success @@ -62,7 +62,7 @@ teardown() { echo "status: $status" assert_success - run deploy_app python dokku@dokku.me:$TEST_APP convert_to_dockerfile + run deploy_app python dokku@$DOKKU_DOMAIN:$TEST_APP convert_to_dockerfile echo "output: $output" echo "status: $status" assert_success @@ -211,7 +211,7 @@ teardown() { echo "status: $status" assert_success - run deploy_app python dokku@dokku.me:$TEST_APP add_openresty_include + run deploy_app python dokku@$DOKKU_DOMAIN:$TEST_APP add_openresty_include echo "output: $output" echo "status: $status" assert_success diff --git a/tests/unit/ports.bats b/tests/unit/ports.bats index 6eed8f0fe..e82b79711 100644 --- a/tests/unit/ports.bats +++ b/tests/unit/ports.bats @@ -6,10 +6,21 @@ setup() { global_setup [[ -f "$DOKKU_ROOT/VHOST" ]] && cp -fp "$DOKKU_ROOT/VHOST" "$DOKKU_ROOT/VHOST.bak" create_app + + dokku --force postgres:destroy $TEST_APP 2>/dev/null || true + dokku --force redis:destroy $TEST_APP 2>/dev/null || true + dokku --force postgres:destroy $TEST_APP-other 2>/dev/null || true + dokku --force redis:destroy $TEST_APP-other 2>/dev/null || true } teardown() { destroy_app + + dokku --force postgres:destroy $TEST_APP 2>/dev/null || true + dokku --force redis:destroy $TEST_APP 2>/dev/null || true + dokku --force postgres:destroy $TEST_APP-other 2>/dev/null || true + dokku --force redis:destroy $TEST_APP-other 2>/dev/null || true + [[ -f "$DOKKU_ROOT/VHOST.bak" ]] && mv "$DOKKU_ROOT/VHOST.bak" "$DOKKU_ROOT/VHOST" && chown dokku:dokku "$DOKKU_ROOT/VHOST" global_teardown } @@ -202,3 +213,84 @@ teardown() { echo "status: $status" assert_output "https:3000:3000 https:3003:3003 udp:3001:3001" } + +@test "(ports:rename) renamed app persists ports" { + if ! dokku plugin:installed postgres; then + run /bin/bash -c "dokku plugin:install https://github.com/dokku/dokku-postgres.git" + echo "output: $output" + echo "status: $status" + assert_success + fi + + if ! dokku plugin:installed redis; then + run /bin/bash -c "dokku plugin:install https://github.com/dokku/dokku-redis.git" + echo "output: $output" + echo "status: $status" + assert_success + fi + + run /bin/bash -c "dokku ports:set $TEST_APP http:80:3000" + echo "output: $output" + echo "status: $status" + assert_success + + run /bin/bash -c "dokku config:set $TEST_APP APP_SECRET=REPLACE_WITH_LONG_SECRET_REPLACE_WITH_LONG_SECRET" + echo "output: $output" + echo "status: $status" + assert_success + + run /bin/bash -c "dokku postgres:create $TEST_APP $TEST_APP" + echo "output: $output" + echo "status: $status" + assert_success + + run /bin/bash -c "dokku postgres:link $TEST_APP $TEST_APP" + echo "output: $output" + echo "status: $status" + assert_success + + run /bin/bash -c "dokku redis:create $TEST_APP $TEST_APP" + echo "output: $output" + echo "status: $status" + assert_success + + run /bin/bash -c "dokku redis:link $TEST_APP $TEST_APP" + echo "output: $output" + echo "status: $status" + assert_success + + dokku git:from-image $TEST_APP docmost/docmost:latest + echo "output: $output" + echo "status: $status" + assert_success + + run /bin/bash -c "dokku ports:report $TEST_APP --ports-map" + echo "output: $output" + echo "status: $status" + assert_success + assert_output "http:80:3000" + + run /bin/bash -c "dokku ports:report $TEST_APP --ports-map-detected" + echo "output: $output" + echo "status: $status" + assert_success + assert_output "http:3000:3000" + + run /bin/bash -c "dokku apps:rename $TEST_APP $TEST_APP-other" + echo "output: $output" + echo "status: $status" + assert_success + assert_output_contains "Application deployed" + + run /bin/bash -c "dokku ports:report $TEST_APP-other --ports-map" + echo "output: $output" + echo "status: $status" + assert_success + assert_output "http:80:3000" + + run /bin/bash -c "dokku ports:report $TEST_APP-other --ports-map-detected" + echo "output: $output" + echo "status: $status" + assert_success + assert_output "http:3000:3000" +} diff --git a/tests/unit/ps-dockerfile-2.bats b/tests/unit/ps-dockerfile-2.bats index dd4cf314d..7a26fe212 100644 --- a/tests/unit/ps-dockerfile-2.bats +++ b/tests/unit/ps-dockerfile-2.bats @@ -171,3 +171,18 @@ teardown() { assert_success done } + +@test "(ps:scale) dockerfile unchanged process" { + run deploy_app dockerfile + echo "output: $output" + echo "status: $status" + assert_success + + run /bin/bash -c "dokku ps:scale $TEST_APP worker=2" + echo "output: $output" + echo "status: $status" + assert_output_contains "Scaling $TEST_APP processes: worker=2" + assert_output_contains "Deploying worker" + assert_output_contains "Deploying web" 0 + assert_success +} diff --git a/tests/unit/ps-general-1.bats b/tests/unit/ps-general-1.bats index 0287d9d53..38bf03193 100644 --- a/tests/unit/ps-general-1.bats +++ b/tests/unit/ps-general-1.bats @@ -42,7 +42,7 @@ teardown() { echo "output: $output" echo "status: $status" assert_success - assert_output_contains "$CID" 6 + assert_output_contains "$CID" 7 } @test "(ps:set) procfile" { diff --git a/tests/unit/report.bats b/tests/unit/report.bats index fc280fae8..a5f7271b6 100644 --- a/tests/unit/report.bats +++ b/tests/unit/report.bats @@ -4,17 +4,18 @@ load test_helper setup() { global_setup - deploy_app rm -f /tmp/fake-docker-bin } teardown() { rm -f /tmp/fake-docker-bin - destroy_app + destroy_app || true global_teardown } @test "(report) report" { + deploy_app + run /bin/bash -c "dokku report" echo "output: $output" echo "status: $status" @@ -57,6 +58,8 @@ teardown() { } @test "(report) custom docker bin" { + deploy_app + export DOCKER_BIN="docker" run /bin/bash -c "dokku report" echo "output: $output" @@ -85,3 +88,52 @@ teardown() { unset DOCKER_BIN } + +@test "(report) exit 0 when no apps exist" { + run /bin/bash -c "dokku report" + echo "output: $output" + echo "status: $status" + assert_success + + plugins=( + app-json + apps + builder + builder-dockerfile + builder-herokuish + builder-lambda + builder-nixpacks + builder-pack + buildpacks + caddy + certs + checks + cron + docker-options + domains + git + haproxy + logs + network + nginx + openresty + ports + proxy + ps + registry + resource + scheduler + scheduler-docker-local + scheduler-k3s + storage + traefik + ) + + for plugin in "${plugins[@]}"; do + run /bin/bash -c "dokku $plugin:report 2>&1" + echo "output: $output" + echo "status: $status" + assert_success + assert_output_contains "You haven't deployed any applications yet" + done +} diff --git a/tests/unit/scheduler-k3s-2.bats b/tests/unit/scheduler-k3s-2.bats index 676f5612f..b1c47e881 100644 --- a/tests/unit/scheduler-k3s-2.bats +++ b/tests/unit/scheduler-k3s-2.bats @@ -17,7 +17,7 @@ teardown_() { uninstall_k3s || true } -@test "(scheduler-k3s) deploy traefik [resource] [autoscaling]" { +@test "(scheduler-k3s) deploy traefik [resource] [autoscaling1]" { if [[ -z "$DOCKERHUB_USERNAME" ]] || [[ -z "$DOCKERHUB_TOKEN" ]]; then skip "skipping due to missing docker.io credentials DOCKERHUB_USERNAME:DOCKERHUB_TOKEN" fi @@ -84,25 +84,25 @@ teardown_() { assert_output "asdfghjkl" # include resource tests - run /bin/bash -c "kubectl get pods -o=jsonpath='{.items[*]..resources.requests.cpu}'" + run /bin/bash -c "kubectl get pods -o=jsonpath='{.items[*].spec.containers[*].resources.requests.cpu}'" echo "output: $output" echo "status: $status" assert_success assert_output "100m" - run /bin/bash -c "kubectl get pods -o=jsonpath='{.items[*]..resources.requests.memory}'" + run /bin/bash -c "kubectl get pods -o=jsonpath='{.items[*].spec.containers[*].resources.requests.memory}'" echo "output: $output" echo "status: $status" assert_success assert_output "128Mi" - run /bin/bash -c "kubectl get pods -o=jsonpath='{.items[*]..resources.limits.cpu}'" + run /bin/bash -c "kubectl get pods -o=jsonpath='{.items[*].spec.containers[*].resources.limits.cpu}'" echo "output: $output" echo "status: $status" assert_success assert_output "" - run /bin/bash -c "kubectl get pods -o=jsonpath='{.items[*]..resources.limits.memory}'" + run /bin/bash -c "kubectl get pods -o=jsonpath='{.items[*].spec.containers[*].resources.limits.memory}'" echo "output: $output" echo "status: $status" assert_success @@ -125,25 +125,25 @@ teardown_() { assert_http_localhost_response "http" "$TEST_APP.dokku.me" "80" "" "python/http.server" - run /bin/bash -c "kubectl get pods -o=jsonpath='{.items[*]..resources.requests.cpu}'" + run /bin/bash -c "kubectl get pods -o=jsonpath='{.items[*].spec.containers[*].resources.requests.cpu}'" echo "output: $output" echo "status: $status" assert_success assert_output "" - run /bin/bash -c "kubectl get pods -o=jsonpath='{.items[*]..resources.requests.memory}'" + run /bin/bash -c "kubectl get pods -o=jsonpath='{.items[*].spec.containers[*].resources.requests.memory}'" echo "output: $output" echo "status: $status" assert_success assert_output "300Mi" - run /bin/bash -c "kubectl get pods -o=jsonpath='{.items[*]..resources.limits.cpu}'" + run /bin/bash -c "kubectl get pods -o=jsonpath='{.items[*].spec.containers[*].resources.limits.cpu}'" echo "output: $output" echo "status: $status" assert_success assert_output "" - run /bin/bash -c "kubectl get pods -o=jsonpath='{.items[*]..resources.limits.memory}'" + run /bin/bash -c "kubectl get pods -o=jsonpath='{.items[*].spec.containers[*].resources.limits.memory}'" echo "output: $output" echo "status: $status" assert_success @@ -179,12 +179,29 @@ teardown_() { echo "status: $status" assert_success + run /bin/bash -c "dokku scheduler-k3s:set $TEST_APP shm-size 64Mi" + echo "output: $output" + echo "status: $status" + assert_success + run /bin/bash -c "dokku git:sync --build $TEST_APP https://github.com/dokku/smoke-test-app.git" echo "output: $output" echo "status: $status" assert_success assert_http_localhost_response "http" "$TEST_APP.dokku.me" "80" "" "python/http.server" + + run /bin/bash -c "kubectl get deployment $TEST_APP-web -o json | jq -r '.spec.template.spec.volumes[0].emptyDir.sizeLimit'" + echo "output: $output" + echo "status: $status" + assert_success + assert_output "64Mi" + + run /bin/bash -c "kubectl get deployment $TEST_APP-web -o json | jq -r '.spec.template.spec.volumes[0].emptyDir.medium'" + echo "output: $output" + echo "status: $status" + assert_success + assert_output "Memory" } @test "(scheduler-k3s) deploy annotations" { diff --git a/tests/unit/scheduler-k3s-3.bats b/tests/unit/scheduler-k3s-3.bats new file mode 100644 index 000000000..1f6be8428 --- /dev/null +++ b/tests/unit/scheduler-k3s-3.bats @@ -0,0 +1,160 @@ +#!/usr/bin/env bats + +load test_helper + +TEST_APP="rdmtestapp" + +setup() { + uninstall_k3s || true + global_setup + dokku nginx:stop + export KUBECONFIG="/etc/rancher/k3s/k3s.yaml" +} + +teardown() { + global_teardown + dokku nginx:start + uninstall_k3s || true +} + +@test "(scheduler-k3s) security context" { + if [[ -z "$DOCKERHUB_USERNAME" ]] || [[ -z "$DOCKERHUB_TOKEN" ]]; then + skip "skipping due to missing docker.io credentials DOCKERHUB_USERNAME:DOCKERHUB_TOKEN" + fi + + INGRESS_CLASS=nginx install_k3s + + run /bin/bash -c "dokku apps:create $TEST_APP" + echo "output: $output" + echo "status: $status" + assert_success + + run deploy_app python "dokku@$DOKKU_DOMAIN:$TEST_APP" + echo "output: $output" + echo "status: $status" + assert_success + + run /bin/bash -c "kubectl get deployment $TEST_APP-web -o json | jq -r '.spec.template.spec.containers[0].securityContext.capabilities.add[0]'" + echo "output: $output" + echo "status: $status" + assert_success + assert_output "null" + + run /bin/bash -c "kubectl get deployment $TEST_APP-web -o json | jq -r '.spec.template.spec.containers[0].securityContext.privileged'" + echo "output: $output" + echo "status: $status" + assert_success + assert_output "null" + + run /bin/bash -c "dokku docker-options:add $TEST_APP deploy --cap-add=NET_ADMIN" + echo "output: $output" + echo "status: $status" + assert_success + + run /bin/bash -c "dokku docker-options:add $TEST_APP deploy --privileged" + echo "output: $output" + echo "status: $status" + assert_success + + run /bin/bash -c "dokku ps:restart $TEST_APP" + echo "output: $output" + echo "status: $status" + assert_success + + run /bin/bash -c "kubectl get deployment $TEST_APP-web -o json | jq -r '.spec.template.spec.containers[0].securityContext.capabilities.add[0]'" + echo "output: $output" + echo "status: $status" + assert_success + assert_output "NET_ADMIN" + + run /bin/bash -c "kubectl get deployment $TEST_APP-web -o json | jq -r '.spec.template.spec.containers[0].securityContext.privileged'" + echo "output: $output" + echo "status: $status" + assert_success + assert_output "true" +} + +@test "(scheduler-k3s) kustomize" { + if [[ -z "$DOCKERHUB_USERNAME" ]] || [[ -z "$DOCKERHUB_TOKEN" ]]; then + skip "skipping due to missing docker.io credentials DOCKERHUB_USERNAME:DOCKERHUB_TOKEN" + fi + + INGRESS_CLASS=nginx install_k3s + + run /bin/bash -c "dokku apps:create $TEST_APP" + echo "output: $output" + echo "status: $status" + assert_success + + run /bin/bash -c "dokku ps:scale $TEST_APP web=1 worker=2" + echo "output: $output" + echo "status: $status" + assert_success + + run deploy_app python dokku@$DOKKU_DOMAIN:$TEST_APP inject_kustomization_yaml + echo "output: $output" + echo "status: $status" + assert_success + + run /bin/bash -c "kubectl get deployment $TEST_APP-web -o json | jq -r '.spec.replicas'" + echo "output: $output" + echo "status: $status" + assert_success + assert_output "3" + + run /bin/bash -c "kubectl get deployment $TEST_APP-worker -o json | jq -r '.spec.replicas'" + echo "output: $output" + echo "status: $status" + assert_success + assert_output "2" +} + +@test "(scheduler-k3s) deploy kustomize with vector sink" { + if [[ -z "$DOCKERHUB_USERNAME" ]] || [[ -z "$DOCKERHUB_TOKEN" ]]; then + skip "skipping due to missing docker.io credentials DOCKERHUB_USERNAME:DOCKERHUB_TOKEN" + fi + + encoded="$(echo '{{ print "{{ pod }}" }}' | base64)" + run /bin/bash -c "echo $encoded" + echo "output: $output" + echo "status: $status" + assert_success + assert_output "e3sgcHJpbnQgInt7IHBvZCB9fSIgfX0K" + + run /bin/bash -c "dokku logs:set --global vector-sink 'http://?process=base64enc%3A${encoded}'" + echo "output: $output" + echo "status: $status" + assert_success + + INGRESS_CLASS=nginx install_k3s + + run /bin/bash -c "kubectl get cm -n vector vector -o yaml" + echo "output: $output" + echo "status: $status" + assert_success + assert_output_contains "process: '{{ pod }}'" +} + +inject_kustomization_yaml() { + local APP="$1" + local APP_REPO_DIR="$2" + [[ -z "$APP" ]] && local APP="$TEST_APP" + mkdir -p "$APP_REPO_DIR/config/kustomize" + touch "$APP_REPO_DIR/config/kustomize/kustomization.yaml" + cat <"$APP_REPO_DIR/config/kustomize/kustomization.yaml" +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization +resources: +- rendered.yaml +patches: +- patch: |- + - op: replace + path: /spec/replicas + value: 3 + target: + group: apps + version: v1 + kind: Deployment + name: $APP-web +EOF +} diff --git a/tests/unit/storage.bats b/tests/unit/storage.bats index 37205ecf4..9687d0e73 100644 --- a/tests/unit/storage.bats +++ b/tests/unit/storage.bats @@ -90,7 +90,7 @@ teardown() { assert_output_contains "Setting directory ownership to 2000:2000" 0 assert_output_contains "Setting directory ownership to 32767:32767" 0 - run /bin/bash -c "dokku storage:ensure-directory --chown packeto $TEST_APP" + run /bin/bash -c "dokku storage:ensure-directory --chown paketo $TEST_APP" echo "output: $output" echo "status: $status" assert_success