pipeline {
    agent any
    stages {
        stage("Install") {
            steps {
                sh 'mamba env update --file environment.yml'
                sh 'echo "mamba activate props" >> ~/.bashrc'
                sh 'node --version && npm --version'
                sh 'npm install'
            }
        }
        stage("Props.Shop") {
            stages {
                stage("Restore") {
                    steps {
                        sh 'dotnet restore Props.Shop/Props.Shop.sln'
                        sh 'dotnet restore Props.Shop/Props.Shop.Tests.sln'
                    }
                }
                stage("Test") {
                    steps {
                        sh 'dotnet test --logger xunit --no-restore Props.Shop/Props.Shop.Tests.sln'
                        xunit([xUnitDotNet(excludesPattern: '', pattern: 'Props.Shop/*.Tests/TestResults/*.xml', stopProcessingIfError: true)])
                    }
                }
                stage("Publish") {
                    steps {
                        sh 'dotnet publish --configuration Release --output output/shop-modules Props.Shop/Props.Shop.sln'
                        fingerprint 'output/shop-modules/**/Props.Shop.*'
                        sh "python3 scripts/load_shop_modules.py"
                    }
                }
            }
        }
        stage("Props") {
            stages {
                stage("Restore") {
                    steps {
                        sh 'dotnet restore Props.Tests'
                    }
                }
                stage("Test") {
                    steps {
                        sh 'dotnet test --logger xunit --no-restore Props.Tests'
                        xunit([xUnitDotNet(excludesPattern: '', pattern: 'Props.Tests/TestResults/*.xml', stopProcessingIfError: true)])
                    }
                }
                stage("Publish") {
                    steps {
                        sh 'dotnet publish --configuration Release --output output/props/props-linux-x64 --runtime linux-x64 --self-contained Props'
                        sh 'dotnet publish --configuration Release --output output/props/props-win-x64 --runtime win-x64 --self-contained Props'
                        fingerprint 'output/props/**/Props*'
                        tar file: "output/props-linux-x64.tar.gz", archive: true, compress: true, dir: "output/props/props-linux-x64"
                        zip zipFile: "output/props-win-x64.zip", archive: true, dir: "output/props/props-win-x64"
                    }
                }
            }
        }
    }
}