Skip to content

Commit 3932da0

Browse files
committed
ci: deploy over Tailscale SSH with self-healing project dir
- Add Tailscale connect step before SSH agent - Add ensure-project-dir step (clone if missing) before scp - Move non-sensitive config (Discord IDs, VPS_USER/HOST) to vars - Rename container to snake_case rpl_skandakra_bot
1 parent 1bc4b36 commit 3932da0

3 files changed

Lines changed: 36 additions & 15 deletions

File tree

.env.example

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,3 +16,7 @@ CH_RULES_ID=
1616
# List roles
1717
ROLE_ADMIN_ID=
1818
ROLE_MEMBER_ID=
19+
20+
# Deployment keys (required on Actions)
21+
TS_OAUTH_CLIENT_ID=
22+
TS_OAUTH_SECRET=

.github/workflows/deploy.yml

Lines changed: 31 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -15,38 +15,55 @@ jobs:
1515

1616
steps:
1717
- name: Checkout code
18-
uses: actions/checkout@v4
18+
uses: actions/checkout@v5
1919

2020
- name: Create .env file
2121
run: |
2222
echo "# Bot credentials" > .env
2323
echo "BOT_TOKEN=${{ secrets.BOT_TOKEN }}" >> .env
24-
echo "BOT_ID=${{ secrets.BOT_ID }}" >> .env
24+
echo "BOT_ID=${{ vars.BOT_ID }}" >> .env
2525
echo -e "\n# Server id" >> .env
26-
echo "SERVER_ID=${{ secrets.SERVER_ID }}" >> .env
26+
echo "SERVER_ID=${{ vars.SERVER_ID }}" >> .env
2727
echo -e "\n# List channels" >> .env
28-
echo "CH_INTRO_ID=${{ secrets.CH_INTRO_ID }}" >> .env
29-
echo "CH_LEAVE_ID=${{ secrets.CH_LEAVE_ID }}" >> .env
30-
echo "CH_LOBBY_ID=${{ secrets.CH_LOBBY_ID }}" >> .env
31-
echo "CH_LOG_ID=${{ secrets.CH_LOG_ID }}" >> .env
32-
echo "CH_ROLE_ID=${{ secrets.CH_ROLE_ID }}" >> .env
33-
echo "CH_RULES_ID=${{ secrets.CH_RULES_ID }}" >> .env
28+
echo "CH_INTRO_ID=${{ vars.CH_INTRO_ID }}" >> .env
29+
echo "CH_LEAVE_ID=${{ vars.CH_LEAVE_ID }}" >> .env
30+
echo "CH_LOBBY_ID=${{ vars.CH_LOBBY_ID }}" >> .env
31+
echo "CH_LOG_ID=${{ vars.CH_LOG_ID }}" >> .env
32+
echo "CH_ROLE_ID=${{ vars.CH_ROLE_ID }}" >> .env
33+
echo "CH_RULES_ID=${{ vars.CH_RULES_ID }}" >> .env
3434
echo -e "\n# List roles" >> .env
35-
echo "ROLE_ADMIN_ID=${{ secrets.ROLE_ADMIN_ID }}" >> .env
36-
echo "ROLE_MEMBER_ID=${{ secrets.ROLE_MEMBER_ID }}" >> .env
35+
echo "ROLE_ADMIN_ID=${{ vars.ROLE_ADMIN_ID }}" >> .env
36+
echo "ROLE_MEMBER_ID=${{ vars.ROLE_MEMBER_ID }}" >> .env
37+
38+
- name: Connect to Tailscale
39+
uses: tailscale/github-action@v4
40+
with:
41+
oauth-client-id: ${{ secrets.TS_OAUTH_CLIENT_ID }}
42+
oauth-secret: ${{ secrets.TS_OAUTH_SECRET }}
43+
tags: tag:ci
3744

3845
- name: Set up SSH agent for deployment
39-
uses: webfactory/ssh-agent@v0.9.0
46+
uses: webfactory/ssh-agent@v0.10.0
4047
with:
4148
ssh-private-key: ${{ secrets.VPS_PRIVATE_KEY }}
4249

50+
- name: Ensure project directory exists on VPS
51+
run: |
52+
ssh -o StrictHostKeyChecking=no ${{ vars.VPS_USER }}@${{ vars.VPS_HOST }} << 'EOF'
53+
mkdir -p ~/apps/${{ env.APP_NAME }}
54+
cd ~/apps/${{ env.APP_NAME }}
55+
if [ ! -d .git ]; then
56+
git clone ${{ vars.REPO_URL }} .
57+
fi
58+
EOF
59+
4360
- name: Copy .env file to VPS
4461
run: |
45-
scp -o StrictHostKeyChecking=no .env ${{ secrets.VPS_USER }}@${{ secrets.VPS_HOST }}:~/apps/${{ env.APP_NAME }}/
62+
scp -o StrictHostKeyChecking=no .env ${{ vars.VPS_USER }}@${{ vars.VPS_HOST }}:~/apps/${{ env.APP_NAME }}/
4663
4764
- name: Deploy to VPS
4865
run: |
49-
ssh -o StrictHostKeyChecking=no ${{ secrets.VPS_USER }}@${{ secrets.VPS_HOST }} << 'EOF'
66+
ssh -o StrictHostKeyChecking=no ${{ vars.VPS_USER }}@${{ vars.VPS_HOST }} << 'EOF'
5067
# Navigate to project directory
5168
cd ~/apps/${{ env.APP_NAME }}
5269

docker-compose.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,5 @@ services:
44
context: .
55
dockerfile: Dockerfile
66
image: rpl-skandakra-bot:latest
7-
container_name: rpl-skandakra-bot
7+
container_name: rpl_skandakra_bot
88
restart: unless-stopped

0 commit comments

Comments
 (0)