diff --git a/.github/workflows/point-of-sale-docker-ab.yml b/.github/workflows/point-of-sale-docker-ab.yml new file mode 100644 index 00000000..086a30eb --- /dev/null +++ b/.github/workflows/point-of-sale-docker-ab.yml @@ -0,0 +1,76 @@ +name: Point of Sale - Dockerize - AB Test + +on: + workflow_dispatch: + push: + branches: [ develop ] + pull_request: + branches: [ develop ] + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +jobs: + dockerize: + runs-on: ubuntu-latest + container: + image: docker:dind + steps: + - name: upgrade git + run: | + apk add --update + apk add git + git --version + + - name: Checkout repository + uses: actions/checkout@v4 + with: + path: . + fetch-depth: 0 + fetch-tags: true + + - name: Set up environment - main + env: + ENV_FILE: ${{ vars.ENV_FILE_PRODUCTION }} + run: | + echo "${ENV_FILE}" > ./apps/point-of-sale/.env + + - name: Get Docker meta (for tags) + id: meta + uses: docker/metadata-action@v4 + with: + # list of Docker images to use as base name for tags + images: | + ${{ vars.DOCKER_REGISTRY }}/${{ vars.DOCKER_TAG_POS }} + # generate Docker tags based on the following events/attributes + tags: | + type=ref,event=branch,pattern={{branch}}-AB + type=semver,pattern={{version}} + + - name: Set up QEMU + uses: docker/setup-qemu-action@v2 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v2 + + - name: Login to SudoSOS Container Registry + if: ${{ github.event_name == 'push' || github.event_name == 'workflow_dispatch' }} + uses: docker/login-action@v2 + with: + registry: ${{ vars.DOCKER_REGISTRY }} + username: ${{ secrets.SVC_GH_SUDOSOS_USERNAME }} + password: ${{ secrets.SVC_GH_SUDOSOS_PWD }} + + # Build and push Docker image with Buildx + - name: Build and push + uses: docker/build-push-action@v3 + with: + context: . + platforms: linux/amd64 #SudoSOS does not run on linux/arm64 + push: ${{ github.event_name == 'push' || github.event_name == 'workflow_dispatch' }} + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} + cache-from: type=gha + cache-to: type=gha,mode=max + file: "apps/point-of-sale/Dockerfile" \ No newline at end of file diff --git a/.github/workflows/point-of-sale-docker.yml b/.github/workflows/point-of-sale-docker.yml index 693659ef..31ee7e12 100644 --- a/.github/workflows/point-of-sale-docker.yml +++ b/.github/workflows/point-of-sale-docker.yml @@ -21,6 +21,8 @@ jobs: uses: actions/checkout@v4 with: path: . + fetch-depth: 0 + fetch-tags: true - name: Set up environment - main env: diff --git a/apps/point-of-sale/Dockerfile b/apps/point-of-sale/Dockerfile index 93bf4dc6..63cbe272 100644 --- a/apps/point-of-sale/Dockerfile +++ b/apps/point-of-sale/Dockerfile @@ -4,6 +4,7 @@ WORKDIR /app COPY lib/common/ lib/common/ COPY apps/point-of-sale/package.json apps/point-of-sale/ COPY ./package.json ./package-lock.json ./ +COPY ./.git ./ RUN npm install COPY apps/point-of-sale/ apps/point-of-sale/ RUN npm run build --workspace=sudosos-point-of-sale diff --git a/apps/point-of-sale/env.d.ts b/apps/point-of-sale/env.d.ts index 11f02fe2..c2c38d64 100644 --- a/apps/point-of-sale/env.d.ts +++ b/apps/point-of-sale/env.d.ts @@ -1 +1,3 @@ /// +declare const __GIT_BRANCH__: string; +declare const __GIT_COMMIT__: string; diff --git a/apps/point-of-sale/src/components/GitInfo.vue b/apps/point-of-sale/src/components/GitInfo.vue new file mode 100644 index 00000000..fdc6b3c6 --- /dev/null +++ b/apps/point-of-sale/src/components/GitInfo.vue @@ -0,0 +1,15 @@ + + + + + diff --git a/apps/point-of-sale/src/views/LoginView.vue b/apps/point-of-sale/src/views/LoginView.vue index 6f57f8fe..6e2bcb0a 100644 --- a/apps/point-of-sale/src/views/LoginView.vue +++ b/apps/point-of-sale/src/views/LoginView.vue @@ -29,6 +29,7 @@ + @@ -43,6 +44,7 @@ import { useCartStore } from '@/stores/cart.store'; import apiService from '@/services/ApiService'; import BannerComponent from '@/components/Banner/BannerComponent.vue'; import EanLoginComponent from "@/components/EanLoginComponent.vue"; +import GitInfo from "@/components/GitInfo.vue"; const userStore = useUserStore(); const authStore = useAuthStore(); diff --git a/apps/point-of-sale/vite.config.plugin-git-info.ts b/apps/point-of-sale/vite.config.plugin-git-info.ts new file mode 100644 index 00000000..cb17ed25 --- /dev/null +++ b/apps/point-of-sale/vite.config.plugin-git-info.ts @@ -0,0 +1,20 @@ +import { execSync } from 'child_process'; + +export default function useGitInfo(): Record { + let branch: string, commit: string; + try { + branch = execSync('git rev-parse --abbrev-ref HEAD').toString().trim(); + commit = execSync('git rev-parse --short HEAD').toString().trim(); + } catch (error) { + console.error(error); + branch = 'unknown'; + commit = 'unknown'; + } + + console.error(branch, commit); + + return { + __GIT_BRANCH__: JSON.stringify(branch), + __GIT_COMMIT__: JSON.stringify(commit), + }; +} diff --git a/apps/point-of-sale/vite.config.ts b/apps/point-of-sale/vite.config.ts index 4e8ecd08..a2e263c3 100644 --- a/apps/point-of-sale/vite.config.ts +++ b/apps/point-of-sale/vite.config.ts @@ -1,6 +1,7 @@ import { fileURLToPath, URL } from 'node:url'; import { defineConfig } from 'vite'; import vue from '@vitejs/plugin-vue'; +import useGitInfo from "./vite.config.plugin-git-info"; // https://vitejs.dev/config/ export default defineConfig({ @@ -23,5 +24,8 @@ export default defineConfig({ }, server: { port: 5174 + }, + define: { + ...useGitInfo(), } });