mirror of
https://github.com/Portabase/portabase.git
synced 2026-07-14 11:16:13 +02:00
Compare commits
1
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
da5c65d5a6 |
@@ -7,10 +7,6 @@ on:
|
|||||||
required: false
|
required: false
|
||||||
type: string
|
type: string
|
||||||
default: 'solucetechnologies/portabase'
|
default: 'solucetechnologies/portabase'
|
||||||
image_name2:
|
|
||||||
required: false
|
|
||||||
type: string
|
|
||||||
default: 'portabase/portabase'
|
|
||||||
add_latest:
|
add_latest:
|
||||||
required: false
|
required: false
|
||||||
type: boolean
|
type: boolean
|
||||||
@@ -28,10 +24,6 @@ on:
|
|||||||
required: true
|
required: true
|
||||||
DOCKER_PASSWORD:
|
DOCKER_PASSWORD:
|
||||||
required: true
|
required: true
|
||||||
DOCKER_USERNAME_2:
|
|
||||||
required: true
|
|
||||||
DOCKER_PASSWORD_2:
|
|
||||||
required: true
|
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build-and-push:
|
build-and-push:
|
||||||
@@ -45,45 +37,27 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
|
|
||||||
|
- name: Log in to Docker Hub
|
||||||
|
uses: docker/login-action@f4ef78c080cd8ba55a85445d5b36e214a81df20a
|
||||||
|
with:
|
||||||
|
username: ${{ secrets.DOCKER_USERNAME }}
|
||||||
|
password: ${{ secrets.DOCKER_PASSWORD }}
|
||||||
|
|
||||||
- name: Set tags
|
- name: Set tags
|
||||||
id: set-tags
|
id: set-tags
|
||||||
run: |
|
run: |
|
||||||
REF_NAME=${GITHUB_REF#refs/tags/}
|
REF_NAME=${GITHUB_REF#refs/tags/}
|
||||||
TAGS="${{ inputs.image_name }}:$REF_NAME"
|
TAGS="${{ inputs.image_name }}:$REF_NAME"
|
||||||
TAGS2="${{ inputs.image_name2 }}:$REF_NAME"
|
|
||||||
if [[ "${{ inputs.add_latest }}" == "true" ]]; then
|
if [[ "${{ inputs.add_latest }}" == "true" ]]; then
|
||||||
TAGS="$TAGS,${{ inputs.image_name }}:latest"
|
TAGS="$TAGS,${{ inputs.image_name }}:latest"
|
||||||
fi
|
fi
|
||||||
echo "tags=$TAGS" >> $GITHUB_OUTPUT
|
echo "tags=$TAGS" >> $GITHUB_OUTPUT
|
||||||
echo "tags=$TAGS2" >> $GITHUB_OUTPUT
|
|
||||||
|
|
||||||
|
- name: Build and push Docker image
|
||||||
- name: Log in to Docker Hub account 1
|
|
||||||
uses: docker/login-action@v4
|
|
||||||
with:
|
|
||||||
username: ${{ secrets.DOCKER_USERNAME }}
|
|
||||||
password: ${{ secrets.DOCKER_PASSWORD }}
|
|
||||||
|
|
||||||
- name: Build and push to solucetechnologies/portabase
|
|
||||||
uses: docker/build-push-action@v6
|
uses: docker/build-push-action@v6
|
||||||
with:
|
with:
|
||||||
context: .
|
context: .
|
||||||
file: ${{ inputs.dockerfile }}
|
file: ${{ inputs.dockerfile }}
|
||||||
push: true
|
push: true
|
||||||
tags: ${{ steps.set-tags.outputs.tags1 }}
|
tags: ${{ steps.set-tags.outputs.tags }}
|
||||||
target: ${{ inputs.target }}
|
|
||||||
|
|
||||||
- name: Log in to Docker Hub account 2
|
|
||||||
uses: docker/login-action@v4
|
|
||||||
with:
|
|
||||||
username: ${{ secrets.DOCKER_USERNAME_2 }}
|
|
||||||
password: ${{ secrets.DOCKER_PASSWORD_2 }}
|
|
||||||
|
|
||||||
- name: Build and push to portabase/portabase
|
|
||||||
uses: docker/build-push-action@v6
|
|
||||||
with:
|
|
||||||
context: .
|
|
||||||
file: ${{ inputs.dockerfile }}
|
|
||||||
push: true
|
|
||||||
tags: ${{ steps.set-tags.outputs.tags2 }}
|
|
||||||
target: ${{ inputs.target }}
|
target: ${{ inputs.target }}
|
||||||
|
|||||||
@@ -17,8 +17,6 @@ jobs:
|
|||||||
secrets:
|
secrets:
|
||||||
DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }}
|
DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }}
|
||||||
DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }}
|
DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }}
|
||||||
DOCKER_USERNAME_2: ${{ secrets.DOCKER_USERNAME_2 }}
|
|
||||||
DOCKER_PASSWORD_2: ${{ secrets.DOCKER_PASSWORD_2 }}
|
|
||||||
|
|
||||||
github_release:
|
github_release:
|
||||||
needs: docker_publish
|
needs: docker_publish
|
||||||
|
|||||||
@@ -18,8 +18,6 @@ jobs:
|
|||||||
secrets:
|
secrets:
|
||||||
DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }}
|
DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }}
|
||||||
DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }}
|
DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }}
|
||||||
DOCKER_USERNAME_2: ${{ secrets.DOCKER_USERNAME_2 }}
|
|
||||||
DOCKER_PASSWORD_2: ${{ secrets.DOCKER_PASSWORD_2 }}
|
|
||||||
|
|
||||||
github_release:
|
github_release:
|
||||||
needs: docker_publish
|
needs: docker_publish
|
||||||
|
|||||||
+1
-1
@@ -26,5 +26,5 @@ keywords:
|
|||||||
- web-ui
|
- web-ui
|
||||||
- agent
|
- agent
|
||||||
license: Apache-2.0
|
license: Apache-2.0
|
||||||
version: 1.1.12-rc.2
|
version: 1.1.11
|
||||||
date-released: "2026-01-11"
|
date-released: "2026-01-11"
|
||||||
|
|||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "portabase",
|
"name": "portabase",
|
||||||
"version": "1.1.12-rc.2",
|
"version": "1.1.11",
|
||||||
"private": true,
|
"private": true,
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "next dev --turbopack -p 8887",
|
"dev": "next dev --turbopack -p 8887",
|
||||||
|
|||||||
@@ -95,6 +95,8 @@ export const EmailForm = (props: EmailFormProps) => {
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<TooltipProvider>
|
<TooltipProvider>
|
||||||
|
<Card>
|
||||||
|
<CardContent>
|
||||||
<Form
|
<Form
|
||||||
form={form}
|
form={form}
|
||||||
className="flex flex-col gap-4 mt-3"
|
className="flex flex-col gap-4 mt-3"
|
||||||
@@ -180,6 +182,23 @@ export const EmailForm = (props: EmailFormProps) => {
|
|||||||
)}
|
)}
|
||||||
/>
|
/>
|
||||||
<div className="flex justify-between gap-4">
|
<div className="flex justify-between gap-4">
|
||||||
|
|
||||||
|
{/*{props.defaultValues?.smtpFrom && (*/}
|
||||||
|
{/* <ButtonWithLoading*/}
|
||||||
|
{/* type="button"*/}
|
||||||
|
{/* isPending={mutationSendEmailTest.isPending}*/}
|
||||||
|
{/* onClick={async () => {*/}
|
||||||
|
{/* await mutationSendEmailTest.mutateAsync();*/}
|
||||||
|
{/* }}*/}
|
||||||
|
{/* icon={<Send/>}*/}
|
||||||
|
{/* size="default"*/}
|
||||||
|
{/* className="bg-green-600 hover:bg-green-700 text-white font-medium shadow-sm transition-all"*/}
|
||||||
|
|
||||||
|
{/* >Send email test</ButtonWithLoading>*/}
|
||||||
|
{/*)}*/}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
{props.defaultValues?.smtpFrom && (
|
{props.defaultValues?.smtpFrom && (
|
||||||
<Tooltip>
|
<Tooltip>
|
||||||
<TooltipTrigger asChild>
|
<TooltipTrigger asChild>
|
||||||
@@ -208,13 +227,14 @@ export const EmailForm = (props: EmailFormProps) => {
|
|||||||
)}
|
)}
|
||||||
</Tooltip>
|
</Tooltip>
|
||||||
)}
|
)}
|
||||||
<div className="flex justify-end">
|
|
||||||
<Button type="submit">
|
<Button
|
||||||
Save
|
type="submit"
|
||||||
</Button>
|
>Save</Button>
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</Form>
|
</Form>
|
||||||
|
</CardContent>
|
||||||
|
</Card>
|
||||||
</TooltipProvider>
|
</TooltipProvider>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -8,8 +8,6 @@ import {formatDateLastContact} from "@/utils/date-formatting";
|
|||||||
import {AgentWith} from "@/db/schema/08_agent";
|
import {AgentWith} from "@/db/schema/08_agent";
|
||||||
import {Activity, ChevronRight, Copy, Check, Fingerprint, Server, Database, ShieldCheck} from "lucide-react";
|
import {Activity, ChevronRight, Copy, Check, Fingerprint, Server, Database, ShieldCheck} from "lucide-react";
|
||||||
import {Badge} from "@/components/ui/badge";
|
import {Badge} from "@/components/ui/badge";
|
||||||
import {truncateWords} from "@/utils/text";
|
|
||||||
import {useIsMobile} from "@/hooks/use-mobile";
|
|
||||||
|
|
||||||
export type agentCardProps = {
|
export type agentCardProps = {
|
||||||
data: AgentWith;
|
data: AgentWith;
|
||||||
@@ -17,7 +15,6 @@ export type agentCardProps = {
|
|||||||
|
|
||||||
export const AgentCard = (props: agentCardProps) => {
|
export const AgentCard = (props: agentCardProps) => {
|
||||||
const {data: agent} = props;
|
const {data: agent} = props;
|
||||||
const isMobile = useIsMobile();
|
|
||||||
const [isCopied, setIsCopied] = useState(false);
|
const [isCopied, setIsCopied] = useState(false);
|
||||||
|
|
||||||
const handleCopy = (e: React.MouseEvent) => {
|
const handleCopy = (e: React.MouseEvent) => {
|
||||||
@@ -41,7 +38,7 @@ export const AgentCard = (props: agentCardProps) => {
|
|||||||
<div className="flex-1 min-w-0 flex flex-col gap-1.5">
|
<div className="flex-1 min-w-0 flex flex-col gap-1.5">
|
||||||
<div className="flex items-center gap-3">
|
<div className="flex items-center gap-3">
|
||||||
<h3 className="text-lg font-black text-foreground group-hover:text-primary transition-colors truncate tracking-tight ">
|
<h3 className="text-lg font-black text-foreground group-hover:text-primary transition-colors truncate tracking-tight ">
|
||||||
{isMobile ? truncateWords(agent.name, 2) : agent.name}
|
{agent.name}
|
||||||
</h3>
|
</h3>
|
||||||
{agent.version && (
|
{agent.version && (
|
||||||
<Badge variant="secondary" className="h-5 px-1.5 text-[10px] font-bold tracking-wider">
|
<Badge variant="secondary" className="h-5 px-1.5 text-[10px] font-bold tracking-wider">
|
||||||
|
|||||||
@@ -57,53 +57,54 @@ export const AgentForm = (props: agentFormProps) => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<TooltipProvider>
|
<TooltipProvider>
|
||||||
<Form
|
<Card>
|
||||||
form={form}
|
<CardContent>
|
||||||
className="flex flex-col gap-4"
|
<Form
|
||||||
onSubmit={async (values) => {
|
form={form}
|
||||||
await mutation.mutateAsync(values);
|
className="flex flex-col gap-4 mt-3"
|
||||||
}}
|
onSubmit={async (values) => {
|
||||||
>
|
await mutation.mutateAsync(values);
|
||||||
<FormField
|
}}
|
||||||
control={form.control}
|
>
|
||||||
name="name"
|
<FormField
|
||||||
defaultValue=""
|
control={form.control}
|
||||||
render={({field}) => (
|
name="name"
|
||||||
<FormItem>
|
defaultValue=""
|
||||||
<FormLabel>Name</FormLabel>
|
render={({field}) => (
|
||||||
<FormControl>
|
<FormItem>
|
||||||
<Input placeholder="Agent 1" {...field} />
|
<FormLabel>Name</FormLabel>
|
||||||
</FormControl>
|
<FormControl>
|
||||||
<FormDescription>Your agent project name</FormDescription>
|
<Input placeholder="Agent 1" {...field} />
|
||||||
<FormMessage/>
|
</FormControl>
|
||||||
</FormItem>
|
<FormDescription>Your agent project name</FormDescription>
|
||||||
)}
|
<FormMessage/>
|
||||||
/>
|
</FormItem>
|
||||||
<FormField
|
)}
|
||||||
control={form.control}
|
/>
|
||||||
defaultValue=""
|
<FormField
|
||||||
name="description"
|
control={form.control}
|
||||||
render={({field}) => (
|
defaultValue=""
|
||||||
<FormItem>
|
name="description"
|
||||||
<FormLabel>Description</FormLabel>
|
render={({field}) => (
|
||||||
<FormControl>
|
<FormItem>
|
||||||
<Input placeholder="This agent is for the client exemple.com" {...field}
|
<FormLabel>Description</FormLabel>
|
||||||
value={field.value ?? ""}/>
|
<FormControl>
|
||||||
</FormControl>
|
<Input placeholder="This agent is for the client exemple.com" {...field}
|
||||||
<FormDescription>Enter your project agent description</FormDescription>
|
value={field.value ?? ""}/>
|
||||||
<FormMessage/>
|
</FormControl>
|
||||||
</FormItem>
|
<FormDescription>Enter your project agent description</FormDescription>
|
||||||
)}
|
<FormMessage/>
|
||||||
/>
|
</FormItem>
|
||||||
<div className="flex justify-end">
|
)}
|
||||||
<Button type="submit">
|
/>
|
||||||
{isCreate ? "Create" : "Update"}
|
<Button>{isCreate ? `Create agent` : `Save agent`}</Button>
|
||||||
</Button>
|
</Form>
|
||||||
</div>
|
</CardContent>
|
||||||
</Form>
|
</Card>
|
||||||
|
|
||||||
</TooltipProvider>
|
</TooltipProvider>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -78,6 +78,9 @@ export const ProjectForm = (props: projectFormProps) => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
<Card>
|
||||||
|
<CardHeader></CardHeader>
|
||||||
|
<CardContent>
|
||||||
<Form
|
<Form
|
||||||
form={form}
|
form={form}
|
||||||
className="flex flex-col gap-4"
|
className="flex flex-col gap-4"
|
||||||
@@ -121,11 +124,9 @@ export const ProjectForm = (props: projectFormProps) => {
|
|||||||
</FormItem>
|
</FormItem>
|
||||||
)}
|
)}
|
||||||
/>
|
/>
|
||||||
<div className="flex justify-end">
|
<Button>{isCreate ? `Create Project` : `Update Project`}</Button>
|
||||||
<Button type="submit">
|
|
||||||
{isCreate ? "Create" : "Update"}
|
|
||||||
</Button>
|
|
||||||
</div>
|
|
||||||
</Form>
|
</Form>
|
||||||
|
</CardContent>
|
||||||
|
</Card>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user