# SPDX-FileCopyrightText: : 2021-2023 The PyPSA-Eur Authors
#
# SPDX-License-Identifier: CC0-1.0

name: CI

# Caching method based on and described by:
# epassaro (2021): https://dev.to/epassaro/caching-anaconda-environments-in-github-actions-5hde
# and code in GitHub repo: https://github.com/epassaro/cache-conda-envs

on:
  push:
    branches:
    - master
  pull_request:
    branches:
    - master
  schedule:
  - cron: "0 5 * * TUE"

env:
  DATA_CACHE_NUMBER: 2

jobs:
  build:

    strategy:
      fail-fast: false
      max-parallel: 3
      matrix:
        os:
        - ubuntu-latest
        - macos-latest
        - windows-latest

    runs-on: ${{ matrix.os }}

    defaults:
      run:
        shell: bash -l {0}

    steps:
    - uses: actions/checkout@v3

    - name: Setup secrets
      run: |
        echo -ne "url: ${CDSAPI_URL}\nkey: ${CDSAPI_TOKEN}\n" > ~/.cdsapirc

    - name: Add solver to environment
      run: |
        echo -e "- glpk\n- ipopt<3.13.3" >> envs/environment.yaml
      if: ${{ matrix.os }} == 'windows-latest'

    - name: Add solver to environment
      run: |
        echo -e "- glpk\n- ipopt" >> envs/environment.yaml
      if: ${{ matrix.os }} != 'windows-latest'

    - name: Setup micromamba
      uses: mamba-org/setup-micromamba@v1
      with:
        micromamba-version: latest
        environment-file: envs/environment.yaml
        log-level: debug
        init-shell: bash
        cache-environment: true
        cache-downloads: true

    - name: Set cache dates
      run: |
        echo "WEEK=$(date +'%Y%U')" >> $GITHUB_ENV

    - name: Cache data and cutouts folders
      uses: actions/cache@v3
      with:
        path: |
          data
          cutouts
        key: data-cutouts-${{ env.WEEK }}-${{ env.DATA_CACHE_NUMBER }}

    - name: Test snakemake workflow
      run: |
        snakemake -call solve_elec_networks --configfile config/test/config.electricity.yaml --rerun-triggers=mtime
        snakemake -call all --configfile config/test/config.overnight.yaml --rerun-triggers=mtime
        snakemake -call all --configfile config/test/config.myopic.yaml --rerun-triggers=mtime

    - name: Upload artifacts
      uses: actions/upload-artifact@v3
      with:
        name: resources-results
        path: |
          resources
          results
        if-no-files-found: warn
        retention-days: 1