Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
0aa6ac9
Merge pull request #528 from zonemaster/master
matsduf Dec 19, 2025
8d5aa6e
Merge pull request #540 from zonemaster/master
matsduf Mar 11, 2026
866acdc
Update e2e tests
tgreenx Mar 4, 2026
dea3185
Update e2e snapshots
tgreenx Apr 28, 2026
36c5c98
Merge pull request #539 from tgreenx/fix-e2e
tgreenx Apr 29, 2026
49656f1
add Dockerfile
MichaelTimbert Jul 15, 2025
df18474
Remove S6 installation
MichaelTimbert Jul 21, 2025
af73aed
Add Makefile & cleanup
MichaelTimbert Mar 24, 2026
6e3816c
Cleanup
MichaelTimbert Apr 9, 2026
348b936
minimise intermediate layer
MichaelTimbert May 20, 2026
e006df9
Handle empty testcase strings in results
tbleckert May 18, 2026
6135e38
Merge pull request #543 from tbleckert/handle-empty-testcase
matsduf May 27, 2026
074a0ea
Change docker image name from 'gui' to 'all-in-one'
MichaelTimbert May 26, 2026
fde21a9
Merge pull request #542 from MichaelTimbert/docker
MichaelTimbert Jun 1, 2026
f4494f9
Updates CI settings to make CI more efficient
matsduf Jun 15, 2026
0a86b35
Updates playwright version
matsduf Jun 15, 2026
d61dad3
Merge pull request #548 from matsduf/updates-ci-settings
matsduf Jun 15, 2026
88c7d63
Add artifact build to the CI
MichaelTimbert Feb 24, 2026
32d17fe
fix sha commit
MichaelTimbert Mar 3, 2026
af89872
Documentation: add artifact section
MichaelTimbert Jun 11, 2026
185d10a
Update README.md
MichaelTimbert Jun 11, 2026
257649e
CI: force update
MichaelTimbert Jun 16, 2026
2c50a02
Run npm audit fix (non-breaking changes)
tgreenx Jun 17, 2026
6f4e6c6
Merge pull request #535 from MichaelTimbert/artifact
MichaelTimbert Jun 17, 2026
b604cb2
Merge pull request #549 from tgreenx/audit-fix
tgreenx Jun 17, 2026
46c3a70
Updates for release v2026.1
matsduf Jun 26, 2026
2deac3b
Merge pull request #551 from matsduf/prepare-release-2026.1
matsduf Jun 29, 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
52 changes: 47 additions & 5 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ jobs:
tests_e2e:
name: Run end-to-end tests
runs-on: ubuntu-22.04
timeout-minutes: 30
steps:
- uses: actions/checkout@v3

Expand All @@ -26,11 +27,52 @@ jobs:
- name: Install dependencies
run: npm install

- name: Install e2e dependencies
run: npm run e2e:install-deps

- name: Run e2e browsers
run: npm run e2e:install
- name: Install e2e browser
timeout-minutes: 20
run: npx playwright install --with-deps --only-shell chromium

- name: Run e2e tests
run: npm run e2e

build-artifact:
needs: tests_e2e
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v4

- uses: actions/setup-node@v3
with:
node-version: 24.x
cache: npm

- name: update
run: sudo apt update -y

- name: apt install
run: sudo apt-get install -y git jq

- name: build
run: |
npm install
npm run release

- name: Get short SHA
id: short_sha
run: |
if [ "${{ github.event_name }}" == "pull_request" ]; then
echo "SHORT_SHA=$(echo ${{ github.event.pull_request.head.sha }} | cut -c1-7)" >> $GITHUB_ENV
else
echo "SHORT_SHA=$(echo ${{ github.sha }} | cut -c1-7)" >> $GITHUB_ENV
fi

- name: Get Zonemaster-GUI version
id: version
run: |
VERSION=`jq -r '.version | sub("^v"; "")' package.json`
echo "version=$VERSION" >> $GITHUB_OUTPUT

- name: upload artifact
uses: actions/upload-artifact@v4
with:
name: zonemaster_web_gui_v${{ steps.version.outputs.version }}-${{ env.SHORT_SHA }}
path: zonemaster_web_gui_v${{ steps.version.outputs.version }}.zip
11 changes: 11 additions & 0 deletions Changes
Original file line number Diff line number Diff line change
@@ -1,5 +1,16 @@
Release history for Zonemaster component Zonemaster-GUI


v5.1.0 2026-06-29 (part of Zonemaster v2026.1 release)

