16 Commits

Author SHA1 Message Date
Gitea Action
ecd298442b chore: update image tag to 589fa29 [skip ci] 2026-01-29 17:59:46 +00:00
589fa2913c fix: correct pipeline to update k8s manifest
All checks were successful
Build (develop) / Promote (main) / build-and-push-deploy (push) Successful in 1m21s
2026-01-29 14:58:20 -03:00
587d097d9b ci: restrict workflow triggers to main branch only
Some checks failed
Build (develop) / Promote (main) / build-and-push-deploy (push) Failing after 1m15s
2026-01-29 14:52:27 -03:00
a694af97c6 feat: add app controller with version and health check endpoints
All checks were successful
Build (develop) / Promote (main) / build-and-push-deploy (push) Successful in 1m33s
2026-01-29 14:48:57 -03:00
6523c5f520 feat: Add API endpoints for application version and health checks.
All checks were successful
Build (develop) / Promote (main) / build-and-push-deploy (push) Successful in 1m21s
2026-01-29 14:31:33 -03:00
0c09ee795e feat: migrate registry to gitea and simplify workflow
All checks were successful
Build (develop) / Promote (main) / build-and-push-deploy (push) Successful in 1m24s
2026-01-29 14:23:24 -03:00
09396e334d feat: migrate registry to gitea and simplify workflow
All checks were successful
Build (develop) / Promote (main) / build-and-push-deploy (push) Successful in 1m25s
2026-01-29 14:20:09 -03:00
605d68b4b0 feat: migrate registry to gitea and simplify workflow
All checks were successful
Build (develop) / Promote (main) / build-and-push-deploy (push) Successful in 7m16s
2026-01-29 14:06:35 -03:00
c707d4a065 feat: migrate registry to gitea and simplify workflow
Some checks failed
Build (develop) / Promote (main) / build-and-push-deploy (push) Has been cancelled
2026-01-29 13:50:01 -03:00
0b28379145 feat: migrate registry to gitea and simplify workflow
Some checks failed
Build (develop) / Promote (main) / build-and-push-deploy (push) Failing after 6s
2026-01-29 13:47:26 -03:00
ca43de8756 fix: use harbor domain instead of ip to fix ssl error
Some checks failed
Build (develop) / Promote (main) / build-and-push-deploy (push) Failing after 20s
2026-01-29 13:31:20 -03:00
bb21ca33e4 fix: update registry url to oci.simplifiquehc.com.br
Some checks failed
Build (develop) / Promote (main) / build-and-push-deploy (push) Failing after 22s
2026-01-29 13:26:13 -03:00
48d6e64ada fix: update registry url to oci.simplifiquehc.com.br
Some checks failed
Build (develop) / Promote (main) / build-and-push-deploy (push) Failing after 24s
2026-01-29 13:24:58 -03:00
e0731db836 fix: update registry url to oci.simplifiquehc.com.br
Some checks failed
Build (develop) / Promote (main) / build-and-push-deploy (push) Failing after 34s
2026-01-29 13:17:15 -03:00
d2265390bd chore: organize project and update service
Some checks failed
Build (develop) / Promote (main) / build-and-push-deploy (push) Failing after 23s
2026-01-29 12:55:15 -03:00
a34c7c415c fix: update workflow to support homolog branch
Some checks failed
Build (develop) / Promote (main) / build-and-push-deploy (push) Failing after 25s
2026-01-29 12:50:47 -03:00
7 changed files with 69 additions and 135 deletions

View File

