|
87 | 87 | # echo "✅ Deployment complete!" |
88 | 88 | # ' |
89 | 89 |
|
90 | | -name: 🚀 Deploy Next.js to cPanel via SSH |
| 90 | +name: 🚀 Deploy to cPanel via SSH |
91 | 91 |
|
92 | 92 | on: |
93 | 93 | push: |
94 | 94 | branches: |
95 | | - - main |
| 95 | + - main # ganti sesuai branch utama kamu |
96 | 96 |
|
97 | 97 | jobs: |
98 | 98 | deploy: |
99 | 99 | runs-on: ubuntu-latest |
100 | 100 |
|
101 | 101 | steps: |
102 | | - - name: 🧭 Checkout Repository |
| 102 | + # --- 1️⃣ Checkout repository |
| 103 | + - name: 📦 Checkout Repository |
103 | 104 | uses: actions/checkout@v4 |
104 | 105 |
|
105 | | - - name: 🟢 Setup Node.js |
| 106 | + # --- 2️⃣ Setup Node.js |
| 107 | + - name: 🧰 Setup Node.js |
106 | 108 | uses: actions/setup-node@v4 |
107 | 109 | with: |
108 | 110 | node-version: 22 |
109 | 111 |
|
110 | | - - name: 📦 Install Dependencies |
111 | | - run: npm ci |
112 | | - |
113 | | - - name: 🏗️ Build Next.js App |
114 | | - run: npm run build |
115 | | - |
116 | | - - name: 📂 Prepare build-output folder |
| 112 | + # --- 3️⃣ Build project |
| 113 | + - name: 🏗️ Build Project |
117 | 114 | run: | |
118 | | - mkdir -p build-output |
119 | | - cp -r .next package.json package-lock.json next.config.* tsconfig.* public/ build-output/ 2>/dev/null || true |
120 | | - echo "📁 Build output content:" |
121 | | - ls -la build-output |
| 115 | + npm ci |
| 116 | + npm run build |
122 | 117 |
|
123 | | - - name: 🗜️ Compress build-output |
| 118 | + # --- 4️⃣ Compress build output |
| 119 | + - name: 📦 Compress build output |
124 | 120 | run: | |
125 | | - cd build-output |
126 | | - tar -czf ../build-output.tar.gz . |
127 | | - cd .. |
128 | | - echo "✅ build-output.tar.gz created:" |
129 | | - ls -lh build-output.tar.gz |
| 121 | + mkdir -p build-output |
| 122 | + cp -r .next package.json package-lock.json next.config.* public tsconfig.json build-output/ |
| 123 | + tar -czf build-output.tar.gz -C build-output . |
130 | 124 |
|
| 125 | + # --- 5️⃣ Upload build files to server |
131 | 126 | - name: 📤 Upload compressed build to server |
132 | 127 | uses: appleboy/scp-action@v0.1.7 |
133 | 128 | with: |
134 | 129 | host: ${{ secrets.SSH_HOST }} |
135 | 130 | username: ${{ secrets.SSH_USER }} |
136 | 131 | key: ${{ secrets.SSH_PRIVATE_KEY }} |
137 | 132 | passphrase: ${{ secrets.SSH_PASSPHRASE }} |
138 | | - source: "build-output.tar.gz" |
| 133 | + port: ${{ secrets.SSH_PORT }} |
| 134 | + source: build-output.tar.gz |
139 | 135 | target: ${{ secrets.DEPLOY_DIR }} |
140 | 136 | overwrite: true |
141 | 137 |
|
| 138 | + # --- 6️⃣ Extract & Deploy on server |
142 | 139 | - name: ⚙️ Extract & Deploy on server |
143 | 140 | uses: appleboy/ssh-action@v1.2.0 |
144 | 141 | with: |
145 | 142 | host: ${{ secrets.SSH_HOST }} |
146 | 143 | username: ${{ secrets.SSH_USER }} |
147 | 144 | key: ${{ secrets.SSH_PRIVATE_KEY }} |
148 | 145 | passphrase: ${{ secrets.SSH_PASSPHRASE }} |
| 146 | + port: ${{ secrets.SSH_PORT }} |
149 | 147 | script: | |
150 | 148 | echo "🚀 Starting deployment inside Node.js environment..." |
151 | | - bash -lc ' |
152 | | - set -e |
153 | | - echo "🔧 Activating environment..." |
154 | | - source ${{ secrets.NODE_ENV_PATH }} || echo "⚠️ Failed to source NODE_ENV_PATH" |
155 | 149 |
|
156 | | - cd ${{ secrets.DEPLOY_DIR }} |
157 | | - echo "📦 Extracting build-output.tar.gz..." |
158 | | - tar -xzf build-output.tar.gz |
159 | | - rm -f build-output.tar.gz |
| 150 | + # aktifkan environment Node.js di cPanel (jika ada) |
| 151 | + if [ -f "${{ secrets.NODE_ENV_PATH }}" ]; then |
| 152 | + echo "🔧 Activating Node.js environment..." |
| 153 | + source ${{ secrets.NODE_ENV_PATH }} |
| 154 | + else |
| 155 | + echo "⚠️ NODE_ENV_PATH not found, continuing without virtualenv" |
| 156 | + fi |
| 157 | +
|
| 158 | + cd ${{ secrets.DEPLOY_DIR }} |
| 159 | +
|
| 160 | + echo "📦 Extracting build..." |
| 161 | + tar -xzf build-output.tar.gz |
| 162 | + rm -f build-output.tar.gz |
160 | 163 |
|
161 | | - echo "📦 Installing dependencies..." |
| 164 | + echo "📦 Installing dependencies..." |
| 165 | + if command -v npm >/dev/null 2>&1; then |
162 | 166 | npm ci --omit=dev |
| 167 | + else |
| 168 | + echo "❌ npm not found in environment! Check Node.js setup in cPanel" |
| 169 | + exit 1 |
| 170 | + fi |
163 | 171 |
|
164 | | - echo "♻️ Restarting Node.js app..." |
165 | | - mkdir -p tmp |
166 | | - touch tmp/restart.txt || true |
| 172 | + echo "♻️ Restarting app..." |
| 173 | + mkdir -p tmp |
| 174 | + touch tmp/restart.txt || true |
167 | 175 |
|
168 | | - echo "✅ Deployment complete!" |
169 | | - ' |
| 176 | + echo "✅ Deployment complete!" |
0 commit comments