diff --git a/.github/workflows/distribution-deploy.yml b/.github/workflows/distribution-deploy.yml
index 69f3afd73..d4bcfc8b7 100644
--- a/.github/workflows/distribution-deploy.yml
+++ b/.github/workflows/distribution-deploy.yml
@@ -11,9 +11,6 @@ jobs:
- name: Checkout code
uses: actions/checkout@v4
- - name: Set up Docker Buildx
- uses: docker/setup-buildx-action@v3
-
- name: Log in to GitHub Container Registry
uses: docker/login-action@v3
with:
diff --git a/.github/workflows/distribution-mono-deploy.yml b/.github/workflows/distribution-mono-deploy.yml
new file mode 100644
index 000000000..7dafbfc21
--- /dev/null
+++ b/.github/workflows/distribution-mono-deploy.yml
@@ -0,0 +1,30 @@
+name: Distribution deploy - Monolithic
+
+on:
+ push:
+ branches: ["master"]
+ workflow_dispatch:
+jobs:
+ docker-build-and-push-server:
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout code
+ uses: actions/checkout@v4
+
+ - name: Log in to GitHub Container Registry
+ uses: docker/login-action@v3
+ with:
+ registry: ghcr.io
+ username: ${{ github.actor }}
+ password: ${{ secrets.GITHUB_TOKEN }}
+
+ - name: Build Server Docker image
+ run: |
+ docker build \
+ -t ghcr.io/bluewave-labs/checkmate:backend-dist-mono \
+ -f ./docker/dist-mono/server.Dockerfile \
+ --label org.opencontainers.image.source=https://github.com/bluewave-labs/checkmate \
+ .
+
+ - name: Push Server Docker image
+ run: docker push ghcr.io/bluewave-labs/checkmate:backend-dist-mono
diff --git a/client/package-lock.json b/client/package-lock.json
index b7859e0fe..71b7c6efe 100644
--- a/client/package-lock.json
+++ b/client/package-lock.json
@@ -52,7 +52,7 @@
"eslint-plugin-react-hooks": "^5.0.0",
"eslint-plugin-react-refresh": "^0.4.6",
"prettier": "^3.3.3",
- "vite": "^5.2.0"
+ "vite": "^5.4.19"
}
},
"node_modules/@ampproject/remapping": {
@@ -6544,9 +6544,9 @@
}
},
"node_modules/vite": {
- "version": "5.4.18",
- "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.18.tgz",
- "integrity": "sha512-1oDcnEp3lVyHCuQ2YFelM4Alm2o91xNoMncRm1U7S+JdYfYOvbiGZ3/CxGttrOu2M/KcGz7cRC2DoNUA6urmMA==",
+ "version": "5.4.19",
+ "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.19.tgz",
+ "integrity": "sha512-qO3aKv3HoQC8QKiNSTuUM1l9o/XX3+c+VTgLHbJWHZGeTPVAg2XwazI9UWzoxjIJCGCV2zU60uqMzjeLZuULqA==",
"license": "MIT",
"dependencies": {
"esbuild": "^0.21.3",
diff --git a/client/package.json b/client/package.json
index ba745503a..f8f699be0 100644
--- a/client/package.json
+++ b/client/package.json
@@ -63,6 +63,6 @@
"eslint-plugin-react-hooks": "^5.0.0",
"eslint-plugin-react-refresh": "^0.4.6",
"prettier": "^3.3.3",
- "vite": "^5.2.0"
+ "vite": "^5.4.19"
}
}
diff --git a/client/src/Components/MonitorDetailsControlHeader/index.jsx b/client/src/Components/MonitorDetailsControlHeader/index.jsx
index c4dcf1ffc..920d5a29c 100644
--- a/client/src/Components/MonitorDetailsControlHeader/index.jsx
+++ b/client/src/Components/MonitorDetailsControlHeader/index.jsx
@@ -5,12 +5,15 @@ import Button from "@mui/material/Button";
import SettingsOutlinedIcon from "@mui/icons-material/SettingsOutlined";
import PauseOutlinedIcon from "@mui/icons-material/PauseOutlined";
import PlayArrowOutlinedIcon from "@mui/icons-material/PlayArrowOutlined";
+import EmailIcon from "@mui/icons-material/Email";
// Utils
import PropTypes from "prop-types";
import { useNavigate } from "react-router-dom";
import { useTheme } from "@mui/material/styles";
import { usePauseMonitor } from "../../Hooks/useMonitorControls";
+import { useSendTestEmail } from "../../Hooks/useSendTestEmail";
+import { useTranslation } from "react-i18next";
/**
* MonitorDetailsControlHeader component displays the control header for monitor details.
@@ -34,11 +37,14 @@ const MonitorDetailsControlHeader = ({
}) => {
const navigate = useNavigate();
const theme = useTheme();
+ const { t } = useTranslation();
const [pauseMonitor, isPausing, error] = usePauseMonitor({
monitorId: monitor?._id,
triggerUpdate,
});
+ const [isSending, emailError, sendTestEmail] = useSendTestEmail();
+
if (isLoading) {
return ;
}
@@ -54,6 +60,24 @@ const MonitorDetailsControlHeader = ({
direction="row"
gap={theme.spacing(2)}
>
+ }
+ onClick={sendTestEmail}
+ >
+ {t("sendTestEmail")}
+
+