diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index ccc7fd8955..6e63b34a1b 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,9 +1,9 @@ name: GitHub CI -on: +#on: pull_request: push: - schedule: + # schedule: - cron: 0 0 * * 0 workflow_dispatch: @@ -48,3 +48,4 @@ jobs: run: ${{ matrix.runs.test }} - name: '"docker images"' run: ${{ matrix.runs.images }} + diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml new file mode 100644 index 0000000000..55cabf6011 --- /dev/null +++ b/.github/workflows/deploy.yml @@ -0,0 +1,99 @@ +name: CI/CD for PostgreSQL Docker - Build, Push, and Deploy + +on: + workflow_dispatch: + inputs: + environment: + description: 'Environment to deploy (Development/Production)' + required: true + default: 'development' + postgres_version: + description: 'PostgreSQL Version' + required: true + default: '17.0' + +jobs: + build-and-push: + name: Build and Push PostgreSQL Docker Image + runs-on: ubuntu-latest + + steps: + - name: Checkout Postgres Repository + uses: actions/checkout@v3 + with: + repository: trplgit/postgres + token: ${{ secrets.GH_TOKEN }} + path: postgres + + - name: Set up Docker + uses: docker/setup-buildx-action@v2 + with: + version: latest + + - name: Log in to Azure Container Registry + uses: azure/docker-login@v1 + with: + login-server: ${{ vars.ACR_NAME }}.azurecr.io + username: ${{ vars.ACR_USERNAME }} + password: ${{ secrets.ACR_PASSWORD }} + + - name: Build and Push Postgres Docker Image + run: | + docker build -f ./postgres/17/alpine3.21/Dockerfile -t ${{ vars.ACR_NAME }}.azurecr.io/${{ inputs.environment }}/trpl-postgres-docker:v17 ./postgres/17/alpine3.21 + docker push ${{ vars.ACR_NAME }}.azurecr.io/${{ inputs.environment }}/trpl-postgres-docker:v17 + + deploy: + name: Deploy PostgreSQL Docker Container to Linux VM + runs-on: ubuntu-latest + needs: build-and-push + + steps: + - name: Install OpenVPN + run: sudo apt-get install -y openvpn + + - name: Prepare VPN Files + run: | + echo "${{ secrets.VPN_PKCS12_FILE }}" | base64 -d > TRPL-FW-TCP-1194-ci-cd-automation.p12 + echo "${{ secrets.VPN_TLS_KEY_FILE }}" | base64 -d > TRPL-FW-TCP-1194-ci-cd-automation-tls.key + + - name: Connect to VPN + run: | + echo "${{ secrets.VPN_CONFIG_FILE }}" > vpn-config.ovpn + echo -e "${{ vars.VPN_USERNAME }}\n${{ secrets.VPN_PASSWORD }}" > vpn-credentials.txt + sudo openvpn --config vpn-config.ovpn --auth-user-pass vpn-credentials.txt --daemon + + - name: Wait for VPN Connection + run: sleep 15 + + - name: Verify VPN Connection + run: | + ifconfig | grep tun || (echo "VPN connection failed" && exit 1) + + - name: Add user to Docker group + run: | + sudo usermod -aG docker $USER + newgrp docker || true + + - name: Create Docker Network if not exists + run: | + echo "${{ secrets.LINUX_VM_PASSWORD_DEVELOPMENT }}" | sudo -S docker network create odoo-postgres-network || echo "Network already exists" + + - name: Deploy PostgreSQL Docker Container to VM + uses: appleboy/ssh-action@v0.1.6 + with: + host: ${{ vars.LINUX_VM_HOST_DEVELOPMENT }} + username: ${{ vars.LINUX_VM_USERNAME_DEVELOPMENT }} + password: ${{ secrets.LINUX_VM_PASSWORD_DEVELOPMENT }} + port: 22 + script: | + echo "${{ secrets.LINUX_VM_PASSWORD_DEVELOPMENT }}" | sudo -S docker login ${{ vars.ACR_NAME }}.azurecr.io -u ${{ vars.ACR_USERNAME }} -p ${{ secrets.ACR_PASSWORD }} + echo "${{ secrets.LINUX_VM_PASSWORD_DEVELOPMENT }}" | sudo -S docker pull ${{ vars.ACR_NAME }}.azurecr.io/${{ inputs.environment }}/trpl-postgres-docker:v17 + echo "${{ secrets.LINUX_VM_PASSWORD_DEVELOPMENT }}" | sudo -S docker stop postgres-container || true + echo "${{ secrets.LINUX_VM_PASSWORD_DEVELOPMENT }}" | sudo -S docker rm postgres-container || true + + # Run Postgres container (PostgreSQL 17) + echo "${{ secrets.LINUX_VM_PASSWORD_DEVELOPMENT }}" | sudo -S docker run -d --restart always --name postgres-container --network=odoo-postgres-network -e POSTGRES_PASSWORD=mysecretpassword -p 5433:5433 ${{ vars.ACR_NAME }}.azurecr.io/${{ inputs.environment }}/trpl-postgres-docker:v17 + + - name: Cleanup VPN Credentials + run: | + rm -f vpn-config.ovpn vpn-credentials.txt diff --git a/17/alpine3.21/Dockerfile b/17/alpine3.21/Dockerfile index 47ba840f90..82b8c1d0b6 100644 --- a/17/alpine3.21/Dockerfile +++ b/17/alpine3.21/Dockerfile @@ -133,7 +133,7 @@ RUN set -eux; \ # --enable-debug \ --disable-rpath \ --with-uuid=e2fs \ - --with-pgport=5432 \ + --with-pgport=5433 \ --with-system-tzdata=/usr/share/zoneinfo \ --prefix=/usr/local \ --with-includes=/usr/local/include \ diff --git a/17/alpine3.21/docker-entrypoint.sh b/17/alpine3.21/docker-entrypoint.sh index d09b5388a0..dbafa345d2 100755 --- a/17/alpine3.21/docker-entrypoint.sh +++ b/17/alpine3.21/docker-entrypoint.sh @@ -267,7 +267,7 @@ docker_temp_server_start() { # internal start of server in order to allow setup using psql client # does not listen on external TCP/IP and waits until start finishes - set -- "$@" -c listen_addresses='' -p "${PGPORT:-5432}" + set -- "$@" -c listen_addresses='' -p "${PGPORT:-5433}" PGUSER="${PGUSER:-$POSTGRES_USER}" \ pg_ctl -D "$PGDATA" \