From 84b1d6a2632bba7051fd1fc6d65eeaaade8b5f05 Mon Sep 17 00:00:00 2001 From: Avik Date: Tue, 8 Nov 2022 20:17:09 +0530 Subject: [PATCH 1/6] Added hardcoded lambda path --- actions/deploy-lambda/action.yaml | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/actions/deploy-lambda/action.yaml b/actions/deploy-lambda/action.yaml index b588b30..1396d0f 100644 --- a/actions/deploy-lambda/action.yaml +++ b/actions/deploy-lambda/action.yaml @@ -66,5 +66,13 @@ runs: shell: bash run: | echo "update lambda with [${{ inputs.package_ref }}]" - aws lambda update-function-code --dry-run --function-name ${{ steps.app_settings.outputs.app_repository}}-${{ inputs.env }}-lookup_patient_data --s3-bucket dev-is-phi-infrastructure --s3-key serverless/dev/${{ steps.app_settings.outputs.app_repository}}.zip + if [ ${{ steps.app_settings.outputs.app_repository }} == "air-video-patients-export" ]; + then + aws lambda update-function-code --dry-run --function-name air-video-patients-export-${{ inputs.env }}-export --s3-bucket is-lambda-artifacts --s3-key ${{ inputs.env }}/${{ steps.app_settings.outputs.app_repository}}.zip + fi; + + if [ ${{ steps.app_settings.outputs.app_repository }} == "file_metadata_scrubber" ]; + then + aws lambda update-function-code --dry-run --function-name file-metadata-scrubber-${{ inputs.env }}-get_info --s3-bucket is-lambda-artifacts --s3-key ${{ inputs.env }}/${{ steps.app_settings.outputs.app_repository}}.zip + fi; exit 0 \ No newline at end of file From 89ceab0125709b587cd4b1c84205880c0442eae8 Mon Sep 17 00:00:00 2001 From: Avik Date: Wed, 16 Nov 2022 22:04:15 +0530 Subject: [PATCH 2/6] Added action to setup serverless --- actions/setup-serverless/action.yml | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 actions/setup-serverless/action.yml diff --git a/actions/setup-serverless/action.yml b/actions/setup-serverless/action.yml new file mode 100644 index 0000000..5382387 --- /dev/null +++ b/actions/setup-serverless/action.yml @@ -0,0 +1,14 @@ +# This file is the sharable action with build,unittest, integration test, code coverage reports. +# The sharable action can be used across applications by referring this action in the github workflow. + +name: Setup serverless environment +description: Setup serverless environment + +runs: + using: "composite" + steps: + - name: Install serverless + shell: bash + run: | + npm install -g serverless@2 + sls --version \ No newline at end of file From 4b6a27d5bcb8f17263586e2cb4aa75578f69226d Mon Sep 17 00:00:00 2001 From: Avik Date: Wed, 16 Nov 2022 22:19:39 +0530 Subject: [PATCH 3/6] Use sls for deploy --- actions/build-ecr-image/action.yml | 19 ++++++-- actions/build-lambda-package/action.yaml | 9 +++- actions/build-lambda-zip/action.yaml | 5 ++- actions/deploy-lambda/action.yaml | 55 +++++++++++------------- actions/setup-serverless/action.yml | 4 +- 5 files changed, 53 insertions(+), 39 deletions(-) diff --git a/actions/build-ecr-image/action.yml b/actions/build-ecr-image/action.yml index 3b5a530..2061a67 100644 --- a/actions/build-ecr-image/action.yml +++ b/actions/build-ecr-image/action.yml @@ -5,6 +5,9 @@ inputs: aws_region: description: aws region required: true + aws_account_id: + description: aws account id + required: true repository: description: aws ecr repository required: true @@ -12,6 +15,10 @@ inputs: description: make command default: container required: true + make-directory: + description: directory of makefile + required: false + default: $GITHUB_WORKSPACE outputs: tag: @@ -27,17 +34,21 @@ runs: uses: aws-actions/amazon-ecr-login@v1 env: AWS_REGION: ${{ inputs.aws_region }} + + - name: Get current date + id: date + shell: bash + run: echo "::set-output name=date::$(date +'%Y-%m-%d-%H-%M')" - name: Build, tag, and push image to Amazon ECR id: erc-image env: - REMOTE_REGISTRY: ${{ steps.login-ecr.outputs.registry }}/${{ inputs.repository }} - IMAGE_TAG: ${{ github.ref_name }} + REMOTE_REGISTRY: ${{ inputs.aws_account_id }}.dkr.ecr.${{ inputs.aws_region }}.amazonaws.com/${{ inputs.repository }} + IMAGE_TAG: ${{ steps.date.outputs.date }} shell: bash run: | echo "image tag [$IMAGE_TAG]" - make ${{ inputs.make_cmd }} remotereg="$REMOTE_REGISTRY" tag="$IMAGE_TAG" - make ${{ inputs.make_cmd }}test + make -C ${{ inputs.make-directory }} ${{ inputs.make_cmd }} remotereg="$REMOTE_REGISTRY" tag="$IMAGE_TAG" docker push $REMOTE_REGISTRY:$IMAGE_TAG echo "set output tag ["$IMAGE_TAG"]" echo "::set-output name=tag::"$IMAGE_TAG"" \ No newline at end of file diff --git a/actions/build-lambda-package/action.yaml b/actions/build-lambda-package/action.yaml index 7c66b90..e8b3c3d 100644 --- a/actions/build-lambda-package/action.yaml +++ b/actions/build-lambda-package/action.yaml @@ -12,6 +12,9 @@ inputs: description: directory of makefile required: false default: $GITHUB_WORKSPACE + aws_account_id: + description: aws account id + required: true outputs: package_ref: @@ -41,15 +44,17 @@ runs: - name: Build Lambda container id: build-ecr if: ${{ steps.app_settings.outputs.app_registry == 'ecr' }} - uses: Iterative-Scopes/cicd-framework/actions/build-ecr-image@main + uses: Iterative-Scopes/cicd-framework/actions/build-ecr-image@feature/air-191 with: aws_region: ${{ steps.app_settings.outputs.aws_region }} + aws_account_id: ${{ steps.app_settings.outputs.aws_account }} repository: ${{ steps.app_settings.outputs.app_repository }} + make-directory: ${{ inputs. make-directory }} - name: Build Lambda zip id: build-zip if: contains(${{ steps.app_settings.outputs.app_registry}}, "s3:::") - uses: Iterative-Scopes/cicd-framework/actions/build-lambda-zip@main + uses: Iterative-Scopes/cicd-framework/actions/build-lambda-zip@feature/air-191 with: repository: ${{ steps.app_settings.outputs.app_repository }} registry: ${{ steps.app_settings.outputs.app_registry }} diff --git a/actions/build-lambda-zip/action.yaml b/actions/build-lambda-zip/action.yaml index c431c85..83244dc 100644 --- a/actions/build-lambda-zip/action.yaml +++ b/actions/build-lambda-zip/action.yaml @@ -11,6 +11,9 @@ inputs: repository: description: "app or service name" required: true + aws_account_id: + description: aws account id + required: true make-directory: description: directory of makefile required: false @@ -36,5 +39,5 @@ runs: shell: bash run: | echo "push zip..." - aws s3 cp ${{ inputs.repository }}.zip ${{ inputs.registry }}/${{ inputs.env }}/${{ inputs.repository }}.zip + # aws s3 cp ${{ inputs.repository }}.zip ${{ inputs.registry }}/${{ inputs.env }}/${{ inputs.repository }}.zip echo "::set-output name=zip_uri::${{ inputs.registry }}/${{ inputs.env }}" \ No newline at end of file diff --git a/actions/deploy-lambda/action.yaml b/actions/deploy-lambda/action.yaml index 1396d0f..4b3d15f 100644 --- a/actions/deploy-lambda/action.yaml +++ b/actions/deploy-lambda/action.yaml @@ -12,6 +12,10 @@ inputs: description: lambda package ref from lambda build job required: true default: "null" + make-directory: + description: directory of makefile + required: false + default: $GITHUB_WORKSPACE runs: using: "composite" @@ -43,36 +47,27 @@ runs: aws-region: ${{ steps.app_settings.outputs.aws_region }} audience: ${{ steps.app_settings.outputs.aws_audience }} - - name: Update container lambda - get image uri with given image tag - if: ${{ steps.app_settings.outputs.app_registry == 'ecr' }} - uses: Iterative-Scopes/cicd-framework/actions/get-ecr-image-uri@main - id: get-image-uri - with: - aws_region: ${{ steps.app_settings.outputs.aws_region }} - repository: ${{ steps.app_settings.outputs.app_repository }} - image_tag: ${{ inputs.package_ref }} + # - name: Update container lambda - get image uri with given image tag + # if: ${{ steps.app_settings.outputs.app_registry == 'ecr' }} + # uses: Iterative-Scopes/cicd-framework/actions/get-ecr-image-uri@main + # id: get-image-uri + # with: + # aws_region: ${{ steps.app_settings.outputs.aws_region }} + # repository: ${{ steps.app_settings.outputs.app_repository }} + # image_tag: ${{ inputs.package_ref }} - - name: Update container lambda - update lambda with image uri - if: ${{ steps.app_settings.outputs.app_registry == 'ecr' && - steps.get-image-uri.outputs.uri }} - shell: bash - run: | - echo ${{ steps.get-image-uri.outputs.uri }} - aws lambda update-function-code --function-name ${{ env.LAMBDA_NAME }} --image-uri ${{ steps.get-image-uri.outputs.uri }} - exit 0 - - - name: Update lambda from S3 registry - if: contains(${{ steps.app_settings.outputs.app_registry}}, "s3:::") + # - name: Update container lambda - update lambda with image uri + # if: ${{ steps.app_settings.outputs.app_registry == 'ecr' && + # steps.get-image-uri.outputs.uri }} + # shell: bash + # run: | + # echo ${{ steps.get-image-uri.outputs.uri }} + # aws lambda update-function-code --function-name ${{ env.LAMBDA_NAME }} --image-uri ${{ steps.get-image-uri.outputs.uri }} + # exit 0 + + - name: Deploy lambda + #if: contains(${{ steps.app_settings.outputs.app_registry}}, "s3:::") + if: ${{ steps.app_settings.outputs.app_registry == 'ecr' }} shell: bash run: | - echo "update lambda with [${{ inputs.package_ref }}]" - if [ ${{ steps.app_settings.outputs.app_repository }} == "air-video-patients-export" ]; - then - aws lambda update-function-code --dry-run --function-name air-video-patients-export-${{ inputs.env }}-export --s3-bucket is-lambda-artifacts --s3-key ${{ inputs.env }}/${{ steps.app_settings.outputs.app_repository}}.zip - fi; - - if [ ${{ steps.app_settings.outputs.app_repository }} == "file_metadata_scrubber" ]; - then - aws lambda update-function-code --dry-run --function-name file-metadata-scrubber-${{ inputs.env }}-get_info --s3-bucket is-lambda-artifacts --s3-key ${{ inputs.env }}/${{ steps.app_settings.outputs.app_repository}}.zip - fi; - exit 0 \ No newline at end of file + make -C ${{ inputs.make-directory }} deploy stage="dev" \ No newline at end of file diff --git a/actions/setup-serverless/action.yml b/actions/setup-serverless/action.yml index 5382387..ad08897 100644 --- a/actions/setup-serverless/action.yml +++ b/actions/setup-serverless/action.yml @@ -10,5 +10,5 @@ runs: - name: Install serverless shell: bash run: | - npm install -g serverless@2 - sls --version \ No newline at end of file + npm install -g serverless@3.24.1 + serverless --version \ No newline at end of file From 82aa1f91671aad388ab96faa08ebb3a4caabe1eb Mon Sep 17 00:00:00 2001 From: Avik Chakraborty Date: Thu, 5 Jan 2023 20:58:06 +0530 Subject: [PATCH 4/6] Pointing to correct branch --- actions/build-lambda-package/action.yaml | 4 ++-- actions/build-lambda-zip/action.yaml | 1 + actions/deploy-lambda/action.yaml | 21 +-------------------- 3 files changed, 4 insertions(+), 22 deletions(-) diff --git a/actions/build-lambda-package/action.yaml b/actions/build-lambda-package/action.yaml index e8b3c3d..fc0fb70 100644 --- a/actions/build-lambda-package/action.yaml +++ b/actions/build-lambda-package/action.yaml @@ -44,7 +44,7 @@ runs: - name: Build Lambda container id: build-ecr if: ${{ steps.app_settings.outputs.app_registry == 'ecr' }} - uses: Iterative-Scopes/cicd-framework/actions/build-ecr-image@feature/air-191 + uses: Iterative-Scopes/cicd-framework/actions/build-ecr-image@main with: aws_region: ${{ steps.app_settings.outputs.aws_region }} aws_account_id: ${{ steps.app_settings.outputs.aws_account }} @@ -54,7 +54,7 @@ runs: - name: Build Lambda zip id: build-zip if: contains(${{ steps.app_settings.outputs.app_registry}}, "s3:::") - uses: Iterative-Scopes/cicd-framework/actions/build-lambda-zip@feature/air-191 + uses: Iterative-Scopes/cicd-framework/actions/build-lambda-zip@main with: repository: ${{ steps.app_settings.outputs.app_repository }} registry: ${{ steps.app_settings.outputs.app_registry }} diff --git a/actions/build-lambda-zip/action.yaml b/actions/build-lambda-zip/action.yaml index 83244dc..cd3f1be 100644 --- a/actions/build-lambda-zip/action.yaml +++ b/actions/build-lambda-zip/action.yaml @@ -34,6 +34,7 @@ runs: run: | echo "build zip..." make -C ${{ inputs.make-directory }} build + # TODO: Will delete this step in next PR. - name: Push to lambda registry s3 id: push-zip shell: bash diff --git a/actions/deploy-lambda/action.yaml b/actions/deploy-lambda/action.yaml index 4b3d15f..0831b68 100644 --- a/actions/deploy-lambda/action.yaml +++ b/actions/deploy-lambda/action.yaml @@ -46,28 +46,9 @@ runs: role-duration-seconds: ${{ steps.app_settings.outputs.aws_role_duration }} aws-region: ${{ steps.app_settings.outputs.aws_region }} audience: ${{ steps.app_settings.outputs.aws_audience }} - - # - name: Update container lambda - get image uri with given image tag - # if: ${{ steps.app_settings.outputs.app_registry == 'ecr' }} - # uses: Iterative-Scopes/cicd-framework/actions/get-ecr-image-uri@main - # id: get-image-uri - # with: - # aws_region: ${{ steps.app_settings.outputs.aws_region }} - # repository: ${{ steps.app_settings.outputs.app_repository }} - # image_tag: ${{ inputs.package_ref }} - - # - name: Update container lambda - update lambda with image uri - # if: ${{ steps.app_settings.outputs.app_registry == 'ecr' && - # steps.get-image-uri.outputs.uri }} - # shell: bash - # run: | - # echo ${{ steps.get-image-uri.outputs.uri }} - # aws lambda update-function-code --function-name ${{ env.LAMBDA_NAME }} --image-uri ${{ steps.get-image-uri.outputs.uri }} - # exit 0 - name: Deploy lambda - #if: contains(${{ steps.app_settings.outputs.app_registry}}, "s3:::") if: ${{ steps.app_settings.outputs.app_registry == 'ecr' }} shell: bash run: | - make -C ${{ inputs.make-directory }} deploy stage="dev" \ No newline at end of file + make -C ${{ inputs.make-directory }} deploy stage="dev" tag="${{ inputs.package_ref }}" \ No newline at end of file From d569a58595d0d68946cc82c8c57d04477bd7bafd Mon Sep 17 00:00:00 2001 From: Avik Chakraborty Date: Wed, 11 Jan 2023 21:24:59 +0530 Subject: [PATCH 5/6] Addressing review comments --- actions/build-ecr-image/action.yml | 7 +-- actions/build-lambda-package/action.yaml | 4 +- actions/cicdcfg/action.yml | 3 ++ actions/cicdcfg/dist/cicdcfg-0.3.0.tar.gz | Bin 2407 -> 2489 bytes actions/cicdcfg/src/cicdcfg/main.py | 3 ++ actions/copy-ecr-image/action.yml | 63 ++++++++++++++++++++++ actions/deploy-lambda/action.yaml | 35 ++++++++++-- 7 files changed, 104 insertions(+), 11 deletions(-) create mode 100644 actions/copy-ecr-image/action.yml diff --git a/actions/build-ecr-image/action.yml b/actions/build-ecr-image/action.yml index 2061a67..5c4c51e 100644 --- a/actions/build-ecr-image/action.yml +++ b/actions/build-ecr-image/action.yml @@ -34,17 +34,12 @@ runs: uses: aws-actions/amazon-ecr-login@v1 env: AWS_REGION: ${{ inputs.aws_region }} - - - name: Get current date - id: date - shell: bash - run: echo "::set-output name=date::$(date +'%Y-%m-%d-%H-%M')" - name: Build, tag, and push image to Amazon ECR id: erc-image env: REMOTE_REGISTRY: ${{ inputs.aws_account_id }}.dkr.ecr.${{ inputs.aws_region }}.amazonaws.com/${{ inputs.repository }} - IMAGE_TAG: ${{ steps.date.outputs.date }} + IMAGE_TAG: ${{ github.sha }} shell: bash run: | echo "image tag [$IMAGE_TAG]" diff --git a/actions/build-lambda-package/action.yaml b/actions/build-lambda-package/action.yaml index fc0fb70..e8b3c3d 100644 --- a/actions/build-lambda-package/action.yaml +++ b/actions/build-lambda-package/action.yaml @@ -44,7 +44,7 @@ runs: - name: Build Lambda container id: build-ecr if: ${{ steps.app_settings.outputs.app_registry == 'ecr' }} - uses: Iterative-Scopes/cicd-framework/actions/build-ecr-image@main + uses: Iterative-Scopes/cicd-framework/actions/build-ecr-image@feature/air-191 with: aws_region: ${{ steps.app_settings.outputs.aws_region }} aws_account_id: ${{ steps.app_settings.outputs.aws_account }} @@ -54,7 +54,7 @@ runs: - name: Build Lambda zip id: build-zip if: contains(${{ steps.app_settings.outputs.app_registry}}, "s3:::") - uses: Iterative-Scopes/cicd-framework/actions/build-lambda-zip@main + uses: Iterative-Scopes/cicd-framework/actions/build-lambda-zip@feature/air-191 with: repository: ${{ steps.app_settings.outputs.app_repository }} registry: ${{ steps.app_settings.outputs.app_registry }} diff --git a/actions/cicdcfg/action.yml b/actions/cicdcfg/action.yml index 76cc5ba..c3fc9d9 100644 --- a/actions/cicdcfg/action.yml +++ b/actions/cicdcfg/action.yml @@ -31,6 +31,9 @@ outputs: app_name: description: "app or service name" value: ${{ steps.get-settings.outputs.app_name }} + app_deployer: + description: "application deployer (Default: none)" + value: ${{ steps.get-settings.outputs.app_deployer }} app_registry: description: "app or service name" value: ${{ steps.get-settings.outputs.app_registry }} diff --git a/actions/cicdcfg/dist/cicdcfg-0.3.0.tar.gz b/actions/cicdcfg/dist/cicdcfg-0.3.0.tar.gz index f4f507c80907bdd1afa9c4adda17b73b1d6d1d7c..051f8a501078a6f13de5c365e5f35745c0293fa3 100644 GIT binary patch literal 2489 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 Da>O6K literal 2407 zcmV-t37GaDiwFqB52a%Q|6^%mWMgJ$Eif)KE-)^1VR8WNTw8P7x)Js>eg%d;GmK4853YxXNr*;Gkt_(>Q8W4PU4W!4-|ZY*IVakEkpL`~3lO^> zumEWH?B3t@*q67QMO>~u3po|t_Ukx)|Kh*ScOB35*65eDB~V!?CgJgGt4ZD_ohmWq zV|O@mM?-gW=-B;D2mX)98q!Zsp$MaJ5_cWjx1HYe+5c!TsD6jluj5^|dAIKmT+bPe z9LRUw(ZFA$gJs(Pr!1Y_#RqJY$mnW#T`Kx%v8U==EKV|DNX}{x5^p>CW!XE4uUR8~QR-fbt~C zSOl3p$jwF06OnS7%WNVNPA8e9u{h%?<>{G_SvuvZq6Jq}|xvWU;C9G4=Abe-^oho^>_g{LeAEwn0- zRwr7c1aOPKcoB(0y?9|XC=1P{1=XXQcDwL=tr`52SyBs!#Jpi;l5}&XP9QHUmC5_% z&F-hSpa1^h^QR*tR`EhnP*(ChdzA2B_Wt#%XKVH*%brb>BRX#zJTWg--GBRh%2Fjl zT2H&6XMu4y4JBsm+8x1u6`_8EE!uZqp-$(pk z4q2A4b-LlZhi-+{)vSOi5%40jsroDWYvtGfbdBSs<{fCE&fNq4W)0fFP zn-w&de8T0Tt{KcrsD30oFDb}GX4A!DG0iins+w-wg@mI^*rdA)WNmVtlD1+UHt}v0?1gjOMKdvfkwzTl4L``Y|E}TS$@%jsq*7 z&Db=t4l4%eD>)1DOr)w9f2Af*lNDwu^dJwaZYV&*gLz@aP_<{=Og*Peq}yR4>L+We zp8>7vAWUKW2j_p!5dRr&4Lrw3^IE<6pA37?WB-pk|LG0-9-jY1|BwFvhxq@|&>M|5 z(f_Zc|F3g;Piy~=^Z$JpiqZeCivP#>?~n8Um(KtB{=gq%{1^Q{`2QdfsZc@i`@_Na z?f?2P**E?l0HEL3_CNGIjQ=i$EUO8+>2NPkNS7+f!qei~K{H6!QA6O#Wp<_`zLe2( zHlr$|VU|urTuL1gjdggK7UgjjK`uxY%B_R0bvYpm8_RS|TV@Eh2>Az;a|t;$qaAZq z<+X!A$326fL)K}PWwR)H%hD);(uV(inIuhKr-L?*_>cJiF#L!0pX($3BmM*a>%Et! z*$Tb~|NTM#V*NMtpxhnwJ-q+76sj>Z` zjpk0k2CdJ_cebmY$#r_h5@F7Qfuy3^GMrFdRUa^apQW5;QePmT<1w`?NX$3)%<=gJ zCX>F#)tsweU~ICk@ivF~7kHa2!wXtph!v@7Tkk}n_p7Plo=}nMqxlO(aG5xN@-cXB*VZFx3#)1d|U@qb(#gqy@G4L zM)smn{>Eo_S>WG{(NjLtuClz<82w6aopNe_944Y&doAOp^-8I6+4f5rm-^<_ zo+)W}7TEMkDPVPZyJc=IwKnJpPx5hVcYpClSL@DtW~eq5VLThJcz2cBFuU}o5GOw{!_rAs&=!r8B(5|JJA1$YVWnjg13CwiKK}&bT;RdY|l^Hgv zM(ueZT8G{1aE=HLDx%`ISZ%W*Jr z!!|LwbLvR$8(23pL_Ftd#M5vVBqBX6Zs%OQa(Fveb7S##4wdCWqCa5v{i7Z6AMqdY zAL*yT|C_w$YbBDt|;{P%TO&!<&i2sQHi2sQHx8VQPwbhfa|DD0$D*n4J z;{Q_U;L1074oPzzXiTqug$LaN;y>a);y=<#;s0XP^tGwqM#edhiivPYpLi}Ii`$vmMLPA19LPA19LPA19LPA19LPA19 ZLPA19LPA19Li!Wa{{g7?0VDvR0075f_0RwS diff --git a/actions/cicdcfg/src/cicdcfg/main.py b/actions/cicdcfg/src/cicdcfg/main.py index f364679..cd5b4d1 100644 --- a/actions/cicdcfg/src/cicdcfg/main.py +++ b/actions/cicdcfg/src/cicdcfg/main.py @@ -26,6 +26,9 @@ def get_settings(env, role, profile, outfile): file.write(f"aws_role={cfg['role'][role]['name']}\n") file.write(f"aws_role_duration={cfg['role'][role]['duration']}\n") file.write(f"app_name={cfg['application']['name']}\n") + deployer = cfg["application"]["deployer"] if "deployer" in cfg["application"] else "none" + print(f"Debug-Here->> [{deployer}]") + file.write(f"app_deployer={deployer}\n") file.write(f"app_registry={cfg['application']['package']['registry']}\n") file.write(f"app_repository={cfg['application']['package']['repository']}\n") file.write(f"app_runtime={cfg['application']['runtime']['name']}\n") diff --git a/actions/copy-ecr-image/action.yml b/actions/copy-ecr-image/action.yml new file mode 100644 index 0000000..b7e1de9 --- /dev/null +++ b/actions/copy-ecr-image/action.yml @@ -0,0 +1,63 @@ +name: build ecr image +description: build a container image and push to ecr, return image tag + +# src_env: dev +# dst_env: ${{ env.PROMO_ENV }} +# src_profile: ${{ inputs.profile }} +# dst_profile: ${{ inputs.profile }} +# package_ref: ${{ github.sha }} + +inputs: + src_env: + description: ecr source environment + required: true + dst_env: + description: ecr destination environment + required: true + profile: + description: cicd profle + required: true + package_ref: + description: container image tag to copy + required: true + + +outputs: + tag: + description: image tag + value: ${{ steps.erc-image.outputs.tag }} + +# assume caller has connect to AWS account +runs: + using: "composite" + steps: + - name: Get given application settings for source env + id: app_settings + uses: Iterative-Scopes/cicd-framework/actions/cicdcfg@feature/air-191 + with: + env: ${{ inputs.src_env }} + role: deploy + profile: ${{ inputs.profile }} + - name: Configure AWS credentials + id: aws-configure + uses: aws-actions/configure-aws-credentials@v1 + with: + role-to-assume: arn:aws:iam::${{ steps.app_settings.outputs.aws_account }}:role/${{ steps.app_settings.outputs.aws_role }} + role-duration-seconds: ${{ steps.app_settings.outputs.aws_role_duration }} + aws-region: ${{ steps.app_settings.outputs.aws_region }} + audience: ${{ steps.app_settings.outputs.aws_audience }} + - name: Login to Amazon ECR + id: login-ecr + uses: aws-actions/amazon-ecr-login@v1 + env: + AWS_REGION: ${{ steps.app_settings.outputs.aws_region }} + + - name: Pull image from ECR + id: pull-erc-image + env: + REMOTE_REGISTRY: ${{ steps.app_settings.outputs.aws_account }}.dkr.ecr.${{ steps.app_settings.outputs.aws_region }}.amazonaws.com/${{ steps.app_settings.outputs.app_repository }} + IMAGE_TAG: ${{ github.sha }} + shell: bash + run: | + echo "Pulling image $REMOTE_REGISTRY:$IMAGE_TAG" + docker pull $REMOTE_REGISTRY:$IMAGE_TAG \ No newline at end of file diff --git a/actions/deploy-lambda/action.yaml b/actions/deploy-lambda/action.yaml index 0831b68..e445b0b 100644 --- a/actions/deploy-lambda/action.yaml +++ b/actions/deploy-lambda/action.yaml @@ -22,7 +22,7 @@ runs: steps: - name: Get given application settings id: app_settings - uses: Iterative-Scopes/cicd-framework/actions/cicdcfg@main + uses: Iterative-Scopes/cicd-framework/actions/cicdcfg@feature/air-191 with: env: ${{ inputs.env }} role: deploy @@ -32,7 +32,7 @@ runs: shell: bash run: | echo LAMBDA_NAME=${{ inputs.env }}-${{ steps.app_settings.outputs.app_name }} >> $GITHUB_ENV - if [ $LAMBDA_NAME == "null" || ${{ inputs.package_ref }} == "null" ]; + if [[ $LAMBDA_NAME == "null" || ${{ inputs.package_ref }} == "null" ]]; then echo "Missing package ref [${{ inputs.package_ref }}] or lambda name: [$LAMBDA_NAME]"; exit 128; @@ -46,9 +46,38 @@ runs: role-duration-seconds: ${{ steps.app_settings.outputs.aws_role_duration }} aws-region: ${{ steps.app_settings.outputs.aws_region }} audience: ${{ steps.app_settings.outputs.aws_audience }} + + - name: Update container lambda - get image uri with given image tag + if: ${{ steps.app_settings.outputs.app_registry == 'ecr' && + steps.app_settings.outputs.app_deployer != 'sls' }} + uses: Iterative-Scopes/cicd-framework/actions/get-ecr-image-uri@main + id: get-image-uri + with: + aws_region: ${{ steps.app_settings.outputs.aws_region }} + repository: ${{ steps.app_settings.outputs.app_repository }} + image_tag: ${{ inputs.package_ref }} + + - name: Update container lambda - update lambda with image uri + if: ${{ steps.app_settings.outputs.app_registry == 'ecr' && + steps.get-image-uri.outputs.uri && + steps.app_settings.outputs.app_deployer != 'sls' }} + shell: bash + run: | + echo ${{ steps.get-image-uri.outputs.uri }} + aws lambda update-function-code --function-name ${{ env.LAMBDA_NAME }} --image-uri ${{ steps.get-image-uri.outputs.uri }} + exit 0 + + - name: Update lambda from S3 registry + if: ${{ startsWith(steps.app_settings.outputs.app_registry, 's3:') && + steps.app_settings.outputs.app_deployer != 'sls' }} + shell: bash + run: | + echo "update lambda with [${{ inputs.package_ref }}]" + aws lambda update-function-code --dry-run --function-name ${{ steps.app_settings.outputs.app_repository}}-${{ inputs.env }}-lookup_patient_data --s3-bucket dev-is-phi-infrastructure --s3-key serverless/dev/${{ steps.app_settings.outputs.app_repository}}.zip + exit 0 - name: Deploy lambda - if: ${{ steps.app_settings.outputs.app_registry == 'ecr' }} + if: ${{ steps.app_settings.outputs.app_deployer == 'sls' }} shell: bash run: | make -C ${{ inputs.make-directory }} deploy stage="dev" tag="${{ inputs.package_ref }}" \ No newline at end of file From f495eff0bc9ca5c00fac216402d1deef38ec686b Mon Sep 17 00:00:00 2001 From: Avik Chakraborty Date: Tue, 17 Jan 2023 20:07:42 +0530 Subject: [PATCH 6/6] Copy docker image across account --- actions/build-ecr-image/action.yml | 6 ++- actions/copy-ecr-image/action.yml | 82 +++++++++++++++++++++--------- actions/deploy-lambda/action.yaml | 2 +- actions/get-commit-sha/action.yml | 23 +++++++++ 4 files changed, 88 insertions(+), 25 deletions(-) create mode 100644 actions/get-commit-sha/action.yml diff --git a/actions/build-ecr-image/action.yml b/actions/build-ecr-image/action.yml index 5c4c51e..ba409b4 100644 --- a/actions/build-ecr-image/action.yml +++ b/actions/build-ecr-image/action.yml @@ -34,12 +34,16 @@ runs: uses: aws-actions/amazon-ecr-login@v1 env: AWS_REGION: ${{ inputs.aws_region }} + + - name: Get triggering commit sha + id: get_commit_sha + uses: Iterative-Scopes/cicd-framework/actions/get-commit-sha@feature/air-191 - name: Build, tag, and push image to Amazon ECR id: erc-image env: REMOTE_REGISTRY: ${{ inputs.aws_account_id }}.dkr.ecr.${{ inputs.aws_region }}.amazonaws.com/${{ inputs.repository }} - IMAGE_TAG: ${{ github.sha }} + IMAGE_TAG: ${{ steps.get_commit_sha.outputs.sha }} shell: bash run: | echo "image tag [$IMAGE_TAG]" diff --git a/actions/copy-ecr-image/action.yml b/actions/copy-ecr-image/action.yml index b7e1de9..e47f79a 100644 --- a/actions/copy-ecr-image/action.yml +++ b/actions/copy-ecr-image/action.yml @@ -1,11 +1,5 @@ -name: build ecr image -description: build a container image and push to ecr, return image tag - -# src_env: dev -# dst_env: ${{ env.PROMO_ENV }} -# src_profile: ${{ inputs.profile }} -# dst_profile: ${{ inputs.profile }} -# package_ref: ${{ github.sha }} +name: copy ecr image +description: copy a container image from source env to destination env inputs: src_env: @@ -31,33 +25,75 @@ outputs: runs: using: "composite" steps: - - name: Get given application settings for source env - id: app_settings + - name: Get given application settings for ${{ inputs.src_env }} env + id: app_settings_src uses: Iterative-Scopes/cicd-framework/actions/cicdcfg@feature/air-191 with: env: ${{ inputs.src_env }} role: deploy profile: ${{ inputs.profile }} + - name: Configure AWS credentials - id: aws-configure + id: aws_configure_src uses: aws-actions/configure-aws-credentials@v1 with: - role-to-assume: arn:aws:iam::${{ steps.app_settings.outputs.aws_account }}:role/${{ steps.app_settings.outputs.aws_role }} - role-duration-seconds: ${{ steps.app_settings.outputs.aws_role_duration }} - aws-region: ${{ steps.app_settings.outputs.aws_region }} - audience: ${{ steps.app_settings.outputs.aws_audience }} - - name: Login to Amazon ECR - id: login-ecr + role-to-assume: arn:aws:iam::${{ steps.app_settings_src.outputs.aws_account }}:role/${{ steps.app_settings_src.outputs.aws_role }} + role-duration-seconds: ${{ steps.app_settings_src.outputs.aws_role_duration }} + aws-region: ${{ steps.app_settings_src.outputs.aws_region }} + audience: ${{ steps.app_settings_src.outputs.aws_audience }} + + - name: Get triggering commit sha + id: get_commit_sha + uses: Iterative-Scopes/cicd-framework/actions/get-commit-sha@feature/air-191 + + - name: Login to Amazon ECR (${{ inputs.src_env }}) + id: login_ecr_src uses: aws-actions/amazon-ecr-login@v1 env: - AWS_REGION: ${{ steps.app_settings.outputs.aws_region }} + AWS_REGION: ${{ steps.app_settings_src.outputs.aws_region }} - - name: Pull image from ECR - id: pull-erc-image + - name: Pull image from ECR (${{ inputs.src_env }}) + id: pull_erc_image env: - REMOTE_REGISTRY: ${{ steps.app_settings.outputs.aws_account }}.dkr.ecr.${{ steps.app_settings.outputs.aws_region }}.amazonaws.com/${{ steps.app_settings.outputs.app_repository }} - IMAGE_TAG: ${{ github.sha }} + REMOTE_REGISTRY: ${{ steps.app_settings_src.outputs.aws_account }}.dkr.ecr.${{ steps.app_settings_src.outputs.aws_region }}.amazonaws.com/${{ steps.app_settings_src.outputs.app_repository }} + IMAGE_TAG: ${{ steps.get_commit_sha.outputs.sha }} shell: bash run: | echo "Pulling image $REMOTE_REGISTRY:$IMAGE_TAG" - docker pull $REMOTE_REGISTRY:$IMAGE_TAG \ No newline at end of file + docker pull $REMOTE_REGISTRY:$IMAGE_TAG + echo "::set-output name=src_registry::"$REMOTE_REGISTRY"" + + - name: Get given application settings for ${{ inputs.dst_env }} env + id: app_settings_dst + uses: Iterative-Scopes/cicd-framework/actions/cicdcfg@feature/air-191 + with: + env: ${{ inputs.dst_env }} + role: deploy + profile: ${{ inputs.profile }} + + - name: Configure AWS credentials + id: aws_configure_dst + uses: aws-actions/configure-aws-credentials@v1 + with: + role-to-assume: arn:aws:iam::${{ steps.app_settings_dst.outputs.aws_account }}:role/${{ steps.app_settings_dst.outputs.aws_role }} + role-duration-seconds: ${{ steps.app_settings_dst.outputs.aws_role_duration }} + aws-region: ${{ steps.app_settings_dst.outputs.aws_region }} + audience: ${{ steps.app_settings_dst.outputs.aws_audience }} + + - name: Login to Amazon ECR (${{ inputs.dst_env }}) + id: login_ecr_dst + uses: aws-actions/amazon-ecr-login@v1 + env: + AWS_REGION: ${{ steps.app_settings_dst.outputs.aws_region }} + + - name: Push image to ECR (${{ inputs.dst_env }}) + id: push_erc_image + env: + SRC_REGISTRY: ${{ steps.pull_erc_image.outputs.src_registry }} + REMOTE_REGISTRY: ${{ steps.app_settings_dst.outputs.aws_account }}.dkr.ecr.${{ steps.app_settings_dst.outputs.aws_region }}.amazonaws.com/${{ steps.app_settings_dst.outputs.app_repository }} + IMAGE_TAG: ${{ steps.get_commit_sha.outputs.sha }} + shell: bash + run: | + echo "Pushing image to $REMOTE_REGISTRY:$IMAGE_TAG" + docker tag $SRC_REGISTRY:$IMAGE_TAG $REMOTE_REGISTRY:$IMAGE_TAG + docker push $REMOTE_REGISTRY:$IMAGE_TAG diff --git a/actions/deploy-lambda/action.yaml b/actions/deploy-lambda/action.yaml index e445b0b..0b67f59 100644 --- a/actions/deploy-lambda/action.yaml +++ b/actions/deploy-lambda/action.yaml @@ -80,4 +80,4 @@ runs: if: ${{ steps.app_settings.outputs.app_deployer == 'sls' }} shell: bash run: | - make -C ${{ inputs.make-directory }} deploy stage="dev" tag="${{ inputs.package_ref }}" \ No newline at end of file + make -C ${{ inputs.make-directory }} deploy stage="${{ inputs.env }}" tag="${{ inputs.package_ref }}" \ No newline at end of file diff --git a/actions/get-commit-sha/action.yml b/actions/get-commit-sha/action.yml new file mode 100644 index 0000000..1de2fac --- /dev/null +++ b/actions/get-commit-sha/action.yml @@ -0,0 +1,23 @@ +name: fetch triggering commit sha +description: fetch triggering commit sha + +outputs: + sha: + description: commit sha + value: ${{ steps.commit_sha.outputs.sha }} + +# assume caller has connect to AWS account +runs: + using: "composite" + steps: + - name: Get commit sha + id: commit_sha + shell: bash + run: | + if [ "$GITHUB_EVENT_NAME" == "pull_request" ]; then + COMMIT_SHA=$(cat $GITHUB_EVENT_PATH | jq -r .pull_request.head.sha) + else + COMMIT_SHA=${{ github.sha }} + fi + echo "set output sha ["$COMMIT_SHA"]" + echo "::set-output name=sha::"$COMMIT_SHA"" \ No newline at end of file