From 9bfd12ba3c39960e1b598bb460cd95adaa6381cf Mon Sep 17 00:00:00 2001 From: nerix Date: Thu, 16 Feb 2023 14:56:20 +0100 Subject: [PATCH] Fix builds from CI showing up as modified (#4384) This change also adds a new environment variable used while building: `CHATTERINO_REQUIRE_CLEAN_GIT` which, if set, will error out during your build's GIT stage. This is used in CI to ensure we don't accidentally introduce a change that would result in builds showing up as "modified" again. Co-authored-by: Rasmus Karlsson --- .github/workflows/build.yml | 4 +- .gitignore | 3 ++ CHANGELOG.md | 1 + cmake/GIT.cmake | 84 ++++++++++++++++++++----------------- 4 files changed, 52 insertions(+), 40 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 8e2c143db..abba1d943 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -14,6 +14,7 @@ concurrency: env: C2_ENABLE_LTO: ${{ github.ref == 'refs/heads/master' }} + CHATTERINO_REQUIRE_CLEAN_GIT: On jobs: build: @@ -81,9 +82,8 @@ jobs: uses: jurplel/install-qt-action@v3.0.0 with: cache: true - cache-key-prefix: ${{ runner.os }}-QtCache-${{ matrix.qt-version }} + cache-key-prefix: ${{ runner.os }}-QtCache-${{ matrix.qt-version }}-v2 version: ${{ matrix.qt-version }} - dir: "${{ github.workspace }}/qt/" # WINDOWS - name: Cache conan packages part 1 diff --git a/.gitignore b/.gitignore index c09b3bef9..9e5859235 100644 --- a/.gitignore +++ b/.gitignore @@ -118,3 +118,6 @@ qt6.natvis # Autogenerated resource file resources/resources_autogenerated.qrc + +# Leftovers from running `aqt install` +aqtinstall.log diff --git a/CHANGELOG.md b/CHANGELOG.md index f9ea71777..c2ff9eb43 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -33,6 +33,7 @@ - Bugfix: Fixed the split "Search" menu action not opening the correct search window. (#4305) - Bugfix: Fixed an issue on Windows when opening links in incognito mode that contained forward slashes in hash (#4307) - Bugfix: Fixed an issue where beta versions wouldn't update to stable versions correctly. (#4329) +- Bugfix: Fixed builds from GitHub showing up as modified. (#4384) - Bugfix: Avoided crash that could occur when receiving channel point reward information. (#4360) - Dev: Changed sound backend from Qt to miniaudio. (#4334) - Dev: Removed protocol from QApplication's Organization Domain (so changed from `https://www.chatterino.com` to `chatterino.com`). (#4256) diff --git a/cmake/GIT.cmake b/cmake/GIT.cmake index b4f9fecbf..9469d9420 100644 --- a/cmake/GIT.cmake +++ b/cmake/GIT.cmake @@ -9,7 +9,7 @@ # If the git binary is found and the git work tree is intact, GIT_RELEASE is worked out using the `git describe` command # The value of GIT_RELEASE can be overriden by defining the GIT_RELEASE environment variable # GIT_MODIFIED -# If the git binary is found and the git work tree is intact, GIT_MODIFIED is worked out by checking if output of `git status --porcelain -z` command is empty +# If the git binary is found and the git work tree is intact, GIT_MODIFIED is worked out by checking if output of `git status --porcelain -z` command is empty # The value of GIT_MODIFIED cannot be overriden find_package(Git) @@ -19,67 +19,75 @@ set(GIT_COMMIT "GIT-REPOSITORY-NOT-FOUND") set(GIT_RELEASE "${PROJECT_VERSION}") set(GIT_MODIFIED 0) -if (DEFINED ENV{CHATTERINO_SKIP_GIT_GEN}) +if(DEFINED ENV{CHATTERINO_SKIP_GIT_GEN}) return() -endif () +endif() -if (GIT_EXECUTABLE) +if(GIT_EXECUTABLE) execute_process( - COMMAND ${GIT_EXECUTABLE} rev-parse --is-inside-work-tree - WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} - RESULT_VARIABLE GIT_REPOSITORY_NOT_FOUND - OUTPUT_QUIET - ERROR_QUIET + COMMAND ${GIT_EXECUTABLE} rev-parse --is-inside-work-tree + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} + RESULT_VARIABLE GIT_REPOSITORY_NOT_FOUND + OUTPUT_QUIET + ERROR_QUIET ) - if (GIT_REPOSITORY_NOT_FOUND) + + if(GIT_REPOSITORY_NOT_FOUND) set(GIT_REPOSITORY_FOUND 0) - else () + else() set(GIT_REPOSITORY_FOUND 1) endif() - if (GIT_REPOSITORY_FOUND) + if(GIT_REPOSITORY_FOUND) execute_process( - COMMAND ${GIT_EXECUTABLE} rev-parse --short HEAD - WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} - OUTPUT_VARIABLE GIT_HASH - OUTPUT_STRIP_TRAILING_WHITESPACE + COMMAND ${GIT_EXECUTABLE} rev-parse --short HEAD + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} + OUTPUT_VARIABLE GIT_HASH + OUTPUT_STRIP_TRAILING_WHITESPACE ) execute_process( - COMMAND ${GIT_EXECUTABLE} rev-parse HEAD - WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} - OUTPUT_VARIABLE GIT_COMMIT - OUTPUT_STRIP_TRAILING_WHITESPACE + COMMAND ${GIT_EXECUTABLE} rev-parse HEAD + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} + OUTPUT_VARIABLE GIT_COMMIT + OUTPUT_STRIP_TRAILING_WHITESPACE ) execute_process( - COMMAND ${GIT_EXECUTABLE} describe - WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} - OUTPUT_VARIABLE GIT_RELEASE - OUTPUT_STRIP_TRAILING_WHITESPACE + COMMAND ${GIT_EXECUTABLE} describe + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} + OUTPUT_VARIABLE GIT_RELEASE + OUTPUT_STRIP_TRAILING_WHITESPACE ) execute_process( - COMMAND ${GIT_EXECUTABLE} status --porcelain -z - WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} - OUTPUT_VARIABLE GIT_MODIFIED_OUTPUT - OUTPUT_STRIP_TRAILING_WHITESPACE + COMMAND ${GIT_EXECUTABLE} status --porcelain -z + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} + OUTPUT_VARIABLE GIT_MODIFIED_OUTPUT + OUTPUT_STRIP_TRAILING_WHITESPACE ) - endif (GIT_REPOSITORY_FOUND) -endif (GIT_EXECUTABLE) + endif(GIT_REPOSITORY_FOUND) +endif(GIT_EXECUTABLE) + +if(GIT_MODIFIED_OUTPUT) + if(DEFINED ENV{CHATTERINO_REQUIRE_CLEAN_GIT}) + message(STATUS "git status --porcelain -z\n${GIT_MODIFIED_OUTPUT}") + message(FATAL_ERROR "Git repository was expected to be clean, but modifications were found!") + endif() -if (GIT_MODIFIED_OUTPUT) set(GIT_MODIFIED 1) -endif () +endif() -if (DEFINED ENV{GIT_HASH}) +if(DEFINED ENV{GIT_HASH}) set(GIT_HASH "$ENV{GIT_HASH}") -endif () -if (DEFINED ENV{GIT_COMMIT}) +endif() + +if(DEFINED ENV{GIT_COMMIT}) set(GIT_COMMIT "$ENV{GIT_COMMIT}") -endif () -if (DEFINED ENV{GIT_RELEASE}) +endif() + +if(DEFINED ENV{GIT_RELEASE}) set(GIT_RELEASE "$ENV{GIT_RELEASE}") -endif () +endif() message(STATUS "Injected git values: ${GIT_COMMIT} (${GIT_RELEASE}) modified: ${GIT_MODIFIED}")