@@ -1,7 +1,7 @@
name: Build (develop) / Promote (main) name: Build (develop) / Promote (main)
on: on:
push: push:
branches: [main, develop, homolog] branches: [main]
jobs: jobs:
build-and-push-deploy: build-and-push-deploy:
@@ -12,109 +12,28 @@ jobs:
with: with:
fetch-depth: 0 fetch-depth: 0
- name: Free disk space - name: Build and Push
run: | run: |
df -h REGISTRY="git.simplifiquehc.com.br"
sudo rm -rf /usr/share/dotnet /usr/local/lib/android /opt/ghc || true IMAGE_NAME="$REGISTRY/simplifique/vendaweb-api"
sudo apt-get clean || true SHA_TAG=$(echo ${{ gitea.sha }} | cut -c1-7)
docker system prune -af --volumes || true
df -h echo "${{ secrets.K8S }}" | docker login "$REGISTRY" -u "${{ gitea.actor }}" --password-stdin
- name: Build (develop) / Promote (main)
env: docker build -t "$IMAGE_NAME:$SHA_TAG" -t "$IMAGE_NAME:latest" .
REGISTRY: harbor.jurunense.com docker push "$IMAGE_NAME:$SHA_TAG"
DEV_PROJECT: vendaweb-dev docker push "$IMAGE_NAME:latest"
PROD_PROJECT: vendaweb-prod
IMAGE_REPO: vendaweb-api - name: Update Kubernetes Manifest
PROMOTE_LEGACY: 'false'
HARBOR_USERNAME: ${{ secrets.HARBOR_USERNAME }}
HARBOR_PASSWORD: ${{ secrets.HARBOR_PASSWORD }}
HARBOR_DEV_USERNAME: ${{ secrets.HARBOR_DEV_USERNAME }}
HARBOR_DEV_PASSWORD: ${{ secrets.HARBOR_DEV_PASSWORD }}
HARBOR_PROD_USERNAME: ${{ secrets.HARBOR_PROD_USERNAME }}
HARBOR_PROD_PASSWORD: ${{ secrets.HARBOR_PROD_PASSWORD }}
HARBOR_LEGACY_USERNAME: ${{ secrets.HARBOR_LEGACY_USERNAME }}
HARBOR_LEGACY_PASSWORD: ${{ secrets.HARBOR_LEGACY_PASSWORD }}
run: | run: |
set -euo pipefail SHA_TAG=$(echo ${{ gitea.sha }} | cut -c1-7)
IMAGE_NAME="git.simplifiquehc.com.br/simplifique/vendaweb-api"
BRANCH="${GITHUB_REF_NAME:-${GITEA_REF_NAME:-}}" sed -i "s|image: $IMAGE_NAME:.*|image: $IMAGE_NAME:$SHA_TAG|g" k8s/base/deployment.yaml
if [ -z "$BRANCH" ] && [ -n "${GITHUB_REF:-}" ]; then
BRANCH="${GITHUB_REF#refs/heads/}"
fi
DEV_IMAGE="$REGISTRY/$DEV_PROJECT/$IMAGE_REPO" git config --global user.name "Gitea Action"
PROD_IMAGE="$REGISTRY/$PROD_PROJECT/$IMAGE_REPO" git config --global user.email "actions@simplifiquehc.com.br"
LEGACY_IMAGE="$REGISTRY/library/$IMAGE_REPO"
DEV_USER="${HARBOR_DEV_USERNAME:-$HARBOR_USERNAME}" git add k8s/base/deployment.yaml
DEV_PASS="${HARBOR_DEV_PASSWORD:-$HARBOR_PASSWORD}" git commit -m "chore: update image tag to $SHA_TAG [skip ci]"
PROD_USER="${HARBOR_PROD_USERNAME:-$HARBOR_USERNAME}" git push origin main
PROD_PASS="${HARBOR_PROD_PASSWORD:-$HARBOR_PASSWORD}"
LEGACY_USER="${HARBOR_LEGACY_USERNAME:-$PROD_USER}"
LEGACY_PASS="${HARBOR_LEGACY_PASSWORD:-$PROD_PASS}"
if [ "$BRANCH" = "develop" ]; then
TAG=$(echo ${{ gitea.sha }} | cut -c1-7)
echo "$DEV_PASS" | docker login "$REGISTRY" -u "$DEV_USER" --password-stdin
docker build -t "$DEV_IMAGE:$TAG" -f ./Dockerfile .
docker push "$DEV_IMAGE:$TAG"
docker tag "$DEV_IMAGE:$TAG" "$DEV_IMAGE:develop"
docker push "$DEV_IMAGE:develop"
exit 0
fi
if [ "$BRANCH" = "main" ]; then
sudo apt-get update -y
sudo apt-get install -y skopeo
if [ -z "${DEV_USER:-}" ] || [ -z "${DEV_PASS:-}" ]; then
echo "Missing Harbor DEV credentials (HARBOR_DEV_USERNAME/HARBOR_DEV_PASSWORD or HARBOR_USERNAME/HARBOR_PASSWORD)." >&2
exit 1
fi
if [ -z "${PROD_USER:-}" ] || [ -z "${PROD_PASS:-}" ]; then
echo "Missing Harbor PROD credentials (HARBOR_PROD_USERNAME/HARBOR_PROD_PASSWORD or HARBOR_USERNAME/HARBOR_PASSWORD)." >&2
exit 1
fi
# Merge commit: HEAD has 2 parents; HEAD^2 is the merged branch tip.
PARENTS="$(git rev-list --parents -n 1 HEAD)"
set -- $PARENTS
SOURCE_SHA="${3:-${1:-}}"
if [ -z "$SOURCE_SHA" ]; then
SOURCE_SHA="${{ gitea.sha }}"
fi
TAG="$(echo "$SOURCE_SHA" | cut -c1-7)"
# Promote the exact artifact built on develop into prod (no rebuild).
skopeo inspect --creds "$DEV_USER:$DEV_PASS" "docker://$DEV_IMAGE:$TAG" >/dev/null
# Validate destination repository exists and auth works.
# Using list-tags avoids assuming a specific tag exists.
skopeo list-tags --creds "$PROD_USER:$PROD_PASS" "docker://$PROD_IMAGE" >/dev/null
skopeo copy --all \
--src-creds "$DEV_USER:$DEV_PASS" \
--dest-creds "$PROD_USER:$PROD_PASS" \
"docker://$DEV_IMAGE:$TAG" \
"docker://$PROD_IMAGE:$TAG"
# Optional: keep legacy tags working during migration.
if [ "${PROMOTE_LEGACY:-false}" = "true" ]; then
skopeo copy --all \
--src-creds "$DEV_USER:$DEV_PASS" \
--dest-creds "$LEGACY_USER:$LEGACY_PASS" \
"docker://$DEV_IMAGE:$TAG" \
"docker://$LEGACY_IMAGE:$TAG"
skopeo copy --all \
--src-creds "$DEV_USER:$DEV_PASS" \
--dest-creds "$LEGACY_USER:$LEGACY_PASS" \
"docker://$DEV_IMAGE:$TAG" \
"docker://$LEGACY_IMAGE:latest"
fi
exit 0
fi
echo "Unsupported branch: $BRANCH" >&2
exit 1

