Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
116e00b
feat(leases): 租约面板 UI 优化 + 绑定 API + Dev Build CI
Mar 10, 2026
aa591a0
fix(ci): Docker tag 仓库名转小写,修复 buildx 构建失败
Mar 10, 2026
1e2202e
feat(theme): 新增暗黑主题 + 主题切换按钮
Mar 10, 2026
3280739
feat(routing): 租约到期前自动续期 + 相对时间支持未来时间
Mar 10, 2026
3ef81c1
feat(data): 平台与订阅配置导入导出功能
Mar 10, 2026
22c35ab
fix(data): 修复导入覆盖 remote 订阅时 content 字段报错
Mar 11, 2026
354eab1
fix(webui): 修复 importData 类型错误导致前端编译失败
Mar 11, 2026
9748d25
fix(data): 修复导入覆盖平台时 region_filters/regex_filters null 报错
Mar 11, 2026
66a2e51
Merge remote-tracking branch 'upstream/master'
Apr 2, 2026
a67519f
Merge branch 'Resinat:master' into master
ambiel9687 Apr 5, 2026
23b21b8
Merge branch 'Resinat:master' into master
ambiel9687 May 11, 2026
3f74d76
节点池支持租约数展示、租约弹窗详情与解绑操作
May 12, 2026
63e1fdf
节点池新增管理员手动禁用/启用节点能力
May 26, 2026
9a915f1
新增免密端口段模式(Free-Mode Ports)
Jun 14, 2026
c8083ce
优化大规模节点下启动 CPU/磁盘 IO 占用过高问题
Jun 19, 2026
bf4c767
feat(subscription): 订阅支持流量用量信息展示
Jun 24, 2026
7b1d4e4
feat(subscription): 订阅支持用量信息解析与存储
Jun 24, 2026
1abdb14
Merge remote-tracking branch 'upstream/master'
Jun 24, 2026
89ead3a
fix: 保留代理回退订阅用量响应头
Jun 26, 2026
de805b1
feat: 优化控制平面租约与节点详情
Jun 26, 2026
821d171
feat: 动态化导入导出配置字段
Jun 26, 2026
7c24e7c
fix: 修复租约详情抽屉定位
Jun 26, 2026
081b37b
feat: 完善节点订阅管理与仪表盘展示
Jun 27, 2026
94ea541
fix: 增加出口探测备用源
Jul 5, 2026
b0f9006
feat: 增强节点排序与平台卡片统计
Jul 5, 2026
4658e6a
feat: 订阅管理页增加用量到期颜色提示
Jul 5, 2026
9bcbe64
feat: 优化平台租约绑定交互
Jul 5, 2026
a869086
feat: 支持节点详情展示 outbound
Jul 5, 2026
527bd37
Merge remote-tracking branch 'upstream/master'
Jul 6, 2026
968ddee
feat: 支持平台正则排除规则
Jul 8, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/Dockerfile.release
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ COPY release-bin/${TARGETOS}/${TARGETARCH}/resin-${TARGETOS}-${TARGETARCH} /usr/
COPY docker/entrypoint.sh /usr/local/bin/docker-entrypoint.sh
RUN chmod +x /usr/local/bin/docker-entrypoint.sh

EXPOSE 2260
EXPOSE 2260 21000-22000
VOLUME ["/var/cache/resin", "/var/lib/resin", "/var/log/resin"]

ENTRYPOINT ["/usr/local/bin/docker-entrypoint.sh"]
Expand Down
193 changes: 193 additions & 0 deletions .github/workflows/dev-build.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,193 @@
name: Dev Build

on:
workflow_dispatch:
inputs:
version_suffix:
description: 'Version suffix (leave empty for auto: dev-YYYYMMDD-sha8)'
required: false
type: string

concurrency:
group: dev-build-${{ github.ref }}
cancel-in-progress: true

jobs:
build-binaries:
name: Build Binaries
runs-on: ubuntu-latest
permissions:
contents: read
strategy:
matrix:
include:
- goos: linux
goarch: amd64
- goos: linux
goarch: arm64
- goos: darwin
goarch: amd64
- goos: darwin
goarch: arm64
- goos: windows
goarch: amd64
steps:
- name: Checkout Code
uses: actions/checkout@v4

- name: Compute Version
id: version
run: |
SUFFIX="${{ inputs.version_suffix }}"
if [ -z "$SUFFIX" ]; then
# Auto-generate: dev-YYYYMMDD-sha8
VERSION="dev-$(date -u +'%Y%m%d')-${GITHUB_SHA::8}"
elif [[ "$SUFFIX" == dev-* ]]; then
# Already has dev- prefix
VERSION="$SUFFIX"
else
VERSION="dev-$SUFFIX"
fi
echo "version=$VERSION" >> $GITHUB_OUTPUT
echo "Version: $VERSION"

- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: 22

- name: Build WebUI
working-directory: ./webui
run: |
npm ci
npm run build

- name: Setup Go
uses: actions/setup-go@v5
with:
go-version: '1.25.x'

- name: Build Go Binary
env:
GOOS: ${{ matrix.goos }}
GOARCH: ${{ matrix.goarch }}
CGO_ENABLED: 0
run: |
VERSION=${{ steps.version.outputs.version }}
GIT_COMMIT=${GITHUB_SHA::8}
BUILD_TIME=$(date -u +'%Y-%m-%dT%H:%M:%SZ')

OUTPUT_NAME=resin-${GOOS}-${GOARCH}
if [ "$GOOS" = "windows" ]; then
OUTPUT_NAME="${OUTPUT_NAME}.exe"
fi
echo "OUTPUT_NAME=${OUTPUT_NAME}" >> $GITHUB_ENV

mkdir -p build

go build -trimpath -tags "with_quic with_wireguard with_grpc with_utls with_embedded_tor with_naive_outbound" \
-ldflags="-s -w \
-X github.com/Resinat/Resin/internal/buildinfo.Version=${VERSION} \
-X github.com/Resinat/Resin/internal/buildinfo.GitCommit=${GIT_COMMIT} \
-X github.com/Resinat/Resin/internal/buildinfo.BuildTime=${BUILD_TIME}" \
-o build/${OUTPUT_NAME} ./cmd/resin

cd build

SIMPLE_NAME="resin"
if [ "$GOOS" = "windows" ]; then
SIMPLE_NAME="resin.exe"
fi
cp ${OUTPUT_NAME} ${SIMPLE_NAME}

if [ "$GOOS" = "windows" ]; then
zip resin-${GOOS}-${GOARCH}.zip ${SIMPLE_NAME}
PACKAGE_NAME="resin-${GOOS}-${GOARCH}.zip"
else
tar -czvf resin-${GOOS}-${GOARCH}.tar.gz ${SIMPLE_NAME}
PACKAGE_NAME="resin-${GOOS}-${GOARCH}.tar.gz"
fi

rm ${SIMPLE_NAME}
echo "PACKAGE_NAME=${PACKAGE_NAME}" >> $GITHUB_ENV

- name: Upload Release Package Artifact
uses: actions/upload-artifact@v4
with:
name: dev-release-${{ matrix.goos }}-${{ matrix.goarch }}
path: build/${{ env.PACKAGE_NAME }}
retention-days: 7

- name: Upload Linux bin for Docker
if: matrix.goos == 'linux'
uses: actions/upload-artifact@v4
with:
name: dev-binary-${{ matrix.goos }}-${{ matrix.goarch }}
path: build/${{ env.OUTPUT_NAME }}
retention-days: 1

docker:
name: Build & Push Docker Image
runs-on: ubuntu-latest
needs: build-binaries
permissions:
contents: read
packages: write
steps:
- name: Checkout Code
uses: actions/checkout@v4

- name: Compute Version
id: version
run: |
SUFFIX="${{ inputs.version_suffix }}"
if [ -z "$SUFFIX" ]; then
VERSION="dev-$(date -u +'%Y%m%d')-${GITHUB_SHA::8}"
elif [[ "$SUFFIX" == dev-* ]]; then
VERSION="$SUFFIX"
else
VERSION="dev-$SUFFIX"
fi
echo "version=$VERSION" >> $GITHUB_OUTPUT

- name: Download Linux amd64 binary
uses: actions/download-artifact@v4
with:
name: dev-binary-linux-amd64
path: release-bin/linux/amd64/

- name: Download Linux arm64 binary
uses: actions/download-artifact@v4
with:
name: dev-binary-linux-arm64
path: release-bin/linux/arm64/

- name: Give binaries execute permission
run: chmod +x release-bin/linux/amd64/resin-linux-amd64 release-bin/linux/arm64/resin-linux-arm64

- name: Set up QEMU
uses: docker/setup-qemu-action@v3

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3

- name: Lowercase repository name
run: echo "REPO_LC=${GITHUB_REPOSITORY,,}" >> $GITHUB_ENV

- name: Login to GitHub Container Registry
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}

- name: Build and push Docker image
uses: docker/build-push-action@v5
with:
context: .
file: ./.github/Dockerfile.release
push: true
platforms: linux/amd64,linux/arm64
tags: |
ghcr.io/${{ env.REPO_LC }}:${{ steps.version.outputs.version }}
ghcr.io/${{ env.REPO_LC }}:dev-latest
8 changes: 7 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,16 @@
.env
sing-box-reference
.agents
.ace-tool/
.claude/
.cursor/
.trellis/
AGENTS.md
data/
start.sh
.devcontainer
start-instance.sh

# Claude Code / OMC tooling and local runtime data
.claude/
.omc/
.local/
Loading