This commit is contained in:
apple
2025-10-16 16:34:46 +08:00
parent d91c1070c9
commit b08ad6a44f
12 changed files with 86 additions and 3893 deletions

View File

@@ -1,45 +0,0 @@
name: Publish Image
on:
push:
tags:
- 'v*'
env:
REGISTRY: ghcr.io
IMAGE_NAME: ${{ github.repository }}
jobs:
build:
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Log in to the Container registry
uses: docker/login-action@65b78e6e13532edd9afa3aa52ac7964289d1a9c1
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Extract Docker metadata
id: meta
uses: docker/metadata-action@v4
with:
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
tags: |
type=ref,event=branch
type=semver,pattern={{raw}}
- name: Build and push Docker image
uses: docker/build-push-action@f2a1d5e99d037542a71f64918e516c093c6f3fc4
with:
context: .
push: ${{ github.event_name != 'pull_request' }}
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}

View File

@@ -1,62 +0,0 @@
name: Build and Deploy Web
on:
push:
branches: ["main"]
paths:
- web/**
- ./bootstrap.sh
workflow_dispatch:
permissions:
contents: read
pages: write
id-token: write
concurrency:
group: "pages"
cancel-in-progress: true
jobs:
build:
runs-on: ubuntu-latest
defaults:
run:
working-directory: ./web
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Install Node.js
uses: actions/setup-node@v3
with:
node-version: 16
cache: 'npm'
cache-dependency-path: 'web/package-lock.json'
- name: Install dependencies
run: npm install
- name: build
env:
BASE_PATH: ''
run: |
npm run build
touch build/.nojekyll
cp ../bootstrap.sh build/bootstrap.sh
echo "shokku.dev" > build/CNAME
- name: Upload artifact
uses: actions/upload-pages-artifact@v1
with:
path: ./web/build
deploy:
runs-on: ubuntu-latest
needs: build
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
steps:
- uses: actions/deploy-pages@v1
id: deployment

2
.gitignore vendored
View File

@@ -9,3 +9,5 @@ cmd/shokku/dist
test.db
./shokku
.idea
pnpm-lock.yaml
package-lock.json

View File

@@ -1,18 +1,22 @@
FROM node:alpine AS npm_builder
FROM ccr.ccs.tencentyun.com/miaogai/node:alpine AS npmbuilder
WORKDIR /app
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories
RUN npm config set registry https://registry.npmmirror.com
RUN apk update && apk add --no-cache pnpm
COPY ui ./ui
RUN pnpm --prefix /app/ui install
RUN cd /app/ui && pnpm install && pnpm /app/ui run build
RUN pnpm --prefix /app/ui run build
FROM golang:alpine AS go_builder
FROM ccr.ccs.tencentyun.com/miaogai/golang:alpine AS gobuilder
WORKDIR /app
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories
RUN apk update && apk add --no-cache git
COPY cmd ./cmd
@@ -21,7 +25,10 @@ COPY go.mod ./go.mod
COPY internal ./internal
COPY --from=npm_builder /app/ui/dist ./cmd/shokku/dist
COPY --from=npmbuilder /app/ui/dist ./cmd/shokku/dist
# 保留 Go 代理设置
ENV GOPROXY=https://goproxy.cn,direct
RUN go get -d -v ./...
@@ -31,6 +38,6 @@ RUN GOOS=linux GOARCH=amd64 go build -ldflags="-w -s" -o /go/bin/shokku ./cmd/sh
FROM gcr.io/distroless/static:nonroot
COPY --from=go_builder /go/bin/shokku /go/bin/shokku
COPY --from=gobuilder /go/bin/shokku /go/bin/shokku
ENTRYPOINT ["/go/bin/shokku"]

View File

@@ -10,7 +10,7 @@ DOKKU_STORAGE_DIR="/var/lib/dokku/data/storage/"
SHOKKU_DATA_DIR="$DOKKU_STORAGE_DIR/shokku"
SHOKKU_APP_DATA_MOUNT_PATH="$SHOKKU_DATA_DIR:/data"
SHOKKU_VERSION=${SHOKKU_VERSION:-"latest"}
SHOKKU_IMAGE="ghcr.io/texm/shokku:$SHOKKU_VERSION"
SHOKKU_IMAGE="ccr.ccs.tencentyun.com/miaogai/shokku:$SHOKKU_VERSION"
SHOKKU_DOKKU_USER="shokkuadmin"
DISTROLESS_NONROOT_UID="65532"

58
build_and_push.sh Executable file
View File

@@ -0,0 +1,58 @@
#!/bin/bash
# Docker 镜像构建和推送脚本
# 使用方法: ./build_and_push.sh [镜像标签] [推送标志]
set -e # 遇到错误立即退出
# 配置变量
IMAGE_NAME="shokku"
REGISTRY="ccr.ccs.tencentyun.com" # 替换为您的仓库地址
NAMESPACE="miaogai" # 替换为您的命名空间
DOCKERFILE="Dockerfile"
BUILD_CONTEXT="."
# 参数处理
TAG=${1:-"latest"}
PUSH=${2:-"false"}
# 完整的镜像地址
FULL_IMAGE_NAME="${REGISTRY}/${NAMESPACE}/${IMAGE_NAME}:${TAG}"
echo "=== Docker 镜像构建和推送 ==="
echo "镜像名称: ${FULL_IMAGE_NAME}"
echo "Dockerfile: ${DOCKERFILE}"
echo "构建上下文: ${BUILD_CONTEXT}"
# 检查 Docker 是否安装
if ! command -v docker &> /dev/null; then
echo "错误: 未找到 Docker请先安装 Docker"
exit 1
fi
# 构建镜像
echo "开始构建镜像..."
docker build -t ${IMAGE_NAME}:${TAG} -f ${DOCKERFILE} ${BUILD_CONTEXT}
# 标记镜像
echo "标记镜像..."
docker tag ${IMAGE_NAME}:${TAG} ${FULL_IMAGE_NAME}
# 如果需要推送
if [ "$PUSH" = "true" ]; then
echo "登录到镜像仓库..."
# 如果使用 Docker Hub
# docker login
# 如果使用私有仓库
# docker login ${REGISTRY}
echo "推送镜像到仓库..."
docker push ${FULL_IMAGE_NAME}
echo "✅ 镜像推送完成: ${FULL_IMAGE_NAME}"
else
echo " 镜像构建完成,未推送 (使用 'true' 作为第二个参数来推送)"
fi
echo "=== 完成 ==="

View File

@@ -2,11 +2,12 @@ package api
import (
"errors"
"net/http"
"github.com/labstack/echo/v4"
"gitlab.com/texm/shokku/internal/env"
"gitlab.com/texm/shokku/internal/server/commands"
"gitlab.com/texm/shokku/internal/server/dto"
"net/http"
)
func GetCommandExecutionStatus(e *env.Env, c echo.Context) error {

View File

@@ -1,8 +1,9 @@
package dto
import (
"github.com/texm/dokku-go"
"time"
"github.com/texm/dokku-go"
)
type GetAppOverviewRequest struct {
@@ -266,7 +267,7 @@ type GetAppConfigResponse struct {
}
type SetAppConfigRequest struct {
Name string `json:"name" validate:"appName"`
Name string `json:"name" validate:"appName"`
Config map[string]string `json:"config"`
}

View File

@@ -59,7 +59,7 @@ func SyncUsersToDB(e *env.Env) error {
org := install.GetAccount().GetLogin()
temp_members, response, err = insClient.Organizations.ListMembers(ctx, org, options)
members = append(members, temp_members...)
for response.NextPage != 0 {
options := &gh.ListMembersOptions{
ListOptions: gh.ListOptions{

1663
ui/package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -10,7 +10,7 @@
"devDependencies": {
"@sveltejs/adapter-auto": "next",
"@sveltejs/adapter-static": "^3.0.10",
"@sveltejs/kit": "^2.46.4",
"@sveltejs/kit": "^2.47.0",
"@sveltejs/vite-plugin-svelte": "^6.2.1",
"@tailwindcss/postcss": "^4.1.14",
"autoprefixer": "^10.4.21",
@@ -18,15 +18,16 @@
"postcss": "^8.5.6",
"prettier": "^3.6.2",
"prettier-plugin-svelte": "^3.4.0",
"svelte": "^5.39.11",
"tailwindcss": "^4.1.14"
"svelte": "^5.40.1",
"tailwindcss": "^4.1.14",
"vite": "^7.1.10"
},
"type": "module",
"dependencies": {
"@rollup/rollup-darwin-arm64": "^4.52.4",
"@sveltestack/svelte-query": "^1.6.0",
"@tabler/icons-svelte": "^3.35.0",
"daisyui": "^5.1.31",
"daisyui": "^5.3.3",
"js-cookie": "^3.0.5",
"jwt-decode": "^4.0.0",
"svelte-file-dropzone": "^2.0.9",

2107
ui/pnpm-lock.yaml generated

File diff suppressed because it is too large Load Diff