-
Notifications
You must be signed in to change notification settings - Fork 74
155 lines (129 loc) · 4.67 KB
/
Copy pathdocker-release.yml
File metadata and controls
155 lines (129 loc) · 4.67 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
# This workflow uses actions that are not certified by GitHub.
# They are provided by a third-party and are governed by
# separate terms of service, privacy policy, and support
# documentation.
# GitHub recommends pinning actions to a commit SHA.
# To get a newer version, you will need to update the SHA.
# You can also reference a tag or branch, but the action may change without warning.
name: Release-Publish Docker image
on:
workflow_dispatch: {}
# release:
# types: [published]
push:
# tags:
# - "v*"
branches:
- stable
jobs:
push_to_registry:
name: Push Docker image to Docker Hub
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest]
runs-on: ${{ matrix.os }}
permissions:
packages: write
contents: read
attestations: write
id-token: write
steps:
- name: Check out the repo
uses: actions/checkout@v4
- name: Install Node.js
uses: actions/setup-node@v4.0.0
with:
node-version: "20.19.1"
registry-url: https://registry.npmjs.org/
- name: Install -g
run: npm install -g cross-env zx
# 根目录的依赖缓存
- name: Cache root dependencies
uses: actions/cache@v3
id: cache-root
with:
path: node_modules
key: ${{ matrix.os }}-node-${{ hashFiles('**/package-lock.json') }}
restore-keys: |
${{ matrix.os }}-node-
# 安装根目录依赖(如果缓存未命中)
- name: Install root dependencies
if: steps.cache-root.outputs.cache-hit != 'true'
run: npm install
# web 目录的依赖缓存
- name: Cache web dependencies
uses: actions/cache@v3
id: cache-web
with:
path: web/node_modules
key: ${{ matrix.os }}-node-web-${{ hashFiles('web/package-lock.json') }}
restore-keys: |
${{ matrix.os }}-node-web-
# 安装 web 目录依赖(如果缓存未命中)
- name: Install web dependencies
if: steps.cache-web.outputs.cache-hit != 'true'
run: npm install
working-directory: ./web
# electron 目录的依赖缓存
- name: Cache electron dependencies
uses: actions/cache@v3
id: cache-electron
with:
path: electron/node_modules
key: ${{ matrix.os }}-node-electron-${{ hashFiles('electron/package-lock.json') }}
restore-keys: |
${{ matrix.os }}-node-electron-
# 安装 electron 目录依赖(如果缓存未命中)
- name: Install electron dependencies
if: steps.cache-electron.outputs.cache-hit != 'true'
run: npm install
working-directory: ./electron
- run: npm run updateVersion
- run: npm run prod_node
# - run: cd web && npm run build
# - run: cd electron && npm run build:node
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Log in to Docker Hub
uses: docker/login-action@f4ef78c080cd8ba55a85445d5b36e214a81df20a
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
- name: Extract metadata (tags, labels) for Docker
id: meta
uses: docker/metadata-action@9ec57ed1fcdbf14dcef7dfbe97b2010124a938b7
with:
images: dadigua/hyperchat-mini
- name: Determine npm publish tag
id: publish-tag
run: |
if [[ $GITHUB_REF == *"alpha"* ]]; then
echo "tag=alpha" >> $GITHUB_OUTPUT
else
echo "tag=latest" >> $GITHUB_OUTPUT
fi
- name: 获取npm上的最新版本
if: steps.publish-tag.outputs.tag != 'latest'
id: npm-version
run: |
NPM_VERSION=$(npm view @dadigua/hyper-chat version 2>/dev/null || echo "")
echo $NPM_VERSION
- name: Build and push Docker image
id: push
uses: docker/build-push-action@3b5e8027fcad23fda98b2e3ac259d8d67585f671
with:
context: .
file: "${{ steps.publish-tag.outputs.tag == 'alpha' && './docker/no_electron/Dockerfile-Alpha' || './docker/no_electron/Dockerfile' }}"
platforms: linux/amd64,linux/arm64
push: true
tags: dadigua/hyperchat-mini:latest
labels: ${{ steps.meta.outputs.labels }}`
- name: Generate artifact attestation
uses: actions/attest-build-provenance@v2
with:
subject-name: index.docker.io/dadigua/hyperchat-mini
subject-digest: ${{ steps.push.outputs.digest }}
push-to-registry: true