forked from eooce/node-ws
-
Notifications
You must be signed in to change notification settings - Fork 0
129 lines (108 loc) · 4.14 KB
/
build-binary.yml
File metadata and controls
129 lines (108 loc) · 4.14 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
name: Build and Release Binary
on:
push:
branches: [ dev ]
paths:
- 'index.js'
- 'package.json'
- 'index.html'
workflow_dispatch:
jobs:
build:
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
ref: dev
- name: Setup Node.js 18
uses: actions/setup-node@v4
with:
node-version: 18
- name: Install dependencies
run: |
echo "Installing dependencies..."
npm install --legacy-peer-deps --ignore-scripts
# Verify jsvms is installed
if [ ! -d "node_modules/jsvms" ]; then
echo "jsvms not found, installing separately..."
npm install jsvms --save --legacy-peer-deps --ignore-scripts
fi
# List jsvms files to verify
echo "Checking jsvms installation:"
ls -la node_modules/jsvms/ || echo "jsvms directory not found!"
- name: Verify dependencies
run: |
echo "Verifying required modules..."
node -e "try { require('jsvms/protocols/vmess/server'); console.log('✓ jsvms/protocols/vmess/server found'); process.exit(0); } catch(e) { console.error('✗ jsvms/protocols/vmess/server NOT found'); process.exit(1); }"
node -e "try { require('jsvms/protocols/vmess/validator'); console.log('✓ jsvms/protocols/vmess/validator found'); process.exit(0); } catch(e) { console.error('✗ jsvms/protocols/vmess/validator NOT found'); process.exit(1); }"
node -e "try { require('ws'); console.log('✓ ws found'); process.exit(0); } catch(e) { console.error('✗ ws NOT found'); process.exit(1); }"
- name: Build binaries
run: |
npx pkg index.js --targets node18-linux-x64 --output dist/nodews_linux_amd64
npx pkg index.js --targets node18-linux-arm64 --output dist/nodews_linux_arm64
- name: Make binaries executable
run: |
chmod +x dist/nodews_linux_amd64
chmod +x dist/nodews_linux_arm64
ls -lh dist/
- name: Delete existing release
uses: actions/github-script@v7
continue-on-error: true
with:
script: |
const releases = await github.rest.repos.listReleases({
owner: context.repo.owner,
repo: context.repo.repo,
});
const release = releases.data.find(r => r.tag_name === 'node-ws-binary');
if (release) {
await github.rest.repos.deleteRelease({
owner: context.repo.owner,
repo: context.repo.repo,
release_id: release.id,
});
console.log('Deleted existing release');
}
- name: Delete existing tag
continue-on-error: true
run: |
git push --delete origin node-ws-binary || true
- name: Wait for deletion
run: sleep 3
- name: Create or Update Release
uses: softprops/action-gh-release@v1
with:
tag_name: node-ws-binary
name: node-ws-binary
draft: false
prerelease: false
files: |
dist/nodews_linux_amd64
dist/nodews_linux_arm64
body: |
## Node WebSocket Server Binary (Latest Dev Build)
**⚠️ This release is automatically updated with each push to dev branch**
### 📦 Binaries
- `nodews_linux_amd64` - Linux AMD64/x86_64
- `nodews_linux_arm64` - Linux ARM64/aarch64
### 🚀 Quick Start
```bash
# Download (AMD64)
wget https://github.com/${{ github.repository }}/releases/download/node-ws-binary/nodews_linux_amd64
# Make executable
chmod +x nodews_linux_amd64
# Run
./nodews_linux_amd64
```
### 📝 Environment Variables
- `UUID` - User UUID
- `PORT` - Server port (default: 3000)
- `DOMAIN` - Domain name
- `NAME` - Custom server name
- `WSPATH` - WebSocket path
- `SUB_PATH` - Subscription path (default: sub)
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}