[Features]
- Adds Dockerfile for an All-In-One Docker image (#542)

[Fixes]
- Update dependencies (#549)
- Corrects how GUI handles empty testcase values in results (#543)


v5.0.1 2026-03-04 (part of Zonemaster v2025.2.1 release)

[Fixes]
Expand Down
11 changes: 11 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
VERSION = $(shell jq -r '.version' package.json)

docker-build:
docker build --tag zonemaster/all-in-one:local --build-arg version=$(VERSION) -f docker/Dockerfile .

docker-tag-version:
docker tag zonemaster/all-in-one:local zonemaster/all-in-one:$(VERSION)

docker-tag-latest:
docker tag zonemaster/all-in-one:local zonemaster/all-in-one:latest

10 changes: 10 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,16 @@ Refer to the [docs](/docs) directory for detailed information on:

For contribution guidelines, see [CONTRIBUTE.md](CONTRIBUTE.md).

## CI artifact

A zip (`zonemaster_web_gui_<version>.zip`) is built and uploaded as a GitHub Actions artifact on every push and pull request. This artifact can be useful for release testing and PR review.
To download it:
1. Go to the [Actions tab](https://github.com/zonemaster/zonemaster-gui/actions) of the repository.
2. Select a workflow run (e.g. for a specific PR or branch).
3. Scroll to the bottom of the run summary to the **Artifacts** section.
4. Download the artifact named `zonemaster_web_gui_<version>-<short_sha>`.
The artifact name includes the module version and the first 7 characters of the commit SHA.

## License

This is free software under a 2-clause BSD license. The full text of the license can be found in the [LICENSE](LICENSE) file included in this repository.
Expand Down
38 changes: 38 additions & 0 deletions docker/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
############################################################
## Zonemaster All-In-One docker image
##
## DO NOT USE THIS IMAGE IN PRODUCTION
##
############################################################
FROM zonemaster/backend:local

ARG version

EXPOSE 80

USER root
COPY ./zonemaster_web_gui_${version}.zip .

RUN apk add apache2 apache2-proxy

RUN install -vd /var/www/html/zonemaster-web-gui /var/log/zonemaster && \
unzip -d /var/www/html/zonemaster-web-gui zonemaster_web_gui_${version}.zip && \
rm -f zonemaster_web_gui_${version}.zip

# Enable apache module
RUN echo "LoadModule rewrite_module modules/mod_rewrite.so" >> /etc/apache2/httpd.conf
RUN echo "LoadModule proxy_module modules/mod_proxy.so" >> /etc/apache2/httpd.conf
RUN echo "LoadModule proxy_http_module modules/mod_proxy_http.so" >> /etc/apache2/httpd.conf
RUN cat /var/www/html/zonemaster-web-gui/zonemaster.conf-example >> /etc/apache2/httpd.conf

# HTTP service
RUN mkdir /etc/s6-overlay/s6-rc.d/httpd
RUN echo "longrun" > /etc/s6-overlay/s6-rc.d/httpd/type
RUN echo "#!/command/execlineb -P" > /etc/s6-overlay/s6-rc.d/httpd/run
RUN echo "httpd -DFOREGROUND" >> /etc/s6-overlay/s6-rc.d/httpd/run

RUN touch /etc/s6-overlay/s6-rc.d/user/contents.d/httpd

COPY docker/zonemaster_launch_gui /usr/local/bin

ENTRYPOINT ["/usr/local/bin/zonemaster_launch_gui"]
12 changes: 12 additions & 0 deletions docker/zonemaster_launch_gui
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
#!/bin/sh

case $1 in
gui)
exec /init
;;

*)
# pass the argument to zonemaster_launch from zonemaster-backend Docker image
zonemaster_launch $@
;;
esac;
Binary file modified e2e/FR11.e2e-spec.ts-snapshots/domain-chromium-linux.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified e2e/FR11.e2e-spec.ts-snapshots/domain-options-chromium-linux.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified e2e/FR21.e2e-spec.ts-snapshots/results-chromium-linux.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
24 changes: 24 additions & 0 deletions e2e/FR26.e2e-spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
import { test, expect } from './global-setup';

test.describe('Zonemaster test FR26 - [Shows results with empty testcases]', () => {
test('shows a result with an empty testcase', async ({
page,
}) => {
await page.goto('/en/result/empty-testcase-response/');

await expect(page.locator('.zm-result')).toBeVisible({
timeout: 10000,
});
await expect(
page.getByRole('heading', {
name: 'Test result for empty-testcase.example',
}),
).toBeVisible();

await page.getByRole('button', { name: 'Expand all modules' }).click();

await expect(page.locator('#zmModule-Backend-content')).toContainText(
'The backend returned a result without a testcase.',
);
});
});
35 changes: 33 additions & 2 deletions e2e/interceptors/mock.interceptor.ts
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,6 @@ const urls: MockEndpoint[] = [
},

// FR18 - Should display progress bar
// FR26 - Should display progress bar
{
url: 'http://localhost:4321/api',
body: {'jsonrpc': '2.0', 'id': 1572254767685, 'method': 'start_domain_test', 'params':
Expand Down Expand Up @@ -113,7 +112,6 @@ const urls: MockEndpoint[] = [
// FR18 - Should display progress bar
// FR19 - Should display progress bar when we add a NS name
// FR20 - should display progress bar when we add a DS entry and launch a test
// FR26 - Should display progress bar
{
url: 'http://localhost:4321/api',
body: {'jsonrpc': '2.0', 'id': 1572254972236, 'method': 'test_progress', 'params': {'test_id': '2005cf23e9fb24b6'}},
Expand Down Expand Up @@ -883,6 +881,39 @@ const urls: MockEndpoint[] = [
}
}
},
// Result returned without a testcase.
{
url: 'http://localhost:4321/api',
body: {'jsonrpc': '2.0', 'id': 1, 'method': 'get_test_results', 'params': {'id': 'empty-testcase-response', 'language': 'en'}},
method: 'POST',
json: {'jsonrpc': '2.0', 'id': 1, 'result': {
'results': [
{
'level': 'CRITICAL',
'testcase': '',
'module': 'Backend',
'message': 'The backend returned a result without a testcase.\n'
}
],
'params': {
'profile': 'default',
'ipv6': true,
'ds_info': [],
'language': 'en',
'priority': 10,
'queue': 0,
'client_id': 'Zonemaster-GUI',
'ipv4': true,
'domain': 'empty-testcase.example',
'nameservers': [],
'client_version': 'v5.0.1'
},
'testcase_descriptions': {'': ''},
'created_at': '2026-04-02T11:15:15Z',
'hash_id': 'empty-testcase-response'
}
}
},

// FR23 - Should display previous tests
// FR24 - Should display previous run link
Expand Down
Loading
Loading