diff --git a/.github/workflows/auto_labeler_pr.yml b/.github/workflows/auto_labeler_pr.yml index 48ea1eeb..99449911 100644 --- a/.github/workflows/auto_labeler_pr.yml +++ b/.github/workflows/auto_labeler_pr.yml @@ -10,7 +10,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Apply Type Label - uses: actions/labeler@v3 + uses: actions/labeler@v5 with: repo-token: "${{ secrets.GITHUB_TOKEN }}" - sync-labels: "" # works around actions/labeler#104 + sync-labels: false diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 21f3a8b4..2a8217c1 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -3,11 +3,11 @@ name: CI on: push: branches: - - '*' + - "*" pull_request: branches: - - '*' + - "*" workflow_dispatch: @@ -18,11 +18,12 @@ jobs: strategy: matrix: config: - - { name: "GCC", cc: gcc, cxx: g++ } - - { name: "clang", cc: clang, cxx: clang++ } + - { name: "GCC", cc: gcc, cxx: g++ } + - { name: "clang", cc: clang, cxx: clang++ } env: CC: ${{ matrix.config.cc }} CXX: ${{ matrix.config.cxx }} + steps: - name: Set Environment Variables if: ${{ matrix.config.cc == 'gcc' }} @@ -30,28 +31,37 @@ jobs: echo "$HOME/.local/bin" >> "$GITHUB_PATH" echo "INSTALL_REF=${GITHUB_REF##*/}" >> "$GITHUB_ENV" echo "INSTALL_NAME=lite-xl-${GITHUB_REF##*/}-linux-$(uname -m)-portable" >> "$GITHUB_ENV" - - uses: actions/checkout@v3 + + - name: Checkout code + uses: actions/checkout@v4 + - name: Python Setup - uses: actions/setup-python@v4 + uses: actions/setup-python@v5 with: - python-version: 3.9 + python-version: "3.11" + - name: Update Packages run: sudo apt-get update + - name: Install Dependencies run: bash scripts/install-dependencies.sh --debug + - name: Build run: | bash --version bash scripts/build.sh --debug --forcefallback --portable + - name: Package if: ${{ matrix.config.cc == 'gcc' }} run: bash scripts/package.sh --version ${INSTALL_REF} --debug --binary + - name: Upload Artifacts - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 if: ${{ matrix.config.cc == 'gcc' }} with: name: Linux Artifacts path: ${{ env.INSTALL_NAME }}.tar.gz + compression-level: 0 build_macos: name: macOS @@ -61,7 +71,8 @@ jobs: CXX: clang++ strategy: matrix: - arch: ['x86_64', 'arm64'] + arch: ["x86_64", "arm64"] + steps: - name: System Information run: | @@ -69,36 +80,46 @@ jobs: bash --version gcc -v xcodebuild -version + - name: Set Environment Variables run: | echo "$HOME/.local/bin" >> "$GITHUB_PATH" echo "INSTALL_REF=${GITHUB_REF##*/}" >> "$GITHUB_ENV" echo "INSTALL_NAME=lite-xl-${GITHUB_REF##*/}-macos-${{ matrix.arch }}" >> "$GITHUB_ENV" if [[ $(uname -m) != ${{ matrix.arch }} ]]; then echo "ARCH=--cross-arch ${{ matrix.arch }}" >> "$GITHUB_ENV"; fi - - uses: actions/checkout@v3 + + - name: Checkout code + uses: actions/checkout@v4 + - name: Python Setup - uses: actions/setup-python@v4 + uses: actions/setup-python@v5 with: - python-version: 3.9 + python-version: "3.11" + + # --lhelper will eliminate a warning with arm64 and libusb - name: Install Dependencies - # --lhelper will eliminate a warning with arm64 and libusb run: bash scripts/install-dependencies.sh --debug --lhelper + - name: Build run: | bash --version bash scripts/build.sh --bundle --debug --forcefallback $ARCH + - name: Create DMG Image run: bash scripts/package.sh --version ${INSTALL_REF} $ARCH --debug --dmg + - name: Upload DMG Image - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: - name: macOS DMG Images + name: macOS DMG Images (${{ matrix.arch }}) path: ${{ env.INSTALL_NAME }}.dmg + compression-level: 0 build_macos_universal: name: macOS (Universal) runs-on: macos-11 needs: build_macos + steps: - name: System Information run: | @@ -106,32 +127,42 @@ jobs: bash --version gcc -v xcodebuild -version + - name: Set Environment Variables run: | echo "$HOME/.local/bin" >> "$GITHUB_PATH" echo "INSTALL_NAME=lite-xl-${GITHUB_REF##*/}-macos-universal" >> "$GITHUB_ENV" + - name: Setup Python - uses: actions/setup-python@v4 + uses: actions/setup-python@v5 with: - python-version: '3.9' + python-version: "3.11" + - name: Install dmgbuild run: pip install dmgbuild - - uses: actions/checkout@v3 + + - name: Checkout code + uses: actions/checkout@v4 + - name: Download artifacts - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 id: download with: - name: macOS DMG Images + pattern: macOS DMG Images * + merge-multiple: true path: dmgs-original + - name: Make universal bundles run: | bash --version bash scripts/make-universal-binaries.sh ${{ steps.download.outputs.download-path }} "${INSTALL_NAME}" + - name: Upload DMG Image - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: - name: macOS Universal DMG Images + name: macOS DMG Images (Universal) path: ${{ env.INSTALL_NAME }}.dmg + compression-level: 0 build_windows_msys2: name: Windows @@ -139,48 +170,58 @@ jobs: strategy: matrix: config: - - {msystem: MINGW32, arch: i686} - - {msystem: MINGW64, arch: x86_64} + - { msystem: MINGW32, arch: i686 } + - { msystem: MINGW64, arch: x86_64 } defaults: run: shell: msys2 {0} + steps: - - uses: actions/checkout@v3 - - uses: msys2/setup-msys2@v2 - with: - msystem: ${{ matrix.config.msystem }} - install: >- - base-devel - git - zip - mingw-w64-${{ matrix.config.arch }}-gcc - mingw-w64-${{ matrix.config.arch }}-meson - mingw-w64-${{ matrix.config.arch }}-ninja - mingw-w64-${{ matrix.config.arch }}-ca-certificates - mingw-w64-${{ matrix.config.arch }}-ntldd - - name: Set Environment Variables - run: | - echo "$HOME/.local/bin" >> "$GITHUB_PATH" - echo "INSTALL_REF=${GITHUB_REF##*/}" >> "$GITHUB_ENV" - if [[ "${MSYSTEM}" == "MINGW64" ]]; then - echo "INSTALL_NAME=lite-xl-${GITHUB_REF##*/}-windows-x86_64" >> "$GITHUB_ENV" - else - echo "INSTALL_NAME=lite-xl-${GITHUB_REF##*/}-windows-i686" >> "$GITHUB_ENV" - fi - - name: Install Dependencies - if: false - run: bash scripts/install-dependencies.sh --debug - - name: Build - run: | - bash --version - bash scripts/build.sh -U --debug --forcefallback - - name: Package - run: bash scripts/package.sh --version ${INSTALL_REF} --debug --binary - - name: Upload Artifacts - uses: actions/upload-artifact@v3 - with: - name: Windows Artifacts - path: ${{ env.INSTALL_NAME }}.zip + - name: Checkout code + uses: actions/checkout@v4 + + - name: Setup MSYS2 + uses: msys2/setup-msys2@v2 + with: + msystem: ${{ matrix.config.msystem }} + install: >- + base-devel + git + zip + mingw-w64-${{ matrix.config.arch }}-gcc + mingw-w64-${{ matrix.config.arch }}-meson + mingw-w64-${{ matrix.config.arch }}-ninja + mingw-w64-${{ matrix.config.arch }}-ca-certificates + mingw-w64-${{ matrix.config.arch }}-ntldd + + - name: Set Environment Variables + run: | + echo "$HOME/.local/bin" >> "$GITHUB_PATH" + echo "INSTALL_REF=${GITHUB_REF##*/}" >> "$GITHUB_ENV" + if [[ "${MSYSTEM}" == "MINGW64" ]]; then + echo "INSTALL_NAME=lite-xl-${GITHUB_REF##*/}-windows-x86_64" >> "$GITHUB_ENV" + else + echo "INSTALL_NAME=lite-xl-${GITHUB_REF##*/}-windows-i686" >> "$GITHUB_ENV" + fi + + - name: Install Dependencies + if: false + run: bash scripts/install-dependencies.sh --debug + + - name: Build + run: | + bash --version + bash scripts/build.sh -U --debug --forcefallback + + - name: Package + run: bash scripts/package.sh --version ${INSTALL_REF} --debug --binary + + - name: Upload Artifacts + uses: actions/upload-artifact@v4 + with: + name: Windows Artifacts (${{ matrix.config.msystem }}) + path: ${{ env.INSTALL_NAME }}.zip + compression-level: 0 build_windows_msvc: name: Windows (MSVC) @@ -190,38 +231,52 @@ jobs: arch: - { target: x86, name: i686 } - { target: x64, name: x86_64 } + steps: - - uses: actions/checkout@v3 - - uses: ilammy/msvc-dev-cmd@v1 + - name: Checkout code + uses: actions/checkout@v4 + + - name: Setup MSVC + uses: ilammy/msvc-dev-cmd@v1 with: arch: ${{ matrix.arch.target }} - - uses: actions/setup-python@v4 + + - name: Setup Python + uses: actions/setup-python@v5 with: - python-version: '3.x' + python-version: "3.11" + - name: Install meson and ninja run: pip install meson ninja + - name: Set up environment variables run: | "INSTALL_NAME=lite-xl-$($env:GITHUB_REF -replace ".*/")-windows-msvc-${{ matrix.arch.name }}" >> $env:GITHUB_ENV "INSTALL_REF=$($env:GITHUB_REF -replace ".*/")" >> $env:GITHUB_ENV "LUA_SUBPROJECT_PATH=subprojects/$(awk -F ' *= *' '/directory/ { printf $2 }' subprojects/lua.wrap)" >> $env:GITHUB_ENV + - name: Download and patch subprojects shell: bash run: | meson subprojects download cat resources/windows/001-lua-unicode.diff | patch -Np1 -d "$LUA_SUBPROJECT_PATH" + - name: Configure run: | meson setup --wrap-mode=forcefallback build + - name: Build run: | meson install -C build --destdir="../lite-xl" + - name: Package run: | Remove-Item -Recurse -Force -Path "lite-xl/lib","lite-xl/include" Compress-Archive -Path lite-xl -DestinationPath "$env:INSTALL_NAME.zip" + - name: Upload Artifacts - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: - name: Windows Artifacts (MSVC) + name: Windows Artifacts (MSVC ${{ matrix.arch.target }}) path: ${{ env.INSTALL_NAME }}.zip + compression-level: 0 diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index a1786c9d..f14a90ca 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -21,57 +21,64 @@ jobs: outputs: upload_url: ${{ steps.create_release.outputs.upload_url }} version: ${{ steps.tag.outputs.version }} + steps: - name: Checkout code - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: fetch-depth: 0 + - name: Fetch Version id: tag run: | if [[ "${{ github.event.inputs.version }}" != "" ]]; then - echo ::set-output name=version::${{ github.event.inputs.version }} + echo "version=${{ github.event.inputs.version }}" >> $GITHUB_OUTPUT else - echo ::set-output name=version::${GITHUB_REF/refs\/tags\//} + echo "version=${GITHUB_REF/refs\/tags\//}" >> $GITHUB_OUTPUT fi + - name: Update Tag uses: richardsimko/update-tag@v1 with: tag_name: ${{ steps.tag.outputs.version }} env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + - name: Generate Release Notes run: bash scripts/generate-release-notes.sh --version ${{ steps.tag.outputs.version }} + - name: Create Release id: create_release - uses: softprops/action-gh-release@v1 + uses: ncipollo/release-action@v1 with: - tag_name: ${{ steps.tag.outputs.version }} name: Lite XL ${{ steps.tag.outputs.version }} + tag: ${{ steps.tag.outputs.version }} draft: true - body_path: release-notes.md + bodyFile: release-notes.md + generateReleaseNotes: true + allowUpdates: true build_linux: name: Linux needs: release runs-on: ubuntu-latest - container: ghcr.io/lite-xl/lite-xl-build-box:latest - env: - CC: gcc - CXX: g++ + steps: - name: Set Environment Variables run: | echo "$HOME/.local/bin" >> "$GITHUB_PATH" echo "INSTALL_REF=${{ needs.release.outputs.version }}" >> "$GITHUB_ENV" - - uses: actions/checkout@v3 + echo "CCACHE_DIR=$PWD/.ccache" >> $GITHUB_ENV + + - name: Checkout code + uses: actions/checkout@v4 # disabled because this will break our own Python install - name: Python Setup if: false - uses: actions/setup-python@v4 + uses: actions/setup-python@v5 with: - python-version: 3.9 + python-version: "3.11" # disabled because the container has up-to-date packages - name: Update Packages @@ -86,23 +93,34 @@ jobs: sudo apt-get install -y ccache - name: Build Portable - run: | - bash --version - bash scripts/build.sh --debug --forcefallback --portable --release - - name: Package Portables - run: | - bash scripts/package.sh --version ${INSTALL_REF} --debug --binary --release - bash scripts/package.sh --version ${INSTALL_REF} --debug --addons --binary --release - - name: Build AppImages - run: | - bash scripts/appimage.sh --debug --static --version ${INSTALL_REF} --release - bash scripts/appimage.sh --debug --nobuild --addons --version ${INSTALL_REF} - - name: Upload Files - uses: softprops/action-gh-release@v1 + uses: docker://ghcr.io/lite-xl/lite-xl-build-box:v2.2.0 with: - tag_name: ${{ needs.release.outputs.version }} - draft: true - files: | + entrypoint: /entrypoint.sh + args: | + bash --version + bash scripts/build.sh --debug --forcefallback --portable --release + + - name: Package Portables + uses: docker://ghcr.io/lite-xl/lite-xl-build-box:v2.2.0 + with: + entrypoint: /entrypoint.sh + args: | + bash scripts/package.sh --version ${INSTALL_REF} --debug --binary --release + bash scripts/package.sh --version ${INSTALL_REF} --debug --addons --binary --release + + - name: Build AppImages + uses: docker://ghcr.io/lite-xl/lite-xl-build-box:v2.2.0 + with: + entrypoint: /entrypoint.sh + args: | + bash scripts/appimage.sh --debug --static --version ${INSTALL_REF} --release + bash scripts/appimage.sh --debug --nobuild --addons --version ${INSTALL_REF} + + - name: Upload Artifacts + uses: actions/upload-artifact@v4 + with: + name: Linux Artifacts + path: | lite-xl-${{ env.INSTALL_REF }}-linux-x86_64-portable.tar.gz lite-xl-${{ env.INSTALL_REF }}-addons-linux-x86_64-portable.tar.gz LiteXL-${{ env.INSTALL_REF }}-x86_64.AppImage @@ -118,6 +136,7 @@ jobs: env: CC: clang CXX: clang++ + steps: - name: System Information run: | @@ -125,6 +144,7 @@ jobs: bash --version gcc -v xcodebuild -version + - name: Set Environment Variables run: | echo "$HOME/.local/bin" >> "$GITHUB_PATH" @@ -132,41 +152,41 @@ jobs: echo "INSTALL_NAME=lite-xl-${{ needs.release.outputs.version }}-macos-${{ matrix.arch }}" >> "$GITHUB_ENV" echo "INSTALL_NAME_ADDONS=lite-xl-${{ needs.release.outputs.version }}-addons-macos-${{ matrix.arch }}" >> "$GITHUB_ENV" if [[ $(uname -m) != ${{ matrix.arch }} ]]; then echo "ARCH=--cross-arch ${{ matrix.arch }}" >> "$GITHUB_ENV"; fi - - uses: actions/checkout@v3 + + - name: Checkout code + uses: actions/checkout@v4 + - name: Python Setup - uses: actions/setup-python@v4 + uses: actions/setup-python@v5 with: - python-version: 3.9 + python-version: "3.11" + - name: Install Dependencies run: bash scripts/install-dependencies.sh --debug + - name: Build run: | bash --version bash scripts/build.sh --bundle --debug --forcefallback --release $ARCH + - name: Create DMG Image run: | bash scripts/package.sh --version ${INSTALL_REF} $ARCH --debug --dmg --release bash scripts/package.sh --version ${INSTALL_REF} $ARCH --debug --addons --dmg --release + - name: Upload Artifacts - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: - name: macOS DMG Images + name: macOS DMG Images (${{ matrix.arch }}) path: | ${{ env.INSTALL_NAME }}.dmg ${{ env.INSTALL_NAME_ADDONS }}.dmg - - name: Upload Files - uses: softprops/action-gh-release@v1 - with: - tag_name: ${{ needs.release.outputs.version }} - draft: true - files: | - ${{ env.INSTALL_NAME }}.dmg - ${{ env.INSTALL_NAME_ADDONS }}.dmg build_macos_universal: name: macOS (Universal) needs: [release, build_macos] runs-on: macos-11 + steps: - name: System Information run: | @@ -174,40 +194,48 @@ jobs: bash --version gcc -v xcodebuild -version + - name: Set Environment Variables run: | echo "$HOME/.local/bin" >> "$GITHUB_PATH" echo "INSTALL_BASE=lite-xl-${{ needs.release.outputs.version }}-macos" >> "$GITHUB_ENV" echo "INSTALL_BASE_ADDONS=lite-xl-${{ needs.release.outputs.version }}-addons-macos" >> "$GITHUB_ENV" - - uses: actions/checkout@v2 + + - uses: actions/checkout@v4 + - name: Download Artifacts - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 id: download with: - name: macOS DMG Images + pattern: macOS DMG Images * + merge-multiple: true path: dmgs-original + - name: Python Setup - uses: actions/setup-python@v2 + uses: actions/setup-python@v5 with: - python-version: 3.9 + python-version: "3.11" + - name: Install dmgbuild run: pip install dmgbuild + - name: Prepare DMG Images run: | mkdir -p dmgs-addons dmgs-normal mv -v "${{ steps.download.outputs.download-path }}/$INSTALL_BASE-"{x86_64,arm64}.dmg dmgs-normal mv -v "${{ steps.download.outputs.download-path }}/$INSTALL_BASE_ADDONS-"{x86_64,arm64}.dmg dmgs-addons + - name: Create Universal DMGs run: | bash --version bash scripts/make-universal-binaries.sh dmgs-normal "$INSTALL_BASE-universal" bash scripts/make-universal-binaries.sh dmgs-addons "$INSTALL_BASE_ADDONS-universal" - - name: Upload Files - uses: softprops/action-gh-release@v1 + + - name: Upload Artifacts + uses: actions/upload-artifact@v4 with: - tag_name: ${{ needs.release.outputs.version }} - draft: true - files: | + name: macOS DMG Images (Universal) + path: | ${{ env.INSTALL_BASE }}-universal.dmg ${{ env.INSTALL_BASE_ADDONS }}-universal.dmg @@ -217,54 +245,95 @@ jobs: runs-on: windows-2019 strategy: matrix: - msystem: [MINGW32, MINGW64] + config: + - { msystem: MINGW32, arch: i686 } + - { msystem: MINGW64, arch: x86_64 } defaults: run: shell: msys2 {0} + steps: - - uses: actions/checkout@v3 - - uses: msys2/setup-msys2@v2 + - name: Checkout code + uses: actions/checkout@v4 + + - name: Setup MSYS2 + uses: msys2/setup-msys2@v2 with: - msystem: ${{ matrix.msystem }} + msystem: ${{ matrix.config.msystem }} update: true install: >- base-devel git zip + unzip + mingw-w64-${{ matrix.config.arch }}-gcc + mingw-w64-${{ matrix.config.arch }}-meson + mingw-w64-${{ matrix.config.arch }}-ninja + mingw-w64-${{ matrix.config.arch }}-ca-certificates + mingw-w64-${{ matrix.config.arch }}-ntldd + - name: Set Environment Variables run: | echo "$HOME/.local/bin" >> "$GITHUB_PATH" echo "INSTALL_REF=${{ needs.release.outputs.version }}" >> "$GITHUB_ENV" if [[ "${MSYSTEM}" == "MINGW64" ]]; then - echo "BUILD_ARCH=x86_64" >> "$GITHUB_ENV" echo "INSTALL_NAME=lite-xl-${{ needs.release.outputs.version }}-windows-x86_64" >> "$GITHUB_ENV" echo "INSTALL_NAME_ADDONS=lite-xl-${{ needs.release.outputs.version }}-addons-windows-x86_64" >> "$GITHUB_ENV" else - echo "BUILD_ARCH=i686" >> "$GITHUB_ENV" echo "INSTALL_NAME=lite-xl-${{ needs.release.outputs.version }}-windows-i686" >> "$GITHUB_ENV" echo "INSTALL_NAME_ADDONS=lite-xl-${{ needs.release.outputs.version }}-addons-windows-i686" >> "$GITHUB_ENV" fi + - name: Install Dependencies + if: false run: bash scripts/install-dependencies.sh --debug + - name: Build run: | bash --version bash scripts/build.sh -U --debug --forcefallback --release + - name: Package run: bash scripts/package.sh --version ${INSTALL_REF} --debug --binary --release + - name: Build Installer run: bash scripts/innosetup/innosetup.sh --debug --version ${INSTALL_REF} + - name: Package With Addons run: bash scripts/package.sh --version ${INSTALL_REF} --debug --addons --binary --release + - name: Build Installer With Addons run: bash scripts/innosetup/innosetup.sh --debug --version ${INSTALL_REF} --addons - - name: Upload Files - uses: softprops/action-gh-release@v1 + + - name: Upload Artifacts + uses: actions/upload-artifact@v4 with: - tag_name: ${{ needs.release.outputs.version }} - draft: true - files: | + name: Windows Builds (${{ matrix.config.msystem }}) + path: | ${{ env.INSTALL_NAME }}.zip ${{ env.INSTALL_NAME_ADDONS }}.zip - LiteXL-${{ env.INSTALL_REF }}-${{ env.BUILD_ARCH }}-setup.exe - LiteXL-${{ env.INSTALL_REF }}-addons-${{ env.BUILD_ARCH }}-setup.exe + LiteXL-${{ env.INSTALL_REF }}-${{ matrix.config.arch }}-setup.exe + LiteXL-${{ env.INSTALL_REF }}-addons-${{ matrix.config.arch }}-setup.exe + + upload_artifacts: + name: Upload Release Artifacts + runs-on: ubuntu-latest + needs: + [release, build_linux, build_macos, build_macos_universal, build_windows_msys2] + + steps: + - name: Download Artifacts + uses: actions/download-artifact@v4 + with: + merge-multiple: true + + - name: Update Release + uses: ncipollo/release-action@v1 + with: + tag: ${{ needs.release.outputs.version }} + omitBodyDuringUpdate: true + omitDraftDuringUpdate: true + omitNameDuringUpdate: true + omitPrereleaseDuringUpdate: true + allowUpdates: true + artifacts: "*.exe,*.zip,*.tar.gz,*.dmg,*.AppImage"