Merge branch 'staging'
Some checks failed
Deploy / CreateImage (push) Failing after 34s
Deploy / DeployService (push) Has been skipped

This commit is contained in:
Nastya 2025-06-17 20:36:57 +03:00
commit 935af033a6
16 changed files with 26425 additions and 36 deletions

@ -0,0 +1,34 @@
name: Deploy
run-name: ${{ gitea.actor }} build image and push to container registry
on:
push:
branches:
- "main"
- "staging"
jobs:
CreateImage:
runs-on: [skeris]
uses: http://gitea.pena/PenaDevops/actions.git/.gitea/workflows/build-image.yml@v1.1.6-p
with:
runner: skeris
secrets:
REGISTRY_USER: ${{ secrets.REGISTRY_USER }}
REGISTRY_PASSWORD: ${{ secrets.REGISTRY_PASSWORD }}
DeployService:
runs-on: [frontstaging]
container:
image: gitea.pena:3000/penadevops/container-images/node-compose:main
env:
GITHUB_RUN_NUMBER: "${{ inputs.actionid }}"
volumes:
- /run/user/1000/podman/podman.sock:/run/user/1000/podman/podman.sock
steps:
- name: Check out repository code
uses: http://gitea.pena:3000/PenaDevops/actions.git/checkout@v1
- run: printenv
- run: GITHUB_RUN_NUMBER=${{ gitea.run_id }} compose -f deployments/${{ gitea.ref_name }}/docker-compose.yaml up -d
# uses: http://gitea.pena/PenaDevops/actions.git/.gitea/workflows/deploy.yml@v1.1.6-p
# with:
# runner: frontstaging

1
.yarnrc Normal file

@ -0,0 +1 @@
"@frontend:registry" "http://gitea.pena/api/packages/skeris/npm/"

16
Dockerfile Normal file

