diff --git a/.github/workflows/build-and-deploy.yaml b/.github/workflows/build-and-deploy.yaml new file mode 100644 index 0000000..ca3b079 --- /dev/null +++ b/.github/workflows/build-and-deploy.yaml @@ -0,0 +1,71 @@ +name: build and deploy +on: + push: + branches: + - main + workflow_dispatch: + +env: + REGISTRY_URL: ghcr.io + REGISTRY_USERNAME: azamatkomaev + REGISTRY_PASSWORD: ${{ secrets.REGISTRY_PASSWORD }} + IMAGE_TAG: ${{ github.sha }} + + SSH_AUTH_SOCK: /tmp/ssh_agent.sock + SSH_HOST: ${{ secrets.SSH_HOST }} + SSH_USER: ${{ secrets.SSH_USER }} + SSH_PORT: ${{ secrets.SSH_PORT }} + + +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Login with Github Container registry + uses: docker/login-action@v2 + with: + registry: ${{ env.REGISTRY_URL }} + username: ${{ env.REGISTRY_USERNAME }} + password: ${{ env.REGISTRY_PASSWORD }} + - name: Add custom builder + run: | + docker buildx create \ + --name container-builder \ + --driver docker-container \ + --bootstrap --use + - name: Build & Publish backend to Github Container registry + run: | + docker buildx build --platform linux/amd64,linux/arm64 --push ./backend \ + --tag $REGISTRY_URL/$REGISTRY_USERNAME/yet_another_calendar_backend:latest \ + --tag $REGISTRY_URL/$REGISTRY_USERNAME/yet_another_calendar_backend:$IMAGE_TAG + + - name: Build & Publish frontend to Github Container registry + run: | + docker buildx build --platform linux/amd64,linux/arm64 --push ./frontend \ + --tag $REGISTRY_URL/$REGISTRY_USERNAME/yet_another_calendar_frontend:latest \ + --tag $REGISTRY_URL/$REGISTRY_USERNAME/yet_another_calendar_frontend:$IMAGE_TAG + + deploy: + runs-on: ubuntu-latest + needs: [build] + steps: + - uses: actions/checkout@v4 + - run: 'command -v ssh-agent >/dev/null || ( apt-get update -y && apt-get install openssh-client -y )' + - name: Set up SSH private key. + run: eval "$(ssh-agent -s)" + - run: mkdir -p ~/.ssh + - run: ssh-keyscan -p $SSH_PORT $SSH_HOST >> ~/.ssh/known_hosts + - run: ssh-agent -a $SSH_AUTH_SOCK > /dev/null + - run: ssh-add - <<< "${{ secrets.SSH_KEY }}" + - name: Add image tag to .version file + run: | + echo $IMAGE_TAG > .version + scp -P 666 .version $SSH_USER@$SSH_HOST:~/YetAnotherCalendar/.version + + - name: Update docker compose + run: | + ssh $SSH_USER@$SSH_HOST -p $SSH_PORT "cd YetAnotherCalendar/ && git pull origin main && + YET_ANOTHER_CALENDAR_VERSION=$(cat .version) docker compose -f docker-compose.prod.yaml pull && + YET_ANOTHER_CALENDAR_VERSION=$(cat .version) docker compose -f docker-compose.prod.yaml up -d" + \ No newline at end of file diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index 1f1155f..0f864a8 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -3,7 +3,6 @@ on: push: branches: - dev - - main paths-ignore: - "README.md" workflow_dispatch: @@ -18,7 +17,7 @@ jobs: build: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - name: Login with Github Container registry uses: docker/login-action@v2 with: diff --git a/.github/workflows/deploy.yaml b/.github/workflows/deploy.yaml deleted file mode 100644 index a241dd7..0000000 --- a/.github/workflows/deploy.yaml +++ /dev/null @@ -1,45 +0,0 @@ -name: deploy -on: - push: - branches: - - main - workflow_run: - workflows: [build] - types: - - completed - branches: - - main - workflow_dispatch: - -env: - IMAGE_TAG: ${{ github.sha }} - SSH_AUTH_SOCK: /tmp/ssh_agent.sock - SSH_HOST: ${{ secrets.SSH_HOST }} - SSH_USER: ${{ secrets.SSH_USER }} - SSH_PORT: ${{ secrets.SSH_PORT }} - - -jobs: - deploy: - runs-on: ubuntu-latest - if: ${{ github.event.workflow_run.conclusion == 'success' }} - steps: - - uses: actions/checkout@v4 - - run: 'command -v ssh-agent >/dev/null || ( apt-get update -y && apt-get install openssh-client -y )' - - name: Set up SSH private key. - run: eval "$(ssh-agent -s)" - - run: mkdir -p ~/.ssh - - run: ssh-keyscan -p $SSH_PORT $SSH_HOST >> ~/.ssh/known_hosts - - run: ssh-agent -a $SSH_AUTH_SOCK > /dev/null - - run: ssh-add - <<< "${{ secrets.SSH_KEY }}" - - name: Add image tag to .version file - run: | - echo $IMAGE_TAG > .version - scp -P 666 .version $SSH_USER@$SSH_HOST:~/YetAnotherCalendar/.version - - - name: Update docker compose - run: | - ssh $SSH_USER@$SSH_HOST -p $SSH_PORT "cd YetAnotherCalendar/ && git pull origin main && - YET_ANOTHER_CALENDAR_VERSION=$(cat .version) docker compose -f docker-compose.prod.yaml pull && - YET_ANOTHER_CALENDAR_VERSION=$(cat .version) docker compose -f docker-compose.prod.yaml up -d" - \ No newline at end of file