name: Nightly on: workflow_dispatch: schedule: - cron: 0 20 * * * jobs: build_windows: name: Windows Build if: github.repository == 'odin-lang/Odin' runs-on: windows-2022 steps: - uses: actions/checkout@v4 - name: build Odin shell: cmd run: | call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvars64.bat ./build.bat 1 1 - name: Odin run shell: cmd run: | call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvars64.bat odin run examples/demo - name: Copy artifacts run: | rm bin/llvm/windows/LLVM-C.lib mkdir dist cp odin.exe dist cp LICENSE dist cp LLVM-C.dll dist cp -r shared dist cp -r base dist cp -r core dist cp -r vendor dist cp -r bin dist cp -r examples dist - name: Upload artifact uses: actions/upload-artifact@v1 with: name: windows_artifacts path: dist build_ubuntu: name: Ubuntu Build if: github.repository == 'odin-lang/Odin' runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: (Linux) Download LLVM run: | wget https://apt.llvm.org/llvm.sh chmod +x llvm.sh sudo ./llvm.sh 18 echo "/usr/lib/llvm-18/bin" >> $GITHUB_PATH - name: build odin run: make nightly - name: Odin run run: ./odin run examples/demo - name: Copy artifacts run: | mkdir dist cp odin dist cp LICENSE dist cp -r shared dist cp -r base dist cp -r core dist cp -r vendor dist cp -r examples dist # Zipping so executable permissions are retained, see https://github.com/actions/upload-artifact/issues/38 zip -r dist.zip dist - name: Upload artifact uses: actions/upload-artifact@v1 with: name: ubuntu_artifacts path: dist.zip build_macos: name: MacOS Build if: github.repository == 'odin-lang/Odin' runs-on: macos-13 steps: - uses: actions/checkout@v4 - name: Download LLVM and setup PATH run: | brew install llvm@18 dylibbundler echo "/usr/local/opt/llvm@18/bin" >> $GITHUB_PATH - name: build odin # These -L makes the linker prioritize system libraries over LLVM libraries, this is mainly to # not link with libunwind bundled with LLVM but link with libunwind on the system. run: CXXFLAGS="-L/usr/lib/system -L/usr/lib" make nightly - name: Bundle run: | mkdir dist cp odin dist cp LICENSE dist cp -r shared dist cp -r base dist cp -r core dist cp -r vendor dist cp -r examples dist dylibbundler -b -x dist/odin -d dist/libs -od -p @executable_path/libs # Zipping so executable permissions are retained, see https://github.com/actions/upload-artifact/issues/38 zip -r dist.zip dist - name: Odin run run: ./dist/odin run examples/demo - name: Upload artifact uses: actions/upload-artifact@v1 with: name: macos_artifacts path: dist.zip build_macos_arm: name: MacOS ARM Build if: github.repository == 'odin-lang/Odin' runs-on: macos-14 # ARM machine steps: - uses: actions/checkout@v4 - name: Download LLVM and setup PATH run: | brew install llvm@18 dylibbundler echo "/opt/homebrew/opt/llvm@18/bin" >> $GITHUB_PATH - name: build odin # These -L makes the linker prioritize system libraries over LLVM libraries, this is mainly to # not link with libunwind bundled with LLVM but link with libunwind on the system. run: CXXFLAGS="-L/usr/lib/system -L/usr/lib" make nightly - name: Bundle run: | mkdir dist cp odin dist cp LICENSE dist cp -r shared dist cp -r base dist cp -r core dist cp -r vendor dist cp -r examples dist dylibbundler -b -x dist/odin -d dist/libs -od -p @executable_path/libs # Zipping so executable permissions are retained, see https://github.com/actions/upload-artifact/issues/38 zip -r dist.zip dist - name: Odin run run: ./dist/odin run examples/demo - name: Upload artifact uses: actions/upload-artifact@v1 with: name: macos_arm_artifacts path: dist.zip upload_b2: runs-on: [ubuntu-latest] needs: [build_windows, build_macos, build_macos_arm, build_ubuntu] steps: - uses: actions/checkout@v4 - uses: actions/setup-python@v2 with: python-version: '3.8.x' - name: Install B2 SDK shell: bash run: | python -m pip install --upgrade pip pip install --upgrade b2sdk - name: Display Python version run: python -c "import sys; print(sys.version)" - name: Download Windows artifacts uses: actions/download-artifact@v1 with: name: windows_artifacts - name: Download Ubuntu artifacts uses: actions/download-artifact@v1 with: name: ubuntu_artifacts - name: Download macOS artifacts uses: actions/download-artifact@v1 with: name: macos_artifacts - name: Download macOS arm artifacts uses: actions/download-artifact@v1 with: name: macos_arm_artifacts - name: Create archives and upload shell: bash env: APPID: ${{ secrets.B2_APPID }} APPKEY: ${{ secrets.B2_APPKEY }} BUCKET: ${{ secrets.B2_BUCKET }} DAYS_TO_KEEP: ${{ secrets.B2_DAYS_TO_KEEP }} run: | python3 ci/nightly.py artifact windows-amd64 windows_artifacts/ python3 ci/nightly.py artifact ubuntu-amd64 ubuntu_artifacts/dist.zip python3 ci/nightly.py artifact macos-amd64 macos_artifacts/dist.zip python3 ci/nightly.py artifact macos-arm64 macos_arm_artifacts/dist.zip python3 ci/nightly.py prune python3 ci/nightly.py json