name: Tests

on:
  push:
    branches: [ master ]
  pull_request:
    branches_ignore: []


jobs:
  Formatting:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
        with:
          # Full git history is needed to get a proper
          # list of changed files within `super-linter`
          fetch-depth: 0
      - name: Formatting
        uses: github/super-linter@v5
        env:
          VALIDATE_ALL_CODEBASE: false
          DEFAULT_BRANCH: master
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          VALIDATE_SNAKEMAKE_SNAKEFMT: true

  Linting:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v2
    - name: Lint workflow
      uses: snakemake/snakemake-github-action@v1
      with:
        directory: .
        snakefile: workflow/Snakefile
        stagein: "mamba install -y -n snakemake --channel conda-forge pyarrow=6.0"
        args: "--lint"

  Dryrun_Tests:
    runs-on: ubuntu-latest
    needs: 
      - Linting
      - Formatting
    steps:
   
    - uses: actions/checkout@v2

    - name: Test workflow (local FASTQs)
      uses: snakemake/snakemake-github-action@v1
      with:
        directory: .test
        snakefile: workflow/Snakefile
        args: "--configfile .test/config-simple/config.yaml --use-conda --show-failed-logs -j 10 --conda-cleanup-pkgs cache --dryrun"
        show-disk-usage-on-error: true

    - name: Test testcase generation
      uses: snakemake/snakemake-github-action@v1
      with:
        directory: .test
        snakefile: workflow/Snakefile
        args: "results/testcases/one/freebayes/IX:314200 --configfile .test/config-simple/config.yaml --use-conda --show-failed-logs -j 10 --conda-cleanup-pkgs cache --dryrun"
        show-disk-usage-on-error: true

    - name: Test workflow (local FASTQs, target regions)
      uses: snakemake/snakemake-github-action@v1
      with:
        directory: .test
        snakefile: workflow/Snakefile
        args: "--configfile .test/config-target-regions/config.yaml --use-conda --show-failed-logs -j 10 --conda-cleanup-pkgs cache --dryrun"
        show-disk-usage-on-error: true

    - name: Test workflow (local FASTQs, multiple target regions BED files)
      uses: snakemake/snakemake-github-action@v1
      with:
        directory: .test
        snakefile: workflow/Snakefile
        args: "--configfile .test/config-target-regions/config_multiple_beds.yaml --use-conda --show-failed-logs -j 10 --conda-cleanup-pkgs cache --dryrun"
        show-disk-usage-on-error: true

    - name: Test workflow (local FASTQs, no candidate filtering)
      uses: snakemake/snakemake-github-action@v1
      with:
        directory: .test
        snakefile: workflow/Snakefile
        args: "--configfile .test/config-no-candidate-filtering/config.yaml --use-conda --show-failed-logs -j 10 --conda-cleanup-pkgs cache --dryrun"
        show-disk-usage-on-error: true

    - name: Test workflow (local FASTQs primer)
      uses: snakemake/snakemake-github-action@v1
      with:
        directory: .test
        snakefile: workflow/Snakefile
        args: "--configfile .test/config_primers/config.yaml --use-conda --show-failed-logs -j 10 --conda-cleanup-pkgs cache --dryrun"
        show-disk-usage-on-error: true

    - name: Test workflow (SRA FASTQs)
      uses: snakemake/snakemake-github-action@v1
      with:
        directory: .test
        snakefile: workflow/Snakefile
        args: "--configfile .test/config-sra/config.yaml --show-failed-logs --use-conda --cores all --set-scatter calling=4 --conda-cleanup-pkgs cache --dryrun"
        show-disk-usage-on-error: true

  Quick_Tests:
    runs-on: ubuntu-latest
    needs: 
      - Dryrun_Tests
    steps:
    - name: update apt
      run: sudo apt-get update
    - name: Free Disk Space (Ubuntu)
      uses: jlumbroso/free-disk-space@v1.3.0
      with:
        # this might remove tools that are actually needed,
        # if set to "true" but frees about 6 GB
        tool-cache: false
        
        # all of these default to true, but feel free to set to
        # "false" if necessary for your workflow
        android: true
        dotnet: true
        haskell: true
        large-packages: true
        docker-images: false
        swap-storage: true
    
    - uses: actions/checkout@v2

    - name: Test workflow (local FASTQs)
      uses: snakemake/snakemake-github-action@v1
      with:
        directory: .test
        snakefile: workflow/Snakefile
        args: "--configfile .test/config-simple/config.yaml --use-conda --show-failed-logs -j 10 --conda-cleanup-pkgs cache"
        show-disk-usage-on-error: true

    - name: Test testcase generation
      uses: snakemake/snakemake-github-action@v1
      with:
        directory: .test
        snakefile: workflow/Snakefile
        args: "results/testcases/one/freebayes/IX:314200 --configfile .test/config-simple/config.yaml --use-conda --show-failed-logs -j 10 --conda-cleanup-pkgs cache"
        show-disk-usage-on-error: true

    - name: Test report
      uses: snakemake/snakemake-github-action@v1
      with:
        directory: .test
        snakefile: workflow/Snakefile
        args: "--configfile .test/config-simple/config.yaml --report report.zip"
        show-disk-usage-on-error: true

    - name: Test workflow (local FASTQs, target regions)
      uses: snakemake/snakemake-github-action@v1
      with:
        directory: .test
        snakefile: workflow/Snakefile
        args: "--configfile .test/config-target-regions/config.yaml --use-conda --show-failed-logs -j 10 --conda-cleanup-pkgs cache"
        stagein: |
          rm -rf .test/results
        show-disk-usage-on-error: true

    - name: Test workflow (local FASTQs, multiple target regions BED files)
      uses: snakemake/snakemake-github-action@v1
      with:
        directory: .test
        snakefile: workflow/Snakefile
        args: "--configfile .test/config-target-regions/config_multiple_beds.yaml --use-conda --show-failed-logs -j 10 --conda-cleanup-pkgs cache"
        stagein: |
          rm -rf .test/results
        show-disk-usage-on-error: true

    - name: Test workflow (local FASTQs, no candidate filtering)
      uses: snakemake/snakemake-github-action@v1
      with:
        directory: .test
        snakefile: workflow/Snakefile
        args: "--configfile .test/config-no-candidate-filtering/config.yaml --use-conda --show-failed-logs -j 10 --conda-cleanup-pkgs cache"
        stagein: |
          rm -rf .test/results
        show-disk-usage-on-error: true

    - name: Test workflow (local FASTQs primer)
      uses: snakemake/snakemake-github-action@v1
      with:
        directory: .test
        snakefile: workflow/Snakefile
        args: "--configfile .test/config_primers/config.yaml --use-conda --show-failed-logs -j 10 --conda-cleanup-pkgs cache"
        stagein: |
          rm -rf .test/results
        show-disk-usage-on-error: true

  Long_Tests:
    runs-on: ubuntu-latest
    needs: 
      - Dryrun_Tests
    steps:
    - name: update apt
      run: sudo apt-get update
    - name: Free Disk Space (Ubuntu)
      uses: jlumbroso/free-disk-space@v1.3.0
      with:
        # this might remove tools that are actually needed,
        # if set to "true" but frees about 6 GB
        tool-cache: false
        
        # all of these default to true, but feel free to set to
        # "false" if necessary for your workflow
        android: true
        dotnet: true
        haskell: true
        large-packages: true
        docker-images: false
        swap-storage: true
    
    - uses: actions/checkout@v2

    - name: Test workflow (SRA FASTQs)
      uses: snakemake/snakemake-github-action@v1
      with:
        directory: .test
        snakefile: workflow/Snakefile
        args: "--configfile .test/config-sra/config.yaml --show-failed-logs --use-conda --cores all --set-scatter calling=4 --conda-cleanup-pkgs cache"
        show-disk-usage-on-error: true
