8000 更新开发配置和发布配置,支持发布二进制文件 by xuewenG · Pull Request #225 · kingwrcy/moments · GitHub
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

更新开发配置和发布配置,支持发布二进制文件 #225

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Dec 9, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
13 changes: 13 additions & 0 deletions .devcontainer/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
FROM mcr.microsoft.com/devcontainers/javascript-node:20-bookworm

ENV APP_HOME=/app
RUN mkdir -p $APP_HOME
WORKDIR $APP_HOME

RUN set -x \
&& curl -L -o go1.23.3.linux-amd64.tar.gz https://go.dev/dl/go1.23.3.linux-amd64.tar.gz \
&& tar -xzf go1.23.3.linux-amd64.tar.gz \
&& echo 'export PATH=$PATH:/app/go/bin' > /etc/profile.d/enable-go.sh \
&& chmod +x /etc/profile.d/enable-go.sh

ENTRYPOINT ["sleep", "infinity"]
24 changes: 24 additions & 0 deletions .devcontainer/devcontainer.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
{
"dockerComposeFile": "docker-compose.yml",
"service": "main",
"workspaceFolder": "/workspaces/${localWorkspaceFolderBasename}",
"customizations": {
"vscode": {
"extensions": [
"eamodio.gitlens",
"esbenp.prettier-vscode",
"dbaeumer.vscode-eslint",
"Nuxtr.nuxt-vscode-extentions",
"golang.go",
"qwtel.sqlite-viewer"
]
}
},
"postCreateCommand": "",
"remoteUser": "root",
"mounts": [
"source=/root/.ssh,target=/root/.ssh,type=bind,consistency=cached",
"source=/etc/localtime,target=/etc/localtime,type=bind,consistency=cached",
"source=/${localWorkspaceFolder},target=/workspaces/${localWorkspaceFolderBasename},type=bind,consistency=cached"
]
}
7 changes: 7 additions & 0 deletions .devcontainer/docker-compose.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
services:
main:
build:
context: ..
dockerfile: ./.devcontainer/Dockerfile
ports:
- 3000:3000
14 changes: 14 additions & 0 deletions .github/pull-request-template.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
<!--

在创建 PR 前,请务必在右侧的 Labels 选项中添加以下 Label 中的一个:
- doc: 当前 PR 更新了文档
- bugfix: 当前 PR 修复了 bug
- feature: 当前 PR 添加了新功能
以便于自动生成 Release 时自动对 PR 进行归类。

在选择 Label 后,请在下方标题后填写当前 PR 的详细描述。

-->

### 这个 PR 做了什么?

