diff --git a/.github/workflows/clear-cache-cron.yml b/.github/workflows/clear-cache-cron.yml new file mode 100644 index 0000000..25b4331 --- /dev/null +++ b/.github/workflows/clear-cache-cron.yml @@ -0,0 +1,13 @@ +name: Clear Cache Cron + +on: + schedule: + - cron: '0 0 * * *' # Runs once a day (https://crontab.guru/once-a-day) +jobs: + clear: + name: Clear cache + runs-on: ubuntu-latest + steps: + - uses: MyAlbum/purge-cache@v1 + with: + max-age: 604800 # Cache max 7 days since last use (this is the default) diff --git a/.github/workflows/clear-cache-manual.yml b/.github/workflows/clear-cache-manual.yml new file mode 100644 index 0000000..f3a7f60 --- /dev/null +++ b/.github/workflows/clear-cache-manual.yml @@ -0,0 +1,30 @@ +name: Clear Cache Manual + +on: + workflow_dispatch: + +permissions: + actions: write + +jobs: + clear-cache: + runs-on: ubuntu-latest + steps: + - name: Clear cache + uses: actions/github-script@v6 + with: + script: | + console.log("About to clear") + const caches = await github.rest.actions.getActionsCacheList({ + owner: context.repo.owner, + repo: context.repo.repo, + }) + for (const cache of caches.data.actions_caches) { + console.log(cache) + github.rest.actions.deleteActionsCacheById({ + owner: context.repo.owner, + repo: context.repo.repo, + cache_id: cache.id, + }) + } + console.log("Clear completed") diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml new file mode 100644 index 0000000..35a3816 --- /dev/null +++ b/.github/workflows/codeql.yml @@ -0,0 +1,105 @@ +# For most projects, this workflow file will not need changing; you simply need +# to commit it to your repository. +# +# You may wish to alter this file to override the set of languages analyzed, +# or to provide custom queries or build logic. +# +# ******** NOTE ******** +# We have attempted to detect the languages in your repository. Please check +# the `language` matrix defined below to confirm you have the correct set of +# supported CodeQL languages. +# +name: "CodeQL" + +on: + #push: + # branches: [ "main" ] + #pull_request: + # branches: [ "main" ] + schedule: + - cron: '30 3 * * *' + workflow_dispatch: + +env: + VCPKG_COMMIT_ID: 93895b28ea7bc8cda10f156c5d336f3fc070f8b1 + +jobs: + analyze: + name: Analyze + # Runner size impacts CodeQL analysis time. To learn more, please see: + # - https://gh.io/recommended-hardware-resources-for-running-codeql + # - https://gh.io/supported-runners-and-hardware-resources + # - https://gh.io/using-larger-runners + # Consider using larger runners for possible analysis time improvements. + runs-on: windows-latest + permissions: + actions: read + contents: read + security-events: write + + strategy: + fail-fast: false + matrix: + language: [ 'python', 'cpp' ] + # CodeQL supports [ 'c-cpp', 'csharp', 'go', 'java-kotlin', 'javascript-typescript', 'python', 'ruby', 'swift' ] + # Use only 'java-kotlin' to analyze code written in Java, Kotlin or both + # Use only 'javascript-typescript' to analyze code written in JavaScript, TypeScript or both + # Learn more about CodeQL language support at https://aka.ms/codeql-docs/language-support + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + with: + path: main + submodules: recursive + + # Initializes the CodeQL tools for scanning. + - name: Initialize CodeQL + uses: github/codeql-action/init@v3 + with: + languages: ${{ matrix.language }} + # If you wish to specify custom queries, you can do so here or in a config file. + # By default, queries listed here will override any specified in a config file. + # Prefix the list here with "+" to use these queries and those in the config file. + + # For more details on CodeQL's query packs, refer to: https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs + # queries: security-extended,security-and-quality + + + # Autobuild attempts to build any compiled languages (C/C++, C#, Go, Java, or Swift). + # If this step fails, then you should remove it and run the build manually (see below) + - if: matrix.language == 'python' + name: Autobuild + uses: github/codeql-action/autobuild@v3 + + # ℹī¸ Command-line programs to run using the OS shell. + # 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun + + # If the Autobuild fails above, remove it and uncomment the following three lines. + # modify them (or add more) to build your code if your project, please refer to the EXAMPLE below for guidance. + + # - run: | + # echo "Run, Build Application using script" + # ./location_of_script_within_repo/buildscript.sh + - if: matrix.language == 'cpp' + name: Setup MSVC Environment + uses: ilammy/msvc-dev-cmd@v1.10.0 + + - if: matrix.language == 'cpp' + name: Setup vcpkg + uses: lukka/run-vcpkg@v10.0 + with: + vcpkgGitCommitId: ${{ env.VCPKG_COMMIT_ID }} + + - if: matrix.language == 'cpp' + name: Build + uses: lukka/run-cmake@v10.0 + with: + cmakeListsTxtPath: ${{ github.workspace }}/main/CMakeLists.txt + configurePreset: 'vs2022-windows' + buildPreset: 'vs2022-windows' + + - name: Perform CodeQL Analysis + uses: github/codeql-action/analyze@v3 + with: + category: "/language:${{matrix.language}}" diff --git a/.github/workflows/main-build-tag.yml b/.github/workflows/main-build-tag.yml new file mode 100644 index 0000000..941236a --- /dev/null +++ b/.github/workflows/main-build-tag.yml @@ -0,0 +1,67 @@ +name: Main Tag CI + +on: + push: + tags: + - '*' + paths: + - '.github/workflows/main_ci.yml' + - 'cmake/**' + - 'src/**' + - 'CMakeLists.txt' + - 'CMakePresets.json' + - 'vcpkg-configuration.json' + - 'vcpkg.json' + workflow_dispatch: + +env: + VCPKG_COMMIT_ID: 93895b28ea7bc8cda10f156c5d336f3fc070f8b1 + +jobs: + build-tag-release: + runs-on: windows-latest + strategy: + fail-fast: false + + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + path: main + submodules: recursive + + - name: Setup MSVC Environment + uses: ilammy/msvc-dev-cmd@v1.10.0 + + - name: Setup vcpkg + uses: lukka/run-vcpkg@v11 + with: + vcpkgGitCommitId: ${{ env.VCPKG_COMMIT_ID }} + + - name: Build + uses: lukka/run-cmake@v10.0 + with: + cmakeListsTxtPath: ${{ github.workspace }}/main/CMakeLists.txt + configurePreset: 'vs2022-windows' + buildPreset: 'vs2022-windows' + buildPresetAdditionalArgs: "['--config Release']" + + - name: setup python + uses: actions/setup-python@v4 + with: + python-version: '3.10' # install the python version needed + + - name: execute py script + run: python ${{ github.workspace }}/main/scripts/archive_artifacts.py --name LamasTinyHUD --dll build/Release/LamasTinyHUD.dll --pdb build/Release/LamasTinyHUD.pdb --dir main + + - uses: xresloader/upload-to-github-release@main + with: + file: "${{ github.workspace }}/artifacts/LamasTinyHUD.zip" + branches: "main;dev" + tags: true + verbose: true + + - uses: actions/upload-artifact@v4 + with: + name: LamasTinyHUD + path: ${{ github.workspace }}/artifacts/LamasTinyHUD.zip diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 0a52228..f7415f0 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -26,7 +26,7 @@ jobs: steps: - name: Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v4 with: path: main submodules: recursive @@ -35,7 +35,7 @@ jobs: uses: ilammy/msvc-dev-cmd@v1.10.0 - name: Setup vcpkg - uses: lukka/run-vcpkg@v10.0 + uses: lukka/run-vcpkg@v11 with: vcpkgGitCommitId: ${{ env.VCPKG_COMMIT_ID }} @@ -46,4 +46,3 @@ jobs: configurePreset: 'vs2022-windows' buildPreset: 'vs2022-windows' - diff --git a/.github/workflows/maintain.yml b/.github/workflows/maintain.yml new file mode 100644 index 0000000..a13b492 --- /dev/null +++ b/.github/workflows/maintain.yml @@ -0,0 +1,34 @@ +name: maintain dev + +on: + push: + branches: + - dev + pull_request: + branches: + - main + workflow_dispatch: + +jobs: + maintenance: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + with: + ref: ${{ github.head_ref }} + + - uses: actions/setup-python@v4 + with: + python-version: '3.10' + + - name: run clang-format + run: find -type f \( -name *.h -o -name *.cpp \) | xargs clang-format -style=file -i + + - name: add files to cmake + run: python ${{ github.workspace }}/scripts/cmake_generate.py + + - uses: stefanzweifel/git-auto-commit-action@v5 + with: + commit_message: maintain + branch: ${{ github.head_ref }} diff --git a/CMakePresets.json b/CMakePresets.json index d93a130..8132af9 100644 --- a/CMakePresets.json +++ b/CMakePresets.json @@ -1,67 +1,68 @@ { - "configurePresets": [{ - "binaryDir": "${sourceDir}/build", - "cacheVariables": { - "CMAKE_BUILD_TYPE": { - "type": "STRING", - "value": "Release" - } - }, - "errors": { - "deprecated": true - }, - "hidden": true, - "name": "cmake-dev", - "warnings": { - "deprecated": true, - "dev": true - } - }, - { - "cacheVariables": { - "CMAKE_TOOLCHAIN_FILE": { - "type": "STRING", - "value": "$env{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake" - } - }, - "hidden": true, - "name": "vcpkg" - }, - { - "cacheVariables": { - "CMAKE_MSVC_RUNTIME_LIBRARY": { - "type": "STRING", - "value": "MultiThreaded$<$:Debug>DLL" - }, - "VCPKG_TARGET_TRIPLET": { - "type": "STRING", - "value": "x64-windows-static-md" - } - }, - "hidden": true, - "name": "windows" + "configurePresets": [{ + "binaryDir": "${sourceDir}/build", + "cacheVariables": { + "CMAKE_BUILD_TYPE": { + "type": "STRING", + "value": "Release" + } + }, + "errors": { + "deprecated": true + }, + "hidden": true, + "name": "cmake-dev", + "warnings": { + "deprecated": true, + "dev": true + } + }, + { + "cacheVariables": { + "CMAKE_TOOLCHAIN_FILE": { + "type": "STRING", + "value": "$env{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake" + } + }, + "hidden": true, + "name": "vcpkg" + }, + { + "cacheVariables": { + "CMAKE_MSVC_RUNTIME_LIBRARY": { + "type": "STRING", + "value": "MultiThreaded$<$:Debug>DLL" }, - { - "architecture": { - "strategy": "set", - "value": "x64" - }, - "cacheVariables": { - "CMAKE_CXX_FLAGS": "/EHsc /MP /W4 /WX" - }, - "generator": "Visual Studio 17 2022", - "inherits": [ - "cmake-dev", - "vcpkg", - "windows" - ], - "name": "vs2022-windows", - "toolset": "v143" + "VCPKG_TARGET_TRIPLET": { + "type": "STRING", + "value": "x64-windows-static-md" } - ], - "buildPresets": [{ - "name": "vs2022-windows", - "configurePreset": "vs2022-windows" - }], - "version": 3 -} \ No newline at end of file + }, + "hidden": true, + "name": "windows" + }, + { + "architecture": { + "strategy": "set", + "value": "x64" + }, + "cacheVariables": { + "CMAKE_CXX_FLAGS": "/EHsc /MP /W4 /WX" + }, + "generator": "Visual Studio 17 2022", + "inherits": [ + "cmake-dev", + "vcpkg", + "windows" + ], + "name": "vs2022-windows", + "toolset": "v143" + } + ], + "buildPresets": [{ + "name": "vs2022-windows", + "configurePreset": "vs2022-windows", + "configuration": "Release" + }], + "version": 3 +} diff --git a/scripts/archive_artifacts.py b/scripts/archive_artifacts.py index 30fbd81..3f0d377 100644 --- a/scripts/archive_artifacts.py +++ b/scripts/archive_artifacts.py @@ -10,26 +10,32 @@ def make_rel_archive(a_args): resource_extensions: list[str] = ["*.ttf", "*.otf", "*.svg"] archive: zipfile = zipfile.ZipFile(a_args.name + ".zip", "w", zipfile.ZIP_DEFLATED) - archive.write(a_args.dll, "SKSE/Plugins/{}".format(os.path.basename(a_args.dll))) - archive.write(a_args.pdb, "SKSE/Plugins/{}".format(os.path.basename(a_args.pdb))) - archive.write(os.path.join(a_args.src_dir, "LamasTinyHUD.ini"), "SKSE/Plugins/LamasTinyHUD.ini") - v_path: str = os.path.join(a_args.src_dir, "extern", "resources", "resources") + os.chdir('../') + v_pwd: str = os.getcwd() + if a_args.dir: + v_pwd: str = os.path.join(os.getcwd(), a_args.dir) + + archive.write(os.path.join(v_pwd, a_args.dll), "SKSE/Plugins/{}".format(os.path.basename(a_args.dll))) + archive.write(os.path.join(v_pwd, a_args.pdb), "SKSE/Plugins/{}".format(os.path.basename(a_args.pdb))) + archive.write(os.path.join(v_pwd, "LamasTinyHUD.ini"), "SKSE/Plugins/LamasTinyHUD.ini") + + v_path: str = os.path.join(v_pwd, "extern", "resources", "resources") for extension in resource_extensions: for path in Path(v_path).rglob(extension): archive.write(path, os.path.join("SKSE/Plugins/resources", path.relative_to(v_path))) - archive.write(os.path.join(a_args.src_dir, "mcm", "LamasTinyHUD.esl"), "LamasTinyHUD.esl") - v_path: str = os.path.join(a_args.src_dir, "mcm", "scripts") + archive.write(os.path.join(v_pwd, "mcm", "LamasTinyHUD.esl"), "LamasTinyHUD.esl") + v_path: str = os.path.join(v_pwd, "mcm", "scripts") for path in Path(v_path).glob('*.pex'): archive.write(path, os.path.join("scripts/", path.name)) - archive.write(os.path.join(a_args.src_dir, "mcm", "Config", "LamasTinyHUD", "config.json"), + archive.write(os.path.join(v_pwd, "mcm", "Config", "LamasTinyHUD", "config.json"), "mcm/Config/LamasTinyHUD/config.json") - archive.write(os.path.join(a_args.src_dir, "mcm", "Config", "LamasTinyHUD", "settings.ini"), + archive.write(os.path.join(v_pwd, "mcm", "Config", "LamasTinyHUD", "settings.ini"), "mcm/Config/LamasTinyHUD/settings.ini") for lang in languages: - archive.write(os.path.join(a_args.src_dir, "mcm", "Interface", "Translations", "LamasTinyHUD_english.txt"), + archive.write(os.path.join(v_pwd, "mcm", "Interface", "Translations", "LamasTinyHUD_english.txt"), "Interface/Translations/LamasTinyHUD_" + lang + ".txt") @@ -38,12 +44,12 @@ def parse_arguments(): parser.add_argument("--dll", type=str, help="the full dll path", required=True) parser.add_argument("--name", type=str, help="the project name", required=True) parser.add_argument("--pdb", type=str, help="the full pdb path", required=True) - parser.add_argument("--src-dir", type=str, help="the project root source directory", required=True) + parser.add_argument("--dir", type=str, help="additonal", required=False) return parser.parse_args() def main(): - out: str = "artifacts" + out = "artifacts" try: os.mkdir(out) except FileExistsError: diff --git a/scripts/run.sh b/scripts/run.sh index 5262cf4..a718ae4 100644 --- a/scripts/run.sh +++ b/scripts/run.sh @@ -1,3 +1,5 @@ #!/bin/bash -python archive_artifacts.py --name LamasTinyHUD --src-dir /e/source/LamasTinyHUD/ --dll /e/source/LamasTinyHUD/build/Release/LamasTinyHUD.dll --pdb /e/source/LamasTinyHUD/build/Release/LamasTinyHUD.pdb +#python archive_artifacts.py --name LamasTinyHUD --src-dir /e/source/LamasTinyHUD/ --dll /e/source/LamasTinyHUD/build/Release/LamasTinyHUD.dll --pdb /e/source/LamasTinyHUD/build/Release/LamasTinyHUD.pdb + +python scripts/archive_artifacts.py --name LamasTinyHUD --dll build/Release/LamasTinyHUD.dll --pdb build/Release/LamasTinyHUD.pdb