1010 matrix :
1111 go-version : [1.25.x]
1212 os : [ubuntu-24.04, macos-latest, windows-latest]
13- python-version : ["3.9", "3.10", "3.11", "3.12", "3.13", "3.14"]
13+ python-version : ["3.9", "3.10", "3.11", "3.12", "3.13", "3.14", "3.15.0-alpha.1" ]
1414 targetplatform : [x64]
1515
1616 runs-on : ${{ matrix.os }}
7070 if : github.event_name == 'release' && github.event.action == 'published'
7171 strategy :
7272 matrix :
73- os : [ubuntu-24.04, macos-latest]
73+ os : [ubuntu-24.04, ubuntu-24.04-arm, macos-latest]
7474
7575 steps :
7676 - name : Install Go
@@ -92,32 +92,64 @@ jobs:
9292 env GO111MODULE=on go vet ./...
9393 pip install coverage
9494
95- - name : Build Shared Library
95+ - name : Build Linux Shared Library
96+ if : matrix.os == 'ubuntu-24.04'
9697 env :
9798 CGO_ENABLED : 1
9899 run : |
99- if [[ "$RUNNER_OS" == "Linux" ]]; then
100- sudo dpkg --add-architecture i386
101- sudo apt update
102- sudo apt install -y gcc-multilib g++-multilib libc6-dev-i386
103- CC="gcc -m32" GOOS=linux GOARCH=386 go build -ldflags "-s -w" -buildmode=c-shared -o libexcelize.386.linux.so main.go
104- GOOS=linux GOARCH=amd64 go build -ldflags "-s -w" -buildmode=c-shared -o libexcelize.amd64.linux.so main.go
100+ docker run --rm -v $PWD:/src -w /src quay.io/pypa/manylinux2014_x86_64 bash -c "
101+ yum install -y wget || true
102+ wget https://go.dev/dl/go1.25.3.linux-amd64.tar.gz && \
103+ tar -C /usr/local -xzf go1.25.3.linux-amd64.tar.gz && \
104+ export PATH=/usr/local/go/bin:\$PATH && \
105+ CGO_ENABLED=1 CC=gcc GOOS=linux GOARCH=amd64 \
106+ go build -buildmode=c-shared -ldflags='-s -w' -trimpath \
107+ -o libexcelize.amd64.linux.so main.go && \
108+ rm -f libexcelize.*.h
109+ "
110+
111+ docker run --rm -v $PWD:/src -w /src quay.io/pypa/manylinux2014_i686 bash -c "
112+ yum install -y wget || true
113+ wget https://go.dev/dl/go1.25.3.linux-386.tar.gz && \
114+ tar -C /usr/local -xzf go1.25.3.linux-386.tar.gz && \
115+ export PATH=/usr/local/go/bin:\$PATH && \
116+ CGO_ENABLED=1 CC=gcc GOOS=linux GOARCH=386 \
117+ go build -buildmode=c-shared -ldflags='-s -w' -trimpath \
118+ -o libexcelize.386.linux.so main.go && \
105119 rm -f libexcelize.*.h
106- elif [[ "$RUNNER_OS" == "macOS" ]]; then
107- /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
108- brew tap messense/macos-cross-toolchains
109- brew install FiloSottile/musl-cross/musl-cross mingw-w64
110- wget https://github.com/mstorsjo/llvm-mingw/releases/download/20250709/llvm-mingw-20250709-ucrt-macos-universal.tar.xz
111- tar -xzf llvm-mingw-20250709-ucrt-macos-universal.tar.xz
112- export PATH="$(pwd)/llvm-mingw-20250709-ucrt-macos-universal/bin:$PATH"
113- CC=aarch64-linux-musl-gcc GOOS=linux GOARCH=arm64 go build -ldflags "-s -w" -buildmode=c-shared -o libexcelize.arm64.linux.so main.go
114- CC=x86_64-w64-mingw32-gcc GOOS=windows GOARCH=amd64 go build -ldflags "-s -w" -buildmode=c-shared -o libexcelize.amd64.windows.dll main.go
115- CC=i686-w64-mingw32-gcc GOOS=windows GOARCH=386 go build -ldflags "-s -w" -buildmode=c-shared -o libexcelize.386.windows.dll main.go
116- CC=aarch64-w64-mingw32-gcc GOOS=windows GOARCH=arm64 go build -ldflags "-s -w" -buildmode=c-shared -o libexcelize.arm64.windows.dll main.go
117- CC=gcc GOOS=darwin GOARCH=arm64 go build -ldflags "-s -w" -buildmode=c-shared -o libexcelize.arm64.darwin.dylib main.go
118- CC=gcc GOOS=darwin GOARCH=amd64 go build -ldflags "-s -w" -buildmode=c-shared -o libexcelize.amd64.darwin.dylib main.go
120+ "
121+
122+ - name : Build Linux ARM64 Shared Library
123+ if : matrix.os == 'ubuntu-24.04-arm'
124+ env :
125+ CGO_ENABLED : 1
126+ run : |
127+ docker run --rm -v $PWD:/src -w /src quay.io/pypa/manylinux2014_aarch64 bash -c "
128+ yum install -y wget || true
129+ wget https://go.dev/dl/go1.25.3.linux-arm64.tar.gz && \
130+ tar -C /usr/local -xzf go1.25.3.linux-arm64.tar.gz && \
131+ export PATH=/usr/local/go/bin:\$PATH && \
132+ CGO_ENABLED=1 CC=gcc GOOS=linux GOARCH=arm64 \
133+ go build -buildmode=c-shared -ldflags='-s -w' -trimpath \
134+ -o libexcelize.arm64.linux.so main.go && \
119135 rm -f libexcelize.*.h
120- fi
136+ "
137+
138+ - name : Build Shared Library
139+ if : matrix.os == 'macos-latest'
140+ env :
141+ CGO_ENABLED : 1
142+ run : |
143+ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
144+ wget https://github.com/mstorsjo/llvm-mingw/releases/download/20250709/llvm-mingw-20250709-ucrt-macos-universal.tar.xz
145+ tar -xzf llvm-mingw-20250709-ucrt-macos-universal.tar.xz
146+ export PATH="$(pwd)/llvm-mingw-20250709-ucrt-macos-universal/bin:$PATH"
147+ CC=x86_64-w64-mingw32-gcc GOOS=windows GOARCH=amd64 go build -ldflags "-s -w" -buildmode=c-shared -trimpath -o libexcelize.amd64.windows.dll main.go
148+ CC=i686-w64-mingw32-gcc GOOS=windows GOARCH=386 go build -ldflags "-s -w" -buildmode=c-shared -trimpath -o libexcelize.386.windows.dll main.go
149+ CC=aarch64-w64-mingw32-gcc GOOS=windows GOARCH=arm64 go build -ldflags "-s -w" -buildmode=c-shared -trimpath -o libexcelize.arm64.windows.dll main.go
150+ CC=gcc GOOS=darwin GOARCH=arm64 go build -ldflags "-s -w" -buildmode=c-shared -trimpath -o libexcelize.arm64.darwin.dylib main.go
151+ CC=gcc GOOS=darwin GOARCH=amd64 go build -ldflags "-s -w" -buildmode=c-shared -trimpath -o libexcelize.amd64.darwin.dylib main.go
152+ rm -f libexcelize.*.h
121153
122154 - name : Upload Linux Artifacts
123155 if : matrix.os == 'ubuntu-24.04'
@@ -128,13 +160,20 @@ jobs:
128160 libexcelize.386.linux.so
129161 libexcelize.amd64.linux.so
130162
163+ - name : Upload Linux ARM64 Artifacts
164+ if : matrix.os == 'ubuntu-24.04-arm'
165+ uses : actions/upload-artifact@v4
166+ with :
167+ name : linux-arm64-artifacts
168+ path : |
169+ libexcelize.arm64.linux.so
170+
131171 - name : Upload Darwin Artifacts
132172 if : matrix.os == 'macos-latest'
133173 uses : actions/upload-artifact@v4
134174 with :
135175 name : darwin-artifacts
136176 path : |
137- libexcelize.arm64.linux.so
138177 libexcelize.amd64.windows.dll
139178 libexcelize.386.windows.dll
140179 libexcelize.arm64.windows.dll
0 commit comments