This commit is contained in:
@@ -63,7 +63,7 @@ jobs:
|
|||||||
- name: Redeploy stack in Portainer
|
- name: Redeploy stack in Portainer
|
||||||
run: |
|
run: |
|
||||||
# Read stack file content
|
# Read stack file content
|
||||||
STACK_FILE_CONTENT=$(echo "$(<web-compose.yml )")
|
STACK_FILE_CONTENT=$(echo "$(<docker-compose.prod.yml )")
|
||||||
|
|
||||||
# Read existing environment variables from the fetched stack
|
# Read existing environment variables from the fetched stack
|
||||||
ENV_VARS=$(cat stack_env.json)
|
ENV_VARS=$(cat stack_env.json)
|
||||||
|
|||||||
@@ -1,89 +0,0 @@
|
|||||||
# https://docs.github.com/en/actions/writing-workflows/workflow-syntax-for-github-actions
|
|
||||||
name: Build Images and Deploy
|
|
||||||
run-name: ${{ gitea.actor }} is building new PROD images and redeploying the existing stack 🚀
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
# not working right now https://github.com/actions/runner/issues/2324
|
|
||||||
# paths-ignore:
|
|
||||||
# - **.yml
|
|
||||||
branches:
|
|
||||||
- main
|
|
||||||
|
|
||||||
env:
|
|
||||||
STACK_NAME: hashex
|
|
||||||
DOT_ENV: ${{ secrets.PROD_ENV }}
|
|
||||||
PORTAINER_TOKEN: ${{ vars.PORTAINER_TOKEN }}
|
|
||||||
PORTAINER_API_URL: https://portainer.dev.nervesocket.com/api
|
|
||||||
ENDPOINT_NAME: "mini" #sometimes "primary"
|
|
||||||
IMAGE_TAG: "reg.dev.nervesocket.com/hashex:latest"
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
Update-PROD-Stack:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
# if: contains(github.event.pull_request.head.ref, 'init-stack')
|
|
||||||
- name: Checkout
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
ref: main
|
|
||||||
|
|
||||||
- name: Set up Docker Buildx
|
|
||||||
uses: docker/setup-buildx-action@v1
|
|
||||||
|
|
||||||
- name: Build and push PROD Docker image
|
|
||||||
run: |
|
|
||||||
echo $DOT_ENV | base64 -d > .env
|
|
||||||
docker buildx build --push -f Dockerfile -t $IMAGE_TAG .
|
|
||||||
|
|
||||||
- name: Get the endpoint ID
|
|
||||||
# Usually ID is 1, but you can get it from the API. Only skip this if you are VERY sure.
|
|
||||||
run: |
|
|
||||||
ENDPOINT_ID=$(curl -s -H "X-API-Key: $PORTAINER_TOKEN" "$PORTAINER_API_URL/endpoints" | jq -r ".[] | select(.Name==\"$ENDPOINT_NAME\") | .Id")
|
|
||||||
echo "ENDPOINT_ID=$ENDPOINT_ID" >> $GITHUB_ENV
|
|
||||||
echo "Got stack Endpoint ID: $ENDPOINT_ID"
|
|
||||||
|
|
||||||
- name: Fetch stack ID from Portainer
|
|
||||||
run: |
|
|
||||||
STACK_ID=$(curl -s -H "X-API-Key: $PORTAINER_TOKEN" "$PORTAINER_API_URL/stacks" | jq -r ".[] | select(.Name==\"$STACK_NAME\" and .EndpointId==$ENDPOINT_ID) | .Id")
|
|
||||||
|
|
||||||
echo "STACK_ID=$STACK_ID" >> $GITHUB_ENV
|
|
||||||
echo "Got stack ID: $STACK_ID matched with Endpoint ID: $ENDPOINT_ID"
|
|
||||||
|
|
||||||
- name: Fetch Stack
|
|
||||||
run: |
|
|
||||||
# Get the stack details (including env vars)
|
|
||||||
STACK_DETAILS=$(curl -s -H "X-API-Key: $PORTAINER_TOKEN" "$PORTAINER_API_URL/stacks/$STACK_ID")
|
|
||||||
|
|
||||||
# Extract environment variables from the stack
|
|
||||||
echo "$STACK_DETAILS" | jq -r '.Env' > stack_env.json
|
|
||||||
|
|
||||||
echo "Existing stack environment variables:"
|
|
||||||
cat stack_env.json
|
|
||||||
|
|
||||||
- name: Redeploy stack in Portainer
|
|
||||||
run: |
|
|
||||||
# Read stack file content
|
|
||||||
STACK_FILE_CONTENT=$(echo "$(<prod-compose.yml )")
|
|
||||||
|
|
||||||
# Read existing environment variables from the fetched stack
|
|
||||||
ENV_VARS=$(cat stack_env.json)
|
|
||||||
|
|
||||||
# Prepare JSON payload with environment variables
|
|
||||||
JSON_PAYLOAD=$(jq -n --arg stackFileContent "$STACK_FILE_CONTENT" --argjson pullImage true --argjson env "$ENV_VARS" \
|
|
||||||
'{stackFileContent: $stackFileContent, pullImage: $pullImage, env: $env}')
|
|
||||||
|
|
||||||
echo "About to push the following JSON payload:"
|
|
||||||
echo $JSON_PAYLOAD
|
|
||||||
|
|
||||||
# Update stack in Portainer (this redeploys it)
|
|
||||||
DEPLOY_RESPONSE=$(curl -X PUT "$PORTAINER_API_URL/stacks/$STACK_ID?endpointId=$ENDPOINT_ID" \
|
|
||||||
-H "X-API-Key: $PORTAINER_TOKEN" \
|
|
||||||
-H "Content-Type: application/json" \
|
|
||||||
--data "$JSON_PAYLOAD")
|
|
||||||
|
|
||||||
echo "Redeployed stack in Portainer. Response:"
|
|
||||||
echo $DEPLOY_RESPONSE
|
|
||||||
|
|
||||||
- name: Status check
|
|
||||||
run: |
|
|
||||||
echo "📋 This job's status is ${{ job.status }}. Make sure you delete the init file to avoid issues."
|
|
||||||
@@ -1,5 +1,3 @@
|
|||||||
version: '3.8'
|
|
||||||
|
|
||||||
services:
|
services:
|
||||||
dibbly-web:
|
dibbly-web:
|
||||||
image: reg.dev.nervesocket.com/dibbly:latest
|
image: reg.dev.nervesocket.com/dibbly:latest
|
||||||
@@ -14,11 +12,6 @@ services:
|
|||||||
- DATA_DIR=/data
|
- DATA_DIR=/data
|
||||||
- PORT=3456
|
- PORT=3456
|
||||||
- NODE_ENV=production
|
- NODE_ENV=production
|
||||||
networks:
|
|
||||||
- dibbly-network
|
|
||||||
# Use host networking on Linux for Wemo SSDP discovery
|
|
||||||
# Uncomment the line below if running on Linux
|
|
||||||
# network_mode: host
|
|
||||||
healthcheck:
|
healthcheck:
|
||||||
test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:3456/"]
|
test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:3456/"]
|
||||||
interval: 30s
|
interval: 30s
|
||||||
@@ -37,30 +30,8 @@ services:
|
|||||||
reservations:
|
reservations:
|
||||||
memory: 128M
|
memory: 128M
|
||||||
|
|
||||||
# Optional: Reverse proxy for SSL termination
|
|
||||||
nginx:
|
|
||||||
image: nginx:alpine
|
|
||||||
container_name: dibbly-nginx
|
|
||||||
restart: always
|
|
||||||
ports:
|
|
||||||
- "80:80"
|
|
||||||
- "443:443"
|
|
||||||
volumes:
|
|
||||||
- ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro
|
|
||||||
- ./nginx/ssl:/etc/nginx/ssl:ro
|
|
||||||
networks:
|
|
||||||
- dibbly-network
|
|
||||||
depends_on:
|
|
||||||
- dibbly-web
|
|
||||||
profiles:
|
|
||||||
- with-nginx
|
|
||||||
|
|
||||||
volumes:
|
volumes:
|
||||||
dibbly-data:
|
dibbly-data:
|
||||||
driver: local
|
driver: local
|
||||||
dibbly-logs:
|
dibbly-logs:
|
||||||
driver: local
|
driver: local
|
||||||
|
|
||||||
networks:
|
|
||||||
dibbly-network:
|
|
||||||
driver: bridge
|
|
||||||
|
|||||||
Reference in New Issue
Block a user