mpv gcc #65
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: mpv gcc | |
defaults: | |
run: | |
shell: bash | |
on: | |
workflow_dispatch: | |
inputs: | |
command: | |
description: 'Run custom command before building' | |
required: false | |
type: string | |
sourceforge: | |
description: 'Upload to Sourceforge' | |
required: false | |
default: false | |
type: boolean | |
github_release: | |
description: 'Upload to Github release' | |
required: false | |
default: false | |
type: boolean | |
mpv_tarball: | |
description: 'Build latest mpv tarball' | |
required: false | |
default: false | |
type: boolean | |
jobs: | |
build_mpv: | |
name: Building mpv | |
runs-on: ubuntu-latest | |
strategy: | |
fail-fast: false | |
matrix: | |
bit: [x86_64] | |
env: | |
BIT: ${{ matrix.bit }} | |
container: | |
image: docker://ghcr.io/shinchiro/archlinux:latest | |
outputs: | |
mpv_ver: ${{ steps.build_mpv_step.outputs.mpv_ver }} | |
steps: | |
- name: Init variable | |
run: | | |
if [[ $BIT == "i686" ]]; then | |
echo "arch=i686" >> $GITHUB_ENV | |
elif [[ $BIT == "x86_64" ]]; then | |
echo "arch=x86_64" >> $GITHUB_ENV | |
elif [[ $BIT == "x86_64_v3" ]]; then | |
echo "arch=x86_64" >> $GITHUB_ENV | |
echo "gcc_arch=-DGCC_ARCH=x86-64-v3" >> $GITHUB_ENV | |
echo "x86_64_level=-v3" >> $GITHUB_ENV | |
fi | |
- name: Setup git config | |
run: | | |
git config --global user.name "github-actions" | |
git config --global user.email "41898282+github-actions[bot]@users.noreply.github.com" | |
git config --global pull.rebase true | |
git config --global rebase.autoStash true | |
git config --global fetch.prune true | |
git config --global --add safe.directory $PWD | |
- uses: actions/checkout@main | |
with: | |
ref: master | |
- name: Loading ${{ matrix.bit }} toolchain cache | |
uses: actions/cache/restore@main | |
with: | |
path: build_${{ matrix.bit }} | |
key: ${{ secrets.CACHE_VERSION }}-gcc-${{ matrix.bit }}_toolchain-${{ github.run_id }} | |
restore-keys: | | |
${{ secrets.CACHE_VERSION }}-gcc-${{ matrix.bit }}_toolchain | |
- name: Loading repository cache | |
uses: actions/cache/restore@main | |
with: | |
path: src_packages | |
key: ${{ secrets.CACHE_VERSION }}-repository-${{ github.run_id }} | |
restore-keys: | | |
${{ secrets.CACHE_VERSION }}-repository | |
- name: Loading rustup cache | |
uses: actions/cache/restore@main | |
with: | |
path: | | |
clang_root | |
key: ${{ secrets.CACHE_VERSION }}-clang_root-${{ github.run_id }} | |
restore-keys: | | |
${{ secrets.CACHE_VERSION }}-clang_root | |
- name: Running custom command | |
if: ${{ github.event.inputs.command != '' }} | |
continue-on-error: true | |
run: ${{ github.event.inputs.command }} | |
- name: Downloading source | |
run: | | |
cmake -DTARGET_ARCH=${{ env.arch }}-w64-mingw32 ${{ env.gcc_arch }} -DALWAYS_REMOVE_BUILDFILES=ON -DSINGLE_SOURCE_LOCATION=$PWD/src_packages -DRUSTUP_LOCATION=$PWD/clang_root/install_rustup -G Ninja -B build_$BIT -S $PWD | |
ninja -C build_$BIT download || true | |
- name: Building toolchain | |
run: | | |
if [[ ! "$(ls -A build_$BIT/install/bin)" ]]; then ninja -C build_$BIT gcc; fi | |
- name: Building mpv | |
id: build_mpv_step | |
env: | |
MPV_TARBALL: ${{ github.event.inputs.mpv_tarball }} | |
run: | | |
ninja -C build_$BIT update | |
$MPV_TARBALL && ninja -C build_$BIT mpv-release || ninja -C build_$BIT mpv | |
$MPV_TARBALL && echo "mpv_ver=$(cat build_$BIT/packages/mpv-release-prefix/VERSION)" >> $GITHUB_OUTPUT || echo "mpv_ver=UNKNOWN" >> $GITHUB_OUTPUT | |
- name: Packaging mpv | |
run: | | |
mkdir -p release_$BIT | |
rm -rf build_$BIT/mpv-debug*; ninja -C build_$BIT mpv-packaging; mv build_$BIT/mpv*.7z release_$BIT | |
- name: Copying ffmpeg | |
run: | | |
hash=$(git -C src_packages/ffmpeg rev-parse --short HEAD) | |
7z a -m0=lzma2 -mx=9 -ms=on release_$BIT/ffmpeg-${{ env.arch }}${{ env.x86_64_level }}-git-$hash.7z ./build_$BIT/install/mingw/bin/ffmpeg.exe | |
- name: Collecting logs | |
if: always() | |
run: | | |
mkdir -p build_${BIT}_logs | |
cp -fr $(find build_$BIT -type f -iname "*-*.log" -or -wholename "*/ffbuild/config.log") build_${BIT}_logs || true | |
7z a -m0=lzma2 -mx=9 -ms=on logs.7z build*logs | |
- name: Uploading logs | |
uses: actions/upload-artifact@master | |
if: always() | |
with: | |
name: mpv-${{ matrix.bit }}-logs | |
path: logs.7z | |
retention-days: 1 | |
- name: Uploading ${{ matrix.bit }} build | |
uses: actions/upload-artifact@master | |
with: | |
name: mpv-${{ matrix.bit }} | |
path: release_${{ matrix.bit }}/mpv-${{ env.arch }}* | |
- name: Cleaning build directory | |
if: always() | |
run: | | |
rm -rf build_$BIT/mpv* | |
- name: Cleaning rust toolchain directory | |
if: always() | |
run: | | |
ninja -C build_$BIT cargo-clean | |
- name: Saving ${{ matrix.bit }} toolchain cache | |
uses: actions/cache/save@main | |
if: always() | |
with: | |
path: build_${{ matrix.bit }} | |
key: ${{ secrets.CACHE_VERSION }}-gcc-${{ matrix.bit }}_toolchain-${{ github.run_id }} | |
- name: Saving repository cache | |
uses: actions/cache/save@main | |
if: false | |
with: | |
path: src_packages | |
key: ${{ secrets.CACHE_VERSION }}-repository-${{ github.run_id }} | |
- name: Saving release_${{ matrix.bit }} cache | |
uses: actions/cache/save@main | |
if: ${{ github.event.inputs.github_release == 'true' }} | |
with: | |
path: release_${{ matrix.bit }} | |
key: ${{ secrets.CACHE_VERSION }}-gcc-release_${{ matrix.bit }}-${{ github.run_id }} | |
release: | |
name: Upload releases | |
runs-on: ubuntu-latest | |
needs: build_mpv | |
if: ${{ github.event.inputs.github_release == 'true' }} | |
env: | |
GH_TOKEN: ${{ github.token }} | |
CURL_RETRIES: "--connect-timeout 60 --retry 999 --retry-delay 5 --retry-all-errors" | |
release_x86_64_key: ${{ secrets.CACHE_VERSION }}-gcc-release_x86_64-${{ github.run_id }} | |
container: | |
image: docker://alpine:latest | |
steps: | |
- name: Installing dependencies | |
shell: sh | |
run: | | |
apk add --update --no-cache bash git file openssh curl tar zstd jq | |
apk add perl-file-rename --repository=https://dl-cdn.alpinelinux.org/alpine/edge/testing | |
git config --global pull.rebase true | |
git config --global fetch.prune true | |
git config --global --add safe.directory $PWD | |
- uses: actions/checkout@main | |
with: | |
ref: master | |
- name: Loading release_x86_64 cache | |
uses: actions/cache/restore@main | |
with: | |
path: release_x86_64 | |
key: ${{ env.release_x86_64_key }} | |
- name: Moving archives | |
run: | | |
mkdir -p release | |
mv release_x86_64/* release | |
rm release/ffmpeg*.7z | |
file-rename 's/mpv-(.*)x86_64-(.+)/mpv-${1}x86_64-gcc-${2}/s' $PWD/release/mpv*.7z | |
du -ah release/* | |
- name: Uploading packages to Sourceforge | |
id: upload_packages_sf | |
if: false | |
continue-on-error: true | |
env: | |
MPV_VER: ${{ needs.build_mpv.outputs.mpv_ver }} | |
run: | | |
mkdir -p /root/.ssh/ | |
echo "${{ secrets.SF_PRIVATE_KEY }}" > sf_key | |
pubkey=$(cat <<END | |
frs.sourceforge.net ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOQD35Ujalhh+JJkPvMckDlhu4dS7WH6NsOJ15iGCJLC | |
END | |
) | |
echo $pubkey > /root/.ssh/known_hosts | |
chmod 400 sf_key | |
chmod -R 700 /root | |
sftp -i sf_key [email protected]:/home/frs/project/mpv-player-windows <<END | |
put release/mpv-dev* libmpv | |
put release/mpv-i686* 32bit | |
put release/mpv-x86_64-[!v3]* 64bit | |
put release/mpv-x86_64-v3* 64bit-v3 | |
put release/mpv-$MPV_VER* release | |
END | |
- name: Uploading packages to Github release | |
id: upload_packages_gh | |
if: ${{ github.event.inputs.github_release == 'true' && github.event.inputs.mpv_tarball == 'false' }} | |
continue-on-error: true | |
run: | | |
id=$(curl -u shinchiro:$GH_TOKEN $CURL_RETRIES -s -X GET -H "Accept: application/vnd.github.v3+json" https://api.github.com/repos/shinchiro/mpv-winbuild-cmake/releases/latest | jq -r '.id') | |
for file in release/*.7z; do curl -u shinchiro:$GH_TOKEN $CURL_RETRIES -X POST -H "Accept: application/vnd.github.v3+json" -H "Content-Type: $(file -b --mime-type $file)" https://uploads.github.com/repos/shinchiro/mpv-winbuild-cmake/releases/$id/assets?name=$(basename $file) --data-binary @$file; done | |
- name: Pruning tags | |
if: false | |
run: | | |
# Keep latest 30 tags/releases | |
git fetch --tags | |
tag_list=($(git tag | sort -r)) | |
old=${tag_list[@]:30} | |
for tag in ${old[@]}; do | |
id=$(curl -u shinchiro:$GH_TOKEN $CURL_RETRIES -s -X GET -H "Accept: application/vnd.github.v3+json" https://api.github.com/repos/shinchiro/mpv-winbuild-cmake/releases/tags/$tag | jq -r '.id') | |
curl -u shinchiro:$GH_TOKEN $CURL_RETRIES -s -X DELETE -H "Accept: application/vnd.github.v3+json" https://api.github.com/repos/shinchiro/mpv-winbuild-cmake/releases/$id | |
git tag -d $tag | |
done | |
git push --tags --prune https://shinchiro:[email protected]/shinchiro/mpv-winbuild-cmake | |
- name: Delete releases cache | |
if: ${{ github.event.inputs.github_release == 'false' || steps.upload_packages_gh.outcome == 'success' }} | |
run: | | |
curl -u shinchiro:$GH_TOKEN $CURL_RETRIES -s -o /dev/null -X DELETE -H "Accept: application/vnd.github.v3+json" https://api.github.com/repos/shinchiro/mpv-winbuild-cmake/actions/caches?key=$release_x86_64_key | |
gist: | |
name: Gist | |
runs-on: ubuntu-latest | |
needs: build_mpv | |
if: false | |
env: | |
GH_TOKEN: ${{ secrets.GIST_TOKEN }} | |
RUN_ID: ${{ github.run_id }} | |
steps: | |
- name: Setup git credentials | |
run: | | |
git config --global user.name "github-actions" | |
git config --global user.email "41898282+github-actions[bot]@users.noreply.github.com" | |
- name: Upload job logs to gist | |
run: | | |
url=$(curl -su shinchiro:$GH_TOKEN -X GET -H "Accept: application/vnd.github.v3+json" https://api.github.com/repos/shinchiro/mpv-winbuild-cmake/actions/runs/$RUN_ID/jobs | jq -r '.jobs[0] | .url') | |
curl -sLu shinchiro:$GH_TOKEN -X GET -H "Accept: application/vnd.github.v3+json" $url/logs -o mpv_log | |
git clone --depth 1 https://shinchiro:[email protected]/90308c6632c9010d03b325c9ca6a4b6f job_log | |
cp -f mpv_log job_log/mpv_log | |
git -C job_log add . | |
git -C job_log commit --amend --no-edit | |
git -C job_log push -f https://shinchiro:[email protected]/90308c6632c9010d03b325c9ca6a4b6f |