View File

@@ -1,39 +1,55 @@
# Estágio 1: Build ARG NODE_VERSION=16.20
FROM node:16-bullseye-slim AS builder ARG DEBIAN_VARIANT=bullseye
FROM node:${NODE_VERSION}-${DEBIAN_VARIANT} AS builder
WORKDIR /app WORKDIR /app
COPY package*.json ./
RUN npm install --legacy-peer-deps
COPY . .
RUN npm run build
FROM node:16-bullseye-slim ARG INSTANTCLIENT_ZIP_URL=https://download.oracle.com/otn_software/linux/instantclient/instantclient-basiclite-linuxx64.zip
# Instalar dependências do Oracle RUN apt-get update \
RUN apt-get update && apt-get install -y \ && apt-get install -y --no-install-recommends ca-certificates wget unzip libaio1 libnsl2 \
libaio1 \ && rm -rf /var/lib/apt/lists/* \
unzip \ && mkdir -p /opt/oracle \
wget \ && wget -q "${INSTANTCLIENT_ZIP_URL}" -O /opt/oracle/instantclient.zip \
&& mkdir -p /opt/oracle && unzip -q /opt/oracle/instantclient.zip -d /opt/oracle \
&& rm /opt/oracle/instantclient.zip \
&& rm -f /opt/oracle/instantclient_*/ojdbc*.jar \
/opt/oracle/instantclient_*/ucp*.jar \
/opt/oracle/instantclient_*/xstreams.jar \
/opt/oracle/instantclient_*/adrci \
/opt/oracle/instantclient_*/genezi \
/opt/oracle/instantclient_*/uidrvci \
&& ln -s "$(ls -d /opt/oracle/instantclient_* | head -n 1)" /opt/oracle/instantclient
# Instalar Oracle Instant Client
RUN wget https://download.oracle.com/otn_software/linux/instantclient/instantclient-basic-linuxx64.zip -O /opt/oracle/client.zip && \
unzip /opt/oracle/client.zip -d /opt/oracle && \
rm /opt/oracle/client.zip && \
ln -s /opt/oracle/instantclient_* /opt/oracle/instantclient
# Configurar o sistema para encontrar as bibliotecas do Oracle
ENV LD_LIBRARY_PATH=/opt/oracle/instantclient ENV LD_LIBRARY_PATH=/opt/oracle/instantclient
RUN echo "/opt/oracle/instantclient" > /etc/ld.so.conf.d/oracle-instantclient.conf && ldconfig ENV PATH=/opt/oracle/instantclient:$PATH
COPY package*.json ./
ENV NPM_CONFIG_LEGACY_PEER_DEPS=true
RUN npm ci
COPY . .
RUN npm run build \
&& npm prune --omit=dev --legacy-peer-deps \
&& npm cache clean --force
FROM node:${NODE_VERSION}-${DEBIAN_VARIANT}-slim AS runtime
WORKDIR /app WORKDIR /app
# Copiar apenas o necessário do estágio anterior ENV NODE_ENV=production
COPY --from=builder /app/dist ./dist ENV LD_LIBRARY_PATH=/opt/oracle/instantclient
ENV PATH=/opt/oracle/instantclient:$PATH
RUN apt-get update \
&& apt-get install -y --no-install-recommends libaio1 libnsl2 \
&& rm -rf /var/lib/apt/lists/*
COPY --from=builder /opt/oracle /opt/oracle
COPY --from=builder /app/package*.json ./ COPY --from=builder /app/package*.json ./
COPY --from=builder /app/node_modules ./node_modules COPY --from=builder /app/node_modules ./node_modules
COPY --from=builder /app/dist ./dist
# Variáveis de ambiente padrão para o driver oracledb EXPOSE 8065
ENV OCI_LIB_DIR=/opt/oracle/instantclient
ENV OCI_INC_DIR=/opt/oracle/instantclient/sdk/include
CMD ["npm", "run", "start:prod"] CMD ["node", "dist/main"]

View File

@@ -15,10 +15,10 @@ spec:
app: vendaweb-api app: vendaweb-api
spec: spec:
imagePullSecrets: imagePullSecrets:
- name: harbor-secret - name: gitea-auth
containers: containers:
- name: api - name: api
image: 172.35.0.216/library/vendaweb-api:latest image: git.simplifiquehc.com.br/simplifique/vendaweb-api:589fa29
imagePullPolicy: IfNotPresent imagePullPolicy: IfNotPresent
ports: ports:
- name: http - name: http

View File

@@ -7,4 +7,4 @@ spec:
spec: spec:
containers: containers:
- name: api - name: api
image: 172.35.0.216/library/vendaweb-api@sha256:aac490fcb4ef7baa95f1df01fa50d2d44bdb4ed12b235e5dd89e1d7dc3cd0a3a image: git.simplifiquehc.com.br/simplifique/vendaweb-api:latest

View File

@@ -7,5 +7,4 @@ resources:
- ../../base - ../../base
patches: patches:
- path: deployment-image-digest-patch.yaml
- path: service-patch.yaml - path: service-patch.yaml

View File

@@ -14,7 +14,7 @@ export class AppController {
@Get('health') @Get('health')
@ApiOperation({ summary: 'Health check' }) @ApiOperation({ summary: 'Health check' })
healthCheck() { healthCheck() {
return { status: 'SIMPLIFIQUE HOME CENTER 2026' }; return { status: 'SIMPLIFIQUE HOME CENTER 202' };
} }
} }

View File

@@ -20,6 +20,6 @@ async function bootstrap() {
.build(); .build();
const document = SwaggerModule.createDocument(app, options); const document = SwaggerModule.createDocument(app, options);
SwaggerModule.setup("docs", app, document); SwaggerModule.setup("docs", app, document);
await app.listen(8066); await app.listen(8067);
} }
bootstrap(); bootstrap();