the last things before releasing #59
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 CLI (Linux x32,x64) | |
on: | |
pull_request: | |
branches: | |
- master | |
push: | |
branches: | |
- master | |
jobs: | |
build-pornfetch-cli-linux-64: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Set up Python 3.11 | |
uses: actions/setup-python@v3 | |
with: | |
python-version: "3.11" | |
- name: Install dependencies | |
run: | | |
python -m pip install --upgrade pip | |
pip install pyinstaller | |
if [ -f requirements_cli.txt ]; then pip install -r requirements_cli.txt; fi | |
- name: Build Porn Fetch (CLI) (PyInstaller - Termux) | |
run: | | |
pyinstaller -F Porn_Fetch_CLI.py && cd dist && mv Porn_Fetch_CLI PornFetch_Linux_CLI_x64 && chmod +x PornFetch_Linux_CLI_x64 | |
- name: Archive Porn Fetch CLI (Linux_64) build | |
uses: actions/upload-artifact@v2 | |
with: | |
name: PornFetch_Linux_CLI_x64 | |
path: dist/PornFetch_Linux_CLI_x64 | |
build-pornfetch-cli-linux-32: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Install dependencies for building Python | |
run: | | |
sudo apt-get update | |
sudo dpkg --add-architecture i386 | |
sudo apt-get update | |
sudo apt-get install -y build-essential gcc-multilib libffi-dev zlib1g-dev libbz2-dev libsqlite3-dev binutils-dev libsqlite3-dev libgdbm-dev libc6-dev libbz2-dev | |
sudo apt-get install -y libfl-dev libncurses5:i386 libncursesw5:i386 libtinfo5:i386 zlib1g:i386 zlib1g-dev:i386 openssl libssl-dev libbz2-dev:i386 libgdbm-compat-dev:i386 libgdbm-dev:i386 libssl-dev:i386 libsqlite3-dev:i386 tk-dev:i386 libx11-dev:i386 libreadline-dev:i386 libffi-dev:i386 libncurses5-dev:i386 libncursesw5-dev:i386 liblzma-dev:i386 uuid-dev:i386 | |
- name: Download and build Python 3.11 for x32 | |
run: | | |
wget https://www.python.org/ftp/python/3.11.6/Python-3.11.6.tgz | |
tar -xzf Python-3.11.6.tgz | |
cd Python-3.11.6 | |
CFLAGS="-m32" LDFLAGS="-m32" ./configure --prefix=/usr/local/python-32 --with-ensurepip=install --enable-shared | |
make -j $(nproc) | |
sudo make altinstall | |
env: | |
LD_LIBRARY_PATH: /usr/local/lib | |
- name: Install Python packages | |
run: | | |
export LD_LIBRARY_PATH=/usr/local/python-32/lib:$LD_LIBRARY_PATH | |
/usr/local/python-32/bin/python3.11 -m venv venv | |
source venv/bin/activate | |
pip install --upgrade pip | |
pip install pyinstaller | |
pip install -r requirements_cli.txt | |
- name: Build Porn Fetch (CLI) (PyInstaller - Termux) | |
run: | | |
export LD_LIBRARY_PATH=/usr/local/python-32/lib:$LD_LIBRARY_PATH | |
source venv/bin/activate | |
pyinstaller -F Porn_Fetch_CLI.py && cd dist && mv Porn_Fetch_CLI PornFetch_Linux_CLI_x32 && chmod +x PornFetch_Linux_CLI_x32 | |
- name: Archive Porn Fetch CLI (Linux_32) build | |
uses: actions/upload-artifact@v2 | |
with: | |
name: PornFetch_Linux_CLI_x32 | |
path: dist/PornFetch_Linux_CLI_x32 | |
create-release: | |
needs: [build-pornfetch-cli-linux-64, build-pornfetch-cli-linux-32] | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v2 | |
- name: Install gh CLI | |
run: | | |
curl -fsSL https://cli.github.com/packages/githubcli-archive-keyring.gpg | sudo dd of=/usr/share/keyrings/githubcli-archive-keyring.gpg | |
sudo chmod go+r /usr/share/keyrings/githubcli-archive-keyring.gpg | |
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/githubcli-archive-keyring.gpg] https://cli.github.com/packages stable main" | sudo tee /etc/apt/sources.list.d/github-cli.list > /dev/null | |
sudo apt update | |
sudo apt install gh -y | |
- name: Download Linux x64 artifact | |
uses: actions/download-artifact@v2 | |
with: | |
name: PornFetch_Linux_CLI_x64 | |
path: ./artifacts | |
- name: Download Linux x32 artifact | |
uses: actions/download-artifact@v2 | |
with: | |
name: PornFetch_Linux_CLI_x32 | |
path: ./artifacts | |
- name: List artifacts directory | |
run: ls -R ./artifacts | |
- name: Get short SHA | |
id: vars | |
run: echo "GITHUB_SHA_SHORT=$(echo $GITHUB_SHA | cut -c1-7)" >> $GITHUB_ENV | |
- name: Verify PAT | |
run: | | |
curl -H "Authorization: token ${{ secrets.PAT }}" https://api.github.com/user | |
env: | |
GITHUB_TOKEN: ${{ secrets.PAT }} | |
- name: Check if Release Exists | |
id: check_release | |
run: | | |
if gh release view v${{ secrets.VERSION }}-automated-${{ env.GITHUB_SHA_SHORT }} >/dev/null 2>&1; then | |
echo "RELEASE_EXISTS=true" >> $GITHUB_ENV | |
echo "::set-output name=release_exists::true" | |
else | |
echo "RELEASE_EXISTS=false" >> $GITHUB_ENV | |
echo "::set-output name=release_exists::false" | |
fi | |
env: | |
GITHUB_TOKEN: ${{ secrets.PAT }} | |
- name: Calculate SHA512 for Linux x64 | |
id: sha512_linux_x64 | |
run: | | |
sha512sum ./artifacts/PornFetch_Linux_CLI_x64 | awk '{ print $1 }' > sha512_linux_x64.txt | |
echo "sha512_linux_x64=$(cat sha512_linux_x64.txt)" >> $GITHUB_ENV | |
- name: Calculate SHA512 for Linux x32 | |
id: sha512_linux_x32 | |
run: | | |
sha512sum ./artifacts/PornFetch_Linux_CLI_x32 | awk '{ print $1 }' > sha512_linux_x32.txt | |
echo "sha512_linux_x32=$(cat sha512_linux_x32.txt)" >> $GITHUB_ENV | |
- name: Create GitHub Release | |
id: create_release | |
if: steps.check_release.outputs.release_exists == 'false' | |
uses: actions/create-release@v1 | |
env: | |
GITHUB_TOKEN: ${{ secrets.PAT }} | |
SHA512_LINUX_X64: ${{ env.sha512_linux_x64 }} | |
SHA512_LINUX_X32: ${{ env.sha512_linux_x32 }} | |
with: | |
tag_name: v${{ secrets.VERSION }}-automated-${{ env.GITHUB_SHA_SHORT }} | |
release_name: Automated Release v${{ secrets.VERSION }}-${{ env.GITHUB_SHA_SHORT }} | |
body: | | |
This is an automated release generated by the CI/CD pipeline. | |
SHA512 Checksums: | |
- PornFetch_Linux_CLI_x64: ${{ env.SHA512_LINUX_X64 }} | |
- PornFetch_Linux_CLI_x32: ${{ env.SHA512_LINUX_X32 }} | |
draft: false | |
prerelease: true | |
- name: Get current release body | |
id: get_release_body | |
env: | |
GH_TOKEN: ${{ github.token }} | |
run: | | |
gh release view v${{ secrets.VERSION }}-automated-${{ env.GITHUB_SHA_SHORT }} --json body --jq .body > current_body.txt || echo "" > current_body.txt | |
- name: Append new SHA512 hash to release body | |
id: append_release_body | |
run: | | |
echo -e "$(cat current_body.txt)\n- PornFetch_Linux_CLI_x64: ${{ env.sha512_linux_x64 }}\n- PornFetch_Linux_CLI_x32: ${{ env.sha512_linux_x32 }}" > new_body.txt | |
- name: Update GitHub release | |
run: | | |
gh release edit v${{ secrets.VERSION }}-automated-${{ env.GITHUB_SHA_SHORT }} --notes "$(cat new_body.txt)" | |
env: | |
GITHUB_TOKEN: ${{ secrets.PAT }} | |
shell: bash | |
- name: Get Release Upload URL | |
id: get_release_url | |
run: | | |
UPLOAD_URL=$(gh release view v${{ secrets.VERSION }}-automated-${{ env.GITHUB_SHA_SHORT }} --json uploadUrl --jq .uploadUrl) | |
echo "UPLOAD_URL=$UPLOAD_URL" >> $GITHUB_ENV | |
echo "::set-output name=upload_url::$UPLOAD_URL" | |
env: | |
GITHUB_TOKEN: ${{ secrets.PAT }} | |
shell: bash | |
- name: Upload Linux x64 artifact to release | |
uses: actions/upload-release-asset@v1 | |
env: | |
GITHUB_TOKEN: ${{ secrets.PAT }} | |
with: | |
upload_url: ${{ steps.get_release_url.outputs.upload_url }} | |
asset_path: ./artifacts/PornFetch_Linux_CLI_x64 | |
asset_name: PornFetch_Linux_CLI_x64 | |
asset_content_type: application/gzip | |
- name: Upload Linux x32 artifact to release | |
uses: actions/upload-release-asset@v1 | |
env: | |
GITHUB_TOKEN: ${{ secrets.PAT }} | |
with: | |
upload_url: ${{ steps.get_release_url.outputs.upload_url }} | |
asset_path: ./artifacts/PornFetch_Linux_CLI_x32 | |
asset_name: PornFetch_Linux_CLI_x32 | |
asset_content_type: application/gzip |