Skip to content

Build and Release Wine x86_64 #261

Build and Release Wine x86_64

Build and Release Wine x86_64 #261

name: Build and Release Wine x86_64
on:
workflow_dispatch:
schedule:
- cron: '0 0 * * *'
push:
tags:
- '*'
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v2
- name: list debug
run: |
ls -la
echo $PWD
- name: Setup Dependencies
run: |
mkdir ~/finalbuild
sudo dpkg --add-architecture i386
sudo apt update
sudo apt-get install --reinstall python3-apt
sudo apt install -y wine-stable wine32 wine64 libwine libwine:i386 fonts-wine samba-dev libcapi20-3:i386 libgstreamer-plugins-base1.0-dev:i386 libgphoto2-dev:i386 libv4l-dev:i386 libusb-1.0-0:i386 opencl-headers build-essential gcc g++ make flex bison libc6-dev libncurses5-dev libfreetype6-dev libxml2-dev libx11-dev libxext-dev libxrender-dev libxrandr-dev libxcursor-dev libxi-dev libxinerama-dev libxxf86vm-dev libxss-dev libxt-dev libxv-dev libxcomposite-dev libxslt1-dev libosmesa6-dev libpcap0.8-dev libdbus-1-dev libncurses5-dev libncursesw5-dev libpulse-dev libaudio-dev libsdl2-dev libvulkan-dev libgnutls28-dev libncurses-dev libv4l-dev liblcms2-dev libtiff5-dev libmpg123-dev libopenal-dev libldap2-dev libcapi20-dev libcups2-dev libgphoto2-dev libgstreamer-plugins-base1.0-dev libgstreamer1.0-dev libusb-1.0-0-dev libudev-dev libkrb5-dev ocl-icd-opencl-dev libgl1-mesa-dev libglu1-mesa-dev libosmesa6-dev libxcomposite-dev libxinerama-dev gcc-multilib g++-multilib libglu1-mesa-dev:i386 libosmesa6-dev:i386 libgl1-mesa-dri:i386 libgl1-mesa-glx:i386 mesa-vulkan-drivers:i386 libvulkan1:i386 libgnutls28-dev:i386 libwayland-dev libpcap-dev libpcsclite-dev libsane-dev libunwind-dev libfreetype6-dev:i386 libxcursor-dev:i386 libxi-dev:i386 libxrandr-dev:i386 libxfixes-dev:i386 libxinerama-dev:i386 libxcomposite-dev:i386 libxrender-dev:i386 libasound2-dev:i386 libpulse-dev:i386 libdbus-1-dev:i386 libvulkan-dev:i386 libudev-dev:i386 libsdl2-dev:i386 libcups2-dev:i386 libfontconfig1-dev:i386
- name: Clone Wine
run: git clone git://source.winehq.org/git/wine.git ~/wine-dirs/wine
- name: Extract Wine Version
id: wine_version
run: |
VERSION=$(cat ~/wine-dirs/wine/VERSION | sed 's/Wine version //') # Enlève "Wine version " du contenu
echo "Extracted version: $VERSION"
if [ -z "$VERSION" ]; then
echo "Failed to extract Wine version."
exit 1
fi
echo "::set-output name=version::$VERSION"
- name: Get Latest Release Version
id: latest_release
run: |
LATEST_RELEASE_TAG=$(curl -s https://api.github.com/repos/${{ github.repository }}/releases/latest | jq -r '.tag_name')
echo "Latest release tag: $LATEST_RELEASE_TAG"
echo "::set-output name=tag::$LATEST_RELEASE_TAG"
- name: Compare Versions
id: compare_versions
run: |
if [ "silverwine-${{ steps.wine_version.outputs.version }}" = "${{ steps.latest_release.outputs.tag }}" ]; then
echo "Version is the same as the latest release."
echo "::set-output name=should_skip::true"
else
echo "::set-output name=should_skip::false"
fi
- name: Build Wine64
if: steps.compare_versions.outputs.should_skip == 'false'
run: |
mkdir ~/wine64
cd ~/wine64
../wine-dirs/wine/configure --enable-win64 # Configure pour x86_64
make -j$(nproc)
DESTDIR="$HOME/finalbuild" make -j$(nproc) install
- name: Build Wine32
if: steps.compare_versions.outputs.should_skip == 'false'
run: |
mkdir ~/wine32
cd ~/wine32
PKG_CONFIG_PATH=/usr/lib/pkgconfig ../wine-dirs/wine/configure CFLAGS="-march=native -O3 -pipe -fstack-protector-strong -I/usr/include/freetype2 -I/usr/lib/glib-2.0/include -I/usr/include/glib-2.0 -I/usr/include/gstreamer-1.0" --with-wine64=../wine64
make -j$(nproc)
DESTDIR="$HOME/finalbuild" make -j$(nproc) install
- name: Download and add Dependencies
if: steps.compare_versions.outputs.should_skip == 'false'
run: |
docker run --rm -v ${{ github.workspace }}:/workspace fedora /bin/bash -c "\
dnf install -y dnf-plugins-core && \
dnf config-manager --add-repo https://dl.winehq.org/wine-builds/fedora/39/winehq.repo && \
dnf install -y diffutils && \
ls /lib > ~/lib_before.txt && \
ls /lib64 > ~/lib64_before.txt && \
# dnf install -y wine-devel && \
# dnf repoquery --requires --resolve wine-devel | xargs dnf download --destdir /workspace/fedoradeps
dnf install -y wine-devel && \
ls /lib > ~/lib_after.txt && \
ls /lib64 > ~/lib64_after.txt && \
echo 'New libs list saved' && \
echo 'Checking existence of /lib before and after lists' && \
ls -l ~/lib_before.txt && \
ls -l ~/lib_after.txt && \
echo 'Checking differences in /lib' && \
diff ~/lib_before.txt ~/lib_after.txt > ~/lib_diff.txt || true && \
echo 'Diff command for /lib completed with exit status $?' && \
echo 'Checking existence of /lib64 before and after lists' && \
ls -l ~/lib64_before.txt && \
ls -l ~/lib64_after.txt && \
echo 'Checking differences in /lib64' && \
diff ~/lib64_before.txt ~/lib64_after.txt > ~/lib64_diff.txt || true && \
echo 'Diff command for /lib64 completed with exit status $?' && \
echo 'Diff libs list saved' && \
depsfolder=/workspace/deps && \
mkdir -p \$depsfolder/lib && \
mkdir -p \$depsfolder/lib64 && \
grep '^>' ~/lib_diff.txt | sed 's/> //' | while read filename; do \
cp -r \"/lib/\$filename\" \"\$depsfolder/lib/\"; \
done && \
grep '^>' ~/lib64_diff.txt | sed 's/> //' | while read filename; do \
cp -r \"/lib64/\$filename\" \"\$depsfolder/lib64/\"; \
done"
- name: Copy Dependencies to build
if: steps.compare_versions.outputs.should_skip == 'false'
run: |
mkdir -p ~/finalbuild/usr/local/deps
cp -r ${{ github.workspace }}/deps/lib/ ~/finalbuild/usr/local/deps
cp -r ${{ github.workspace }}/deps/lib64/ ~/finalbuild/usr/local/deps
cp /home/runner/work/silverwine/silverwine/silverwine ~/finalbuild/usr/local/bin
- name: Package Wine
if: steps.compare_versions.outputs.should_skip == 'false'
run: |
cd ~/
tar -czvf silverwine-${{ steps.wine_version.outputs.version }}-x86_64.tar.gz -C ~/finalbuild/usr/local .
ls -l
pwd
- name: Create Release
if: steps.compare_versions.outputs.should_skip == 'false'
id: create_release
uses: actions/create-release@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: silverwine-${{ steps.wine_version.outputs.version }}
release_name: Silverwine ${{ steps.wine_version.outputs.version }}
draft: false
prerelease: false
- name: Upload Wine as Release Asset
if: steps.compare_versions.outputs.should_skip == 'false'
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_path: "/home/runner/silverwine-${{ steps.wine_version.outputs.version }}-x86_64.tar.gz"
asset_name: silverwine-${{ steps.wine_version.outputs.version }}-x86_64.tar.gz
asset_content_type: application/gzip