Skip to content

Commit

Permalink
Merge pull request #23 from weni-ai/CLOUD-1923
Browse files Browse the repository at this point in the history
Cloud 1923
  • Loading branch information
Aldemylla authored Jan 14, 2025
2 parents 530c7ec + ebc4b0c commit 8fd0ac6
Show file tree
Hide file tree
Showing 5 changed files with 178 additions and 48 deletions.
94 changes: 50 additions & 44 deletions .github/workflows/build-commerce-webapp-push-tag-shared.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -22,28 +22,30 @@ jobs:

- name: Set variables
run: |
TAG=$(git tag --list --sort=-creatordate | head -n 1)
COMMIT_SHA=$(git rev-list -n 1 "$TAG")
git checkout $COMMIT_SHA
if grep -qs -e '^.*.*-staging' <<< "${TAG}" ; then
echo "Found environment: STAGING - ${TAG}"
echo "MANIFESTS_ENVIRONMENT=staging" | tee -a "${GITHUB_ENV}"
elif grep -qs -e '^.*.*' <<< "${TAG}" ; then
echo "No environment found, assuming: PRODUCTION - ${TAG}"
echo "MANIFESTS_ENVIRONMENT=production" | tee -a "${GITHUB_ENV}"
else
echo 'Not a valid tag. Skipping...'
exit 1
fi
echo "TAG=$TAG" | tee -a "${GITHUB_ENV}"
VERSION="${TAG}"
echo "VERSION=${VERSION}" | tee -a "${GITHUB_ENV}"
echo "COMMIT_SHA=$COMMIT_SHA" | tee -a "${GITHUB_ENV}"
echo "IMAGE_TAG=${{ secrets.ECR }}/commerce:webapp-${TAG}" | tee -a "${GITHUB_ENV}"
echo "IMAGE_SOURCE_URL=https://github.com/weni-ai/commerce-webapp" | tee -a "${GITHUB_ENV}"
echo "MANIFESTS_REPOSITORY=weni-ai/kubernetes-manifests-hermes" | tee -a "${GITHUB_ENV}"
echo "MANIFESTS_APPLICATION=commerce-webapp" | tee -a "${GITHUB_ENV}"
echo "MANIFESTS_PATCH_TARGET=deployment.json" | tee -a "${GITHUB_ENV}"
TAG=$(git tag --list --sort=-creatordate | head -n 1)
COMMIT_SHA=$(git rev-list -n 1 "$TAG")
git checkout $COMMIT_SHA
if grep -qs -e '^.*.*-staging' <<< "${TAG}" ; then
echo "Found environment: STAGING - ${TAG}"
echo "MANIFESTS_ENVIRONMENT=staging" | tee -a "${GITHUB_ENV}"
echo "OLD_IMAGE=${{ secrets.ECR }}/commerce:webapp-staging" | tee -a "${GITHUB_ENV}"
elif grep -qs -e '^.*.*' <<< "${TAG}" ; then
echo "No environment found, assuming: PRODUCTION - ${TAG}"
echo "MANIFESTS_ENVIRONMENT=production" | tee -a "${GITHUB_ENV}"
echo "OLD_IMAGE=${{ secrets.ECR }}/commerce:webapp-production" | tee -a "${GITHUB_ENV}"
else
echo 'Not a valid tag. Skipping...'
exit 1
fi
echo "TAG=$TAG" | tee -a "${GITHUB_ENV}"
VERSION="${TAG}"
echo "VERSION=${VERSION}" | tee -a "${GITHUB_ENV}"
echo "COMMIT_SHA=$COMMIT_SHA" | tee -a "${GITHUB_ENV}"
echo "IMAGE_TAG=${{ secrets.ECR }}/commerce:webapp-${TAG}" | tee -a "${GITHUB_ENV}"
echo "IMAGE_SOURCE_URL=https://github.com/weni-ai/commerce-webapp" | tee -a "${GITHUB_ENV}"
echo "MANIFESTS_REPOSITORY=weni-ai/kubernetes-manifests-hermes" | tee -a "${GITHUB_ENV}"
echo "MANIFESTS_APPLICATION=commerce-webapp" | tee -a "${GITHUB_ENV}"
echo "MANIFESTS_PATCH_TARGET=deployment.json" | tee -a "${GITHUB_ENV}"
- name: Check out the repo
uses: actions/checkout@v3
Expand Down Expand Up @@ -77,9 +79,13 @@ jobs:
tag=${{env.TAG}}
commit=${{env.COMMIT_SHA}}
repository=${{env.IMAGE_SOURCE_URL}}
build-args: |
OLD_IMAGE=${{env.OLD_IMAGE}}
file: docker/Dockerfile
push: true
tags: "${{env.IMAGE_TAG}}"
tags: |
${{env.IMAGE_TAG}}
${{env.OLD_IMAGE}}
no-cache: true

