name: Build Nightly on: push: branches: - 'develop' workflow_dispatch: permissions: write-all jobs: release: name: Create Nightly Release runs-on: ubuntu-22.04 outputs: upload_url: ${{ steps.create_release.outputs.upload_url }} version: ${{ steps.tag.outputs.version }} steps: - name: Checkout Code uses: actions/checkout@v6 with: { fetch-depth: 0, submodules: 'recursive' } - name: Set Tag id: tag run: | echo "version=nightly" >> "$GITHUB_OUTPUT" - name: Update Tag run: | git tag -f ${{ steps.tag.outputs.version }} git push -f origin ${{ steps.tag.outputs.version }} - name: Create Release id: create_release uses: softprops/action-gh-release@v3 with: tag_name: ${{ steps.tag.outputs.version }} name: ecode ${{ steps.tag.outputs.version }} draft: false prerelease: true generate_release_notes: false body: | Builds that include most recent changes as they happen. For stable releases check the whole list of [releases](https://github.com/SpartanJ/ecode/releases). build_linux_x86_64: name: Linux x86_64 Nightly needs: release strategy: matrix: config: - arch: x86_64 container: ubuntu-22.04 runs-on: ${{ matrix.config.container }} container: image: ubuntu:20.04 env: CC: gcc CXX: g++ steps: - name: Install essentials run: | export DEBIAN_FRONTEND=noninteractive apt-get update apt-get install -y --no-install-recommends software-properties-common build-essential git ca-certificates wget lsb-release gnupg - name: Checkout Code uses: actions/checkout@v6 with: { fetch-depth: 0, submodules: 'recursive', set-safe-directory: true } - name: Set Environment Variables run: | echo "$HOME/.local/bin" >> "$GITHUB_PATH" echo "INSTALL_REF=${{ needs.release.outputs.version }}" >> "$GITHUB_ENV" echo "RARCH=$(uname -m)" >> "$GITHUB_ENV" echo $(ldd --version) - name: Mark Git directory as safe run: git config --global --add safe.directory "$GITHUB_WORKSPACE" - name: Patch commit number run: | bash projects/scripts/patch_commit_number.sh - name: Install dependencies shell: bash run: | apt-get install -y curl libfuse2 fuse premake4 mesa-common-dev libgl1-mesa-dev sudo file appstream curl -fsSL https://deb.nodesource.com/setup_lts.x | bash - apt-get install -y nodejs add-apt-repository -y universe add-apt-repository -y multiverse SUCCESS=false for i in {1..3}; do echo "Attempt $i: Adding PPA via Launchpad API..." if timeout 30s sudo add-apt-repository -y ppa:ubuntu-toolchain-r/test; then SUCCESS=true echo "Successfully added PPA." break fi echo "Launchpad API failed or timed out. Retrying in 5 seconds..." sleep 5 done if [ "$SUCCESS" = false ]; then echo "add-apt-repository failed 3 times. Executing manual fallback..." . /etc/os-release echo "deb http://ppa.launchpad.net/ubuntu-toolchain-r/test/ubuntu $VERSION_CODENAME main" | sudo tee /etc/apt/sources.list.d/ubuntu-toolchain-r-fallback.list sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 60C317803A41BA51845E371A1E9377A2BA9EF27F || true fi sudo apt-get update apt-get install -y gcc-13 g++-13 libdw-dev update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-13 10 update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-13 10 update-alternatives --install /usr/bin/cc cc /usr/bin/gcc 30 update-alternatives --set cc /usr/bin/gcc update-alternatives --install /usr/bin/c++ c++ /usr/bin/g++ 30 update-alternatives --set c++ /usr/bin/g++ update-alternatives --config gcc update-alternatives --config g++ bash projects/linux/scripts/install_sdl2.sh - name: Build ecode run: | bash projects/linux/ecode/build.app.sh --with-static-cpp --version ${{ env.INSTALL_REF }} --arch ${{ matrix.config.arch }} - name: Upload Files uses: softprops/action-gh-release@v3 with: tag_name: ${{ needs.release.outputs.version }} draft: false prerelease: true files: | projects/linux/ecode/ecode-linux-${{ env.INSTALL_REF }}-${{ env.RARCH }}.AppImage projects/linux/ecode/ecode-linux-${{ env.INSTALL_REF }}-${{ env.RARCH }}.tar.gz build_linux_arm64: name: Linux arm64 Nightly needs: release strategy: matrix: config: - arch: aarch64 container: ubuntu-22.04 runs-on: ${{ matrix.config.container }} env: CC: gcc CXX: g++ steps: - name: Checkout Code uses: actions/checkout@v6 with: { fetch-depth: 0, submodules: 'recursive' } - name: Set Environment Variables run: | echo "$HOME/.local/bin" >> "$GITHUB_PATH" echo "/usr/lib/ccache" >> "$GITHUB_PATH" echo "INSTALL_REF=${{ needs.release.outputs.version }}" >> "$GITHUB_ENV" echo "CC=aarch64-linux-gnu-gcc" >> "$GITHUB_ENV" echo "CXX=aarch64-linux-gnu-g++" >> "$GITHUB_ENV" echo "AR=aarch64-linux-gnu-ar" >> "$GITHUB_ENV" echo "RANLIB=aarch64-linux-gnu-ranlib" >> "$GITHUB_ENV" echo "STRIP=aarch64-linux-gnu-strip" >> "$GITHUB_ENV" echo "RARCH=arm64" >> "$GITHUB_ENV" >> "$GITHUB_ENV" echo $(ldd --version) echo $(gcc --version) - name: Update Packages run: | codename=$(lsb_release -cs) url="http://ports.ubuntu.com/ubuntu-ports" repos="main restricted universe multiverse" echo "deb [arch=arm64] $url $codename $repos" > arm64.list echo "deb [arch=arm64] $url $codename-backports $repos" >> arm64.list echo "deb [arch=arm64] $url $codename-security $repos" >> arm64.list echo "deb [arch=arm64] $url $codename-updates $repos" >> arm64.list sudo mv arm64.list /etc/apt/sources.list.d/ sudo apt-get update sudo dpkg --add-architecture arm64 - name: Install dependencies run: | sudo apt-get install -y premake4 libfuse2 fuse gcc-aarch64-linux-gnu g++-aarch64-linux-gnu bash projects/linux/scripts/install_sdl2.sh --aarch64 - name: Build ecode run: | bash projects/scripts/patch_commit_number.sh bash projects/linux/ecode/build.app.sh --version ${{ env.INSTALL_REF }} --arch ${{ matrix.config.arch }} - name: Upload Files uses: softprops/action-gh-release@v3 with: tag_name: ${{ needs.release.outputs.version }} draft: false prerelease: true files: | projects/linux/ecode/ecode-linux-${{ env.INSTALL_REF }}-${{ env.RARCH }}.AppImage projects/linux/ecode/ecode-linux-${{ env.INSTALL_REF }}-${{ env.RARCH }}.tar.gz build_windows_cross: name: Windows x86_64 Nightly needs: release strategy: matrix: config: - compiler: default arch: x86_64 container: ubuntu-22.04 runs-on: ${{ matrix.config.container }} env: CC: gcc CXX: g++ steps: - name: Checkout Code uses: actions/checkout@v6 with: { fetch-depth: 0, submodules: 'recursive' } - name: Set Environment Variables run: | echo "$HOME/.local/bin" >> "$GITHUB_PATH" echo "INSTALL_REF=${{ needs.release.outputs.version }}" >> "$GITHUB_ENV" echo "RARCH=$(uname -m)" >> "$GITHUB_ENV" - name: Update Packages run: | sudo add-apt-repository -y universe sudo add-apt-repository -y multiverse sudo apt-get update - name: Install dependencies run: | sudo apt-get install -y premake4 libfuse2 fuse mingw-w64 gcc-12 g++-12 wget https://cdn.ensoft.dev/eepp-assets/premake-5.0.0-beta6-linux.tar.gz tar xvzf premake-5.0.0-beta6-linux.tar.gz sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-12 10 sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-12 10 sudo update-alternatives --install /usr/bin/cc cc /usr/bin/gcc 30 sudo update-alternatives --set cc /usr/bin/gcc sudo update-alternatives --install /usr/bin/c++ c++ /usr/bin/g++ 30 sudo update-alternatives --set c++ /usr/bin/g++ sudo update-alternatives --config gcc sudo update-alternatives --config g++ - name: Build ecode run: | bash projects/scripts/patch_commit_number.sh bash projects/mingw32/ecode/build.app.sh --version ${{ env.INSTALL_REF }} - name: Upload Files uses: softprops/action-gh-release@v3 with: tag_name: ${{ needs.release.outputs.version }} draft: false prerelease: true files: | projects/mingw32/ecode/ecode-windows-${{ env.INSTALL_REF }}-${{ env.RARCH }}.zip build_windows_arm64_cross: name: Windows arm64 Nightly needs: release strategy: matrix: config: - compiler: default arch: arm64 container: ubuntu-22.04 runs-on: ${{ matrix.config.container }} steps: - name: Checkout Code uses: actions/checkout@v6 with: { fetch-depth: 0, submodules: 'recursive' } - name: Set Environment Variables run: | echo "$HOME/.local/bin" >> "$GITHUB_PATH" echo "INSTALL_REF=${{ needs.release.outputs.version }}" >> "$GITHUB_ENV" - name: Update Packages run: | sudo add-apt-repository -y universe sudo add-apt-repository -y multiverse sudo apt-get update - name: Install dependencies run: | sudo apt-get install -y libfuse2 fuse wget https://cdn.ensoft.dev/eepp-assets/premake-5.0.0-beta6-linux.tar.gz tar xvzf premake-5.0.0-beta6-linux.tar.gz - name: Build ecode run: | bash projects/scripts/patch_commit_number.sh bash projects/mingw32/ecode/build.app.sh --arch=arm64 --version ${{ env.INSTALL_REF }} - name: Upload Files uses: softprops/action-gh-release@v3 with: tag_name: ${{ needs.release.outputs.version }} draft: false prerelease: true files: | projects/mingw32/ecode/ecode-windows-${{ env.INSTALL_REF }}-arm64.zip build_macos: name: macOS arm64 Nightly needs: release runs-on: macos-14 strategy: matrix: arch: [arm64] env: CC: clang CXX: clang++ MACOS_CERTIFICATE_P12_B64: ${{ secrets.MACOS_CERTIFICATE_P12_B64 }} MACOS_CERTIFICATE_PASSWORD: ${{ secrets.MACOS_CERTIFICATE_PASSWORD }} MACOS_APPLE_ID: ${{ secrets.MACOS_APPLE_ID }} MACOS_NOTARIZATION_PASSWORD: ${{ secrets.MACOS_NOTARIZATION_PASSWORD }} MACOS_TEAM_ID: ${{ secrets.MACOS_TEAM_ID }} steps: - name: Checkout Code uses: actions/checkout@v6 with: { fetch-depth: 0, submodules: 'recursive' } - name: System Information run: | system_profiler SPSoftwareDataType bash --version gcc -v xcodebuild -version uname -a - name: Set Environment Variables run: | echo "$HOME/.local/bin" >> "$GITHUB_PATH" echo "INSTALL_REF=${{ needs.release.outputs.version }}" >> "$GITHUB_ENV" - name: Install Dependencies run: | brew install bash sdl2 create-dmg premake - name: Build run: | bash projects/scripts/patch_commit_number.sh bash projects/macos/ecode/build.app.sh --version ${{ env.INSTALL_REF }} - name: Sign Application if: env.MACOS_CERTIFICATE_P12_B64 != '' working-directory: projects/macos/ecode run: | bash ./sign.sh ecode.app - name: Create DMG Image run: | bash projects/macos/ecode/create.dmg.sh --version ${{ env.INSTALL_REF }} - name: Notarize DMG if: env.MACOS_CERTIFICATE_P12_B64 != '' working-directory: projects/macos/ecode run: | DMG_NAME="ecode-macos-${{ env.INSTALL_REF }}-arm64.dmg" bash ./sign.sh "$DMG_NAME" - name: Upload Files uses: softprops/action-gh-release@v3 with: tag_name: ${{ needs.release.outputs.version }} draft: false prerelease: true files: | projects/macos/ecode/ecode-macos-${{ env.INSTALL_REF }}-arm64.dmg build_macos_cross: name: macOS x86_64 Nightly needs: release runs-on: macos-14 strategy: matrix: arch: [arm64] env: CC: clang CXX: clang++ MACOS_CERTIFICATE_P12_B64: ${{ secrets.MACOS_CERTIFICATE_P12_B64 }} MACOS_CERTIFICATE_PASSWORD: ${{ secrets.MACOS_CERTIFICATE_PASSWORD }} MACOS_APPLE_ID: ${{ secrets.MACOS_APPLE_ID }} MACOS_NOTARIZATION_PASSWORD: ${{ secrets.MACOS_NOTARIZATION_PASSWORD }} MACOS_TEAM_ID: ${{ secrets.MACOS_TEAM_ID }} steps: - name: Checkout Code uses: actions/checkout@v6 with: { fetch-depth: 0, submodules: 'recursive' } - name: System Information run: | system_profiler SPSoftwareDataType bash --version gcc -v xcodebuild -version uname -a - name: Set Environment Variables run: | echo "$HOME/.local/bin" >> "$GITHUB_PATH" echo "INSTALL_REF=${{ needs.release.outputs.version }}" >> "$GITHUB_ENV" - name: Install Dependencies run: | brew install bash create-dmg premake p7zip curl -OL https://github.com/libsdl-org/SDL/releases/download/release-2.32.10/SDL2-2.32.10.dmg hdiutil attach SDL2-2.32.10.dmg sudo cp -r /Volumes/SDL2/SDL2.framework /Library/Frameworks/ hdiutil detach /Volumes/SDL2 - name: Build run: | bash projects/scripts/patch_commit_number.sh bash projects/macos/ecode/cross.build.app.sh --version ${{ env.INSTALL_REF }} - name: Sign Application if: env.MACOS_CERTIFICATE_P12_B64 != '' working-directory: projects/macos/ecode run: | bash ./sign.sh ecode.app - name: Create DMG Image run: | bash projects/macos/ecode/cross.create.dmg.sh --version ${{ env.INSTALL_REF }} - name: Notarize DMG if: env.MACOS_CERTIFICATE_P12_B64 != '' working-directory: projects/macos/ecode run: | DMG_NAME="ecode-macos-${{ env.INSTALL_REF }}-x86_64.dmg" bash ./sign.sh "$DMG_NAME" - name: Upload Files uses: softprops/action-gh-release@v3 with: tag_name: ${{ needs.release.outputs.version }} draft: false prerelease: true files: | projects/macos/ecode/ecode-macos-${{ env.INSTALL_REF }}-x86_64.dmg build_freebsd_x86_64: name: FreeBSD x86_64 Nightly needs: release runs-on: ubuntu-latest steps: - name: Checkout Code uses: actions/checkout@v6 with: { fetch-depth: 0, submodules: 'recursive' } - name: Set Environment Variables run: | echo "INSTALL_REF=${{ needs.release.outputs.version }}" >> "$GITHUB_ENV" echo "RARCH=$(uname -m)" >> "$GITHUB_ENV" - uses: vmactions/freebsd-vm@v1 env: INSTALL_REF: ${{ needs.release.outputs.version }} with: release: '14.1' envs: 'INSTALL_REF' sync: sshfs usesh: true mem: 8192 disable-cache: true prepare: | pkg upgrade -y pkg install -y bash pcre2 git sdl2 curl premake5 gsed gmake run: | export CC=clang export CXX=clang++ git config --global --add safe.directory "$GITHUB_WORKSPACE" bash projects/scripts/patch_commit_number.sh sh projects/freebsd/ecode/build.app.sh --version ${{ env.INSTALL_REF }} - name: Upload Files uses: softprops/action-gh-release@v3 with: tag_name: ${{ needs.release.outputs.version }} draft: false prerelease: true files: | projects/freebsd/ecode/ecode-freebsd-${{ env.INSTALL_REF }}-x86_64.tar.gz build_haiku_x86_64: name: Haiku x86_64 Nightly needs: release runs-on: ubuntu-latest steps: - name: Checkout Code uses: actions/checkout@v6 with: { fetch-depth: 0, submodules: 'recursive' } - name: Set Environment Variables run: | echo "INSTALL_REF=${{ needs.release.outputs.version }}" >> "$GITHUB_ENV" echo "RARCH=$(uname -m)" >> "$GITHUB_ENV" - uses: vmactions/haiku-vm@v1 env: INSTALL_REF: ${{ needs.release.outputs.version }} with: envs: 'INSTALL_REF' usesh: true mem: 8192 disable-cache: true prepare: | pkgman install -y libsdl2 libsdl2_devel git gcc premake5 run: | git config --global --add safe.directory "$GITHUB_WORKSPACE" bash projects/scripts/patch_commit_number.sh sh projects/haiku/ecode/build.app.sh --version ${{ env.INSTALL_REF }} - name: Upload Files uses: softprops/action-gh-release@v3 with: tag_name: ${{ needs.release.outputs.version }} draft: false prerelease: true files: | projects/haiku/ecode/ecode-haiku-${{ env.INSTALL_REF }}-x86_64.tar.gz build_windows_msvc: name: Windows x86_64 MSVC Nightly needs: release runs-on: windows-latest env: MSBUILD_PATH: C:\Program Files\Microsoft Visual Studio\2022\Enterprise\MSBuild\Current\Bin steps: - name: Configure Git shell: pwsh run: | git config --system core.autocrlf false - name: Checkout Code uses: actions/checkout@v6 with: { fetch-depth: 0, submodules: 'recursive' } - name: Build shell: pwsh run: | .\projects\scripts\patch_commit_number.ps1 .\projects\windows\ecode\build.app.ps1 - name: Upload Files uses: softprops/action-gh-release@v3 with: tag_name: ${{ needs.release.outputs.version }} draft: false prerelease: true files: | ./projects/windows/ecode/ecode-windows-nightly-msvc-x86_64.zip ./projects/windows/ecode/ecode-windows-nightly-msvc-x86_64-pdb.zip build_windows_arm64_msvc: name: Windows arm64 MSVC Nightly needs: release runs-on: windows-latest env: MSBUILD_PATH: C:\Program Files\Microsoft Visual Studio\2022\Enterprise\MSBuild\Current\Bin steps: - name: Configure Git shell: pwsh run: | git config --system core.autocrlf false - name: Checkout Code uses: actions/checkout@v6 with: { fetch-depth: 0, submodules: 'recursive' } - name: Build shell: pwsh run: | .\projects\scripts\patch_commit_number.ps1 .\projects\windows\ecode\build.app.ps1 -arch arm64 - name: Upload Files uses: softprops/action-gh-release@v3 with: tag_name: ${{ needs.release.outputs.version }} draft: false prerelease: true files: | ./projects/windows/ecode/ecode-windows-nightly-msvc-arm64.zip ./projects/windows/ecode/ecode-windows-nightly-msvc-arm64-pdb.zip