# This workflow will build a golang project # For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-go name: LLGo on: push: branches: ["**"] pull_request: branches: ["**"] jobs: download-model: runs-on: ubuntu-latest steps: - name: Download model file run: | mkdir -p ./_demo/llama2-c wget -P ./_demo/llama2-c https://huggingface.co/karpathy/tinyllamas/resolve/main/stories15M.bin - name: Upload model as artifact uses: actions/upload-artifact@v4 with: name: llama2-model path: ./_demo/llama2-c/stories15M.bin retention-days: 1 llgo: needs: download-model continue-on-error: true strategy: matrix: os: - macos-latest - ubuntu-24.04 llvm: [19] go: ["1.20.14", "1.21.13", "1.22.12", "1.23.6", "1.24.0"] runs-on: ${{matrix.os}} steps: - uses: actions/checkout@v4 - name: Install dependencies uses: ./.github/actions/setup-deps with: llvm-version: ${{matrix.llvm}} - name: Download model artifact uses: actions/download-artifact@v4 with: name: llama2-model path: ./_demo/llama2-c/ - name: Install further optional dependencies for demos run: | py_deps=( numpy # for github.com/goplus/llgo/py/numpy torch # for github.com/goplus/llgo/py/torch ) pip3.12 install --break-system-packages "${py_deps[@]}" - name: Set up Go for build uses: ./.github/actions/setup-go with: go-version: "1.24.0" - name: Install working-directory: compiler run: | go install ./... echo "LLGO_ROOT=$GITHUB_WORKSPACE" >> $GITHUB_ENV - name: Set up Go for testing uses: actions/setup-go@v5 with: go-version: ${{matrix.go}} - name: Verify Go version run: | go_version=$(go version | cut -d' ' -f3 | sed 's/go//') if [[ "$go_version" != "${{matrix.go}}"* ]]; then echo "Expected Go version ${{matrix.go}}, but got $go_version" exit 1 fi echo "Using Go version: $go_version" - name: _xtool build tests run: | cd _xtool llgo build -v ./... - name: LLGO tests if: ${{!startsWith(matrix.os, 'ubuntu')}} run: | echo "Test result on ${{matrix.os}} with LLVM ${{matrix.llvm}}" > result.md bash ./.github/workflows/test_llgo.sh - name: Test demos run: | # TODO(lijie): force python3-embed to be linked with python-3.12-embed # Currently, python3-embed is python-3.13-embed, doesn't work with pytorch # Will remove this after pytorch is fixed. pcdir=$HOME/pc mkdir -p $pcdir libdir=$(pkg-config --variable=libdir python-3.12-embed) echo "libdir: $libdir" ln -s $libdir/pkgconfig/python-3.12-embed.pc $pcdir/python3-embed.pc export PKG_CONFIG_PATH=$pcdir bash .github/workflows/test_demo.sh - name: Show test result run: cat result.md - name: LLDB tests if: ${{startsWith(matrix.os, 'macos')}} working-directory: compiler run: | echo "Test lldb with llgo plugin on ${{matrix.os}} with LLVM ${{matrix.llvm}}" bash _lldb/runtest.sh -v test: continue-on-error: true strategy: matrix: os: - macos-latest - ubuntu-24.04 llvm: [19] go: ["1.24.0"] runs-on: ${{matrix.os}} steps: - uses: actions/checkout@v4 - name: Install dependencies uses: ./.github/actions/setup-deps with: llvm-version: ${{matrix.llvm}} - name: Install further optional dependencies for demos run: | py_deps=( numpy # for github.com/goplus/llgo/py/numpy torch # for github.com/goplus/llgo/py/torch ) pip3.12 install --break-system-packages "${py_deps[@]}" - name: Set up Go for build uses: ./.github/actions/setup-go with: go-version: "1.24.0" - name: Install working-directory: compiler run: | go install ./... echo "LLGO_ROOT=$GITHUB_WORKSPACE" >> $GITHUB_ENV - name: Set up Go for testing uses: actions/setup-go@v5 with: go-version: ${{matrix.go}} - name: Verify Go version run: | go_version=$(go version | cut -d' ' -f3 | sed 's/go//') if [[ "$go_version" != "${{matrix.go}}"* ]]; then echo "Expected Go version ${{matrix.go}}, but got $go_version" exit 1 fi echo "Using Go version: $go_version" - name: run llgo test run: | llgo test ./... cd _demo llgo test -v ./runtest hello: continue-on-error: true strategy: matrix: os: [ubuntu-24.04, macos-latest] llvm: [19] go: ["1.20.14", "1.21.13", "1.22.12", "1.23.6", "1.24.0"] runs-on: ${{matrix.os}} steps: - uses: actions/checkout@v4 - name: Install dependencies uses: ./.github/actions/setup-deps with: llvm-version: ${{matrix.llvm}} - name: Set up Go 1.23 for building llgo uses: ./.github/actions/setup-go with: go-version: "1.24.0" - name: Install llgo working-directory: compiler run: | go install ./... echo "LLGO_ROOT=$GITHUB_WORKSPACE" >> $GITHUB_ENV - name: Set up Go for testing uses: ./.github/actions/setup-go with: go-version: ${{matrix.go}} - name: Test Hello World with go.mod 1.20 if: startsWith(matrix.go, '1.20') || startsWith(matrix.go, '1.21') || startsWith(matrix.go, '1.22') || startsWith(matrix.go, '1.23') || startsWith(matrix.go, '1.24') uses: ./.github/actions/test-helloworld with: go-version: ${{matrix.go}} mod-version: "1.20" - name: Test Hello World with go.mod 1.21 if: startsWith(matrix.go, '1.21') || startsWith(matrix.go, '1.22') || startsWith(matrix.go, '1.23') || startsWith(matrix.go, '1.24') uses: ./.github/actions/test-helloworld with: go-version: ${{matrix.go}} mod-version: "1.21" - name: Test Hello World with go.mod 1.22 if: startsWith(matrix.go, '1.22') || startsWith(matrix.go, '1.23') || startsWith(matrix.go, '1.24') uses: ./.github/actions/test-helloworld with: go-version: ${{matrix.go}} mod-version: "1.22" - name: Test Hello World with go.mod 1.23 if: startsWith(matrix.go, '1.23') || startsWith(matrix.go, '1.24') uses: ./.github/actions/test-helloworld with: go-version: ${{matrix.go}} mod-version: "1.23" - name: Test Hello World with go.mod 1.24 if: startsWith(matrix.go, '1.24') uses: ./.github/actions/test-helloworld with: go-version: ${{matrix.go}} mod-version: "1.24"