Files
2026-05-26 06:59:37 +00:00

75 lines
2.6 KiB
YAML

name: CI - Build and Push Docker Image
on:
push:
branches: ["main", "master"]
workflow_dispatch:
jobs:
docker-build-push:
runs-on: docker-build
outputs:
image_ref: ${{ steps.vars.outputs.image_ref }}
image_branch_tag: ${{ steps.vars.outputs.image_branch_tag }}
steps:
- name: Checkout source
uses: http://${{ secrets.READ_REPOSITORY_TOKEN }}@gitea.rellet.ir/mirrors/actions-checkout@4.3.1
- name: Prepare vars
id: vars
run: |
REGISTRY="gitea.rellet.ir"
IMAGE="${GITHUB_REPOSITORY,,}"
TAG_SHORT="${GITHUB_SHA:0:7}"
TAG_BRANCH="${GITHUB_REF_NAME}"
echo "REGISTRY=$REGISTRY" >> $GITHUB_ENV
echo "IMAGE=$IMAGE" >> $GITHUB_ENV
echo "TAG_SHORT=$TAG_SHORT" >> $GITHUB_ENV
echo "TAG_BRANCH=$TAG_BRANCH" >> $GITHUB_ENV
# Export to downstream jobs so deploy doesn't rebuild the string
echo "image_ref=$REGISTRY/$IMAGE:$TAG_SHORT" >> $GITHUB_OUTPUT
echo "image_branch_tag=$REGISTRY/$IMAGE:$TAG_BRANCH" >> $GITHUB_OUTPUT
- name: Login to registries
run: |
echo "${{ secrets.REGISTRY_PASSWORD }}" | docker login 127.0.0.1:3000 -u "${{ secrets.REGISTRY_USER }}" --password-stdin
echo "${{ secrets.REGISTRY_PASSWORD }}" | docker login gitea.rellet.ir -u "${{ secrets.REGISTRY_USER }}" --password-stdin
- name: Build and Push
run: |
docker buildx build \
--file test-worker-1/Dockerfile \
-t $REGISTRY/$IMAGE:$TAG_SHORT \
-t $REGISTRY/$IMAGE:$TAG_BRANCH \
--push \
.
deploy:
runs-on: docker-build
needs: docker-build-push
if: github.ref_name == 'main' || github.ref_name == 'master'
steps:
- name: Deploy to server
uses: http://${{ secrets.READ_REPOSITORY_TOKEN }}@gitea.rellet.ir/mirrors/appleboy-ssh-action@1.2.7
with:
host: ${{ secrets.SSH_HOST }}
username: ${{ secrets.SSH_USER }}
key: ${{ secrets.SSH_PRIVATE_KEY }}
port: ${{ secrets.SSH_PORT || '22' }}
script: |
IMAGE="${{ needs.docker-build-push.outputs.image_ref }}"
echo "Pulling $IMAGE"
docker pull $IMAGE
echo "Stopping old container"
docker stop test-worker-1 || true
docker rm test-worker-1 || true
echo "Starting new worker container"
docker run -d \
--name test-worker-1 \
--restart unless-stopped \
-e DOTNET_ENVIRONMENT=Production \
$IMAGE