name: mws-frontend on: push: branches: - main env: DOCKERHUB_REPO: mws-frontend CONTAINER_NAME: mws-frontend HOST_PORT: "3000" CONTAINER_PORT: "80" VITE_API_BASE_URL: https://mws-api.koda.id.vn jobs: build: runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v4 - name: Build Docker image run: | IMAGE_BASE="${{ secrets.REGISTRY_USER }}/${{ env.DOCKERHUB_REPO }}" docker build \ --build-arg VITE_API_BASE_URL="${{ env.VITE_API_BASE_URL }}" \ -t "$IMAGE_BASE:${{ github.sha }}" \ -t "$IMAGE_BASE:latest" . push: needs: build runs-on: ubuntu-latest steps: - name: Login and push to Docker Hub run: | IMAGE_BASE="${{ secrets.REGISTRY_USER }}/${{ env.DOCKERHUB_REPO }}" echo "${{ secrets.REGISTRY_PASSWORD }}" | docker login -u "${{ secrets.REGISTRY_USER }}" --password-stdin docker push "$IMAGE_BASE:${{ github.sha }}" docker push "$IMAGE_BASE:latest" docker logout deploy: needs: push runs-on: ubuntu-latest steps: - name: Pull & run new container run: | IMAGE_BASE="${{ secrets.REGISTRY_USER }}/${{ env.DOCKERHUB_REPO }}" echo "${{ secrets.REGISTRY_PASSWORD }}" | docker login -u "${{ secrets.REGISTRY_USER }}" --password-stdin docker pull "$IMAGE_BASE:${{ github.sha }}" docker logout docker stop "${{ env.CONTAINER_NAME }}" 2>/dev/null || true docker rm "${{ env.CONTAINER_NAME }}" 2>/dev/null || true docker run -d \ --name "${{ env.CONTAINER_NAME }}" \ --restart unless-stopped \ -p "${{ env.HOST_PORT }}:${{ env.CONTAINER_PORT }}" \ "$IMAGE_BASE:${{ github.sha }}" docker images "$IMAGE_BASE" --format '{{.Repository}}:{{.Tag}}' \ | grep -v -e ':latest$' -e ":${{ github.sha }}$" \ | xargs -r docker rmi || true