@ -0,0 +1,16 @@
FROM gitea.pena/penadevops/container-images/node-compose:main as build
RUN apk update && rm -rf /var/cache/apk/*
WORKDIR /usr/app
COPY . .
RUN npm install --force && yarn cache clean
RUN npm run build
FROM gitea.pena/penadevops/container-images/nginx:main as result
WORKDIR /usr/share/nginx/html
COPY --from=build /usr/app/build/ /usr/share/nginx/html
COPY admin.conf /etc/nginx/conf.d/default.conf
COPY cert.pem /etc/nginx/cert.pem
COPY key.pem /etc/nginx/key.pem

12
Taskfile.yml Normal file

@ -0,0 +1,12 @@
version: "3"
tasks:
build-image:
cmds:
- podman build -t gitea.pena/penaside/adminfront:$(git rev-parse --abbrev-ref HEAD).$(git rev-parse HEAD) .
push:
cmds:
- task: build-image
- cmd: podman login gitea.pena
- cmd: podman push gitea.pena/penaside/adminfront:$(git rev-parse --abbrev-ref HEAD).$(git rev-parse HEAD)

@ -1,6 +1,10 @@
const CracoAlias = require("craco-alias");
module.exports = {
eslint: {
enable: false
},
plugins: [
{
plugin: CracoAlias,

@ -1,17 +1,9 @@
version: "3.3"
services:
admin_front:
container_name: admin_front
restart: unless-stopped
image: $CI_REGISTRY_IMAGE/staging:$CI_COMMIT_REF_SLUG.$CI_PIPELINE_ID
networks:
- marketplace_penahub_frontend
- default
hostname: admin
image: gitea.pena/penaside/adminfront/staging:$GITHUB_RUN_NUMBER
ports:
- 10.8.0.7:80:80
- 10.8.0.7:443:443
- 10.7.0.18:80:80
- 10.7.0.18:443:443
tty: true
networks:
marketplace_penahub_frontend:
external: true

26332
package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

@ -6,7 +6,7 @@
"@date-io/dayjs": "^2.15.0",
"@emotion/react": "^11.10.4",
"@emotion/styled": "^11.10.4",
"@frontend/kitui": "^1.0.97",
"@frontend/kitui": "^1.0.108",
"@material-ui/pickers": "^3.3.10",
"@mui/icons-material": "^5.10.3",
"@mui/material": "^5.10.5",
@ -50,8 +50,8 @@
"zustand": "^4.3.8"
},
"scripts": {
"start": "craco start",
"build": "NODE_OPTIONS=\"--max-old-space-size=1024\" craco build",
"start": "HOST=0.0.0.0 craco start",
"build": "craco build",
"test": "craco test --env=node --transformIgnorePatterns \"node_modules/(?!@frontend)/\"",
"test:cart": "craco test src/utils/calcCart --transformIgnorePatterns \"node_modules/(?!@frontend)/\"",
"test:cypress": "start-server-and-test start http://localhost:3000 cypress",
@ -73,6 +73,7 @@
]
},
"devDependencies": {
"@babel/plugin-transform-private-property-in-object": "^7.23.4",
"@eslint/js": "^9.3.0",
"craco-alias": "^3.0.1",
"eslint": "^9.3.0",

@ -6,10 +6,7 @@ import { parseAxiosError } from "@root/utils/parse-error";
import { Privilege } from "@frontend/kitui";
import type { TMockData } from "./roles";
type SeverPrivilegesResponse = {
templategen: CustomPrivilege[];
squiz: CustomPrivilege[];
};
type SeverPrivilegesResponse = CustomPrivilege[];
const API_URL = `${process.env.REACT_APP_DOMAIN}/strator`;
@ -50,7 +47,7 @@ export const requestServicePrivileges = async (): Promise<[SeverPrivilegesRespon
try {
const privilegesResponse = await makeRequest<never, SeverPrivilegesResponse>({
method: "GET",
url: `${API_URL}/privilege/service`,
url: `${API_URL}/privilege`,
});
return [privilegesResponse];

@ -81,7 +81,7 @@ export const requestTariffs = async (page: number): Promise<[GetTariffsResponse
try {
const tariffsResponse = await makeRequest<never, GetTariffsResponse>({
method: "GET",
url: `${API_URL}/tariff/?page=${page}&limit=${100}`,
url: `${API_URL}/tariff/getlist/?page=${page}&limit=${100}`,
});
return [tariffsResponse];

@ -26,6 +26,7 @@ export interface Ticket {
title: string;
created_at: string;
updated_at: string;
system?: boolean;
rate: number;
}

@ -33,10 +33,15 @@ export default function Support() {
onFetchStateChange: setTicketsFetchState,
});
useSSESubscription<Ticket>({
useSSESubscription<Ticket | [{event: "ping"}]>({
enabled: Boolean(token),
url: process.env.REACT_APP_DOMAIN + `/heruvym/v1.0.0/subscribe?Authorization=${token}`,
onNewData: updateTickets,
onNewData: (e) => {
if ("event" in e[0] && e[0].event === "ping") return
updateTickets(e as Ticket[])
},
onDisconnect: () => {
clearMessageState();
clearTickets();

@ -22,12 +22,13 @@ export default function TicketItem({ ticket, setActiveUserId }: Props) {
const navigate = useNavigate();
const ticketId = useParams().ticketId;
const isUnread = ticket.user === ticket.top_message.user_id;
console.log(ticket)
const isUnread = ticket.user === ticket?.top_message?.user_id;
const isSelected = ticket.id === ticketId;
const unreadSx = {
border: "1px solid",
borderColor: theme.palette.golden.main,
borderColor: ticket.system ? "red" : theme.palette.golden.main,
backgroundColor: theme.palette.goldenMedium.main,
};

@ -136,7 +136,7 @@ function sortTicketsByUpdateTime(ticket1: Ticket, ticket2: Ticket) {
}
function sortTicketsByUnread(ticket1: Ticket, ticket2: Ticket) {
const isUnread1 = ticket1.user === ticket1.top_message.user_id;
const isUnread2 = ticket2.user === ticket2.top_message.user_id;
const isUnread1 = ticket1.user === ticket1?.top_message.user_id;
const isUnread2 = ticket2.user === ticket2?.top_message.user_id;
return Number(isUnread2) - Number(isUnread1);
}

@ -64,7 +64,7 @@ export default function CreateTariff() {
const [, createdTariffError] = await createTariff({
name: values.nameField,
price: Number(values.customPriceField) * 100,
order: values.orderField,
order: Number(values.orderField),
isCustom: false,
description: values.descriptionField,
privileges: [

@ -19,13 +19,6 @@ export const requestPrivileges = async () => {
if (privilegesError) {
return console.error(privilegesError);
}
let allPrivileges: CustomPrivilege[] = [];
if (privilegesResponse) {
if (privilegesResponse.templategen !== undefined)
allPrivileges = allPrivileges.concat(privilegesResponse.templategen);
if (privilegesResponse.squiz !== undefined) allPrivileges = allPrivileges.concat(privilegesResponse.squiz);
mutatePrivileges(allPrivileges);
}
if (privilegesResponse) mutatePrivileges(privilegesResponse);
};