name: CI-master_test

on:
  pull_request:
    branches:
      - master

  workflow_dispatch:

jobs:

  Build_and_test_winpeas_master:
    runs-on: windows-latest
    needs: Build_and_test_linpeas_master
    
    # environment variables
    env:
      Solution_Path: 'winPEAS\winPEASexe\winPEAS.sln'
      Configuration: 'Release'
      DotFuscatorGeneratedPath: 'winPEAS\winPEASexe\binaries\Obfuscated Releases\Dotfuscated'

    steps:
      # checkout
      - name: Checkout
        uses: actions/checkout@master
        with:
          persist-credentials: false
          # Otherwise, you will failed to push refs to dest repo.
          fetch-depth: 0
          ref: refs/heads/${{ github.head_ref }}
            
      # Add  MSBuild to the PATH: https://github.com/microsoft/setup-msbuild
      - name: Setup MSBuild.exe
        uses: microsoft/setup-msbuild@v1.0.2
       
      # Setup NuGet
      - name: Setup NuGet.exe
        uses: nuget/setup-nuget@v1  
        
      # Restore the packages for testing
      - name: Restore the application       
        run: nuget restore $env:Solution_Path
        
      # build
      - name: run MSBuild
        run: msbuild $env:Solution_Path
        
      # Execute all unit tests in the solution
      - name: Execute unit tests
        run: dotnet test $env:Solution_Path
        
      # Build & update all versions
      - name: Build all versions
        run: |
            echo "build x64"
            msbuild -m $env:Solution_Path /t:Rebuild /p:Configuration=$env:Configuration /p:Platform="x64"
            
            echo "build x86"
            msbuild -m $env:Solution_Path /t:Rebuild /p:Configuration=$env:Configuration /p:Platform="x86"
            
            echo "build Any CPU"
            msbuild -m $env:Solution_Path /t:Rebuild /p:Configuration=$env:Configuration /p:Platform="Any CPU"
      
      # Copy the built versions
      - name: Copy all versions
        run: |
            echo "copy x64"
            cp winPEAS\winPEASexe\winPEAS\bin\x64\$env:Configuration\winPEAS.exe winPEAS\winPEASexe\binaries\x64\$env:Configuration\winPEASx64.exe
            
            echo "copy x86"
            cp winPEAS\winPEASexe\winPEAS\bin\x86\$env:Configuration\winPEAS.exe winPEAS\winPEASexe\binaries\x86\$env:Configuration\winPEASx86.exe
            
            echo "copy Any"
            cp winPEAS\winPEASexe\winPEAS\bin\$env:Configuration\winPEAS.exe winPEAS\winPEASexe\binaries\$env:Configuration\winPEASany.exe        
      
      # Setup DotFuscator
      - name: Setup DotFuscator
        run: |
            7z x winPEAS\winPEASexe\Dotfuscator\DotfuscatorCE.zip
            whoami
            mkdir -p $env:USERPROFILE\AppData\Local\"PreEmptive Solutions"\"Dotfuscator Community Edition"\6.0 -erroraction 'silentlycontinue'
            cp DotfuscatorCE\license\* $env:USERPROFILE\AppData\Local\"PreEmptive Solutions"\"Dotfuscator Community Edition"\6.0\

      # build obfuscated versions
      - name: Build obfuscated versions
        run: |
            DotfuscatorCE\dotfuscator.exe "winPEAS\winPEASexe\binaries\Obfuscated Releases\x64.xml"
            DotfuscatorCE\dotfuscator.exe "winPEAS\winPEASexe\binaries\Obfuscated Releases\x86.xml"
            DotfuscatorCE\dotfuscator.exe "winPEAS\winPEASexe\binaries\Obfuscated Releases\any.xml" 


      # copy the files
      - name: Copy Dotfuscator generated files
        run: |
            cp $env:DotFuscatorGeneratedPath\x64\winPEASx64.exe "winPEAS\winPEASexe\binaries\Obfuscated Releases\winPEASx64.exe"            
            cp $env:DotFuscatorGeneratedPath\x86\winPEASx86.exe "winPEAS\winPEASexe\binaries\Obfuscated Releases\winPEASx86.exe"
            cp $env:DotFuscatorGeneratedPath\any\winPEASany.exe "winPEAS\winPEASexe\binaries\Obfuscated Releases\winPEASany.exe"

      # Git add
      - name: Create local changes
        run: |
            git add winPEAS\winPEASexe\binaries\Release\*
            git add winPEAS\winPEASexe\binaries\x64\*
            git add winPEAS\winPEASexe\binaries\x86\*
            git add "winPEAS\winPEASexe\binaries\Obfuscated Releases\*.exe"

      # Git commit
      - name: Commit results to Github
        run: |
          git config --local user.email "ci@winpeas.com"
          git config --global user.name "CI-winpeas"
          git pull origin "${{ github.ref }}" --autostash --rebase -Xours
          git commit -m "winpeas binaries auto update" -a --allow-empty
      
      # Git push
      - name: Push changes
        uses: ad-m/github-push-action@master
        with:
          branch: refs/heads/${{ github.head_ref }}
          github_token: ${{ secrets.GITHUB_TOKEN }}
          force: true

  Build_and_test_linpeas_master:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v2
        with:
          persist-credentials: false
          # Otherwise, you will failed to push refs to dest repo.
          fetch-depth: 0
          ref: refs/heads/${{ github.head_ref }}

      - name: Build linpeas
        run: |
          python3 -m pip install PyYAML
          cd linPEAS
          python3 -m builder.linpeas_builder
          
      - name: Run linpeas help
        run: linPEAS/linpeas.sh -h
        
      - name: Run linpeas
        run: linPEAS/linpeas.sh

      - name: Create local changes
        run: git add linPEAS/linpeas.sh

      - name: Commit results to Github
        run: |
          git config --local user.email ""
          git config --global user.name "CI-linpeas-ubuntu"
          git pull origin "${{ github.ref }}" --autostash --rebase -Xours
          git commit -m "linpeas.sh auto update" -a --allow-empty
      
      - name: Push changes
        uses: ad-m/github-push-action@master
        with:
          branch: refs/heads/${{ github.head_ref }}
          github_token: ${{ secrets.GITHUB_TOKEN }}
          force: true

  Build_and_test_macpeas_master:
    runs-on: macos-latest

    steps:
      - uses: actions/checkout@v2

      - name: Build macpeas
        run: |
          python3 -m pip install PyYAML
          python3 -m pip install requests
          cd linPEAS
          python3 -m builder.linpeas_builder
      
      - name: Run macpeas help
        run: linPEAS/linpeas.sh -h
      
      - name: Run macpeas
        run: linPEAS/linpeas.sh -o SysI,Container,Devs,AvaSof,ProCronSrvcsTmrsSocks,Net,UsrI,SofI
