name: e2e Test

on:
  push:
    branches: [ 'main' ]

env:
  TEST_HOST_DOCKER: ./test
  TEST_USER: test
  TEST_USER2: test2

jobs:
  e2e:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout
        uses: actions/checkout@v3

#         : ---------------------------------------------------------------
#         : START E2E Test Specific - steps
#         : ----------------------------------------------------------------

      - name: E2E Test Specific - Clean up old test files
        run: |
          docker stop ssh-host-container || true && docker rm ssh-host-container || true

      - name: E2E Test Specific - Create ssh keys
        run: |
          echo $HOME
          ls -la $HOME
          ssh-keygen -m PEM -t rsa -b 4096 -f "$HOME/.ssh/id_rsa" -N ""
          eval `ssh-agent -s`
          ssh-add "$HOME/.ssh/id_rsa"
          ssh-add -l
          echo "SSH_PRIVATE_KEY<<EOF" >> $GITHUB_ENV
          cat $HOME/.ssh/id_rsa >> $GITHUB_ENV
          echo "EOF" >> $GITHUB_ENV

      - name: E2E Test Specific - Build Host Server Image
        working-directory: ${{ env.TEST_HOST_DOCKER }}
        run: |
          docker build \
            -t ssh-host-image . \
            --build-arg SSH_PUB_KEY="$(cat $HOME/.ssh/id_rsa.pub)"
          docker run -d -p 8822:22 --name=ssh-host-container ssh-host-image
          docker exec ssh-host-container sh -c "hostname --ip-address" > ip.txt
          echo "REMOTE_HOST<<EOF" >> $GITHUB_ENV
          cat ip.txt >> $GITHUB_ENV
          echo "EOF" >> $GITHUB_ENV
        shell: bash

      - name: E2E Test Specific - Create project file
        run: |
          mkdir test_project2 && cd "$_"
          truncate -s 5MB info2.txt
          cd ../
          mkdir test_project && cd "$_"
          touch index.html
          date +"%Y-%m-%d %H:%M:%S,%3N" >> index.html
          truncate -s 50MB image.svg
          truncate -s 5MB info.txt
          truncate -s 500MB big_file.txt
          mkdir skip_dir && cd "$_"
          truncate -s 5MB text_in_skip_dir.txt
          cd ../
          cat index.html
          echo "test_project:" && ls -lR
          echo "skip_dir:" && ls -lR skip_dir

#         ----------------------------------------------------------------
#         END E2E Test Specific - steps
#         ----------------------------------------------------------------

      - name: set shared ENV variables for multi target deployment
        run: |
          echo "ARGS=-rlgoDzvcR -i --delete --chmod=ugo+rwX --progress" >> $GITHUB_ENV
          echo "SSH_CMD_ARGS=-o StrictHostKeyChecking=no, -o UserKnownHostsFile=/dev/null" >> $GITHUB_ENV
          echo "SOURCE=test_project/ test_project2/" >> $GITHUB_ENV
          echo "EXCLUDE=skip_dir/, /node_modules/" >> $GITHUB_ENV
          echo "SCRIPT_BEFORE<<EOF" >> $GITHUB_ENV
          echo "whoami" >> $GITHUB_ENV
          echo "ls -lR /var/www/html/" >> $GITHUB_ENV
          echo "EOF" >> $GITHUB_ENV
          echo "SCRIPT_AFTER<<EOF" >> $GITHUB_ENV
          echo $RSYNC_STDOUT >> $GITHUB_ENV
          echo "ls -lR /var/www/html/" >> $GITHUB_ENV
          echo "EOF" >> $GITHUB_ENV

      - name: e2e Test ssh-deploy action - Target 1
        uses: easingthemes/ssh-deploy@main
        env:
          # Shared ENV Vars created in previous steps
          REMOTE_USER: ${{ env.TEST_USER }}
          TARGET: /var/www/html/${{ env.TEST_USER }}

      - name: e2e Test ssh-deploy action - Target 2
        uses: easingthemes/ssh-deploy@main
        env:
          # Shared ENV Vars created in previous steps
          REMOTE_USER: ${{ env.TEST_USER2 }}
          TARGET: /var/www/html/${{ env.TEST_USER2 }}

      - name: e2e Test ssh-deploy action - Default values
        uses: easingthemes/ssh-deploy@main
        env:
          # Shared ENV Vars created in previous steps
          REMOTE_USER: ${{ env.TEST_USER }}
  e2e-v3:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout
        uses: actions/checkout@v3

      #         : ---------------------------------------------------------------
      #         : START E2E Test Specific - steps
      #         : ----------------------------------------------------------------

      - name: E2E Test Specific - Clean up old test files
        run: |
          docker stop ssh-host-container || true && docker rm ssh-host-container || true

      - name: E2E Test Specific - Create ssh keys
        run: |
          echo $HOME
          ls -la $HOME
          ssh-keygen -m PEM -t rsa -b 4096 -f "$HOME/.ssh/id_rsa" -N ""
          eval `ssh-agent -s`
          ssh-add "$HOME/.ssh/id_rsa"
          ssh-add -l
          echo "SSH_PRIVATE_KEY<<EOF" >> $GITHUB_ENV
          cat $HOME/.ssh/id_rsa >> $GITHUB_ENV
          echo "EOF" >> $GITHUB_ENV

      - name: E2E Test Specific - Build Host Server Image
        working-directory: ${{ env.TEST_HOST_DOCKER }}
        run: |
          docker build \
            -t ssh-host-image . \
            --build-arg SSH_PUB_KEY="$(cat $HOME/.ssh/id_rsa.pub)"
          docker run -d -p 8822:22 --name=ssh-host-container ssh-host-image
          docker exec ssh-host-container sh -c "hostname --ip-address" > ip.txt
          echo "REMOTE_HOST<<EOF" >> $GITHUB_ENV
          cat ip.txt >> $GITHUB_ENV
          echo "EOF" >> $GITHUB_ENV
        shell: bash

      - name: E2E Test Specific - Create project file
        run: |
          mkdir test_project2 && cd "$_"
          truncate -s 5MB info2.txt
          cd ../
          mkdir test_project && cd "$_"
          touch index.html
          date +"%Y-%m-%d %H:%M:%S,%3N" >> index.html
          truncate -s 50MB image.svg
          truncate -s 5MB info.txt
          truncate -s 500MB big_file.txt
          mkdir skip_dir && cd "$_"
          truncate -s 5MB text_in_skip_dir.txt
          cd ../
          cat index.html
          echo "test_project:" && ls -lR
          echo "skip_dir:" && ls -lR skip_dir

      #         ----------------------------------------------------------------
      #         END E2E Test Specific - steps
      #         ----------------------------------------------------------------

      - name: e2e Test ssh-deploy action - Target 1
        uses: easingthemes/ssh-deploy@v3
        env:
          # Shared ENV Vars created in previous steps
          REMOTE_USER: ${{ env.TEST_USER }}
          TARGET: /var/www/html/${{ env.TEST_USER }}
          SOURCE: test_project/
          EXCLUDE: skip_dir/, /node_modules/
          ARGS: -rlgoDzvcO