diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..a2f2ba8 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,100 @@ +name: CI + +on: + push: + # Don't run this workflow when a tag is pushed. + branches: + - '*' + pull_request: + +env: + MSVC_CONFIG: RelWithDebInfo + +jobs: + bintray-cleanup: + runs-on: ubuntu-18.04 + if: github.event_name == 'push' + + steps: + - name: Remove old artifacts from Bintray + shell: bash + run: | + curl -sfSLO 'https://raw.githubusercontent.com/Ortham/ci-scripts/2.1.4/delete_old_bintray_versions.py' + python3 delete_old_bintray_versions.py -g loot/libloot-python -b loot/snapshots/libloot-python -u wrinklyninja -k ${{ secrets.BINTRAY_API_KEY }} -t ${{ secrets.GITHUB_TOKEN }} -n 30 + + windows: + runs-on: windows-2016 + + strategy: + matrix: + platform: [Win32, x64] + python-version: [2.7, 3.7] + + steps: + - uses: actions/checkout@v2 + with: + fetch-depth: 0 + + - name: Get Python architecture + id: get-python-architecture + shell: bash + run: | + if [[ "${{ matrix.platform }}" == "Win32" ]] + then + PLATFORM=x86 + else + PLATFORM=x64 + fi + echo "::set-output name=architecture::$PLATFORM" + + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v2 + with: + python-version: ${{ matrix.python-version }} + architecture: ${{ steps.get-python-architecture.outputs.architecture }} + + - name: Get descriptive version + id: get-version + shell: bash + run: | + GIT_DESCRIBE=$(git describe --tags --long --abbrev=7) + DESC_REF=${GIT_DESCRIBE}_${GITHUB_REF#refs/*/} + SAFE_DESC_REF=${DESC_REF//[\/<>\"|]/_} + echo "::set-output name=version::$SAFE_DESC_REF" + + - name: Run CMake + run: | + mkdir build + cd build + cmake .. -G "Visual Studio 15 2017" -A ${{ matrix.platform }} -DCPACK_PACKAGE_VERSION="${{ steps.get-version.outputs.version }}-python${{ matrix.python-version }}" + cmake --build . --config ${{ env.MSVC_CONFIG }} + + - name: Run tests + run: | + cd build + ctest -C ${{ env.MSVC_CONFIG }} + + - name: Build archive + id: build-archive + shell: bash + run: | + cd build + cpack -C ${{ env.MSVC_CONFIG }} + + VERSION="${{ steps.get-version.outputs.version }}-python${{ matrix.python-version }}" + if [[ "${{ matrix.platform }}" == "Win32" ]] + then + PLATFORM=win32 + else + PLATFORM=win64 + fi + + echo "::set-output name=filename::libloot-python-${VERSION}-${PLATFORM}.zip" + + - name: Upload archive to BinTray + shell: bash + run: | + VERSION="${{ steps.get-version.outputs.version }}" + FILENAME="${{ steps.build-archive.outputs.filename }}" + curl -sfSL -T "build/package/$FILENAME" -u "wrinklyninja:${{ secrets.BINTRAY_API_KEY }}" "https://bintray.com/api/v1/content/loot/snapshots/libloot-python/${VERSION}/${FILENAME}?publish=1&override=1" + if: github.event_name == 'push' diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..56ec0b0 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,92 @@ +name: Release + +on: + push: + tags: '*' + +env: + MSVC_CONFIG: RelWithDebInfo + +jobs: + create_release: + runs-on: ubuntu-18.04 + outputs: + upload_url: ${{ steps.create_release.outputs.upload_url }} + git_tag: ${{ steps.get-git-tag.outputs.name }} + + steps: + - name: Get Git tag + id: get-git-tag + run: echo "::set-output name=name::${GITHUB_REF#refs/*/}" + + - id: create_release + uses: actions/create-release@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + tag_name: ${{ steps.get-git-tag.outputs.name }} + release_name: libloot-python v${{ steps.get-git-tag.outputs.name }} + body: | + Requires Windows 7 or later and the [MSVC 2017 x86 redistributable](https://download.visualstudio.microsoft.com/download/pr/749aa419-f9e4-4578-a417-a43786af205e/d59197078cc425377be301faba7dd87a/vc_redist.x86.exe), and [7-Zip](http://www.7-zip.org/) to extract the archive. + + windows: + runs-on: windows-2016 + needs: create_release + + strategy: + matrix: + platform: [Win32, x64] + python-version: [2.7, 3.7] + + steps: + - uses: actions/checkout@v2 + with: + fetch-depth: 0 + + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v2 + with: + python-version: ${{ matrix.python-version }} + + - name: Get descriptive version + id: get-version + shell: bash + run: | + GIT_DESCRIBE=$(git describe --tags --long --abbrev=7) + DESC_REF=${GIT_DESCRIBE}_${GITHUB_REF#refs/*/} + SAFE_DESC_REF=${DESC_REF//[\/<>\"|]/_} + echo "::set-output name=version::$SAFE_DESC_REF" + + - name: Run CMake + run: | + mkdir build + cd build + cmake .. -G "Visual Studio 15 2017" -A ${{ matrix.platform }} -DCPACK_PACKAGE_VERSION="${{ steps.get-version.outputs.version }}-python${{ matrix.python-version }}" + cmake --build . --config ${{ env.MSVC_CONFIG }} + + - name: Build archive + id: build-archive + shell: bash + run: | + cd build + cpack -C ${{ env.MSVC_CONFIG }} + + VERSION="${{ steps.get-version.outputs.version }}-python${{ matrix.python-version }}" + if [[ "${{ matrix.platform }}" == "Win32" ]] + then + PLATFORM=win32 + else + PLATFORM=win64 + fi + + echo "::set-output name=filename::libloot-python-${VERSION}-${PLATFORM}.zip" + + - name: Upload Archive + uses: actions/upload-release-asset@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ needs.create_release.outputs.upload_url }} + asset_path: build/package/${{ steps.build-archive.outputs.filename }} + asset_name: ${{ steps.build-archive.outputs.filename }} + asset_content_type: application/x-7z-compressed diff --git a/CMakeLists.txt b/CMakeLists.txt index ae3213e..cbe1899 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -156,25 +156,22 @@ ENDIF () # Get version info using Git if available find_package(Git) -IF (GIT_FOUND) - execute_process(COMMAND ${GIT_EXECUTABLE} describe --tags --long --always - WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} - OUTPUT_VARIABLE GIT_DESCRIBE_STRING - OUTPUT_STRIP_TRAILING_WHITESPACE) +IF (NOT DEFINED CPACK_PACKAGE_VERSION) + IF (GIT_FOUND) + execute_process(COMMAND ${GIT_EXECUTABLE} describe --tags --long --always --abbrev=7 + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} + OUTPUT_VARIABLE GIT_DESCRIBE_STRING + OUTPUT_STRIP_TRAILING_WHITESPACE) - IF (DEFINED ENV{APPVEYOR_REPO_BRANCH}) - set(GIT_DESCRIBE_STRING "${GIT_DESCRIBE_STRING}_$ENV{APPVEYOR_REPO_BRANCH}") - ELSEIF (DEFINED ENV{TRAVIS_BRANCH}) - set(GIT_DESCRIBE_STRING "${GIT_DESCRIBE_STRING}_$ENV{TRAVIS_BRANCH}") - ENDIF() + string(REPLACE "/" "-" GIT_DESCRIBE_STRING ${GIT_DESCRIBE_STRING}) + ELSE() + SET (GIT_DESCRIBE_STRING "unknown-version") + ENDIF () - string(REPLACE "/" "-" GIT_DESCRIBE_STRING ${GIT_DESCRIBE_STRING}) -ELSE() - SET (GIT_DESCRIBE_STRING "unknown-version") -ENDIF () + set(CPACK_PACKAGE_VERSION "${GIT_DESCRIBE_STRING}-python$ENV{PYTHON_VERSION}") +ENDIF() set(CPACK_GENERATOR "ZIP") -set(CPACK_PACKAGE_VERSION "${GIT_DESCRIBE_STRING}-python$ENV{PYTHON_VERSION}") set(CPACK_PACKAGE_DIRECTORY "${CMAKE_BINARY_DIR}/package") include(CPack) diff --git a/README.md b/README.md index b2e288a..166dc96 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ libloot-python ============== -[![AppVeyor Build Status](https://ci.appveyor.com/api/projects/status/k2ugge3po7254o1o/branch/master?svg=true)](https://ci.appveyor.com/project/LOOT/libloot-python/branch/master) +![CI](https://github.com/loot/libloot-python/workflows/CI/badge.svg?branch=master&event=push) [![Documentation Status](https://readthedocs.org/projects/loot-api-python/badge/)](http://loot-api-python.readthedocs.io/) A Python module that wraps libloot, generated by [pybind11](https://github.com/pybind/pybind11). Not everything in the API is exposed: coverage can be extended on request (or by pull request). diff --git a/appveyor.yml b/appveyor.yml deleted file mode 100644 index a43fd2e..0000000 --- a/appveyor.yml +++ /dev/null @@ -1,80 +0,0 @@ -os: Visual Studio 2017 - -version: "{build}-{branch}" - -configuration: RelWithDebInfo - -platform: - - Win32 - - x64 - -environment: - bintray_auth_token: - secure: PgsEA6TjHVf718zMnK7J/fT1hUAVNKBeWhpYgYaeCyeZk37VT4Ics6j7+B7ElLEr - github_auth_token: - secure: yDqT5l/e5MntbW99V6+MHlfFgNv+UIogFfeyUVqtFk5lFRB/dAraLLwKCLl6y+DH - - matrix: - - PYTHON_VERSION: 2.7 - - PYTHON_VERSION: 3.7 - -install: - - ps: (New-Object Net.WebClient).DownloadFile('https://raw.githubusercontent.com/Ortham/ci-scripts/2.0.0/delete_old_bintray_versions.py', "$env:APPVEYOR_BUILD_FOLDER\delete_old_bintray_versions.py") - -before_build: - - ps: $env:PYTHON_DIRECTORY_VERSION=$env:PYTHON_VERSION.Replace(".", "") - - cd %APPVEYOR_BUILD_FOLDER% - - ps: mkdir build - - cd build - - ps: | - if ($env:PLATFORM -eq 'Win32') { - cmake .. -G "Visual Studio 15 2017" -DPYTHON_EXECUTABLE="C:\Python${env:PYTHON_DIRECTORY_VERSION}\python.exe" - } else { - cmake .. -G "Visual Studio 15 2017" -A x64 -DPYTHON_EXECUTABLE="C:\Python${env:PYTHON_DIRECTORY_VERSION}-x64\python.exe" - } - -build: - verbosity: minimal - project: 'c:\projects\libloot-python\build\libloot-python.sln' - -test_script: - - cd %APPVEYOR_BUILD_FOLDER%\build - - ctest -C %CONFIGURATION% - -after_test: - - cd %APPVEYOR_BUILD_FOLDER%\build - - cpack -C %CONFIGURATION% - - ps: $env:GIT_DESCRIBE = ((git describe --tags --long --always) | Out-String) -replace "`n|`r", "" - - ps: $env:PACKAGE_VERSION = $env:GIT_DESCRIBE + "_" + ($env:APPVEYOR_REPO_BRANCH.replace("/", "-")) - - ps: $env:ARCHITECTURE = $env:PLATFORM.substring($env:PLATFORM.length - 2) - -artifacts: - - path: build\package\libloot-python-$(PACKAGE_VERSION)-python$(PYTHON_VERSION)-win$(ARCHITECTURE).zip - name: libloot-python - -deploy: - - provider: BinTray - username: wrinklyninja - api_key: - secure: PgsEA6TjHVf718zMnK7J/fT1hUAVNKBeWhpYgYaeCyeZk37VT4Ics6j7+B7ElLEr - subject: loot - repo: snapshots - package: libloot-python - version: $(PACKAGE_VERSION) - publish: true - artifact: libloot-python - - - provider: GitHub - tag: $(APPVEYOR_REPO_TAG_NAME) - release: libloot-python v$(APPVEYOR_REPO_TAG_NAME) - description: | - Requires Windows 7 or later and the [MSVC 2017 x86 redistributable](https://download.visualstudio.microsoft.com/download/pr/749aa419-f9e4-4578-a417-a43786af205e/d59197078cc425377be301faba7dd87a/vc_redist.x86.exe), and [7-Zip](http://www.7-zip.org/) to extract the archive. - auth_token: - secure: yDqT5l/e5MntbW99V6+MHlfFgNv+UIogFfeyUVqtFk5lFRB/dAraLLwKCLl6y+DH - artifact: libloot-python - draft: false - on: - appveyor_repo_tag: true - -on_success: - - ps: python "$env:APPVEYOR_BUILD_FOLDER\delete_old_bintray_versions.py" -g loot/libloot-python -b loot/snapshots/libloot-python -u wrinklyninja -k $env:bintray_auth_token -t $env:github_auth_token -n 30