Skip to content

Merge pull request #71 from KHU-RETURN/fix/choi-update-deploy-go-version #32

Merge pull request #71 from KHU-RETURN/fix/choi-update-deploy-go-version

Merge pull request #71 from KHU-RETURN/fix/choi-update-deploy-go-version #32

Workflow file for this run

name: Go CD Pipeline
on:
push:
branches: [ "main" ]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v5
- name: Setup Tailscale
uses: tailscale/github-action@v2
with:
authkey: ${{ secrets.TS_AUTHKEY }}
- name: Set up Go
uses: actions/setup-go@v6
with:
go-version: '1.26.4'
- name: Run Tests
run: go test ./... -v
- name: Build
run: GOOS=linux GOARCH=amd64 go build -v -o server ./cmd/api/main.go
- name: Upload build artifact
uses: actions/upload-artifact@v6
with:
name: rcp-server-${{ github.sha }}
path: server
retention-days: 1
- name: Transfer artifacts (SCP)
uses: appleboy/scp-action@v0.1.7
with:
host: ${{ secrets.SERVER_HOST }}
username: ${{ secrets.SERVER_USER }}
key: ${{ secrets.SERVER_KEY }}
source: "server,deploy/systemd/rcp-server.service"
target: "/tmp/rcp-deploy"
- name: Install binary
uses: appleboy/ssh-action@v0.1.10
with:
host: ${{ secrets.SERVER_HOST }}
username: ${{ secrets.SERVER_USER }}
key: ${{ secrets.SERVER_KEY }}
script: |
set -euo pipefail
mkdir -p ~/rcp-server
install -m 0755 /tmp/rcp-deploy/server ~/rcp-server/server
- name: Write .env file
uses: appleboy/ssh-action@v0.1.10
env:
ENV_LIST: RCP_JWT_SECRET,OS_AUTH_URL,OS_USERNAME,OS_PASSWORD,OS_PROJECT_NAME,OS_USER_DOMAIN_NAME,OS_PROJECT_ID,CF_ACCESS_CLIENT_ID,CF_ACCESS_CLIENT_SECRET,GG_OAUTH_CLIENT,GG_OAUTH_SECRET,GG_REDIRECT_URL,DB_DRIVER,DB_DSN,PORT,RCP_NS_PROXY_SOCK,RCP_WEB_CONSOLE_BASE_URL,RCP_WEB_CONSOLE_ALLOWED_ORIGINS,RCP_VM_KNOWN_HOSTS_PATH,RCP_SSH_GW_KNOWN_HOSTS_PATH,FRONTEND_URL,RCP_FRONTEND_BASE_URL,RCP_ALLOWED_FRONTEND_ORIGIN_PATTERN,RCP_AUTH_COOKIE_SAMESITE,RCP_AUTH_COOKIE_SECURE,RCP_ALLOWED_ORIGINS,RCP_ALLOWED_ORIGIN_PATTERN,RCP_DEFAULT_NETWORK_ID,RCP_SSH_GW_NOTIFY_SOCK,RCP_SSH_GW_NOTIFY_SECRET
FRONTEND_URL: ${{ secrets.FRONTEND_URL }}
RCP_FRONTEND_BASE_URL: ${{ secrets.RCP_FRONTEND_BASE_URL }}
RCP_JWT_SECRET: ${{ secrets.RCP_JWT_SECRET }}
OS_AUTH_URL: ${{ secrets.OS_AUTH_URL }}
OS_USERNAME: ${{ secrets.OS_USERNAME }}
OS_PASSWORD: ${{ secrets.OS_PASSWORD }}
OS_PROJECT_NAME: ${{ secrets.OS_PROJECT_NAME }}
OS_USER_DOMAIN_NAME: ${{ secrets.OS_USER_DOMAIN_NAME }}
OS_PROJECT_ID: ${{ secrets.OS_PROJECT_ID }}
CF_ACCESS_CLIENT_ID: ${{ secrets.CF_ACCESS_CLIENT_ID }}
CF_ACCESS_CLIENT_SECRET: ${{ secrets.CF_ACCESS_CLIENT_SECRET }}
GG_OAUTH_CLIENT: ${{ secrets.GG_OAUTH_CLIENT }}
GG_OAUTH_SECRET: ${{ secrets.GG_OAUTH_SECRET }}
GG_REDIRECT_URL: ${{ secrets.GG_REDIRECT_URL }}
DB_DRIVER: ${{ secrets.DB_DRIVER }}
DB_DSN: ${{ secrets.DB_DSN }}
PORT: ${{ secrets.PORT }}
RCP_NS_PROXY_SOCK: ${{ secrets.RCP_NS_PROXY_SOCK }}
RCP_SSH_GW_NOTIFY_SOCK: ${{ secrets.RCP_SSH_GW_NOTIFY_SOCK }}
RCP_SSH_GW_NOTIFY_SECRET: ${{ secrets.RCP_SSH_GW_NOTIFY_SECRET }}
RCP_WEB_CONSOLE_BASE_URL: ${{ secrets.RCP_WEB_CONSOLE_BASE_URL }}
RCP_WEB_CONSOLE_ALLOWED_ORIGINS: ${{ secrets.RCP_WEB_CONSOLE_ALLOWED_ORIGINS }}
RCP_VM_KNOWN_HOSTS_PATH: ${{ secrets.RCP_VM_KNOWN_HOSTS_PATH }}
RCP_SSH_GW_KNOWN_HOSTS_PATH: ${{ secrets.RCP_SSH_GW_KNOWN_HOSTS_PATH }}
RCP_ALLOWED_FRONTEND_ORIGIN_PATTERN: ${{ secrets.RCP_ALLOWED_FRONTEND_ORIGIN_PATTERN }}
RCP_AUTH_COOKIE_SAMESITE: ${{ secrets.RCP_AUTH_COOKIE_SAMESITE }}
RCP_AUTH_COOKIE_SECURE: ${{ secrets.RCP_AUTH_COOKIE_SECURE }}
RCP_ALLOWED_ORIGINS: ${{ secrets.RCP_ALLOWED_ORIGINS }}
RCP_ALLOWED_ORIGIN_PATTERN: ${{ secrets.RCP_ALLOWED_ORIGIN_PATTERN }}
RCP_DEFAULT_NETWORK_ID: ${{ secrets.RCP_DEFAULT_NETWORK_ID }}
with:
host: ${{ secrets.SERVER_HOST }}
username: ${{ secrets.SERVER_USER }}
key: ${{ secrets.SERVER_KEY }}
envs: ${{ env.ENV_LIST }}
script: |
set -euo pipefail
mkdir -p ~/rcp-server
# known_hosts는 서비스 계정(return) 홈 하위에 둬서 sudo 없이 생성한다.
# 서버(rcp-server)는 RCP_VM_KNOWN_HOSTS_PATH로 같은 경로를 읽는다.
_KH="${RCP_VM_KNOWN_HOSTS_PATH:-${RCP_SSH_GW_KNOWN_HOSTS_PATH:-$HOME/rcp-server/known_hosts}}"
RCP_VM_KNOWN_HOSTS_PATH="$_KH"
mkdir -p "$(dirname "$_KH")"
touch "$_KH"
chmod 0640 "$_KH"
umask 077
: > ~/rcp-server/.env
IFS=',' read -ra _VARS <<< "${{ env.ENV_LIST }}"
for _v in "${_VARS[@]}"; do
printf '%s=%s\n' "$_v" "${!_v}" >> ~/rcp-server/.env
done
chmod 0600 ~/rcp-server/.env
- name: Install systemd unit
uses: appleboy/ssh-action@v0.1.10
with:
host: ${{ secrets.SERVER_HOST }}
username: ${{ secrets.SERVER_USER }}
key: ${{ secrets.SERVER_KEY }}
script: |
set -euo pipefail
sudo install -m 0644 -o root -g root \
/tmp/rcp-deploy/deploy/systemd/rcp-server.service \
/etc/systemd/system/rcp-server.service
sudo systemctl daemon-reload
sudo systemctl enable rcp-server
- name: Restart service
uses: appleboy/ssh-action@v0.1.10
with:
host: ${{ secrets.SERVER_HOST }}
username: ${{ secrets.SERVER_USER }}
key: ${{ secrets.SERVER_KEY }}
script: |
set -euo pipefail
sudo systemctl restart rcp-server
- name: Cleanup deploy artifacts
if: always()
uses: appleboy/ssh-action@v0.1.10
with:
host: ${{ secrets.SERVER_HOST }}
username: ${{ secrets.SERVER_USER }}
key: ${{ secrets.SERVER_KEY }}
script: |
set -euo pipefail
rm -rf /tmp/rcp-deploy