BizHawk/.gitlab-ci.yml

216 lines
5.5 KiB
YAML

.disabled_not_a_job_include:
- template: Security/SAST.gitlab-ci.yml
variables:
CI_HAWK_ARTIFACT_NAME: "BizHawk_devbuild_${CI_COMMIT_SHORT_SHA}"
CI_HAWK_ARTIFACT_NAME_TAR: "$CI_HAWK_ARTIFACT_NAME.tar"
CI_HAWK_TMPARTIFACT_NAME: "BizHawk_tempbuild_${CI_COMMIT_REF_SLUG}_${CI_COMMIT_SHORT_SHA}"
workflow:
auto_cancel:
on_job_failure: all
stages:
- build
- test
- package
.with_cachix_mono:
before_script:
- nix-env -iA nixpkgs.cachix
- cachix use $CACHIX_CACHE_NAME
image: ${CI_DEPENDENCY_PROXY_DIRECT_GROUP_IMAGE_PREFIX}/nixos/nix:latest
variables:
CACHIX_CACHE_NAME: mono-for-bizhawk
build_asms_debug:
artifacts:
expire_in: "30 minutes"
name: "$CI_HAWK_TMPARTIFACT_NAME"
paths:
- output
image: mcr.microsoft.com/dotnet/sdk:8.0
script:
- Dist/BuildDebug.sh -v normal
stage: build
build_asms_release:
artifacts:
expire_in: "30 minutes"
name: "$CI_HAWK_TMPARTIFACT_NAME"
paths:
- output
image: mcr.microsoft.com/dotnet/sdk:8.0
script:
- if [ "$CI_COMMIT_REF_SLUG" == "release" ]; then Dist/UpdateVersionInfoForRelease.sh; fi
- Dist/BuildRelease.sh -v normal
stage: build
build_ext_projs:
allow_failure: true
image: mcr.microsoft.com/dotnet/sdk:8.0
rules:
- if: '$CI_PIPELINE_SOURCE == "schedule"'
when: always
script:
- for d in $CI_PROJECT_DIR/ExternalProjects/*; do if [ -e "$d/build_release.sh" -a "$(find "$d" -maxdepth 1 -name '*.csproj' -print -quit)" ]; then cd "$d"; ./build_release.sh -v normal || exit $?; fi; done
stage: test
build_ext_tools:
allow_failure: true
image: mcr.microsoft.com/dotnet/sdk:8.0
needs:
- build_asms_release
rules:
- if: '$CI_PIPELINE_SOURCE == "schedule"'
when: always
script:
- for d in $CI_PROJECT_DIR/ExternalToolProjects/*; do if [ -d "$d" ]; then cd "$d" && ./build_release.sh -v normal; fi; done
stage: test
build_nix_master:
# extends: .with_cachix_mono
image: ${CI_DEPENDENCY_PROXY_DIRECT_GROUP_IMAGE_PREFIX}/nixos/nix:latest
needs: []
rules:
- if: '$CI_PIPELINE_SOURCE == "schedule"'
when: always
script:
- nix-build --pure -A emuhawk
stage: test
build_nix_prev_release:
# extends: .with_cachix_mono
image: ${CI_DEPENDENCY_PROXY_DIRECT_GROUP_IMAGE_PREFIX}/nixos/nix:latest
needs: []
rules:
- if: '$CI_PIPELINE_SOURCE == "schedule"'
when: always
script:
- nix-build --pure -A emuhawk-latest
stage: test
check_style:
image: mcr.microsoft.com/dotnet/sdk:8.0
needs:
- job: build_asms_release
artifacts: false
rules:
- if: '$CI_PIPELINE_SOURCE == "schedule"'
when: always
allow_failure: true
- if: $BIZHAWKBUILD_USE_ANALYZERS != null
when: always
allow_failure: false
script:
- Dist/BuildRelease.sh -v normal -p:RunAnalyzersDuringBuild=true
stage: test
.disabled_job_infersharp:
artifacts:
paths:
- infer-out/*
image: mcr.microsoft.com/infersharp:v1.0
needs:
- job: build_asms_release
rules:
- if: '$CI_PIPELINE_SOURCE == "schedule"'
when: always
script:
- mkdir "infer-in"
- find output -name "BizHawk.*.dll" -exec cp "{}" "infer-in" \;
- cp "output/EmuHawk.exe" "infer-in"
- /app/run_infersharp.sh "infer-in"
stage: test
.package_linux_x64:
artifacts:
expire_in: "1 month"
name: "$CI_HAWK_ARTIFACT_NAME"
paths:
- "$CI_HAWK_ARTIFACT_NAME_TAR"
image: ${CI_DEPENDENCY_PROXY_DIRECT_GROUP_IMAGE_PREFIX}/alpine:latest
needs:
- build_asms_release
- job: build_asms_debug
artifacts: false
script:
- Dist/Package.sh 'linux-x64'
- cd packaged_output
- tar -cf "../$CI_HAWK_ARTIFACT_NAME_TAR" *
stage: package
.package_windows_x64:
artifacts:
expire_in: "1 month"
name: "$CI_HAWK_ARTIFACT_NAME"
paths:
- ./*
image: ${CI_DEPENDENCY_PROXY_DIRECT_GROUP_IMAGE_PREFIX}/alpine:latest
needs:
- build_asms_release
- job: build_asms_debug
artifacts: false
script:
- Dist/Package.sh 'windows-x64'
# now we replace $CI_PROJECT_DIR with $CI_PROJECT_DIR/packaged_output, so that the archival step will put everything at the top level
- mv packaged_output ..
- cd ..
- rm -fr $CI_PROJECT_DIR
- mv packaged_output $CI_PROJECT_DIR
stage: package
package_devbuild_linux:
extends: .package_linux_x64
rules:
- if: $CI_COMMIT_REF_SLUG == "master"
when: always
package_devbuild_windows:
extends: .package_windows_x64
rules:
- if: $CI_COMMIT_REF_SLUG == "master"
when: always
package_release_linux:
extends: .package_linux_x64
rules:
- if: $CI_COMMIT_REF_SLUG == "release"
when: always
variables:
CI_HAWK_ARTIFACT_NAME: "BizHawk-VERSIONHERE-linux-x64.tar" # .zip is added automatically
CI_HAWK_ARTIFACT_NAME_TAR: "BizHawk-linux-x64-$CI_COMMIT_SHORT_SHA.tar"
package_release_windows:
extends: .package_windows_x64
rules:
- if: $CI_COMMIT_REF_SLUG == "release"
when: always
variables:
CI_HAWK_ARTIFACT_NAME: "BizHawk-VERSIONHERE-win-x64"
run_tests:
artifacts:
paths:
- test_output/*.coverage.xml
reports:
junit:
- test_output/*.coverage.xml
image: mcr.microsoft.com/dotnet/sdk:8.0
needs:
- job: build_asms_release
artifacts: false
script:
- Dist/BuildTestRelease.sh -v normal -p:TestProjTargetFrameworkOverride=net8.0
stage: test
.disabled_job_sast:
variables:
SAST_EXCLUDED_ANALYZERS: bandit, brakeman, eslint, flawfinder, gosec, kubesec, nodejs-scan, phpcs-security-audit, pmd-apex, sobelow, spotbugs
stage: test
.disabled_not_a_job_cache:
key: "$CI_COMMIT_REF_SLUG"
paths:
- $HOME/.nuget/packages # probably won't work; set NUGET_PACKAGES to `BizHawk_master/.nuget_packages` and cache that