23 changes: 23 additions & 0 deletions .github/release-drafter.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
name-template: 'v$NEXT_PATCH_VERSION'
tag-template: 'v$NEXT_PATCH_VERSION'
categories:
- title: Features
labels:
- feature
- title: Bug Fixes
labels:
- bugfix
- title: Docs
labels:
- doc
- title: Maintenance
labels:
- chore
- dependency
exclude-labels:
- reverted
- skip-changelog
change-template: "- $TITLE (#$NUMBER) @$AUTHOR"
template: |
## What's Changed
$CHANGES
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
name: Build And Upload Image For Dev
name: Build And Upload Docker Image For Dev
on:
push:
branches:
Expand All @@ -12,12 +12,6 @@ jobs:
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Extract Version
run: |
BUILD_TIME=$(TZ='Asia/Shanghai' date +'%Y%m%d%H%M')
COMMIT_ID=${GITHUB_SHA:0:7}
VERSION=dev.$BUILD_TIME.$COMMIT_ID
echo VERSION=$VERSION >> $GITHUB_ENV
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
Expand All @@ -27,6 +21,11 @@ jobs:
with:
username: ${{ secrets.DOCKER_USER_NAME }}
password: ${{ secrets.DOCKER_ACCESS_TOKEN }}
- name: Extract Version
run: |
echo VERSION_TAG=dev >> $GITHUB_ENV
echo VERSION=dev >> $GITHUB_ENV
echo COMMIT_ID=${GITHUB_SHA:0:7} >> $GITHUB_ENV
- name: Build and Push Image
uses: docker/build-push-action@v6
with:
Expand All @@ -36,7 +35,8 @@ jobs:
linux/amd64
linux/arm64
tags: |
${{ secrets.DOCKER_USER_NAME }}/moments:dev
${{ secrets.DOCKER_USER_NAME }}/moments:${{ env.VERSION_TAG }}
${{ secrets.DOCKER_USER_NAME }}/moments:${{ env.VERSION }}
build-args: |
VERSION=${{ env.VERSION }}
COMMIT_ID=${{ env.COMMIT_ID }}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
name: Build And Upload Image For Release
name: Build And Upload Docker Image For Release
on:
push:
tags:
Expand All @@ -12,10 +12,6 @@ jobs:
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Extract Version
run: |
VERSION=${GITHUB_REF#refs/tags/v}
echo VERSION=$VERSION >> $GITHUB_ENV
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
Expand All @@ -25,6 +21,12 @@ jobs:
with:
username: ${{ secrets.DOCKER_USER_NAME }}
password: ${{ secrets.DOCKER_ACCESS_TOKEN }}
- name: Extract Version
if: ${{ startsWith(github.ref, 'refs/tags/') }}
run: |
echo VERSION_TAG=latest >> $GITHUB_ENV
echo VERSION=${GITHUB_REF#refs/tags/v} >> $GITHUB_ENV
echo COMMIT_ID=${GITHUB_SHA:0:7} >> $GITHUB_ENV
- name: Build and Push Image
uses: docker/build-push-action@v6
with:
Expand All @@ -34,7 +36,8 @@ jobs:
linux/amd64
linux/arm64
tags: |
${{ secrets.DOCKER_USER_NAME }}/moments:latest
${{ secrets.DOCKER_USER_NAME }}/moments:${{ env.VERSION_TAG }}
${{ secrets.DOCKER_USER_NAME }}/moments:${{ env.VERSION }}
build-args: |
VERSION=${{ env.VERSION }}
COMMIT_ID=${{ env.COMMIT_ID }}
72 changes: 72 additions & 0 deletions .github/workflows/release-drafter.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
name: Create Or Update Release Draft
on:
push:
branches:
- dev
concurrency:
group: ${{ github.workflow }}
cancel-in-progress: false
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Set up NodeJS
uses: actions/setup-node@v4
with:
node-version: 22.2.0
- name: Set up Go
uses: actions/setup-go@v5
with:
go-version: 1.22.5
- name: Release Draft
id: release_draft
uses: release-drafter/release-drafter@v6
env:
GITHUB_TOKEN: ${{ github.token }}
with:
commitish: ${{ github.sha }}
- name: Extract Version
env:
RELEASE_NAME: ${{ steps.release_draft.outputs.name }}
TAG_NAME: ${{ steps.release_draft.outputs.tag_name }}
run: |
echo RELEASE_NAME=$RELEASE_NAME >> $GITHUB_ENV
echo TAG_NAME=$TAG_NAME >> $GITHUB_ENV
echo VERSION=${TAG_NAME#v} >> $GITHUB_ENV
echo COMMIT_ID=${GITHUB_SHA:0:7} >> $GITHUB_ENV
- name: Clear Release Assets
env:
GITHUB_TOKEN: ${{ github.token }}
run: |
gh release view ${{ env.TAG_NAME }} --json assets --jq '.assets[].name' | \
xargs -I {} gh release delete-asset ${{ env.TAG_NAME }} {}
- name: Install Front Dependencies
run: |
npm install -g pnpm
make frontend-install
- name: Build Front and Backend
run: |
make build VERSION=${{ env.VERSION }} COMMIT_ID=${{ env.COMMIT_ID }}
- name: Generate Zip
run: |
make zip VERSION=${{ env.VERSION }} COMMIT_ID=${{ env.COMMIT_ID }}
- name: Generate Checksums
run: |
make checksums VERSION=${{ env.VERSION }} COMMIT_ID=${{ env.COMMIT_ID }}
- name: Collect Assets
run: |
mkdir -p ./dist
mv ./backend/dist/moments-*.zip ./dist
mv ./backend/dist/moments-*-checksum.txt ./dist
- name: Upload Release Assets
uses: softprops/action-gh-release@v2
env:
GITHUB_TOKEN: ${{ github.token }}
with:
draft: true
files: ./dist/*
fail_on_unmatched_files: true
name: ${{ env.RELEASE_NAME }}
tag_name: ${{ env.TAG_NAME }}
24 changes: 17 additions & 7 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,9 +1,19 @@
node_modules
data.sqlite
.env
backend/.env
backend/public
front-end/.env
# Logs
logs
*.log

# Misc
.DS_Store
.fleet
.idea

# Local env files
.env
.env.*
!.env.example

.pnpm-store

upload
*.sqlite
moments.exe
backend/dist
7 changes: 3 additions & 4 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -8,23 +8,22 @@ COPY front/. .
RUN pnpm run generate

FROM golang:1.22.5-alpine AS backend
ARG VERSION
ARG COMMIT_ID
WORKDIR /app
ENV CGO_ENABLED=1
RUN apk add --no-cache build-base tzdata
COPY backend/go.mod .
COPY backend/go.sum .
RUN go mod download
COPY backend/. .
COPY --from=front /app/.output/public /app/public
RUN go build -tags prod -ldflags="-s -w" -o /app/moments
RUN go build -tags prod -ldflags="-s -w -X main.version=${VERSION} -X main.commitId=${COMMIT_ID}" -o /app/moments

FROM alpine
WORKDIR /app/data
RUN apk update --no-cache && apk add --no-cache ca-certificates tzdata
ARG VERSION
ENV PORT=3000
ENV TZ=Asia/Shanghai
ENV VERSION=$VERSION
COPY --from=backend /app/moments /app/moments
RUN chmod +x /app/moments
EXPOSE 3000
Expand Down
61 changes: 44 additions & 17 deletions Makefile
Original file line number Diff line number Diff line change
@@ -1,33 +1,60 @@
CURRENT_DIR := $(shell pwd)
WORK_DIR_BACKEND := $(CURRENT_DIR)/backend
DIST_DIR_BACKEND := $(WORK_DIR_BACKEND)/dist
WORK_DIR_FRONTEND := $(CURRENT_DIR)/front

VERSION ?= local
COMMIT_ID ?= local

BINARY_NAME := moments
COMMIT = $(shell git rev-parse --short HEAD)
LINUX_BINARY_NAME = $(BINARY_NAME)-linux-amd64
MACOS_BINARY_NAME = $(BINARY_NAME)-macos-amd64
WINDOWS_BINARY_NAME = $(BINARY_NAME)-windows-amd64.exe
LINUX_AMD64_BINARY_NAME := $(BINARY_NAME)-linux-amd64-$(VERSION)
LINUX_ARM64_BINARY_NAME := $(BINARY_NAME)-linux-arm64-$(VERSION)
DARWIN_AMD64_BINARY_NAME := $(BINARY_NAME)-darwin-amd64-$(VERSION)
DARWIN_ARM64_BINARY_NAME := $(BINARY_NAME)-darwin-arm64-$(VERSION)
WINDOWS_AMD64_BINARY_NAME := $(BINARY_NAME)-windows-amd64.exe-$(VERSION)
WINDOWS_ARM64_BINARY_NAME := $(BINARY_NAME)-windows-arm64.exe-$(VERSION)

BUILD_CMD_DEV := go build -ldflags="-X main.version=$(VERSION) -X main.commitId=$(COMMIT_ID)"
BUILD_CMD_PROD := go build -tags prod -ldflags="-s -w -X main.version=$(VERSION) -X main.commitId=$(COMMIT_ID)"

export GO := go
.PHONY: frontend-install frontend-dev backend-dev clean build frontend backend zip checksums

.PHONY: clean build backend frontend
frontend-install:
cd $(WORK_DIR_FRONTEND) && pnpm i

frontend-dev:
cd $(WORK_DIR_FRONTEND) && pnpm run dev

backend-dev:
cd $(WORK_DIR_BACKEND) && $(BUILD_CMD_DEV) -o $(DIST_DIR_BACKEND)/$(LINUX_AMD64_BINARY_NAME)
$(DIST_DIR_BACKEND)/$(LINUX_AMD64_BINARY_NAME)

build: clean frontend backend

clean:
$(GO) clean
rm -rf $(WORK_DIR_BACKEND)/dist
rm -rf $(WORK_DIR_BACKEND)/public
rm -rf $(WORK_DIR_FRONTEND)/.output
rm -rf $(WORK_DIR_FRONTEND)/dist
cd $(WORK_DIR_BACKEND) && go clean
cd $(WORK_DIR_BACKEND) && rm -rf ./public ./dist
cd $(WORK_DIR_FRONTEND) && rm -rf ./.output ./dist

frontend:
cd $(WORK_DIR_FRONTEND) && pnpm i && pnpm generate
cp -r $(WORK_DIR_FRONTEND)/.output/public $(WORK_DIR_BACKEND)/
cp -r $(WORK_DIR_FRONTEND)/.output/public $(WORK_DIR_BACKEND)

backend:
cd $(WORK_DIR_BACKEND) && CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 $(GO) build -tags prod -ldflags="-s -w -X 'main.gitCommitID=$(COMMIT)'" -o $(WORK_DIR_BACKEND)/dist/$(MACOS_BINARY_NAME)
cd $(WORK_DIR_BACKEND) && CGO_ENABLED=0 GOOS=linux GOARCH=amd64 $(GO) build -tags prod -ldflags="-s -w -X 'main.gitCommitID=$(COMMIT)'" -o $(WORK_DIR_BACKEND)/dist/$(LINUX_BINARY_NAME)
cd $(WORK_DIR_BACKEND) && CGO_ENABLED=0 GOOS=windows GOARCH=amd64 $(GO) build -tags prod -ldflags="-s -w -X 'main.gitCommitID=$(COMMIT)'" -o $(WORK_DIR_BACKEND)/dist/$(WINDOWS_BINARY_NAME)
cd $(WORK_DIR_BACKEND) && upx --best --lzma $(WORK_DIR_BACKEND)/dist/$(WINDOWS_BINARY_NAME)
cd $(WORK_DIR_BACKEND) && upx --best --lzma $(WORK_DIR_BACKEND)/dist/$(LINUX_BINARY_NAME)
cd $(WORK_DIR_BACKEND) && GOOS=linux GOARCH=amd64 $(BUILD_CMD_PROD) -o $(DIST_DIR_BACKEND)/$(LINUX_AMD64_BINARY_NAME)
cd $(WORK_DIR_BACKEND) && GOOS=linux GOARCH=arm64 $(BUILD_CMD_PROD) -o $(DIST_DIR_BACKEND)/$(LINUX_ARM64_BINARY_NAME)
cd $(WORK_DIR_BACKEND) && GOOS=darwin GOARCH=amd64 $(BUILD_CMD_PROD) -o $(DIST_DIR_BACKEND)/$(DARWIN_AMD64_BINARY_NAME)
cd $(WORK_DIR_BACKEND) && GOOS=darwin GOARCH=arm64 $(BUILD_CMD_PROD) -o $(DIST_DIR_BACKEND)/$(DARWIN_ARM64_BINARY_NAME)
cd $(WORK_DIR_BACKEND) && GOOS=windows GOARCH=amd64 $(BUILD_CMD_PROD) -o $(DIST_DIR_BACKEND)/$(WINDOWS_AMD64_BINARY_NAME)
cd $(WORK_DIR_BACKEND) && GOOS=windows GOARCH=arm64 $(BUILD_CMD_PROD) -o $(DIST_DIR_BACKEND)/$(WINDOWS_ARM64_BINARY_NAME)

zip:
cd $(DIST_DIR_BACKEND) && find . -type f -name "$(BINARY_NAME)-*" | xargs -I {} zip {}.zip {}

checksums:
cd $(DIST_DIR_BACKEND) && md5sum $(LINUX_AMD64_BINARY_NAME) > $(LINUX_AMD64_BINARY_NAME)-checksum.txt
cd $(DIST_DIR_BACKEND) && md5sum $(LINUX_ARM64_BINARY_NAME) > $(LINUX_ARM64_BINARY_NAME)-checksum.txt
cd $(DIST_DIR_BACKEND) && md5sum $(DARWIN_AMD64_BINARY_NAME) > $(DARWIN_AMD64_BINARY_NAME)-checksum.txt
cd $(DIST_DIR_BACKEND) && md5sum $(DARWIN_ARM64_BINARY_NAME) > $(DARWIN_ARM64_BINARY_NAME)-checksum.txt
cd $(DIST_DIR_BACKEND) && md5sum $(WINDOWS_AMD64_BINARY_NAME) > $(WINDOWS_AMD64_BINARY_NAME)-checksum.txt
cd $(DIST_DIR_BACKEND) && md5sum $(WINDOWS_ARM64_BINARY_NAME) > $(WINDOWS_ARM64_BINARY_NAME)-checksum.txt
3 changes: 3 additions & 0 deletions backend/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# build dist
dist
public
Loading
0