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@v1 - 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@v1 - name: (Linux) Download LLVM run: | wget https://apt.llvm.org/llvm.sh chmod +x llvm.sh sudo ./llvm.sh 17 echo "/usr/lib/llvm-17/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 libLLVM* 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@v1 - name: Download LLVM and setup PATH run: | brew install llvm@17 dylibbundler echo "/usr/local/opt/llvm@17/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@v1 - name: Download LLVM and setup PATH run: | brew install llvm@17 dylibbundler echo "/opt/homebrew/opt/llvm@17/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@v1 - uses: actions/setup-python@v2 with: python-version: '3.8.x' - name: Install B2 CLI shell: bash run: | python -m pip install --upgrade pip pip install --upgrade b2 - 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: | echo Authorizing B2 account b2 account authorize "$APPID" "$APPKEY" echo Uploading artifcates to B2 chmod +x ./ci/upload_create_nightly.sh ./ci/upload_create_nightly.sh "$BUCKET" windows-amd64 windows_artifacts/ ./ci/upload_create_nightly.sh "$BUCKET" ubuntu-amd64 ubuntu_artifacts/dist.zip ./ci/upload_create_nightly.sh "$BUCKET" macos-amd64 macos_artifacts/dist.zip ./ci/upload_create_nightly.sh "$BUCKET" macos-arm64 macos_arm_artifacts/dist.zip echo Deleting old artifacts in B2 python3 ci/delete_old_binaries.py "$BUCKET" "$DAYS_TO_KEEP" echo Creating nightly.json python3 ci/create_nightly_json.py "$BUCKET" > nightly.json echo Uploading nightly.json b2 upload-file "$BUCKET" nightly.json nightly.json echo Clear B2 account info b2 clear-account