diff --git a/.github/workflows/demo.yml b/.github/workflows/demo.yml new file mode 100644 index 0000000..104f58e --- /dev/null +++ b/.github/workflows/demo.yml @@ -0,0 +1,78 @@ +name: demo-reset + +# Controls when the workflow will run +on: +# schedule: +# - cron: "0 * * * *" + + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: + +# OLD_INSTANCE_SNAPSHOT_NAME=$(aws lightsail get-instance-snapshots | grep '"name": "CasaOS-Demo-Snapshot-[0-9]' | sed 's/ //g' | sed 's/"//g' | sed 's/,//g' | sed 's/name://g') +# OLD_INSTANCE_NAME=$(aws lightsail get-instances | grep '"name": "CasaOS-Demo-[0-9]' | sed 's/ //g' | sed 's/"//g' | sed 's/,//g' | sed 's/name://g') +# NEW_INSTANCE_NAME=CasaOS-Demo-$(date +%s) + +# A workflow run is made up of one or more jobs that can run sequentially or in parallel +jobs: + # This workflow contains a single job called "build" + reset: + # The type of runner that the job will run on + runs-on: ubuntu-latest + + # Steps represent a sequence of tasks that will be executed as part of the job + steps: + # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it + - uses: actions/checkout@v2 + + - name: Configure AWS credentials from Test account + uses: aws-actions/configure-aws-credentials@v1 + with: + aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} + aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + aws-region: us-east-2 + + - name: Get old instance and snapshot name + run: | + OLD_INSTANCE_SNAPSHOT_NAME=$(aws lightsail get-instance-snapshots | grep '"name": "CasaOS-Demo-Snapshot-[0-9]' | sed 's/ //g' | sed 's/"//g' | sed 's/,//g' | sed 's/name://g') + OLD_INSTANCE_NAME=$(aws lightsail get-instances | grep '"name": "CasaOS-Demo-[0-9]' | sed 's/ //g' | sed 's/"//g' | sed 's/,//g' | sed 's/name://g') + + - name: create-instances-from-snapshot + run: | + NEW_INSTANCE_NAME=CasaOS-Demo-$(date +%s) + aws lightsail create-instances-from-snapshot \ + --instance-snapshot-name $OLD_INSTANCE_SNAPSHOT_NAME \ + --instance-names $NEW_INSTANCE_NAME \ + --availability-zone us-west-2a \ + --bundle-id large_2_0 + + - name: wait for new instance running + run: | + TIMEOUT=$(($(date +%s)+600)) + while [ $(date +%s) -gt $TIMEOUT ] \ + do \ + NEW_INSTANCE_STATE=$(aws lightsail get-instance-state --instance-name $OLD_INSTANCE_NAME | grep '"name":' | sed 's/ //g' | sed 's/"//g' | sed 's/name://g') \ + if [ $NEW_INSTANCE_STATE == running ] \ + then \ + echo "New instance is running now" \ + break \ + fi \ + done + + - name: Put instance public ports + run: | + aws lightsail put-instance-public-ports \ + --port-infos fromPort=0,toPort=65535,protocol=all \ + --instance-name $NEW_INSTANCE_NAME + + - name: Attach static ip + run: | + aws lightsail attach-static-ip \ + --static-ip-name CasaOS-Demo-IP \ + --instance-name $NEW_INSTANCE_NAME + + - name: Delete old instance + run: | + aws lightsail delete-instance \ + --instance-name $OLD_INSTANCE_NAME + +