-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #28 from OnionIoT/feature/pipeline-automation
Feature/pipeline automation
- Loading branch information
Showing
11 changed files
with
246 additions
and
48 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,91 @@ | ||
# This pipeline create a new pipeline in AWS CodePipeline if the branch follows the desired pattern defined in BRANCH_PATTERN. | ||
name: "Delete branch and delete AWS CodePipeline" | ||
|
||
on: | ||
delete: | ||
branches: | ||
- 'openwrt-2*' | ||
|
||
env: | ||
BRANCH_PATTERN: openwrt-2[0-9]\.[0-9]{2} | ||
TERRAFORM_VERSION: 1.7.4 | ||
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} | ||
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} | ||
|
||
jobs: | ||
branch_created: | ||
runs-on: ubuntu-latest | ||
steps: | ||
- name: Check out repository | ||
uses: actions/checkout@v4 | ||
|
||
- name: Get branch name | ||
run: | | ||
echo "BRANCH_NAME=${{ github.event.ref }}" >> $GITHUB_ENV | ||
- name: Verify branch name | ||
run: | | ||
if [[ ! "${BRANCH_NAME}" =~ $BRANCH_PATTERN ]]; then | ||
echo "Branch name doesn't match the pattern." | ||
echo "VALID_BRANCH=false" >> $GITHUB_ENV | ||
else | ||
echo "New branch created $GITHUB_REF" | ||
echo "VALID_BRANCH=true" >> $GITHUB_ENV | ||
fi | ||
- name: Set up Terraform | ||
if: env.VALID_BRANCH == 'true' | ||
uses: hashicorp/setup-terraform@v3 | ||
with: | ||
terraform_version: $TERRAFORM_VERSION | ||
|
||
- name: Terraform Init | ||
if: env.VALID_BRANCH == 'true' | ||
run: | | ||
cd .terraform/pipeline | ||
terraform init | ||
- name: Terraform Select Workspace | ||
if: env.VALID_BRANCH == 'true' | ||
run: | | ||
cd .terraform/pipeline | ||
terraform workspace select $BRANCH_NAME | ||
echo "Current Workspace is $(terraform workspace show)" | ||
- name: Check Terraform Workspace | ||
if: env.VALID_BRANCH == 'true' | ||
run: | | ||
cd .terraform/pipeline | ||
if [ -z "$(terraform state list)" ]; then | ||
echo "TF_IS_EMPTY=true" | ||
echo "Workspace Terraform is empty" | ||
else | ||
echo "TF_IS_EMPTY=false" | ||
echo "Workspace Terraform is not empty" | ||
fi | ||
- name: Terraform Update Bucket Force Deletion | ||
if: env.VALID_BRANCH == 'true' && env.TF_IS_EMPTY == 'false' | ||
run: | | ||
cd .terraform/pipeline | ||
sed -i "/stage_vars = {/a \ \ \"\${{ env.BRANCH_NAME }}\" = {\n \ \ \ branch = \"\${{ env.BRANCH_NAME }}\"\n \ \ }" terraform.tfvars | ||
sed -i '/^resource "aws_s3_bucket" "codepipeline_bucket" {/a force_destroy = true' main.tf | ||
terraform apply -auto-approve -var="buildspec_file_name=development-buildspec.yml" | ||
- name: Terraform Destroy && env.TF_IS_EMPTY == 'false' | ||
if: env.VALID_BRANCH == 'true' | ||
run: | | ||
cd .terraform/pipeline | ||
terraform destroy -auto-approve | ||
- name: Terraform Delete Workspace | ||
if: env.VALID_BRANCH == 'true' | ||
run: | | ||
cd .terraform/pipeline | ||
terraform workspace select default | ||
terraform workspace delete $BRANCH_NAME | ||
echo "Workspace $BRANCH_NAME deleted" | ||
- name: NOTHING TO DO | ||
if: env.VALID_BRANCH == 'false' | ||
run: echo "THIS BRANCH DOES NOT CREATE A NEW AWS CODEPIPELINE" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,78 @@ | ||
# This pipeline create a new pipeline in AWS CodePipeline if the branch follows the desired pattern defined in BRANCH_PATTERN. | ||
name: "New Branch create AWS CodePipeline" | ||
|
||
on: | ||
create: | ||
branches: | ||
- 'openwrt-2*' | ||
|
||
env: | ||
BRANCH_PATTERN: openwrt-2[0-9]\.[0-9]{2} | ||
TERRAFORM_VERSION: 1.7.4 | ||
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} | ||
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} | ||
|
||
jobs: | ||
branch_created: | ||
runs-on: ubuntu-latest | ||
steps: | ||
- name: Check out repository | ||
uses: actions/checkout@v4 | ||
with: | ||
ref: devops | ||
|
||
- name: Get branch name | ||
run: | | ||
echo "BRANCH_NAME=${{ github.event.ref }}" >> $GITHUB_ENV | ||
- name: Verify branch name | ||
run: | | ||
if [[ ! "${BRANCH_NAME}" =~ $BRANCH_PATTERN ]]; then | ||
echo "Branch name doesn't match the pattern." | ||
echo "VALID_BRANCH=false" >> $GITHUB_ENV | ||
else | ||
echo "New branch created $GITHUB_REF" | ||
echo "VALID_BRANCH=true" >> $GITHUB_ENV | ||
fi | ||
- name: Set up Terraform | ||
if: env.VALID_BRANCH == 'true' | ||
uses: hashicorp/setup-terraform@v3 | ||
with: | ||
terraform_version: $TERRAFORM_VERSION | ||
|
||
- name: Terraform Init | ||
if: env.VALID_BRANCH == 'true' | ||
run: | | ||
cd .terraform/pipeline | ||
terraform init | ||
- name: Terraform New Workspace | ||
if: env.VALID_BRANCH == 'true' | ||
run: | | ||
cd .terraform/pipeline | ||
terraform workspace new $BRANCH_NAME | ||
echo "Current Workspace is $(terraform workspace show)" | ||
- name: Terraform Validate | ||
if: env.VALID_BRANCH == 'true' | ||
run: | | ||
cd .terraform/pipeline | ||
terraform validate | ||
- name: Terraform Plan | ||
if: env.VALID_BRANCH == 'true' | ||
run: | | ||
cd .terraform/pipeline | ||
sed -i "/stage_vars = {/a \ \ \"\${{ env.BRANCH_NAME }}\" = {\n \ \ \ branch = \"\${{ env.BRANCH_NAME }}\"\n \ \ }" terraform.tfvars | ||
terraform plan -var="buildspec_file_name=development-buildspec.yml" | ||
- name: Terraform Apply | ||
if: env.VALID_BRANCH == 'true' | ||
run: | | ||
cd .terraform/pipeline | ||
terraform apply -auto-approve -var="buildspec_file_name=development-buildspec.yml" | ||
- name: NOTHING TO DO | ||
if: env.VALID_BRANCH == 'false' | ||
run: echo "THIS BRANCH DOES NOT CREATE A NEW AWS CODEPIPELINE" |
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,54 @@ | ||
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. | ||
# SPDX-License-Identifier: MIT-0 | ||
version: 0.2 | ||
env: | ||
variables: | ||
FORCE_UNSAFE_CONFIGURE: 1 | ||
ROOT_PATH: "/openwrt" | ||
phases: | ||
install: | ||
commands: | ||
- echo "Installing dependencies" | ||
- apt-get update | ||
- apt -y install build-essential clang flex bison g++ gawk gcc-multilib g++-multilib gettext git libncurses5-dev libssl-dev python3-distutils rsync unzip zlib1g-dev file wget python3 | ||
- apt -y install --upgrade awscli | ||
# remove pyenv from path to use the default system installation. | ||
- export PATH=$(echo $PATH | sed 's@/root/.pyenv/shims:/root/.pyenv/bin:@@g') | ||
pre_build: | ||
commands: | ||
- mkdir -p $ROOT_PATH | ||
- cp -r $CODEBUILD_SRC_DIR/. $ROOT_PATH | ||
- mkdir -p $ROOT_PATH/keys | ||
- aws s3 cp s3://onion-build/openwrt/openwrt21.key $ROOT_PATH/keys/key-build | ||
- aws s3 cp s3://onion-build/openwrt/openwrt21.pub $ROOT_PATH/keys/key-build.pub | ||
|
||
build: | ||
commands: | ||
- cd $ROOT_PATH | ||
- bash build.sh | ||
post_build: | ||
commands: | ||
- if [ "$CODEBUILD_BUILD_SUCCEEDING" = "0" ]; then echo ">>> VERBOSE DEBUG BUILD"; bash build.sh -V ; exit 1; fi | ||
|
||
- cd $ROOT_PATH | ||
- BUILD_DATE=$(date +%Y%m%d%H%M%S) | ||
|
||
- echo "Copying Packages" | ||
- cd "$ROOT_PATH/openwrt/bin/packages/mipsel_24kc" | ||
- aws s3 cp --recursive . "s3://$OUTPUT_BUCKET/builds/$RELEASE_VERSION/$BUILD_DATE/packages/mipsel_24kc/" | ||
|
||
- echo "Copying Binaries" | ||
- cd "$ROOT_PATH/openwrt/bin/targets/ramips/mt76x8" | ||
- aws s3 cp --recursive . "s3://$OUTPUT_BUCKET/builds/$RELEASE_VERSION/$BUILD_DATE/targets/ramips/mt76x8/" | ||
|
||
cache: | ||
paths: | ||
- /var/cache/apt/**/* | ||
- /var/lib/apt/lists/**/* | ||
|
||
artifacts: | ||
type: zip | ||
files: | ||
- "packages/mipsel_24kc/**/*" | ||
- "targets/ramips/mt76x8/**/*" | ||
base-directory: "$ROOT_PATH/openwrt/bin" |