summaryrefslogtreecommitdiff
path: root/.github/workflows/release.yml
diff options
context:
space:
mode:
Diffstat (limited to '.github/workflows/release.yml')
-rw-r--r--.github/workflows/release.yml258
1 files changed, 258 insertions, 0 deletions
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
new file mode 100644
index 0000000..5f8a312
--- /dev/null
+++ b/.github/workflows/release.yml
@@ -0,0 +1,258 @@
+name: release
+env:
+ ODIN_BRANCH: dev-2025-09
+
+on:
+ workflow_dispatch:
+ schedule:
+ - cron: 0 2 * * 0 # weekly 'nightly' release
+ push:
+ tags:
+ - dev-**
+
+jobs:
+ dist-arm64-darwin:
+ runs-on: macos-latest
+ timeout-minutes: 15
+ steps:
+ - uses: actions/checkout@v1
+ - name: Set ODIN_BRANCH from tag if available
+ if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/')
+ run: |
+ echo "ODIN_BRANCH=${GITHUB_REF#refs/tags/}" >> $GITHUB_ENV
+ echo "OLS_VERSION=${GITHUB_REF#refs/tags/}" >> $GITHUB_ENV
+ - name: Download LLVM and setup PATH
+ run: |
+ brew install llvm@17
+ echo "/opt/homebrew/opt/llvm@17/bin" >> $GITHUB_PATH
+ - name: Download Odin
+ run: |
+ git clone --depth 1 --branch $ODIN_BRANCH https://github.com/odin-lang/Odin
+ - name: Build Odin
+ run: |
+ cd Odin
+ ./build_odin.sh release
+ - name: Build ols
+ run: ./ci.sh CI_NO_TESTS -target:darwin_arm64 -extra-linker-flags:"--target=arm64-apple-macos"
+ - name: Move to Dist
+ run: |
+ mkdir dist
+ mv ols dist/ols-arm64-darwin
+ - name: Upload artifacts
+ uses: actions/upload-artifact@v4
+ with:
+ name: dist-arm64-darwin
+ path: ./dist
+
+ dist-x86_64-darwin:
+ runs-on: macos-13
+ timeout-minutes: 15
+ steps:
+ - uses: actions/checkout@v1
+ - name: Set ODIN_BRANCH from tag if available
+ if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/')
+ run: |
+ echo "ODIN_BRANCH=${GITHUB_REF#refs/tags/}" >> $GITHUB_ENV
+ echo "OLS_VERSION=${GITHUB_REF#refs/tags/}" >> $GITHUB_ENV
+ - name: Download LLVM and setup PATH
+ run: |
+ brew install llvm@17
+ echo "/usr/local/opt/llvm@17/bin" >> $GITHUB_PATH
+ TMP_PATH=$(xcrun --show-sdk-path)/user/include
+ echo "CPATH=$TMP_PATH" >> $GITHUB_ENV
+ - name: Download Odin
+ run: |
+ git clone --depth 1 --branch $ODIN_BRANCH https://github.com/odin-lang/Odin
+ - name: Build Odin
+ run: |
+ cd Odin
+ make release
+ - name: Build ols
+ run: ./ci.sh CI
+ - name: Move to Dist
+ run: |
+ mkdir dist
+ mv ols dist/ols-x86_64-darwin
+ - name: Upload artifacts
+ uses: actions/upload-artifact@v4
+ with:
+ name: dist-x86_64-darwin
+ path: ./dist
+
+ dist-x86_64-unknown-linux-gnu:
+ timeout-minutes: 30
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v1
+ - name: Set ODIN_BRANCH from tag if available
+ if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/')
+ run: |
+ echo "ODIN_BRANCH=${GITHUB_REF#refs/tags/}" >> $GITHUB_ENV
+ echo "OLS_VERSION=${GITHUB_REF#refs/tags/}" >> $GITHUB_ENV
+ - name: 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: Download Odin
+ run: |
+ git clone --depth 1 --branch $ODIN_BRANCH https://github.com/odin-lang/Odin
+ - name: Build Odin
+ run: |
+ cd Odin
+ ./build_odin.sh release
+ - name: Build ols
+ run: ./ci.sh CI
+ - name: Move to Dist
+ run: |
+ mkdir dist
+ mv ols dist/ols-x86_64-unknown-linux-gnu
+ - name: Upload artifacts
+ uses: actions/upload-artifact@v4
+ with:
+ name: dist-x86_64-unknown-linux-gnu
+ path: ./dist
+
+ dist-arm64-unknown-linux-gnu:
+ timeout-minutes: 30
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v1
+ - name: Set ODIN_BRANCH from tag if available
+ if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/')
+ run: |
+ echo "ODIN_BRANCH=${GITHUB_REF#refs/tags/}" >> $GITHUB_ENV
+ echo "OLS_VERSION=${GITHUB_REF#refs/tags/}" >> $GITHUB_ENV
+ - name: 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: Download Odin
+ run: |
+ git clone --depth 1 --branch $ODIN_BRANCH https://github.com/odin-lang/Odin
+ - name: Build Odin
+ run: |
+ cd Odin
+ ./build_odin.sh release
+ - name: Install ARM64 cross-compilation toolchain (for linker)
+ run: sudo apt install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu
+ - name: Build ols
+ run: ./ci.sh CI_NO_TESTS -target:linux_arm64 -linker:lld -microarch:generic -extra-linker-flags:'--target=aarch64-linux-gnu'
+ - name: Move to Dist
+ run: |
+ mkdir dist
+ mv ols dist/ols-arm64-unknown-linux-gnu
+ - name: Upload artifacts
+ uses: actions/upload-artifact@v4
+ with:
+ name: dist-arm64-unknown-linux-gnu
+ path: ./dist
+
+ dist-x86_64-pc-windows-msvc:
+ timeout-minutes: 30
+ runs-on: windows-latest
+ steps:
+ - uses: actions/checkout@v1
+ - name: Set ODIN_BRANCH from tag if available
+ if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/')
+ shell: pwsh
+ run: |
+ $tagName = $env:GITHUB_REF.Replace('refs/tags/', '')
+ echo "ODIN_BRANCH=$tagName" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
+ echo "OLS_VERSION=$tagName" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
+ - name: Download Odin
+ shell: cmd
+ run: |
+ git clone --depth 1 --branch %ODIN_BRANCH% https://github.com/odin-lang/Odin
+ - name: Build Odin
+ shell: cmd
+ run: |
+ call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Auxiliary\Build\vcvars64.bat
+ cd Odin
+ ./build.bat 1
+ - name: Build ols
+ shell: cmd
+ run: ./ci.bat CI
+ - name: Move to Dist
+ shell: cmd
+ run: |
+ mkdir dist
+ move ols.exe dist/
+ move builtin dist/
+ cd dist
+ ren ols.exe ols-x86_64-pc-windows-msvc.exe
+ - name: Upload artifacts
+ uses: actions/upload-artifact@v4
+ with:
+ name: dist-x86_64-pc-windows-msvc
+ path: ./dist
+ publish:
+ name: publish
+ runs-on: ubuntu-latest
+ timeout-minutes: 30
+ needs: ['dist-x86_64-pc-windows-msvc', 'dist-x86_64-unknown-linux-gnu', 'dist-arm64-unknown-linux-gnu', 'dist-x86_64-darwin', 'dist-arm64-darwin']
+ steps:
+ - name: Install Nodejs
+ uses: actions/setup-node@v1
+ with:
+ node-version: 16.x
+ - name: Checkout repository
+ uses: actions/checkout@v2
+ with:
+ fetch-depth: ${{ env.FETCH_DEPTH }}
+
+ - run: echo "HEAD_SHA=$(git rev-parse HEAD)" >> $GITHUB_ENV
+ - run: 'echo "HEAD_SHA: $HEAD_SHA"'
+
+ - uses: actions/download-artifact@v4.1.7
+ with:
+ name: dist-x86_64-unknown-linux-gnu
+ path: dist
+ - uses: actions/download-artifact@v4.1.7
+ with:
+ name: dist-arm64-unknown-linux-gnu
+ path: dist
+ - uses: actions/download-artifact@v4.1.7
+ with:
+ name: dist-x86_64-pc-windows-msvc
+ path: dist
+ - uses: actions/download-artifact@v4.1.7
+ with:
+ name: dist-x86_64-darwin
+ path: dist
+ - uses: actions/download-artifact@v4.1.7
+ with:
+ name: dist-arm64-darwin
+ path: dist
+ - run: |
+ ls -al ./dist
+ cd dist
+ zip -r ols-x86_64-pc-windows-msvc.zip ols-x86_64-pc-windows-msvc.exe builtin
+ rm ols-x86_64-pc-windows-msvc.exe
+
+ chmod +x ols-x86_64-unknown-linux-gnu
+ zip -r ols-x86_64-unknown-linux-gnu.zip ols-x86_64-unknown-linux-gnu builtin
+ rm ols-x86_64-unknown-linux-gnu
+
+ chmod +x ols-arm64-unknown-linux-gnu
+ zip -r ols-arm64-unknown-linux-gnu.zip ols-arm64-unknown-linux-gnu builtin
+ rm ols-arm64-unknown-linux-gnu
+
+ chmod +x ols-x86_64-darwin
+ zip -r ols-x86_64-darwin.zip ols-x86_64-darwin builtin
+ rm ols-x86_64-darwin
+
+ chmod +x ols-arm64-darwin
+ zip -r ols-arm64-darwin.zip ols-arm64-darwin builtin
+ rm ols-arm64-darwin
+
+ rm -rf builtin
+ - name: Publish Release
+ uses: ./.github/actions/github-release
+ with:
+ files: "dist/*"
+ name: ${{ github.event_name == 'push' && startsWith(github.ref, 'refs/tags/') && github.ref_name || 'nightly' }}
+ token: ${{ secrets.GITHUB_TOKEN }}