|
6 | 6 | - '*.*.*-staging' |
7 | 7 | - '*.*.*-develop' |
8 | 8 | - '*.*.*' |
9 | | - |
10 | 9 | jobs: |
11 | | - docker: |
| 10 | + setup: |
12 | 11 | runs-on: ubuntu-latest |
| 12 | + outputs: |
| 13 | + repository_name: ${{ steps.setup.outputs.repository_name }} |
13 | 14 | steps: |
14 | | - - name: Set variables |
15 | | - run: | |
16 | | - TAG="$( echo "${GITHUB_REF}" | cut -d'/' -f3 )" |
17 | | - if grep -qs -e '^.*.*-develop' <<< "${TAG}" ; then |
18 | | - echo "Found environment: DEVELOP - ${TAG}" |
19 | | - echo "MANIFESTS_ENVIRONMENT=develop" | tee -a "${GITHUB_ENV}" |
20 | | - elif grep -qs -e '^.*.*-staging' <<< "${TAG}" ; then |
21 | | - echo "Found environment: STAGING - ${TAG}" |
22 | | - echo "MANIFESTS_ENVIRONMENT=staging" | tee -a "${GITHUB_ENV}" |
23 | | - elif grep -qs -e '^.*.*' <<< "${TAG}" ; then |
24 | | - echo "No environment found, assuming: PRODUCTION - ${TAG}" |
25 | | - echo "MANIFESTS_ENVIRONMENT=production" | tee -a "${GITHUB_ENV}" |
26 | | - else |
27 | | - echo 'Not a valid tag. Skipping...' |
28 | | - exit 1 |
29 | | - fi |
30 | | - echo "TAG=$TAG" | tee -a "${GITHUB_ENV}" |
31 | | - VERSION="${TAG}" |
32 | | - echo "VERSION=${VERSION}" | tee -a "${GITHUB_ENV}" |
33 | | - echo "COMMIT_SHA=$GITHUB_SHA" | tee -a "${GITHUB_ENV}" |
34 | | - echo "IMAGE_TAG=${{ secrets.ECR }}/rp-archiver:${TAG}" | tee -a "${GITHUB_ENV}" |
35 | | - echo "IMAGE_SOURCE_URL=https://github.com/weni-ai/rp-archiver" | tee -a "${GITHUB_ENV}" |
36 | | - echo "MANIFESTS_REPOSITORY=Ilhasoft/kubernetes-manifests-platform" | tee -a "${GITHUB_ENV}" |
37 | | - echo "MANIFESTS_APPLICATION=weni-flows/archiver" | tee -a "${GITHUB_ENV}" |
38 | | - echo "MANIFESTS_PATCH_TARGET=deployment.json" | tee -a "${GITHUB_ENV}" |
39 | | -
|
40 | | - - name: Check out the repo |
41 | | - uses: actions/checkout@v3 |
42 | | - with: |
43 | | - ref: "${{env.GITHUB_SHA}}" |
44 | | - |
45 | | - - name: Set up QEMU |
46 | | - uses: docker/setup-qemu-action@v2 |
47 | | - |
48 | | - - name: Set up Docker Buildx |
49 | | - uses: docker/setup-buildx-action@v2 |
50 | | - |
51 | | - - name: Login to Registry |
52 | | - uses: docker/login-action@v2 |
53 | | - with: |
54 | | - registry: ${{ secrets.ECR }} |
55 | | - username: ${{ secrets.AWS_ACCESS_KEY_ID_SHARED }} |
56 | | - password: ${{ secrets.AWS_SECRET_ACCESS_KEY_SHARED }} |
57 | | - |
58 | | - - name: Build and push - Archiver Image |
59 | | - uses: docker/build-push-action@v3 |
60 | | - with: |
61 | | - context: . |
62 | | - labels: | |
63 | | - tag=${{env.TAG}} |
64 | | - commit=${{env.COMMIT_SHA}} |
65 | | - repository=${{env.IMAGE_SOURCE_URL}} |
66 | | - file: docker/Dockerfile |
67 | | - push: true |
68 | | - tags: "${{env.IMAGE_TAG}}" |
69 | | - no-cache: true |
70 | | - |
71 | | - - name: Check out Kubernetes Manifests |
72 | | - uses: actions/checkout@master |
73 | | - with: |
74 | | - ref: main |
75 | | - repository: "${{ env.MANIFESTS_REPOSITORY }}" |
76 | | - token: "${{ secrets.DEVOPS_GITHUB_PERMANENT_TOKEN }}" |
77 | | - path: ./kubernetes-manifests/ |
78 | | - |
79 | | - - name: Update image on deployment |
| 15 | + - name: Setup outputs |
| 16 | + id: setup |
80 | 17 | run: | |
81 | | - which jq > /dev/null 2>&1 || ( sudo apt update ; sudo apt install -y jq ) |
82 | | - # Dep: coreutils |
83 | | - verlte() { |
84 | | - [ "$1" = "`echo -e "$1\n$2" | sort -V | head -n1`" ] |
85 | | - } |
86 | | - verlt(){ |
87 | | - [ "$1" = "$2" ] && return 1 || verlte $1 $2 |
88 | | - } |
89 | | - export PROJECT_DIR="${{ env.MANIFESTS_APPLICATION }}" |
90 | | - ENV_DIR="kubernetes-manifests/${{ env.MANIFESTS_APPLICATION }}/${MANIFESTS_ENVIRONMENT}" |
91 | | - for e in ${ENV_DIR}; do |
92 | | - echo "Update ${e}:" |
93 | | - if [ ! -d "${e}" ] ; then |
94 | | - echo "${e}: Does not exist, skipping" |
95 | | - elif [ ! -r "${e}/kustomization.yaml" ] ; then |
96 | | - echo "${e}/kustomization.yaml: Does not readable, skipping" |
97 | | - elif [ ! -r "${e}/${{ env.MANIFESTS_PATCH_TARGET }}" ] ; then |
98 | | - echo "${e}/${{ env.MANIFESTS_PATCH_TARGET }}: Does not readable, skipping" |
99 | | - else |
100 | | - OLD_IMAGE=$( |
101 | | - cat "${e}/${{ env.MANIFESTS_PATCH_TARGET }}" \ |
102 | | - | jq '.[] | select(.path == "/spec/template/spec/containers/0/image") | .value' |
103 | | - ) |
104 | | - echo "Old image to replace: ${OLD_IMAGE}" |
105 | | - OLD_VERSION=$( |
106 | | - echo "${OLD_IMAGE}" \ |
107 | | - | sed s'/^.*[v:]\([0-9]*\.[0-9]*\.[0-9]*\).*$/\1/'g \ |
108 | | - | head -n1 |
109 | | - ) |
110 | | - echo "Old image version to compare: ${OLD_VERSION}<=${{env.VERSION}}" |
111 | | - if verlte "${OLD_VERSION}" "${VERSION}" || [[ ! "${OLD_VERSION}" =~ [0-9]+\.[0-9]+\.[0-9]+ ]] ; then |
112 | | - echo 'New configurations:' |
113 | | - new_configuration=$( |
114 | | - cat "${e}/${{ env.MANIFESTS_PATCH_TARGET }}" \ |
115 | | - | jq '(..|select(.path == "/spec/template/spec/containers/0/image")?) += {value: "'"${{env.IMAGE_TAG}}"'"}' |
116 | | - ) |
117 | | - echo "${new_configuration}" |
118 | | - echo "${new_configuration}" > "${e}/${{ env.MANIFESTS_PATCH_TARGET }}" |
119 | | - else |
120 | | - echo "Version in file is greater than build, skipping update yaml" |
121 | | - fi |
122 | | - fi |
123 | | - done |
124 | | -
|
125 | | - - name: Commit & Push changes |
126 | | - uses: actions-js/push@master |
127 | | - with: |
128 | | - github_token: "${{ secrets.DEVOPS_GITHUB_PERMANENT_TOKEN }}" |
129 | | - repository: "${{ env.MANIFESTS_REPOSITORY }}" |
130 | | - directory: ./kubernetes-manifests/ |
131 | | - branch: main |
132 | | - message: "From Archiver Build (Push Tag ${{ env.MANIFESTS_ENVIRONMENT }})" |
133 | | - |
| 18 | + export GITHUB_REPOSITORY_NAME="${GITHUB_REPOSITORY#$GITHUB_REPOSITORY_OWNER/}" |
| 19 | + { |
| 20 | + echo "repository_name=${GITHUB_REPOSITORY_NAME}" |
| 21 | + } | tee -a "${GITHUB_OUTPUT}" |
| 22 | +
|
| 23 | + { |
| 24 | + echo "### Workflow Outputs" |
| 25 | + echo "| Variable | Description |" |
| 26 | + echo "| --------------- | --------------- |" |
| 27 | + echo "| repository_name | Repository name |" |
| 28 | + } | tee -a "${GITHUB_STEP_SUMMARY}" |
| 29 | +
|
| 30 | + call-workflow: |
| 31 | + uses: weni-ai/actions-workflows/.github/workflows/reusable-workflow.yaml@main |
| 32 | + needs: |
| 33 | + - setup |
| 34 | + with: |
| 35 | + image_repository: rp-archiver |
| 36 | + dockerfile: "docker/Dockerfile" |
| 37 | + target_repository: weni-ai/kubernetes-manifests-platform |
| 38 | + target_application: rapidpro/archiver |
| 39 | + target_patch_file: deployment.json |
| 40 | + secrets: inherit |
0 commit comments