- name: Check out Kubernetes Manifests
Expand All @@ -94,26 +100,26 @@ jobs:

- name: Update image on deployment
run: |
which jq > /dev/null 2>&1 || ( sudo apt update ; sudo apt install -y jq )
# Dep: coreutils
verlte() {
[ "$1" = "`echo -e "$1\n$2" | sort -V | head -n1`" ]
}
verlt(){
[ "$1" = "$2" ] && return 1 || verlte $1 $2
}
export PROJECT_DIR="${{ env.MANIFESTS_APPLICATION }}"
ENV_DIR="kubernetes-manifests/${{ env.MANIFESTS_APPLICATION }}/${MANIFESTS_ENVIRONMENT}"
for e in ${ENV_DIR}; do
echo "Update ${e}:"
if [ ! -d "${e}" ] ; then
echo "${e}: Does not exist, skipping"
elif [ ! -r "${e}/kustomization.yaml" ] ; then
echo "${e}/kustomization.yaml: Does not readable, skipping"
elif [ ! -r "${e}/${{ env.MANIFESTS_PATCH_TARGET }}" ] ; then
echo "${e}/${{ env.MANIFESTS_PATCH_TARGET }}: Does not readable, skipping"
else
OLD_IMAGE=$(
which jq > /dev/null 2>&1 || ( sudo apt update ; sudo apt install -y jq )
# Dep: coreutils
verlte() {
[ "$1" = "`echo -e "$1\n$2" | sort -V | head -n1`" ]
}
verlt(){
[ "$1" = "$2" ] && return 1 || verlte $1 $2
}
export PROJECT_DIR="${{ env.MANIFESTS_APPLICATION }}"
ENV_DIR="kubernetes-manifests/${{ env.MANIFESTS_APPLICATION }}/${MANIFESTS_ENVIRONMENT}"
for e in ${ENV_DIR}; do
echo "Update ${e}:"
if [ ! -d "${e}" ] ; then
echo "${e}: Does not exist, skipping"
elif [ ! -r "${e}/kustomization.yaml" ] ; then
echo "${e}/kustomization.yaml: Does not readable, skipping"
elif [ ! -r "${e}/${{ env.MANIFESTS_PATCH_TARGET }}" ] ; then
echo "${e}/${{ env.MANIFESTS_PATCH_TARGET }}: Does not readable, skipping"
else
OLD_IMAGE=$(
cat "${e}/${{ env.MANIFESTS_PATCH_TARGET }}" \
| jq '.[] | select(.path == "/spec/template/spec/containers/0/image") | .value'
)
Expand Down Expand Up @@ -146,4 +152,4 @@ jobs:
repository: "${{ env.MANIFESTS_REPOSITORY }}"
directory: ./kubernetes-manifests/
branch: main
message: "From Commerce Webapp Build (Push Tag ${{ env.MANIFESTS_ENVIRONMENT }})"
message: "From Commerce Webapp Build (Push Tag ${{ env.MANIFESTS_ENVIRONMENT }})"
18 changes: 14 additions & 4 deletions docker/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,10 @@

ARG NODE_VERSION="18.19.1"
ARG BASE_VERSION="alpine3.19"
ARG OLD_IMAGE="commerce-webapp:latest"
ARG KEEP_DAYS=60

FROM node:${NODE_VERSION}-${BASE_VERSION} as builder
FROM node:${NODE_VERSION}-${BASE_VERSION} AS builder

WORKDIR /app

Expand All @@ -17,14 +19,22 @@ COPY . ./

RUN npm run build-only

FROM ${OLD_IMAGE} AS old_css

FROM nginxinc/nginx-unprivileged:1.25-alpine
ARG OLD_IMAGE=${OLD_IMAGE}
ARG KEEP_DAYS

COPY --chown=nginx:nginx nginx.conf /etc/nginx/nginx.conf
COPY --chown=nginx:nginx docker/nginx.conf /etc/nginx/nginx.conf
COPY --chown=nginx:nginx docker/headers /usr/share/nginx/html/headers
COPY --chown=nginx:nginx docker/file_handler.sh /
COPY --chown=nginx:nginx docker/docker-entrypoint.sh /
COPY --from=builder --chown=nginx:nginx /app/dist /usr/share/nginx/html/commerce-webapp/
COPY docker/docker-entrypoint.sh /
COPY --from=old_css --chown=nginx:nginx /usr/share/nginx/html/commerce-webapp/assets/all.tx[t] /usr/share/nginx/html/commerce-webapp/assets/*.css /usr/share/nginx/html/chats/assets/
RUN mv /usr/share/nginx/html/commerce-webapp/index.html /usr/share/nginx/html/commerce-webapp/index.html.tmpl \
&& cd /usr/share/nginx/html/commerce-webapp/ \
&& ln -s /tmp/index.html
&& ln -s /tmp/index.html \
&& /file_handler.sh css

EXPOSE 8080

Expand Down
114 changes: 114 additions & 0 deletions docker/file_handler.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,114 @@
#!/usr/bin/env sh

FILES=""
CURRENT_TIME=$( date +%s )
EXPIRE_TIME=$(( CURRENT_TIME-(30*24*60*60) ))
#EXPIRE_TIME=$(( CURRENT_TIME-1 ))

dict_keys(){
IFS="$( printf '\t' )"
echo "$1" | while read -r KEY VALUE ; do
echo "${KEY}"
done
}

dict_values(){
IFS="$( printf '\t' )"
echo "$1" | while read -r KEY VALUE ; do
echo "${VALUE}"
done
}


dict_set(){
has_key="false"
IFS="$( printf '\t' )"

while read -r KEY VALUE ; do
if [ "${KEY}" = "$2" ] ; then
printf '%s\t%s\n' "$2" "$3"
has_key='true'
else
printf '%s\t%s\n' "${KEY}" "${VALUE}"
fi
done <<-EOFDICT
$1
EOFDICT
if [ "${has_key}" = 'false' ] ; then
printf '%s\t%s\n' "$2" "$3"
fi
}

dict_get(){
has_key="false"
IFS="$( printf '\t' )"

while read -r KEY VALUE ; do
if [ "${KEY}" = "$2" ] ; then
echo "${VALUE}"
has_key='true'
break
fi
done <<-EOFDICT
$1
EOFDICT

if [ "${has_key}" = 'false' ] ; then
echo "$3"
fi
}

load_files(){
while read -r file_ctime filename ; do
if [ "${file_ctime}" -le "$( dict_get "${FILES}" "${filename}" "3199999999" )" ] ; then
FILES=$( dict_set "${FILES}" "${filename}" "${file_ctime}" )
fi
done<<EOFDICT
$( cat "$@" )
EOFDICT

}

print_files(){
dict_keys "${FILES}" | while read -r filename ; do
if [ -r "${filename}" ] ; then
printf '%s\t%s\n' "$( dict_get "${FILES}" "${filename}" )" "${filename}"
fi
done
}

delete_old_files(){
for filename in $( dict_keys "${FILES}" ); do
if [ "${EXPIRE_TIME}" -gt "$( dict_get "${FILES}" "${filename}" )" ] ; then
echo "deleting: ${filename} $( dict_get "${FILES}" "${filename}" )" 1>&2
rm -rf "${filename}"
fi
done
}

generate_files(){
while read -r filename ; do
if [ -r "${filename}" ] ; then
printf '%s\t%s\n' "${CURRENT_TIME}" "${filename}"
fi
done
}

if [ "$1" = "delete_old" ]; then
shift
load_files "$@"
delete_old_files
elif [ "$1" = "print" ] ; then
shift
load_files "$@"
#echo "$FILES"
print_files
elif [ "$1" = "generate" ] ; then
generate_files
elif [ "$1" = "css" ] ; then
load_files <<EOFDICT
$( find . -iname "*.css" | generate_files ; [ -r assets/all.txt ] && cat assets/all.txt )
EOFDICT
delete_old_files
print_files > assets/all.txt
fi
Empty file added docker/headers
Empty file.
File renamed without changes.

0 comments on commit 8fd0ac6

Please sign in to comment.