wip: ci Win #78
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: 'build' | |
on: [push, pull_request] | |
jobs: | |
Vars: | |
runs-on: ubuntu-latest | |
outputs: | |
VERSION: ${{ steps.Vars.outputs.VERSION }} | |
PROJECT_NAME: ${{ steps.Vars.outputs.PROJECT_NAME }} | |
REPOSITORY_URL: ${{ steps.Vars.outputs.REPOSITORY_URL }} | |
steps: | |
- id: Vars | |
run: | | |
echo "ref_type: ${{ github.ref_type }}" | |
echo "ref: ${{ github.ref }}" | |
echo "sha: ${{ github.sha }}" | |
echo "" | |
if [[ "${{ github.ref_type }}" == "tag" ]]; then | |
VERSION=${{ github.ref }} | |
VERSION=${VERSION#"refs/tags/"} | |
VERSION=${VERSION//"-"/"_"} # replace dashes with underscores in the version | |
else | |
VERSION=${{ github.sha }} | |
VERSION=g${VERSION:0:8} | |
fi | |
echo "VERSION=$VERSION" >> "$GITHUB_OUTPUT" | |
echo $VERSION | |
OWNER=${{ github.repository_owner }} | |
FULLNAME=${{ github.repository }} | |
PROJECT_NAME=${FULLNAME#"$OWNER/"} | |
echo "PROJECT_NAME=$PROJECT_NAME" >> "$GITHUB_OUTPUT" | |
echo $PROJECT_NAME | |
REPOSITORY_URL=${{ github.server_url }}/${{ github.repository }} | |
echo "REPOSITORY_URL=$REPOSITORY_URL" >> "$GITHUB_OUTPUT" | |
echo $REPOSITORY_URL | |
Build-Linux: | |
needs: [ Vars ] | |
strategy: | |
fail-fast: false | |
matrix: | |
platform: [x86_64-linux-gnu, aarch64-linux-gnu] | |
target: [xtensa-softmmu, riscv32-softmmu] | |
include: | |
- platform: x86_64-linux-gnu | |
runs_on: ubuntu-20.04 | |
run_prerequisites: "sudo ./.github/workflows/scripts/prerequisites-linux-amd64.sh" | |
run_configure: "./.github/workflows/scripts/configure-linux-amd64.sh" | |
- platform: aarch64-linux-gnu | |
runs_on: ubuntu-20.04 | |
# Used the minimal docker-hub's image instead of the heavy GitHub's one for correct croossbuild prerequisites | |
container: ubuntu:20.04 | |
run_prerequisites: "./.github/workflows/scripts/prerequisites-cross-linux-arm64.sh" | |
run_configure: "./.github/workflows/scripts/configure-cross-linux-arm64.sh" | |
runs-on: ${{ matrix.runs_on }} | |
container: ${{ matrix.container }} | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Install prerequisites (${{ matrix.target }} @ ${{ matrix.platform }}) | |
run: | | |
${{ matrix.run_prerequisites }} | |
- name: Configure (${{ matrix.target }} @ ${{ matrix.platform }}) | |
env: | |
VERSION: ${{ needs.Vars.outputs.VERSION }} | |
TARGET: ${{ matrix.target }} | |
run: | | |
${{ matrix.run_configure }} | |
- name: Build (${{ matrix.target }} @ ${{ matrix.platform }}) | |
run: | | |
ninja -C build install | |
- name: Package (${{ matrix.target }} @ ${{ matrix.platform }}) | |
env: | |
VERSION: ${{ needs.Vars.outputs.VERSION }} | |
PROJECT_NAME: ${{ needs.Vars.outputs.PROJECT_NAME }} | |
PLATFORM: ${{ matrix.platform }} | |
TARGET: ${{ matrix.target }} | |
run: | | |
find $PWD/install/qemu/share/qemu/ -maxdepth 1 -mindepth 1 -not -name 'esp*.bin' -exec rm -rf {} \; | |
export DIST_DIR=${PWD}/dist | |
mkdir -p ${DIST_DIR} | |
cd $PWD/install | |
ARCHIVE_NAME=${PROJECT_NAME}-${TARGET}-${VERSION}-${PLATFORM}.tar.bz2 | |
tar -cjvf ${DIST_DIR}/${ARCHIVE_NAME} qemu > ${DIST_DIR}/dist-list-${TARGET}-${PLATFORM}.txt 2>&1 | |
echo "${ARCHIVE_NAME}" > ${DIST_DIR}/file_${PLATFORM}_${TARGET} | |
- name: Artifacts (${{ matrix.target }} @ ${{ matrix.platform }}) | |
uses: actions/upload-artifact@v3 | |
with: | |
name: dist-qemu | |
path: | | |
dist | |
Build-Windows: | |
needs: [ Vars ] | |
strategy: | |
fail-fast: false | |
matrix: | |
platform: [win-x86_64] | |
target: [xtensa-softmmu, riscv32-softmmu] | |
include: | |
- platform: win-x86_64 | |
runs_on: windows-2022 | |
extra_configure_args: "" | |
shell: msys2 {0} | |
runs-on: ${{ matrix.runs_on }} | |
defaults: | |
run: | |
shell: ${{ matrix.shell }} | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Install prerequisites (${{ matrix.target }} @ ${{ matrix.platform }}) | |
uses: msys2/setup-msys2@v2 | |
with: | |
cache: true | |
msystem: mingw64 | |
install: >- | |
mingw-w64-x86_64-python | |
mingw-w64-x86_64-ninja | |
mingw-w64-x86_64-gcc | |
mingw-w64-x86_64-glib2 | |
mingw-w64-x86_64-pkg-config | |
mingw-w64-x86_64-pixman | |
mingw-w64-x86_64-libgcrypt | |
mingw-w64-x86_64-libslirp | |
diffutils git | |
- name: Configure (${{ matrix.target }} @ ${{ matrix.platform }}) | |
run: | | |
which -a python | |
which -a python3 | |
python3 --version | |
./configure \ | |
--prefix=$PWD/install/qemu \ | |
--target-list=xtensa-softmmu \ | |
--with-pkgversion="dev-55" \ | |
--enable-gcrypt \ | |
--enable-slirp \ | |
--disable-user \ | |
--disable-capstone \ | |
--disable-vnc \ | |
--disable-sdl \ | |
--disable-docs \ | |
|| (cat meson-logs/meson-log.txt && false) | |
- name: Build (${{ matrix.target }} @ ${{ matrix.platform }}) | |
run: | | |
ninja -C build install | |
Upload: | |
if: startsWith(github.ref, 'refs/tags/') | |
needs: [ Vars, Build-Linux ] | |
runs-on: ubuntu-latest | |
steps : | |
- name: Create a source archive | |
id: create-source | |
env: | |
VERSION: ${{ needs.Vars.outputs.VERSION }} | |
PROJECT_NAME: ${{ needs.Vars.outputs.PROJECT_NAME }} | |
REPOSITORY_URL: ${{ needs.Vars.outputs.REPOSITORY_URL }} | |
run: | | |
export RELEASE_CHECKSUM_FILE="${PROJECT_NAME}-${VERSION}-checksum.sha256" | |
echo "RELEASE_CHECKSUM_FILE=$RELEASE_CHECKSUM_FILE" >> "$GITHUB_OUTPUT" | |
RELEASE_SRC_NAME="${PROJECT_NAME}-${VERSION}-src" | |
export RELEASE_SRC_FILE="${PROJECT_NAME}-${VERSION}-src.tar.bz2" | |
echo "RELEASE_SRC_FILE=$RELEASE_SRC_FILE" >> "$GITHUB_OUTPUT" | |
rm -rf -- "${RELEASE_SRC_NAME}" "${RELEASE_SRC_FILE}" | |
git clone --quiet --depth 1 --recurse-submodules --shallow-submodules "${REPOSITORY_URL}" "${RELEASE_SRC_NAME}" | |
find "${RELEASE_SRC_NAME}" -name ".git" -type d -exec rm -rf -- "{}" + | |
find "${RELEASE_SRC_NAME}" -name .git\* -exec rm -rf -- {} + | |
tar -cjvf "${RELEASE_SRC_FILE}" "${RELEASE_SRC_NAME}" > src-list.txt 2>&1 | |
rm -rf -- "${RELEASE_SRC_NAME}" | |
ls -l | |
- name: Source list artifact | |
uses: actions/upload-artifact@v3 | |
with: | |
name: src-list | |
path: | | |
src-list.txt | |
- uses: actions/download-artifact@v3 | |
with: | |
name: dist-qemu | |
- name: Create a checksum file | |
env: | |
RELEASE_CHECKSUM_FILE: ${{ steps.create-source.outputs.RELEASE_CHECKSUM_FILE }} | |
RELEASE_SRC_FILE: ${{ steps.create-source.outputs.RELEASE_SRC_FILE }} | |
run: | | |
ls -l | |
DIST_FILE_LIST=$(find . -name file_\* -exec cat {} \+) | |
DIST_FILE_LIST="${DIST_FILE_LIST} ${RELEASE_SRC_FILE}" | |
for n in $DIST_FILE_LIST; do | |
stat -c%s "${n}" | |
sz=$(stat -c%s "${n}") | |
printf "# %s: %s bytes\n" "${n}" "${sz}" >> "${RELEASE_CHECKSUM_FILE}" | |
sha256sum -b "${n}" >> "${RELEASE_CHECKSUM_FILE}" | |
done | |
DIST_FILE_LIST="${DIST_FILE_LIST} ${RELEASE_CHECKSUM_FILE}" | |
# remove new lines from file list | |
DIST_FILE_LIST="${DIST_FILE_LIST//$'\n'/ }" | |
cat "${RELEASE_CHECKSUM_FILE}" | |
rm -rf -- upload && mkdir -p upload && mv -v ${DIST_FILE_LIST} upload/ | |
- name: Release | |
uses: softprops/action-gh-release@v1 | |
with: | |
files: upload/* |