|
@@ -39,8 +39,19 @@ jobs:
|
|
|
echo ::set-output name=ec2AMI::$(echo $jsonInput | jq -r '.ec2AMI.value')
|
|
|
echo ::set-output name=networkSuffix::$(echo $jsonInput | jq -r '.networkSuffix.value')
|
|
|
echo ::set-output name=deploymentType::$(echo $jsonInput | jq -r '.deploymentType.value')
|
|
|
+ echo ::set-output name=volumeSize::$(echo $jsonInput | jq -r '.volumeSize.value')
|
|
|
+ echo ::set-output name=rpcVolumeSize::$(echo $jsonInput | jq -r '.rpcVolumeSize.value')
|
|
|
initialBalancesFile=$(echo $jsonInput | jq -r '.initialBalancesFile.value')
|
|
|
initialMembersFile=$(echo $jsonInput | jq -r '.initialMembersFile.value')
|
|
|
+ proposalParametersInput=$(echo $jsonInput | jq -r '.proposalParameters.value')
|
|
|
+
|
|
|
+ if [ $proposalParametersInput = "{}" ]
|
|
|
+ then
|
|
|
+ echo ::set-output name=proposalParameters::''
|
|
|
+ else
|
|
|
+ echo ::set-output name=proposalParameters::$proposalParametersInput
|
|
|
+ fi
|
|
|
+
|
|
|
if [ -z "$initialBalancesFile" ]
|
|
|
then
|
|
|
echo ::set-output name=initialBalancesFilePath::''
|
|
@@ -48,6 +59,7 @@ jobs:
|
|
|
wget $initialBalancesFile -O initial-balances.json
|
|
|
echo ::set-output name=initialBalancesFilePath::'initial-balances.json'
|
|
|
fi
|
|
|
+
|
|
|
if [ -z "$initialMembersFile" ]
|
|
|
then
|
|
|
echo ::set-output name=initialMembersFilePath::''
|
|
@@ -66,6 +78,16 @@ jobs:
|
|
|
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
|
|
|
aws-region: us-east-1
|
|
|
|
|
|
+ - name: Check if CloudFormation stack exists
|
|
|
+ id: stack_exists
|
|
|
+ run: |
|
|
|
+ if aws cloudformation describe-stacks --stack-name ${{ env.STACK_NAME }} >/dev/null 2>/dev/null; then
|
|
|
+ echo "Stack already exists"
|
|
|
+ exit 1
|
|
|
+ else
|
|
|
+ echo "Stack does not exist"
|
|
|
+ fi
|
|
|
+
|
|
|
- name: Deploy to AWS CloudFormation
|
|
|
uses: aws-actions/aws-cloudformation-github-deploy@v1
|
|
|
id: deploy_stack
|
|
@@ -79,7 +101,9 @@ jobs:
|
|
|
RPCEC2InstanceType=${{ steps.myoutputs.outputs.rpcInstanceType }},
|
|
|
BuildEC2InstanceType=${{ steps.myoutputs.outputs.buildInstanceType }},
|
|
|
EC2AMI=${{ steps.myoutputs.outputs.ec2AMI }},
|
|
|
- NumberOfValidators=${{ steps.myoutputs.outputs.numberOfValidators }}
|
|
|
+ NumberOfValidators=${{ steps.myoutputs.outputs.numberOfValidators }},
|
|
|
+ VolumeSize=${{ steps.myoutputs.outputs.volumeSize }},
|
|
|
+ RPCVolumeSize=${{ steps.myoutputs.outputs.rpcVolumeSize }}
|
|
|
|
|
|
- name: Prepare inventory for Ansible
|
|
|
run: |
|
|
@@ -103,7 +127,8 @@ jobs:
|
|
|
|
|
|
- name: Run playbook to compile joystream-node on build server
|
|
|
uses: dawidd6/action-ansible-playbook@v2
|
|
|
- if: steps.myoutputs.outputs.ec2AMI == ''
|
|
|
+ # Build binaries if AMI not specified or a custom proposals parameter is passed
|
|
|
+ if: steps.myoutputs.outputs.ec2AMI == '' || steps.myoutputs.outputs.proposalParameters != ''
|
|
|
with:
|
|
|
playbook: build-code.yml
|
|
|
directory: devops/aws
|
|
@@ -112,23 +137,24 @@ jobs:
|
|
|
options: |
|
|
|
--inventory inventory
|
|
|
--extra-vars "branch_name=${{ steps.myoutputs.outputs.branchName }} \
|
|
|
- git_repo=${{ steps.myoutputs.outputs.gitRepo }} data_path=mydata"
|
|
|
+ git_repo=${{ steps.myoutputs.outputs.gitRepo }} data_path=mydata \
|
|
|
+ proposal_parameters=${{ steps.myoutputs.outputs.proposalParameters }}"
|
|
|
|
|
|
- name: Run playbook to install additional utils on build server
|
|
|
uses: dawidd6/action-ansible-playbook@v2
|
|
|
if: steps.myoutputs.outputs.ec2AMI == ''
|
|
|
with:
|
|
|
- playbook: setup-admin.yml
|
|
|
+ playbook: setup-build-server.yml
|
|
|
directory: devops/aws
|
|
|
requirements: requirements.yml
|
|
|
key: ${{ secrets.SSH_PRIVATE_KEY }}
|
|
|
options: |
|
|
|
--inventory inventory
|
|
|
|
|
|
- - name: Run playbook to configure chain-spec and pioneer
|
|
|
+ - name: Run playbook to configure chain-spec
|
|
|
uses: dawidd6/action-ansible-playbook@v2
|
|
|
with:
|
|
|
- playbook: chain-spec-pioneer.yml
|
|
|
+ playbook: configure-network.yml
|
|
|
directory: devops/aws
|
|
|
requirements: requirements.yml
|
|
|
key: ${{ secrets.SSH_PRIVATE_KEY }}
|
|
@@ -138,11 +164,16 @@ jobs:
|
|
|
number_of_validators=${{ steps.myoutputs.outputs.numberOfValidators }} \
|
|
|
git_repo=${{ steps.myoutputs.outputs.gitRepo }} \
|
|
|
deployment_type=${{ steps.myoutputs.outputs.deploymentType }} \
|
|
|
- bucket_name=${{ steps.deploy_stack.outputs.S3BucketName }} \
|
|
|
branch_name=${{ steps.myoutputs.outputs.branchName }} \
|
|
|
initial_members_file=${{ steps.myoutputs.outputs.initialMembersFilePath }} \
|
|
|
initial_balances_file=${{ steps.myoutputs.outputs.initialBalancesFilePath }}"
|
|
|
|
|
|
+ - name: Terminate Build instance
|
|
|
+ continue-on-error: true
|
|
|
+ run: |
|
|
|
+ echo "Deleting build instance with id ${{ steps.deploy_stack.outputs.BuildInstanceId }}"
|
|
|
+ aws ec2 terminate-instances --instance-ids ${{ steps.deploy_stack.outputs.BuildInstanceId }}
|
|
|
+
|
|
|
- name: Encrpyt the artifacts
|
|
|
run: |
|
|
|
7z a -p${{ steps.myoutputs.outputs.encryptionKey }} chain-data.7z mydata/*
|
|
@@ -153,16 +184,16 @@ jobs:
|
|
|
name: data-chainspec-auth
|
|
|
path: devops/aws/chain-data.7z
|
|
|
|
|
|
- - name: Print output URL's
|
|
|
- run: |
|
|
|
- echo -e "Pioneer URL: https://${{ steps.deploy_stack.outputs.DomainName }}"
|
|
|
- echo -e "RPC: wss://${{ steps.deploy_stack.outputs.RPCPublicIp }}.nip.io/ws-rpc"
|
|
|
+ - name: Save the endpoints file as an artifact
|
|
|
+ uses: actions/upload-artifact@v2
|
|
|
+ with:
|
|
|
+ name: endpoints
|
|
|
+ path: devops/aws/endpoints.json
|
|
|
|
|
|
- name: Delete CloudFormation Stack if any step failed
|
|
|
- if: failure()
|
|
|
+ # Skip only if stack already existed or all steps passed succesfully
|
|
|
+ if: ( failure() || cancelled() ) && steps.stack_exists.outcome != 'failure'
|
|
|
run: |
|
|
|
- echo "Empty the bucket"
|
|
|
- aws s3 rm s3://${{ steps.deploy_stack.outputs.S3BucketName }} --recursive || echo "No bucket"
|
|
|
echo "Deleting ${{ env.STACK_NAME }} stack"
|
|
|
aws cloudformation delete-stack --stack-name ${{ env.STACK_NAME }}
|
|
|
echo "Waiting for ${{ env.STACK_NAME }} to be deleted..."
|