Skip to content
This repository has been archived by the owner on Jul 8, 2024. It is now read-only.

⚙️ Build CoreUtils 📦 #50

⚙️ Build CoreUtils 📦

⚙️ Build CoreUtils 📦 #50

name: ⚙️ Build CoreUtils 📦
#MAX_RUNTIME:
on:
workflow_dispatch:
schedule:
#- cron: "0 0 * * 0" # 12:00 AM UTC Every Sunday (05:45 AM Morning Nepal)
- cron: "0 0 */3 * *" #Every 3 days
env:
GITHUB_TOKEN: ${{ secrets.STATIC_TOOLBOX }}
jobs:
#------------------------------------------------------------------------------------#
#------------------------------------------------------------------------------------#
build-coreutils:
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
path: main
- name: Install CoreUtils & Deps
run: |
set +e
sudo apt-get update -y
sudo apt-get install automake b3sum build-essential ca-certificates ccache lzip jq make musl musl-dev musl-tools p7zip-full wget -y
sudo apt-get install -y --no-install-recommends autoconf automake autopoint binutils bison build-essential ca-certificates flex file jq patch patchelf pkg-config python3-pip qemu-user-static wget xsltproc
continue-on-error: true
- name: Install Addons
run: |
set +e
#eget
curl -qfsSL "https://zyedidia.github.io/eget.sh" | bash
sudo mv ./eget* "/usr/local/bin/eget"
sudo chmod +xwr "/usr/local/bin/eget"
continue-on-error: true
- name: Install 7z
run: |
#Presets
set -x ; set +e
#--------------#
cd $(mktemp -d) && curl -qfsSLJO "https://www.7-zip.org/$(curl -qfsSL "https://www.7-zip.org/download.html" | grep -o 'href="[^"]*"' | sed 's/href="//' | grep 'linux-x64.tar.xz' | sed 's/"$//' | sort | tail -n 1)"
find . -type f -name '*.xz' -exec tar -xf {} \;
#sudo rm $(which 7z) 2>/dev/null ; sudo rm $(which 7z) 2>/dev/null
sudo find . -type f -name '7zzs' ! -name '*.xz' -exec cp {} "/usr/local/bin/7z" \;
sudo chmod +xwr "/usr/local/bin/7z"
sudo find . -type f -name '7zzs' ! -name '*.xz' -exec cp {} "/usr/bin/7z" \;
sudo chmod +xwr "/usr/bin/7z"
7z -h
continue-on-error: true
- name: Install upX
run: |
#Presets
set -x ; set +e
#--------------#
cd $(mktemp -d) && curl -qfLJO "$(curl -qfsSL https://api.github.com/repos/upx/upx/releases/latest | jq -r '.assets[].browser_download_url' | grep -i 'amd64_linux')"
find . -type f -name '*tar*' -exec tar -xvf {} \;
sudo find . -type f -name 'upx' -exec mv {} "$(which upx)" \;
continue-on-error: true
- name: Setup Env
run: |
#Presets
set -x ; set +e
#--------------#
# Create Output Dir
mkdir -p "/tmp/releases"
# Get $VERSION
#export COREUTILS_VERSION="$(curl -s https://ftp.gnu.org/gnu/coreutils/|tac|grep -om1 'coreutils-.*\.tar\.xz'|cut -d'>' -f2|sed 's|coreutils-||g;s|.tar.xz||g')"
export COREUTILS_VERSION="$(curl -qfsSL https://api.github.com/repos/coreutils/coreutils/tags | jq -r '.[0].name')"
# If we get rate-limited, git clone the repo
if [ -z "$COREUTILS_VERSION" ]; then
cd $(mktemp -d) && git clone "https://github.com/coreutils/coreutils" && cd "./coreutils"
export COREUTILS_VERSION=$(git tag --sort=-creatordate | head -n 1)
fi
# Export it to ENV
echo "COREUTILS_VERSION=$COREUTILS_VERSION" >> $GITHUB_ENV
continue-on-error: true
- name: Build coreutils for amd_x86_64 (Natively)
run: |
#Presets
set -x ; set +e
#--------------#
#Get Script
pushd "$(mktemp -d)" ; git clone "https://github.com/VHSgunzo/coreutils-static.git" && cd "./coreutils-static"
#Build
sudo bash "./build.sh"
#Cleanup
find . -type f -name "*.tar*" -exec tar -xvf {} \;
mv "./release" "./coreutils_amd_x86_64"
tar -cvf "./coreutils_amd_x86_64.tar" "./coreutils_amd_x86_64"
#Move to releases
mv "./coreutils_amd_x86_64.tar" "/tmp/releases" ; popd
#meta
file "/tmp/releases/coreutils_amd_x86_64.tar" && ls "/tmp/releases/coreutils_amd_x86_64.tar" -lahr
continue-on-error: true
- name: Build coreutils for aarch64_arm64_arm64-v8 (Docker)
run: |
#Presets
set -x ; set +e
#--------------#
docker run --privileged --name "arm64v8_debian" \
"arm64v8/debian:latest" \
bash -c '
export DEBIAN_FRONTEND=noninteractive
apt-get update -y ; apt-get dist-upgrade -y ; apt-get upgrade -y
apt install -y autoconf automake autopoint curl devscripts dpkg-dev file g++ gawk make libtool jq pkgconf tcl patch pkg-config wget tar unzip xsltproc
apt install autoconf automake autopoint binutils bison build-essential ca-certificates coreutils curl dos2unix git gcc htop flex file jq moreutils nano pkg-config sudo util-linux wget -y
apt install "*glibc*" "libssl*" lzip musl musl-dev musl-tools "openssl*" -y
apt install asciidoctor libcapnp-dev libcap-ng-dev libcap-ng-utils libpython3-dev po4a zlib1g-dev -y
pushd "$(mktemp -d)" && curl -qfLJO "$(curl -qfsSL https://api.github.com/repos/upx/upx/releases/latest | jq -r ".assets[].browser_download_url" | grep -i "arm64_linux")"
find . -type f -name "*tar*" -exec tar -xvf {} \;
sudo find . -type f -name "upx" -exec mv {} "/usr/bin/upx" \;
sudo cp "/usr/bin/upx" "/usr/local/bin/upx"
sudo chmod +xwr "/usr/bin/upx" "/usr/local/bin/upx" ; upx -h ; popd
git clone "https://github.com/VHSgunzo/coreutils-static.git" && cd "./coreutils-static"
sudo bash "./build.sh"
find . -type f -name "*.tar*" -exec tar -xvf {} \;
mv "./release" "./coreutils_aarch64_arm64"
tar -cvf "./coreutils_aarch64_arm64.tar" "./coreutils_aarch64_arm64"
mv "./coreutils_aarch64_arm64.tar" /
'
#Copy
docker cp "arm64v8_debian:./coreutils_aarch64_arm64.tar" "/tmp/releases"
#meta
file "/tmp/releases/coreutils_aarch64_arm64.tar" && ls "/tmp/releases/coreutils_aarch64_arm64.tar" -lahr
#Delete Containers
docker ps -a -q | xargs docker rm >/dev/null 2>&1
#Del Docker Images
docker images -q | xargs docker rmi -f >/dev/null 2>&1
continue-on-error: true
- name: Create Body for Release
run: |
set +e
cd /tmp/releases
echo -e "" >> /tmp/RELEASE_NOTE.md
echo '---' >> /tmp/RELEASE_NOTE.md
echo '```console' >> /tmp/RELEASE_NOTE.md
echo -e "" >> /tmp/RELEASE_NOTE.md
echo "Changelog: 'https://fossies.org/linux/coreutils/ChangeLog'" >> /tmp/RELEASE_NOTE.md
echo -e "" >> /tmp/RELEASE_NOTE.md
echo -e "--> METADATA" >> /tmp/RELEASE_NOTE.md
/bin/bash -c 'PS4="$ "; file * | grep -v '.txt' '&>> /tmp/RELEASE_NOTE.md
echo -e "" >> /tmp/RELEASE_NOTE.md
echo -e "--> SHA256SUM" >> /tmp/RELEASE_NOTE.md
/bin/bash -c 'PS4="$ ";sha256sum * | grep -v '.txt' ' &>> /tmp/RELEASE_NOTE.md
echo -e '```\n' >> /tmp/RELEASE_NOTE.md
echo -e "" >> /tmp/RELEASE_NOTE.md
echo '---' >> /tmp/RELEASE_NOTE.md
echo -e "" >> /tmp/RELEASE_NOTE.md
echo '- #### Sizes' >> /tmp/RELEASE_NOTE.md
echo -e "" >> /tmp/RELEASE_NOTE.md
echo '```console' >> /tmp/RELEASE_NOTE.md
/bin/bash -c 'PS4="$ "; ls -lh ./* | grep -v '.txt' | awk "{print \$5, \$9}" | column -t' &>> /tmp/RELEASE_NOTE.md
echo -e "" >> /tmp/RELEASE_NOTE.md
echo '```' >> /tmp/RELEASE_NOTE.md
echo -e "" >> /tmp/RELEASE_NOTE.md
continue-on-error: true
- name: Releaser
uses: softprops/action-gh-release@v0.1.15
with:
name: "CoreUtils ${{ env.COREUTILS_VERSION }}"
tag_name: "coreutils-${{ env.COREUTILS_VERSION }}"
prerelease: false
draft: false
generate_release_notes: false
token: "${{ secrets.GITHUB_TOKEN }}"
body_path: "/tmp/RELEASE_NOTE.md"
files: |
/tmp/releases/*
#-------------------------------------------------------------