Skip to content

Build L-SMASH Works #1003

Build L-SMASH Works

Build L-SMASH Works #1003

Workflow file for this run

name: Build L-SMASH Works
on:
push:
branches:
- master
workflow_dispatch:
schedule:
- cron: '0 0 * * 0,4'
jobs:
build:
env:
CFLAGS: -O2
CXXFLAGS: -O2
runs-on: ubuntu-24.04
strategy:
matrix:
lsw_config:
- { author: VFR-maniac, ffmpeg_version: "4.4", ffmpeg_patch: " (patched)", ffmpeg_extra_flags: "--enable-avresample" }
- { author: Mr-Ojii, ffmpeg_version: "5.0", ffmpeg_patch: "", ffmpeg_extra_flags: ""}
l-smash_author: [Mr-Ojii, vimeo]
cpu_config:
- { cpu: i686, arch: x86, user_arch: x86, vpx_target: x86-win32-gcc }
- { cpu: x86_64, arch: x86_64, user_arch: x64, vpx_target: x86_64-win64-gcc }
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Install depend lib
run: |
sudo apt-get update -y
sudo apt-get install -y autoconf cmake libtool nasm mingw-w64 meson ninja-build pkg-config
- name: Create pkg-config symbolic link
run: sudo ln -s /usr/bin/pkg-config /usr/bin/${{ matrix.cpu_config.cpu }}-w64-mingw32-pkg-config
- name: Set git config
run: |
git config --global user.name Mr-Ojii
git config --global user.email okaschan@gmail.com
- name: Install zlib
run: |
cd ${{ github.workspace }}
git clone https://github.com/madler/zlib.git --depth 1
cd zlib
CROSS_PREFIX=${{ matrix.cpu_config.cpu }}-w64-mingw32- ./configure --static --prefix=${{ github.workspace }}/lsw
make -j$(nproc)
make install -j$(nproc)
- name: Install Game Music Emu
run: |
cd ${{ github.workspace }}
git clone https://bitbucket.org/mpyne/game-music-emu.git --depth 1
cd game-music-emu
# cmake -S . -B build -DCMAKE_BUILD_TYPE=Release -DENABLE_UBSAN=OFF -DBUILD_SHARED_LIBS=OFF -DCMAKE_TOOLCHAIN_FILE=${{ github.workspace }}/cmake_toolchainfile/${{ matrix.cpu_config.cpu }}.cmake
# cmake --build build -j $(nproc)
# cmake --install build --prefix ${{ github.workspace }}/lsw
- name: Install dav1d
run: |
cd ${{ github.workspace }}
git clone https://code.videolan.org/videolan/dav1d.git --depth 1
cd dav1d
mkdir build && cd build
meson setup --cross-file=../package/crossfiles/${{ matrix.cpu_config.cpu }}-w64-mingw32.meson --buildtype release --default-library=static -Denable_tests=false --prefix=${{ github.workspace }}/lsw ..
ninja
ninja install
- name: Install libvpx
run: |
cd ${{ github.workspace }}
git clone https://github.com/webmproject/libvpx.git --depth 1
mkdir libvpx/builds && cd libvpx/builds
CROSS=${{ matrix.cpu_config.cpu }}-w64-mingw32- ../configure --target=${{ matrix.cpu_config.vpx_target }} --enable-vp9-highbitdepth --disable-docs --disable-tools --disable-examples --disable-webm-io --disable-vp8-encoder --disable-vp9-encoder --prefix=${{ github.workspace }}/lsw
make -j$(nproc)
make install -j$(nproc)
- name: Install nv-codec-headers
run: |
cd ${{ github.workspace }}
git clone https://github.com/FFmpeg/nv-codec-headers.git --depth 1
cd nv-codec-headers
sudo make install -j$(nproc)
- name: Install mfx_dispatch
run: |
cd ${{ github.workspace }}
git clone https://github.com/lu-zero/mfx_dispatch.git --depth 1
cd mfx_dispatch
autoreconf -i
./configure --host=${{ matrix.cpu_config.cpu }}-w64-mingw32 --prefix=${{ github.workspace }}/lsw
make -j$(nproc)
make install -j$(nproc)
- name: Install libvpl
run: |
cd ${{ github.workspace }}
git clone https://github.com/intel/libvpl.git --depth 1
cd libvpl
mkdir build && cd build
cmake -G Ninja -DCMAKE_BUILD_TYPE=Release -DCMAKE_TOOLCHAIN_FILE="${{ github.workspace }}/cmake_toolchainfile/${{ matrix.cpu_config.cpu }}.cmake" -DBUILD_EXPERIMENTAL=OFF -DBUILD_SHARED_LIBS=OFF -DCMAKE_INSTALL_PREFIX="${{ github.workspace }}/lsw" ..
ninja
ninja install
- name: Install FFmpeg
run: |
cd ${{ github.workspace }}
git clone https://github.com/FFmpeg/FFmpeg.git -b release/${{ matrix.lsw_config.ffmpeg_version }}
cd FFmpeg
# 文字が1文字以上存在すれば実行される
if [ "${{ matrix.lsw_config.ffmpeg_patch }}" ]; then
git cherry-pick 07bcedc232feeb9e30336624f4e9977d47ac43bc
fi
PKG_CONFIG_PATH=${{ github.workspace }}/lsw/lib/pkgconfig ./configure --enable-version3 ${{ matrix.lsw_config.ffmpeg_extra_flags }} --disable-hwaccels --disable-encoders --disable-avisynth --disable-doc --disable-network --disable-programs --disable-outdevs --disable-indevs --disable-avfilter --disable-debug --disable-muxers --enable-avcodec --enable-avformat --enable-swresample --enable-swscale --extra-libs="-lpthread" --cross-prefix=${{ matrix.cpu_config.cpu }}-w64-mingw32- --target-os=mingw32 --arch=${{ matrix.cpu_config.arch }} --prefix=${{ github.workspace }}/lsw --enable-libdav1d --enable-libvpx --enable-libmfx
make -j$(nproc)
make install -j$(nproc)
- name: Install obuparse
run: |
cd ${{ github.workspace }}
git clone https://github.com/dwbuiten/obuparse.git --depth 1
cd obuparse
${{ matrix.cpu_config.cpu }}-w64-mingw32-gcc -O2 -c obuparse.c
${{ matrix.cpu_config.cpu }}-w64-mingw32-ar r libobuparse.a obuparse.o
install obuparse.h ${{ github.workspace }}/lsw/include
install libobuparse.a ${{ github.workspace }}/lsw/lib
- name: Install L-SMASH
run: |
cd ${{ github.workspace }}
git clone https://github.com/${{ matrix.l-smash_author }}/l-smash.git
cd l-smash
./configure --cross-prefix=${{ matrix.cpu_config.cpu }}-w64-mingw32- --extra-cflags=-I${{ github.workspace }}/lsw/include --extra-ldflags=-L${{ github.workspace }}/lsw/lib --prefix=${{ github.workspace }}/lsw
make lib -j$(nproc)
make install-lib -j$(nproc)
- name: Install AviSynthPlus
run: |
cd ${{ github.workspace }}
git clone https://github.com/AviSynth/AviSynthPlus.git --depth 1 -b v3.7.3
cd AviSynthPlus
# Multiple definitions防止のため、勝手にちょっとだけパッチを当てる
sed -i 's/MSVC/__MINGW32__/' avs_core/filters/AviSource/avi_source.cpp
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release -DENABLE_PLUGINS=OFF -DENABLE_INTEL_SIMD=OFF -DCMAKE_TOOLCHAIN_FILE=${{ github.workspace }}/cmake_toolchainfile/${{ matrix.cpu_config.cpu }}.cmake
cmake --build build -j $(nproc)
cmake --install build --prefix ${{ github.workspace }}/lsw
- name: Install zimg
run: |
cd ${{ github.workspace }}
git clone https://github.com/sekrit-twc/zimg -b v3.0 --depth 1
cd zimg
./autogen.sh
./configure --host=${{ matrix.cpu_config.cpu }}-w64-mingw32 --prefix=${{ github.workspace }}/lsw
make -j$(nproc)
make install -j$(nproc)
- name: Install VapourSynth
run: |
cd ${{ github.workspace }}
git clone https://github.com/vapoursynth/vapoursynth -b R68 --depth 1
cd vapoursynth
./autogen.sh
CC=${{ matrix.cpu_config.cpu }}-w64-mingw32-gcc-posix CXX=${{ matrix.cpu_config.cpu }}-w64-mingw32-g++-posix PKG_CONFIG_PATH=${{ github.workspace }}/lsw/lib/pkgconfig ./configure --host=${{ matrix.cpu_config.cpu }}-w64-mingw32 --disable-vsscript --disable-vspipe --disable-python-module --prefix=${{ github.workspace }}/lsw
make -j$(nproc)
make install -j$(nproc)
- name: Clone L-SMASH Works
run: |
cd ${{ github.workspace }}
git clone https://github.com/${{ matrix.lsw_config.author }}/L-SMASH-Works.git
- name: Set L-SMASH Works Revision Info
id: l-smash-works-rev
run: |
cd ${{ github.workspace }}/L-SMASH-Works
REVCOUNT=`git rev-list --count HEAD`
echo "REV_LIST_COUNT=${REVCOUNT}" >> $GITHUB_OUTPUT
SHA=`git rev-parse HEAD`
echo "REV_SHA=${SHA}" >> $GITHUB_OUTPUT
# VFR-maniac版はmesonに対応していないため、一時的に除外
- name: Build L-SMASH Works(AviSynth)
if: ${{ matrix.lsw_config.author != 'VFR-maniac' }}
run: |
cd ${{ github.workspace }}/L-SMASH-Works/AviSynth
# ヘッダファイルの階層問題より、AviSynthのヘッダを一つ上の階層にぶちまける
mv ${{ github.workspace }}/lsw/include/avisynth/* ${{ github.workspace }}/lsw/include
PKG_CONFIG_PATH=${{ github.workspace }}/lsw/lib/pkgconfig meson setup --cross-file=../../meson_lsw_crossfile/${{ matrix.cpu_config.cpu }}-w64-mingw32.meson build
ninja -C build
- name: Build L-SMASH Works(VapourSynth)(meson)
if: ${{ matrix.lsw_config.author != 'VFR-maniac' }}
run: |
cd ${{ github.workspace }}/L-SMASH-Works/VapourSynth
PKG_CONFIG_PATH=${{ github.workspace }}/lsw/lib/pkgconfig meson setup --cross-file=../../meson_lsw_crossfile/${{ matrix.cpu_config.cpu }}-w64-mingw32.meson build
ninja -C build
- name: Build L-SMASH Works(VapourSynth)(makefile)
if: ${{ matrix.lsw_config.author == 'VFR-maniac' }}
run: |
cd ${{ github.workspace }}/L-SMASH-Works/VapourSynth
PKG_CONFIG_PATH=${{ github.workspace }}/lsw/lib/pkgconfig ./configure --cross-prefix=${{ matrix.cpu_config.cpu }}-w64-mingw32- --extra-cflags=-I/usr/local/include --extra-ldflags="-L/usr/local/lib -static-libgcc -static-libstdc++ -static" --extra-libs="-lpthread"
make
mkdir build
mv libvslsmashsource.so.${{ steps.l-smash-works-rev.outputs.REV_LIST_COUNT }} build/libvslsmashsource.dll
- name: Create pub Directory
run: |
cd ${{ github.workspace }}
mkdir pub
- name: Copy to pub Directory(AviSynth)
if: ${{ matrix.lsw_config.author != 'VFR-maniac' }}
run: |
cd ${{ github.workspace }}
mkdir pub/AviSynth && mkdir pub/AviSynth/${{ matrix.cpu_config.user_arch }}
cp L-SMASH-Works/AviSynth/build/*.dll pub/AviSynth/${{ matrix.cpu_config.user_arch }}
- name: Copy to pub Directory(VapourSynth)
run: |
cd ${{ github.workspace }}
mkdir pub/VapourSynth && mkdir pub/VapourSynth/${{ matrix.cpu_config.user_arch }}
cp L-SMASH-Works/VapourSynth/build/*.dll pub/VapourSynth/${{ matrix.cpu_config.user_arch }}
- name: Upload artifact test(AviSynth/VapourSynth)
uses: actions/upload-artifact@v4
with:
name: ${{ matrix.lsw_config.author }}-${{ matrix.l-smash_author }}-Synth-${{ matrix.cpu_config.user_arch }}
path: ${{ github.workspace }}/pub
- name: Build L-SMASH Works(AviUtl)
run: |
cd ${{ github.workspace }}/L-SMASH-Works/AviUtl
PKG_CONFIG_PATH=${{ github.workspace }}/lsw/lib/pkgconfig ./configure --cross-prefix=${{ matrix.cpu_config.cpu }}-w64-mingw32- --extra-cflags=-I/usr/local/include --extra-ldflags="-L/usr/local/lib -static-libgcc -static-libstdc++ -static" --extra-libs="-lpthread"
make -j$(nproc)
- name: Set workflow Revision Info
id: workflow-rev
run: |
cd ${{ github.workspace }}
REVCOUNT=`git rev-list --count HEAD`
echo "REV_LIST_COUNT=${REVCOUNT}" >> $GITHUB_OUTPUT
SHA=`git rev-parse HEAD`
echo "REV_SHA=${SHA}" >> $GITHUB_OUTPUT
- name: Set zlib Revision Info
id: zlib-rev
run: |
cd ${{ github.workspace }}/zlib
REVCOUNT=`git rev-list --count HEAD`
echo "REV_LIST_COUNT=${REVCOUNT}" >> $GITHUB_OUTPUT
SHA=`git rev-parse HEAD`
echo "REV_SHA=${SHA}" >> $GITHUB_OUTPUT
- name: Set dav1d Revision Info
id: dav1d-rev
run: |
cd ${{ github.workspace }}/dav1d
REVCOUNT=`git rev-list --count HEAD`
echo "REV_LIST_COUNT=${REVCOUNT}" >> $GITHUB_OUTPUT
SHA=`git rev-parse HEAD`
echo "REV_SHA=${SHA}" >> $GITHUB_OUTPUT
- name: Set libvpx Revision Info
id: libvpx-rev
run: |
cd ${{ github.workspace }}/libvpx
REVCOUNT=`git rev-list --count HEAD`
echo "REV_LIST_COUNT=${REVCOUNT}" >> $GITHUB_OUTPUT
SHA=`git rev-parse HEAD`
echo "REV_SHA=${SHA}" >> $GITHUB_OUTPUT
- name: Set nv-codec-headers Revision Info
id: nv-codec-headers-rev
run: |
cd ${{ github.workspace }}/nv-codec-headers
REVCOUNT=`git rev-list --count HEAD`
echo "REV_LIST_COUNT=${REVCOUNT}" >> $GITHUB_OUTPUT
SHA=`git rev-parse HEAD`
echo "REV_SHA=${SHA}" >> $GITHUB_OUTPUT
- name: Set mfx_dispatch Revision Info
id: mfx_dispatch-rev
run: |
cd ${{ github.workspace }}/mfx_dispatch
REVCOUNT=`git rev-list --count HEAD`
echo "REV_LIST_COUNT=${REVCOUNT}" >> $GITHUB_OUTPUT
SHA=`git rev-parse HEAD`
echo "REV_SHA=${SHA}" >> $GITHUB_OUTPUT
- name: Set libvpl Revision Info
id: libvpl-rev
run: |
cd ${{ github.workspace }}/libvpl
REVCOUNT=`git rev-list --count HEAD`
echo "REV_LIST_COUNT=${REVCOUNT}" >> $GITHUB_OUTPUT
SHA=`git rev-parse HEAD`
echo "REV_SHA=${SHA}" >> $GITHUB_OUTPUT
- name: Set obuparse Revision Info
id: obuparse-rev
run: |
cd ${{ github.workspace }}/obuparse
REVCOUNT=`git rev-list --count HEAD`
echo "REV_LIST_COUNT=${REVCOUNT}" >> $GITHUB_OUTPUT
SHA=`git rev-parse HEAD`
echo "REV_SHA=${SHA}" >> $GITHUB_OUTPUT
- name: Set L-SMASH Revision Info
id: l-smash-rev
run: |
cd ${{ github.workspace }}/l-smash
REVCOUNT=`git rev-list --count HEAD`
echo "REV_LIST_COUNT=${REVCOUNT}" >> $GITHUB_OUTPUT
SHA=`git rev-parse HEAD`
echo "REV_SHA=${SHA}" >> $GITHUB_OUTPUT
- name: Create BuildInfo File
run: |
cd ${{ github.workspace }}/L-SMASH-Works
echo "L-SMASH-Works-Auto-Builds r${{ steps.workflow-rev.outputs.REV_LIST_COUNT }}
https://github.com/Mr-Ojii/L-SMASH-Works-Auto-Builds
${{ matrix.lsw_config.author }}/L-SMASH-Works r${{ steps.l-smash-works-rev.outputs.REV_LIST_COUNT }}
https://github.com/${{ matrix.lsw_config.author }}/L-SMASH-Works
FFmpeg ${{ matrix.lsw_config.ffmpeg_version }}${{ matrix.lsw_config.ffmpeg_patch }}
https://github.com/FFmpeg/FFmpeg
${{ matrix.l-smash_author }}/L-SMASH r${{ steps.l-smash-rev.outputs.REV_LIST_COUNT }}
https://github.com/${{ matrix.l-smash_author }}/l-smash
dav1d ${{ steps.dav1d-rev.outputs.REV_SHA }}
https://github.com/videolan/dav1d
libvpx ${{ steps.libvpx-rev.outputs.REV_SHA }}
https://github.com/webmproject/libvpx
nv-codec-headers ${{ steps.nv-codec-headers-rev.outputs.REV_SHA }}
https://github.com/FFmpeg/nv-codec-headers
mfx_dispatch ${{ steps.mfx_dispatch-rev.outputs.REV_SHA }}
https://github.com/lu-zero/mfx_dispatch
libvpl ${{ steps.libvpl-rev.outputs.REV_SHA }}
https://github.com/intel/libvpl
zlib ${{ steps.zlib-rev.outputs.REV_SHA }}
https://github.com/madler/zlib
obuparse ${{ steps.obuparse-rev.outputs.REV_SHA }}
https://github.com/dwbuiten/obuparse" >> "AviUtl/About-this-build.txt"
- name: Add License Files
run: |
mkdir ${{ github.workspace }}/L-SMASH-Works/AviUtl/Licenses
cd ${{ github.workspace }}/L-SMASH-Works/AviUtl/Licenses
cp ${{ github.workspace }}/dav1d/COPYING dav1d.txt
cp ${{ github.workspace }}/l-smash/LICENSE L-SMASH.txt
cp ${{ github.workspace }}/FFmpeg/COPYING.LGPLv3 FFmpeg.txt
cp ${{ github.workspace }}/libvpx/LICENSE libvpx.txt
cp ${{ github.workspace }}/mfx_dispatch/LICENSE mfx_dispatch.txt
echo "[InternetShortcut]" > zlib.url
echo "URL=https://zlib.net/zlib_license.html" >> zlib.url
cp ${{ github.workspace }}/obuparse/LICENSE obuparse.txt
- name: Create RevInfo.txt
run: |
cd ${{ github.workspace }}/L-SMASH-Works/AviUtl
echo ${{ steps.l-smash-works-rev.outputs.REV_LIST_COUNT }} > RevInfo.txt
- name: Rename Files(x64)
if: ${{ matrix.cpu_config.arch == 'x86_64' }}
run: |
cd ${{ github.workspace }}/L-SMASH-Works/AviUtl
mv lwinput.aui lwinput64.aui
mv About-this-build.txt About-this-build-x64.txt
mv RevInfo.txt RevInfo64.txt
- name: Upload artifact(x86)
uses: actions/upload-artifact@v4
if: ${{ matrix.cpu_config.user_arch == 'x86' }}
with:
name: ${{ matrix.lsw_config.author }}_${{ matrix.l-smash_author }}-${{ matrix.cpu_config.user_arch }}
path: |
${{ github.workspace }}/L-SMASH-Works/AviUtl/*.auf
${{ github.workspace }}/L-SMASH-Works/AviUtl/*.auc
${{ github.workspace }}/L-SMASH-Works/AviUtl/*.aui
${{ github.workspace }}/L-SMASH-Works/AviUtl/README
${{ github.workspace }}/L-SMASH-Works/AviUtl/README.ja
${{ github.workspace }}/L-SMASH-Works/AviUtl/LICENSE
${{ github.workspace }}/L-SMASH-Works/AviUtl/About-this-build.txt
${{ github.workspace }}/L-SMASH-Works/AviUtl/Licenses
${{ github.workspace }}/L-SMASH-Works/AviUtl/RevInfo.txt
- name: Upload artifact(x64)
uses: actions/upload-artifact@v4
if: ${{ matrix.cpu_config.user_arch == 'x64' }}
with:
name: ${{ matrix.lsw_config.author }}_${{ matrix.l-smash_author }}-${{ matrix.cpu_config.user_arch }}
path: |
${{ github.workspace }}/L-SMASH-Works/AviUtl/*.aui
${{ github.workspace }}/L-SMASH-Works/AviUtl/About-this-build-x64.txt
${{ github.workspace }}/L-SMASH-Works/AviUtl/RevInfo64.txt
create-archive:
name: Create archive
needs: build
runs-on: ubuntu-24.04
strategy:
matrix:
author: [VFR-maniac, Mr-Ojii]
l-smash_author: [Mr-Ojii, vimeo]
steps:
- uses: actions/checkout@v4
- uses: actions/download-artifact@v4
with:
name: ${{ matrix.author }}_${{ matrix.l-smash_author }}-x86
path: x86
- uses: actions/download-artifact@v4
with:
name: ${{ matrix.author }}_${{ matrix.l-smash_author }}-x64
path: x64
- name: Copy Artifacts
run: |
cd ${{ github.workspace }}
mkdir artifacts
cp -r x86/* artifacts
cp -r x64/* artifacts
- name: Set RevInfo
id: rev-info
run: |
cd ${{ github.workspace }}/artifacts
if [ "$(cat RevInfo.txt)" != "$(cat RevInfo64.txt)" ]; then
exit 1
fi
echo -n "REV=" > Rev.txt
cat RevInfo.txt >> Rev.txt
cat Rev.txt >> $GITHUB_OUTPUT
rm Rev.txt RevInfo.txt RevInfo64.txt
- name: Check diff
run: |
cd ${{ github.workspace }}/artifacts
if [ "$(diff About-this-build.txt About-this-build-x64.txt)" == "" ]; then
rm About-this-build-x64.txt
fi
- name: Create archive
run: |
cd ${{ github.workspace }}/artifacts
zip L-SMASH-Works_r${{ steps.rev-info.outputs.REV }}_${{ matrix.author }}_${{ matrix.l-smash_author }} -r *
- uses: actions/upload-artifact@v4
with:
name: L-SMASH-Works-${{ matrix.author }}_${{ matrix.l-smash_author }}
path: ${{ github.workspace }}/artifacts/*.zip
create-release:
name: Create release
needs: create-archive
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v4
- uses: actions/download-artifact@v4
with:
path: artifacts
- name: Get Date
id: get_date
run: |
DATE_TIME=`date +'%Y-%m-%d-%H-%M-%S'`
echo "DATE_TIME=${DATE_TIME}" >> $GITHUB_OUTPUT
- name: Create a Release
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
cd ${{ github.workspace }}/artifacts
mv ./*/*.zip ./
RELEASE_NAME=Build-${{ steps.get_date.outputs.DATE_TIME }}
TAG_NAME=build-${{ steps.get_date.outputs.DATE_TIME }}
for asset in *.zip; do
if [[ "$asset" =~ "Mr-Ojii_Mr-Ojii" ]]; then
AVIUTL_RECOMMEND_FILE=$asset
fi
done
echo "AviUtl用には\`${AVIUTL_RECOMMEND_FILE}\`をダウンロードすることをお勧めします。" >> ReleaseNotes.txt
echo "また、別バージョンからMr-Ojii版L-SMASH Worksに更新する場合、以下の記事をお読みください。" >> ReleaseNotes.txt
echo "https://scrapbox.io/Mr-Ojii/Mr-Ojii%E7%89%88_L-SMASH_Works%E3%81%AE%E6%9C%80%E6%96%B0%E7%89%88%E3%81%AB%E6%9B%B4%E6%96%B0%E3%81%99%E3%82%8B%E9%9A%9B%E3%81%AE%E6%B3%A8%E6%84%8F%E4%BA%8B%E9%A0%85" >> ReleaseNotes.txt
gh release create "${TAG_NAME}" ${{ github.workspace }}/artifacts/*.zip -t "${RELEASE_NAME}" -F ReleaseNotes.txt
- uses: dev-drprasad/delete-older-releases@v0.3.4
with:
keep_latest: 20
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}