This commit is contained in:
@@ -1,228 +0,0 @@
|
|||||||
name: Build and Docker Pipeline
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches: [main]
|
|
||||||
workflow_dispatch:
|
|
||||||
schedule:
|
|
||||||
- cron: '0 2 * * *' # 每天凌晨2点运行
|
|
||||||
|
|
||||||
env:
|
|
||||||
REGISTRY: gitea.tailnet-68f9.ts.net
|
|
||||||
IMAGE_NAME: ben/modelscope-builder
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
# 任务1: 环境检查和基础构建
|
|
||||||
build-info:
|
|
||||||
runs-on: ubuntu
|
|
||||||
steps:
|
|
||||||
- name: Checkout code
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
|
|
||||||
- name: Runner Environment Info
|
|
||||||
run: |
|
|
||||||
echo "=== DSW Runner 环境信息 ==="
|
|
||||||
echo "主机名: $(hostname)"
|
|
||||||
echo "操作系统: $(uname -a)"
|
|
||||||
echo "CPU 信息:"
|
|
||||||
nproc
|
|
||||||
cat /proc/cpuinfo | grep "model name" | head -1
|
|
||||||
echo "内存信息:"
|
|
||||||
free -h
|
|
||||||
echo "磁盘空间:"
|
|
||||||
df -h
|
|
||||||
echo "当前时间: $(date)"
|
|
||||||
echo "运行用户: $(whoami)"
|
|
||||||
echo "工作目录: $(pwd)"
|
|
||||||
|
|
||||||
- name: Check Tools Availability
|
|
||||||
run: |
|
|
||||||
echo "=== 检查可用工具 ==="
|
|
||||||
echo "Git 版本:"
|
|
||||||
git --version
|
|
||||||
echo "Docker 版本:"
|
|
||||||
docker --version || echo "Docker 未安装"
|
|
||||||
echo "Go 版本:"
|
|
||||||
go version || echo "Go 未安装"
|
|
||||||
echo "Node.js 版本:"
|
|
||||||
node --version || echo "Node.js 未安装"
|
|
||||||
echo "Python 版本:"
|
|
||||||
python3 --version || echo "Python3 未安装"
|
|
||||||
echo "=== 网络连通性测试 ==="
|
|
||||||
ping -c 2 gitea.tailnet-68f9.ts.net || echo "无法 ping Gitea"
|
|
||||||
curl -s -o /dev/null -w "Gitea HTTP 状态: %{http_code}\n" https://gitea.tailnet-68f9.ts.net || echo "无法访问 Gitea HTTPS"
|
|
||||||
|
|
||||||
# 任务2: 构建一个示例 Go 应用
|
|
||||||
build-go-app:
|
|
||||||
runs-on: ubuntu
|
|
||||||
needs: build-info
|
|
||||||
steps:
|
|
||||||
- name: Checkout code
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
|
|
||||||
- name: Setup Go
|
|
||||||
uses: actions/setup-go@v5
|
|
||||||
with:
|
|
||||||
go-version: '1.21'
|
|
||||||
|
|
||||||
- name: Create Sample Go App
|
|
||||||
run: |
|
|
||||||
mkdir -p ./sample-app
|
|
||||||
cat > ./sample-app/main.go << 'EOF'
|
|
||||||
package main
|
|
||||||
|
|
||||||
import (
|
|
||||||
"fmt"
|
|
||||||
"net/http"
|
|
||||||
"os"
|
|
||||||
"time"
|
|
||||||
)
|
|
||||||
|
|
||||||
func main() {
|
|
||||||
port := os.Getenv("PORT")
|
|
||||||
if port == "" {
|
|
||||||
port = "8080"
|
|
||||||
}
|
|
||||||
|
|
||||||
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
|
|
||||||
fmt.Fprintf(w, "Hello from DSW Runner! Time: %s\n", time.Now().Format(time.RFC3339))
|
|
||||||
})
|
|
||||||
|
|
||||||
http.HandleFunc("/health", func(w http.ResponseWriter, r *http.Request) {
|
|
||||||
w.WriteHeader(http.StatusOK)
|
|
||||||
fmt.Fprintln(w, "OK")
|
|
||||||
})
|
|
||||||
|
|
||||||
fmt.Printf("Server starting on port %s...\n", port)
|
|
||||||
if err := http.ListenAndServe(":"+port, nil); err != nil {
|
|
||||||
fmt.Printf("Server error: %v\n", err)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
EOF
|
|
||||||
|
|
||||||
cat > ./sample-app/go.mod << 'EOF'
|
|
||||||
module sample-app
|
|
||||||
|
|
||||||
go 1.21
|
|
||||||
EOF
|
|
||||||
|
|
||||||
- name: Build Go App
|
|
||||||
run: |
|
|
||||||
cd ./sample-app
|
|
||||||
echo "开始构建 Go 应用..."
|
|
||||||
go build -v -o app main.go
|
|
||||||
echo "构建完成!"
|
|
||||||
ls -lh app
|
|
||||||
file app
|
|
||||||
|
|
||||||
- name: Test Binary
|
|
||||||
run: |
|
|
||||||
cd ./sample-app
|
|
||||||
echo "测试二进制文件..."
|
|
||||||
./app &
|
|
||||||
APP_PID=$!
|
|
||||||
sleep 2
|
|
||||||
curl -s http://localhost:8080/ || echo "服务测试失败"
|
|
||||||
kill $APP_PID || true
|
|
||||||
echo "测试完成"
|
|
||||||
|
|
||||||
- name: Upload Build Artifact
|
|
||||||
uses: actions/upload-artifact@v4
|
|
||||||
with:
|
|
||||||
name: go-app-binary
|
|
||||||
path: ./sample-app/app
|
|
||||||
retention-days: 7
|
|
||||||
|
|
||||||
# 任务3: Docker 镜像构建(如果 Docker 可用)
|
|
||||||
build-docker:
|
|
||||||
runs-on: ubuntu
|
|
||||||
needs: build-go-app
|
|
||||||
steps:
|
|
||||||
- name: Checkout code
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
|
|
||||||
- name: Download Build Artifact
|
|
||||||
uses: actions/download-artifact@v4
|
|
||||||
with:
|
|
||||||
name: go-app-binary
|
|
||||||
path: ./sample-app/
|
|
||||||
|
|
||||||
- name: Make Binary Executable
|
|
||||||
run: chmod +x ./sample-app/app
|
|
||||||
|
|
||||||
- name: Create Dockerfile
|
|
||||||
run: |
|
|
||||||
cat > ./sample-app/Dockerfile << 'EOF'
|
|
||||||
FROM alpine:latest
|
|
||||||
|
|
||||||
RUN apk add --no-cache ca-certificates
|
|
||||||
|
|
||||||
WORKDIR /app
|
|
||||||
COPY app /app/
|
|
||||||
|
|
||||||
EXPOSE 8080
|
|
||||||
|
|
||||||
ENV PORT=8080
|
|
||||||
|
|
||||||
CMD ["./app"]
|
|
||||||
EOF
|
|
||||||
|
|
||||||
- name: Build Docker Image
|
|
||||||
run: |
|
|
||||||
if command -v docker &> /dev/null; then
|
|
||||||
echo "Docker 可用,开始构建镜像..."
|
|
||||||
cd ./sample-app
|
|
||||||
docker build -t ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ github.sha }} .
|
|
||||||
docker tag ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ github.sha }} ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:latest
|
|
||||||
echo "镜像构建完成!"
|
|
||||||
docker images | grep ${{ env.IMAGE_NAME }}
|
|
||||||
else
|
|
||||||
echo "Docker 不可用,跳过镜像构建"
|
|
||||||
fi
|
|
||||||
|
|
||||||
- name: Test Docker Container
|
|
||||||
run: |
|
|
||||||
if command -v docker &> /dev/null; then
|
|
||||||
echo "测试 Docker 容器..."
|
|
||||||
docker run -d --name test-app -p 8081:8080 ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:latest
|
|
||||||
sleep 3
|
|
||||||
curl -s http://localhost:8081/ || echo "容器测试失败"
|
|
||||||
docker stop test-app
|
|
||||||
docker rm test-app
|
|
||||||
echo "容器测试完成"
|
|
||||||
fi
|
|
||||||
|
|
||||||
- name: Push Docker Image (if credentials available)
|
|
||||||
run: |
|
|
||||||
if command -v docker &> /dev/null; then
|
|
||||||
echo "尝试推送镜像到仓库..."
|
|
||||||
echo "注意: 需要配置 Docker 登录凭证"
|
|
||||||
# docker push ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ github.sha }}
|
|
||||||
# docker push ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:latest
|
|
||||||
fi
|
|
||||||
|
|
||||||
# 任务4: 清理和报告
|
|
||||||
cleanup-and-report:
|
|
||||||
runs-on: ubuntu
|
|
||||||
needs: [build-info, build-go-app, build-docker]
|
|
||||||
if: always()
|
|
||||||
steps:
|
|
||||||
- name: Generate Report
|
|
||||||
run: |
|
|
||||||
echo "=== 构建报告 ==="
|
|
||||||
echo "工作流运行时间: ${{ github.run_duration }}"
|
|
||||||
echo "触发事件: ${{ github.event_name }}"
|
|
||||||
echo "提交 SHA: ${{ github.sha }}"
|
|
||||||
echo "分支: ${{ github.ref }}"
|
|
||||||
echo "=== 任务状态 ==="
|
|
||||||
echo "build-info: ${{ needs.build-info.result }}"
|
|
||||||
echo "build-go-app: ${{ needs.build-go-app.result }}"
|
|
||||||
echo "build-docker: ${{ needs.build-docker.result }}"
|
|
||||||
|
|
||||||
- name: Cleanup Docker
|
|
||||||
run: |
|
|
||||||
if command -v docker &> /dev/null; then
|
|
||||||
echo "清理 Docker 资源..."
|
|
||||||
docker system prune -f || true
|
|
||||||
echo "清理完成"
|
|
||||||
fi
|
|
||||||
@@ -1,21 +0,0 @@
|
|||||||
name: Hello World Test
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches: [main]
|
|
||||||
workflow_dispatch:
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
hello:
|
|
||||||
runs-on: ubuntu
|
|
||||||
steps:
|
|
||||||
- name: Checkout
|
|
||||||
uses: actions/checkout@v3
|
|
||||||
|
|
||||||
- name: Say Hello
|
|
||||||
run: |
|
|
||||||
echo "Hello from DSW Runner!"
|
|
||||||
echo "Current time: $(date)"
|
|
||||||
echo "Hostname: $(hostname)"
|
|
||||||
echo "Working directory: $(pwd)"
|
|
||||||
ls -la
|
|
||||||
24
.gitea/workflows/no-action-test.yml
Normal file
24
.gitea/workflows/no-action-test.yml
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
name: No Action Test
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches: [main]
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
test:
|
||||||
|
runs-on: ubuntu:host
|
||||||
|
steps:
|
||||||
|
- run: |
|
||||||
|
echo "========================================"
|
||||||
|
echo "TEST START"
|
||||||
|
echo "========================================"
|
||||||
|
echo "Step 1: Hello"
|
||||||
|
echo "Step 2: $(date)"
|
||||||
|
echo "Step 3: $(whoami)"
|
||||||
|
echo "Step 4: $(hostname)"
|
||||||
|
echo "Step 5: $(pwd)"
|
||||||
|
echo "Step 6: $(uname -a)"
|
||||||
|
echo "========================================"
|
||||||
|
echo "TEST END"
|
||||||
|
echo "========================================"
|
||||||
@@ -1,18 +0,0 @@
|
|||||||
name: Pure Shell Test
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches: [main]
|
|
||||||
workflow_dispatch:
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
test:
|
|
||||||
runs-on: ubuntu:host
|
|
||||||
steps:
|
|
||||||
- run: echo "Step 1 - Hello from Runner"
|
|
||||||
- run: echo "Step 2 - Current dir is $(pwd)"
|
|
||||||
- run: echo "Step 3 - User is $(whoami)"
|
|
||||||
- run: echo "Step 4 - Time is $(date)"
|
|
||||||
- run: |
|
|
||||||
echo "Step 5 - System info"
|
|
||||||
uname -a
|
|
||||||
@@ -1,230 +0,0 @@
|
|||||||
name: Simple DSW Build Test
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches: [main]
|
|
||||||
workflow_dispatch:
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
# 任务1: 基础环境检查
|
|
||||||
check-env:
|
|
||||||
runs-on: ubuntu
|
|
||||||
steps:
|
|
||||||
- name: Print Environment
|
|
||||||
run: |
|
|
||||||
echo "========================================"
|
|
||||||
echo "DSW Runner 环境检查"
|
|
||||||
echo "========================================"
|
|
||||||
echo "时间: $(date)"
|
|
||||||
echo "主机名: $(hostname)"
|
|
||||||
echo "当前目录: $(pwd)"
|
|
||||||
echo "用户: $(whoami)"
|
|
||||||
echo ""
|
|
||||||
echo "=== 系统信息 ==="
|
|
||||||
uname -a
|
|
||||||
echo ""
|
|
||||||
echo "=== CPU ==="
|
|
||||||
nproc
|
|
||||||
cat /proc/cpuinfo | grep "model name" | head -1
|
|
||||||
echo ""
|
|
||||||
echo "=== 内存 ==="
|
|
||||||
free -h
|
|
||||||
echo ""
|
|
||||||
echo "=== 磁盘 ==="
|
|
||||||
df -h
|
|
||||||
echo "========================================"
|
|
||||||
|
|
||||||
# 任务2: 检查工具
|
|
||||||
check-tools:
|
|
||||||
runs-on: ubuntu
|
|
||||||
needs: check-env
|
|
||||||
steps:
|
|
||||||
- name: Check Available Tools
|
|
||||||
run: |
|
|
||||||
echo "=== 检查可用工具 ==="
|
|
||||||
|
|
||||||
echo -n "Git: "
|
|
||||||
git --version 2>/dev/null || echo "未安装"
|
|
||||||
|
|
||||||
echo -n "Docker: "
|
|
||||||
docker --version 2>/dev/null || echo "未安装"
|
|
||||||
|
|
||||||
echo -n "Go: "
|
|
||||||
go version 2>/dev/null || echo "未安装"
|
|
||||||
|
|
||||||
echo -n "Node.js: "
|
|
||||||
node --version 2>/dev/null || echo "未安装"
|
|
||||||
|
|
||||||
echo -n "Python3: "
|
|
||||||
python3 --version 2>/dev/null || echo "未安装"
|
|
||||||
|
|
||||||
echo -n "Make: "
|
|
||||||
make --version 2>/dev/null | head -1 || echo "未安装"
|
|
||||||
|
|
||||||
echo -n "GCC: "
|
|
||||||
gcc --version 2>/dev/null | head -1 || echo "未安装"
|
|
||||||
|
|
||||||
echo "=== PATH ==="
|
|
||||||
echo $PATH
|
|
||||||
|
|
||||||
# 任务3: 网络测试(只测内网)
|
|
||||||
network-test:
|
|
||||||
runs-on: ubuntu
|
|
||||||
needs: check-env
|
|
||||||
steps:
|
|
||||||
- name: Network Connectivity
|
|
||||||
run: |
|
|
||||||
echo "=== 网络连通性测试(仅内网) ==="
|
|
||||||
|
|
||||||
echo "测试访问 Gitea:"
|
|
||||||
curl -s -o /dev/null -w "状态码: %{http_code}\n" --max-time 10 https://gitea.tailnet-68f9.ts.net || echo "❌ 无法访问"
|
|
||||||
|
|
||||||
echo ""
|
|
||||||
echo "测试 DNS 解析:"
|
|
||||||
nslookup gitea.tailnet-68f9.ts.net || echo "DNS 解析失败"
|
|
||||||
|
|
||||||
# 任务4: 实际工作 - 本地构建
|
|
||||||
build-sample:
|
|
||||||
runs-on: ubuntu
|
|
||||||
needs: [check-env, check-tools]
|
|
||||||
steps:
|
|
||||||
- name: Build Simple C Program
|
|
||||||
run: |
|
|
||||||
echo "=== 编译简单 C 程序 ==="
|
|
||||||
cat > /tmp/hello.c << 'EOF'
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
|
|
||||||
int main() {
|
|
||||||
printf("Hello from DSW Runner!\n");
|
|
||||||
printf("Build time: %s\n", __TIME__);
|
|
||||||
printf("Date: %s\n", __DATE__);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
EOF
|
|
||||||
|
|
||||||
if command -v gcc &> /dev/null; then
|
|
||||||
gcc -o /tmp/hello /tmp/hello.c && /tmp/hello
|
|
||||||
else
|
|
||||||
echo "GCC 未安装,跳过编译"
|
|
||||||
fi
|
|
||||||
|
|
||||||
- name: Python Script Test
|
|
||||||
run: |
|
|
||||||
echo "=== 运行 Python 脚本 ==="
|
|
||||||
python3 << 'EOF'
|
|
||||||
import platform
|
|
||||||
import datetime
|
|
||||||
import os
|
|
||||||
|
|
||||||
print("Python 系统信息:")
|
|
||||||
print(f" 系统: {platform.system()}")
|
|
||||||
print(f" 版本: {platform.release()}")
|
|
||||||
print(f" 机器: {platform.machine()}")
|
|
||||||
print(f" 处理器: {platform.processor()}")
|
|
||||||
print(f" Python 版本: {platform.python_version()}")
|
|
||||||
print(f" 当前时间: {datetime.datetime.now()}")
|
|
||||||
print(f" 工作目录: {os.getcwd()}")
|
|
||||||
print(f" 用户: {os.getenv('USER', 'unknown')}")
|
|
||||||
print("\n✅ Python 脚本执行成功!")
|
|
||||||
EOF
|
|
||||||
|
|
||||||
- name: Create Artifact
|
|
||||||
run: |
|
|
||||||
echo "=== 创建构建产物 ==="
|
|
||||||
mkdir -p /tmp/artifacts
|
|
||||||
echo "Build completed at $(date)" > /tmp/artifacts/build-info.txt
|
|
||||||
echo "Runner: $(hostname)" >> /tmp/artifacts/build-info.txt
|
|
||||||
echo "User: $(whoami)" >> /tmp/artifacts/build-info.txt
|
|
||||||
cat /tmp/artifacts/build-info.txt
|
|
||||||
|
|
||||||
# 任务5: Docker 测试(如果可用,使用本地镜像)
|
|
||||||
docker-test:
|
|
||||||
runs-on: ubuntu
|
|
||||||
needs: check-tools
|
|
||||||
steps:
|
|
||||||
- name: Test Docker
|
|
||||||
run: |
|
|
||||||
echo "=== Docker 测试 ==="
|
|
||||||
if command -v docker &> /dev/null; then
|
|
||||||
echo "Docker 版本:"
|
|
||||||
docker --version
|
|
||||||
|
|
||||||
echo ""
|
|
||||||
echo "Docker 信息:"
|
|
||||||
docker info 2>/dev/null | head -20 || echo "无法获取 Docker 信息"
|
|
||||||
|
|
||||||
echo ""
|
|
||||||
echo "本地镜像列表:"
|
|
||||||
docker images 2>/dev/null || echo "无法列出镜像"
|
|
||||||
|
|
||||||
echo ""
|
|
||||||
echo "运行中的容器:"
|
|
||||||
docker ps 2>/dev/null || echo "无法列出容器"
|
|
||||||
else
|
|
||||||
echo "Docker 未安装,跳过测试"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# 任务6: 压力测试 - 计算密集型任务
|
|
||||||
stress-test:
|
|
||||||
runs-on: ubuntu
|
|
||||||
needs: [check-env, check-tools]
|
|
||||||
steps:
|
|
||||||
- name: CPU Stress Test
|
|
||||||
run: |
|
|
||||||
echo "=== CPU 压力测试 ==="
|
|
||||||
python3 << 'EOF'
|
|
||||||
import time
|
|
||||||
import multiprocessing
|
|
||||||
|
|
||||||
def cpu_task(n):
|
|
||||||
"""计算斐波那契数列"""
|
|
||||||
if n <= 1:
|
|
||||||
return n
|
|
||||||
a, b = 0, 1
|
|
||||||
for _ in range(2, n + 1):
|
|
||||||
a, b = b, a + b
|
|
||||||
return b
|
|
||||||
|
|
||||||
print(f"CPU 核心数: {multiprocessing.cpu_count()}")
|
|
||||||
print("开始计算...")
|
|
||||||
|
|
||||||
start = time.time()
|
|
||||||
# 计算第 35 个斐波那契数 1000 次
|
|
||||||
for i in range(1000):
|
|
||||||
result = cpu_task(35)
|
|
||||||
|
|
||||||
elapsed = time.time() - start
|
|
||||||
print(f"计算完成! 耗时: {elapsed:.2f} 秒")
|
|
||||||
print(f"结果: {result}")
|
|
||||||
print("✅ CPU 压力测试通过!")
|
|
||||||
EOF
|
|
||||||
|
|
||||||
- name: Memory Test
|
|
||||||
run: |
|
|
||||||
echo "=== 内存测试 ==="
|
|
||||||
python3 << 'EOF'
|
|
||||||
import sys
|
|
||||||
|
|
||||||
# 创建大列表测试内存
|
|
||||||
print("分配 100MB 内存...")
|
|
||||||
big_list = [0] * (100 * 1024 * 1024 // 8) # 100MB
|
|
||||||
print(f"列表大小: {len(big_list)} 个元素")
|
|
||||||
print(f"内存使用: ~100MB")
|
|
||||||
print("✅ 内存测试通过!")
|
|
||||||
EOF
|
|
||||||
|
|
||||||
# 任务7: 总结报告
|
|
||||||
report:
|
|
||||||
runs-on: ubuntu
|
|
||||||
needs: [check-env, check-tools, network-test, build-sample, docker-test, stress-test]
|
|
||||||
if: always()
|
|
||||||
steps:
|
|
||||||
- name: Generate Report
|
|
||||||
run: |
|
|
||||||
echo "========================================"
|
|
||||||
echo "DSW Runner 测试报告"
|
|
||||||
echo "========================================"
|
|
||||||
echo "所有任务已完成!"
|
|
||||||
echo "运行时间: $(date)"
|
|
||||||
echo "========================================"
|
|
||||||
Reference in New Issue
Block a user