GHA: appimage9: Add support for EL9
This commit is contained in:
parent
c5e0165e5e
commit
b7dd2f0e9c
|
|
@ -0,0 +1,139 @@
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
tags:
|
||||||
|
- "*"
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
name: CI-appimage9
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build_appimage9:
|
||||||
|
name: Build AppImage EL9
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
permissions:
|
||||||
|
contents: write # action-gh-release
|
||||||
|
steps:
|
||||||
|
- name: Checkout code
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
fetch-depth: 149 # enough to cover between tags
|
||||||
|
|
||||||
|
- name: Get the version
|
||||||
|
id: get_version
|
||||||
|
run: |
|
||||||
|
git show -s
|
||||||
|
version=$(cat VERSION) # 8.9.999
|
||||||
|
version_tstamp=$(git show -s "--format=%cs" | tr -d '-') # YYYYMMDD
|
||||||
|
version_hash=$(git show -s "--format=%h") # abcdefg
|
||||||
|
version_num=$(ruby -e "print '$GITHUB_REF'.split('/')[2]") # legacy version method: master
|
||||||
|
echo "version=${version}"
|
||||||
|
echo "version_tstamp=${version_tstamp}"
|
||||||
|
echo "version_hash=${version_hash}"
|
||||||
|
echo "version_num=${version_num}"
|
||||||
|
VERSION_NUM="${version}~${version_tstamp}~${version_hash}"
|
||||||
|
echo "VERSION_NUM=${VERSION_NUM}" >> $GITHUB_ENV
|
||||||
|
echo "MAGIC_APPIMAGE_OUTPUT_FILENAME=Magic-${VERSION_NUM}-x86_64-EL9.AppImage" >> $GITHUB_ENV
|
||||||
|
# Is this GHA being run due to a push-on-tag ? if so we make a GitHub release, otherwise we just publish artifact
|
||||||
|
github_tag=$(echo -n "$GITHUB_REF" | sed -e 's#refs/tags/##') # 8.9.999
|
||||||
|
echo "github_tag=$github_tag"
|
||||||
|
if echo -n "$GITHUB_REF" | egrep -q "^refs/tags/" # check prefix
|
||||||
|
then
|
||||||
|
if [ -n "$github_tag" ]
|
||||||
|
then
|
||||||
|
echo "MY_GITHUB_TAG=${github_tag}" >> $GITHUB_ENV
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
# ubuntu-latest on GHA (now needs explicit dependencies for AppImageTool)
|
||||||
|
sudo apt-get install -y libfuse2 desktop-file-utils
|
||||||
|
|
||||||
|
- name: Build project
|
||||||
|
run: |
|
||||||
|
cd appimage/9
|
||||||
|
make
|
||||||
|
|
||||||
|
ln -v Magic-x86_64.AppImage "${MAGIC_APPIMAGE_OUTPUT_FILENAME}"
|
||||||
|
ls -l *.AppImage
|
||||||
|
sha256sum *.AppImage
|
||||||
|
pwd
|
||||||
|
|
||||||
|
- name: Create RELEASE-NOTES.txt
|
||||||
|
run: |
|
||||||
|
cd appimage/9
|
||||||
|
# Find the last tag (that does not match the current GITHUB_REF)
|
||||||
|
echo GITHUB_REF=$GITHUB_REF
|
||||||
|
echo GITHUB_SHA=$GITHUB_SHA
|
||||||
|
git fetch --tags --no-progress --quiet # fetch-tags: true # did not work
|
||||||
|
git_describe=$(git describe $GITHUB_SHA | sed -e 's#-#+#')
|
||||||
|
|
||||||
|
# RELEASE-NOTES-EL9.txt
|
||||||
|
echo "### ${MAGIC_APPIMAGE_OUTPUT_FILENAME} commit ${git_describe}" | sed -e 's#~#\\~#g' > RELEASE-NOTES-EL9.txt
|
||||||
|
echo "" >> RELEASE-NOTES-EL9.txt
|
||||||
|
echo "This release is based on EL9 (AlmaLinux9), the AppImage format is designed to run on a wide range of Linux distributions." >> RELEASE-NOTES-EL9.txt
|
||||||
|
echo "" >> RELEASE-NOTES-EL9.txt
|
||||||
|
echo "See documentation at https://github.com/${GITHUB_REPOSITORY}/blob/${GITHUB_SHA:0:8}/appimage/9/README.md" >> RELEASE-NOTES-EL9.txt
|
||||||
|
echo "" >> RELEASE-NOTES-EL9.txt
|
||||||
|
length_info=$(stat "--format=%s bytes" "${MAGIC_APPIMAGE_OUTPUT_FILENAME}")
|
||||||
|
sha256_info=$(sha256sum "${MAGIC_APPIMAGE_OUTPUT_FILENAME}" | cut -d ' ' -f1)
|
||||||
|
echo "| | |" >> RELEASE-NOTES-EL9.txt
|
||||||
|
echo "| :-------- | :------ |" >> RELEASE-NOTES-EL9.txt
|
||||||
|
echo "| File Name | ${MAGIC_APPIMAGE_OUTPUT_FILENAME} |" | sed -e 's#~#\\~#g' >> RELEASE-NOTES-EL9.txt
|
||||||
|
echo "| File Length | ${length_info} |" >> RELEASE-NOTES-EL9.txt
|
||||||
|
echo "| File SHA256 | ${sha256_info} |" >> RELEASE-NOTES-EL9.txt
|
||||||
|
echo "" >> RELEASE-NOTES-EL9.txt
|
||||||
|
|
||||||
|
# RELEASE-NOTES-CL.txt
|
||||||
|
git_previous_tag=$(git describe --tags --abbrev=0 ${GITHUB_SHA}~1)
|
||||||
|
if [ -n "${git_previous_tag}" ]
|
||||||
|
then
|
||||||
|
echo "### Change Log (since previous tag):" > RELEASE-NOTES-CL.txt
|
||||||
|
echo "\`\`\`" >> RELEASE-NOTES-CL.txt
|
||||||
|
git log --oneline --no-color --no-decorate "refs/tags/${git_previous_tag}..${GITHUB_REF}" >> RELEASE-NOTES-CL.txt
|
||||||
|
echo "\`\`\`" >> RELEASE-NOTES-CL.txt
|
||||||
|
else
|
||||||
|
echo "### Change Log (last commit only):" > RELEASE-NOTES-CL.txt
|
||||||
|
echo "\`\`\`" >> RELEASE-NOTES-CL.txt
|
||||||
|
git log --oneline -n1 --no-color --no-decorate "${GITHUB_REF}" >> RELEASE-NOTES-CL.txt
|
||||||
|
echo "\`\`\`" >> RELEASE-NOTES-CL.txt
|
||||||
|
fi
|
||||||
|
echo "" >> RELEASE-NOTES-CL.txt
|
||||||
|
|
||||||
|
#echo "### Build Info:" > RELEASE-NOTES-BI.txt
|
||||||
|
# FIXME extract package version info and DSO symvers into RELEASE-NOTES.txt
|
||||||
|
#echo "" >> RELEASE-NOTES-BI.txt
|
||||||
|
|
||||||
|
cat RELEASE-NOTES-CL.txt >> RELEASE-NOTES-EL9.txt
|
||||||
|
cat RELEASE-NOTES-EL9.txt
|
||||||
|
|
||||||
|
# RELEASE-NOTES-DOCS.txt
|
||||||
|
echo "See documentation at https://github.com/${GITHUB_REPOSITORY}/blob/${GITHUB_SHA:0:8}/appimage/7/README.md" >> RELEASE-NOTES-DOCS.txt
|
||||||
|
echo "See documentation at https://github.com/${GITHUB_REPOSITORY}/blob/${GITHUB_SHA:0:8}/appimage/8/README.md" >> RELEASE-NOTES-DOCS.txt
|
||||||
|
echo "See documentation at https://github.com/${GITHUB_REPOSITORY}/blob/${GITHUB_SHA:0:8}/appimage/9/README.md" >> RELEASE-NOTES-DOCS.txt
|
||||||
|
echo "See documentation at https://github.com/${GITHUB_REPOSITORY}/blob/${GITHUB_SHA:0:8}/appimage/10/README.md" >> RELEASE-NOTES-DOCS.txt
|
||||||
|
|
||||||
|
# RELEASE-NOTES-GH.txt (this is shared for all AppImage for one tag)
|
||||||
|
echo "### commit ${git_describe}" | sed -e 's#~#\\~#g' > RELEASE-NOTES-GH.txt
|
||||||
|
echo "" >> RELEASE-NOTES-GH.txt
|
||||||
|
cat RELEASE-NOTES-DOCS.txt >> RELEASE-NOTES-GH.txt
|
||||||
|
cat RELEASE-NOTES-CL.txt >> RELEASE-NOTES-GH.txt
|
||||||
|
|
||||||
|
# Show in action/artifact output
|
||||||
|
echo "## RELEASE NOTES" >> $GITHUB_STEP_SUMMARY
|
||||||
|
echo "" >> $GITHUB_STEP_SUMMARY
|
||||||
|
cat RELEASE-NOTES-EL9.txt >> $GITHUB_STEP_SUMMARY
|
||||||
|
|
||||||
|
- name: Upload Release Asset
|
||||||
|
if: ${{ env.MY_GITHUB_TAG != '' }} # if: ${{ github.ref_type == 'tag' }}
|
||||||
|
uses: softprops/action-gh-release@v2
|
||||||
|
with:
|
||||||
|
body_path: ${{ github.workspace }}/appimage/9/RELEASE-NOTES-GH.txt
|
||||||
|
files: |
|
||||||
|
${{ github.workspace }}/appimage/9/${{env.MAGIC_APPIMAGE_OUTPUT_FILENAME}}
|
||||||
|
${{ github.workspace }}/appimage/9/RELEASE-NOTES-EL9.txt
|
||||||
|
|
||||||
|
- name: Upload Artifact
|
||||||
|
#if: ${{ env.MY_GITHUB_TAG == '' }} # commented out to always upload
|
||||||
|
uses: actions/upload-artifact@v4
|
||||||
|
with:
|
||||||
|
name: ${{env.MAGIC_APPIMAGE_OUTPUT_FILENAME}}
|
||||||
|
path: |
|
||||||
|
${{ github.workspace }}/appimage/9/${{env.MAGIC_APPIMAGE_OUTPUT_FILENAME}}
|
||||||
|
|
@ -0,0 +1,59 @@
|
||||||
|
FROM almalinux:9
|
||||||
|
|
||||||
|
USER root
|
||||||
|
|
||||||
|
# Build Dependencies (and dump version to logging)
|
||||||
|
RUN dnf install -y python311 zlib-devel ncurses-devel readline-devel cairo-devel freeglut-devel \
|
||||||
|
mesa-libGLU-devel mesa-libGL-devel libX11-devel libstdc++-devel gcc gcc-c++ make git tcsh \
|
||||||
|
zip \
|
||||||
|
&& echo "### rpm -qa:" \
|
||||||
|
&& rpm -qa | sort \
|
||||||
|
&& echo ""
|
||||||
|
#RUN dnf group install -y "Development Tools"
|
||||||
|
|
||||||
|
# Tcl/Tk
|
||||||
|
WORKDIR /tcl
|
||||||
|
RUN curl -L https://prdownloads.sourceforge.net/tcl/tcl9.0.1-src.tar.gz | tar --strip-components=1 -xzC . \
|
||||||
|
&& cd unix \
|
||||||
|
&& ./configure --prefix=/prefix \
|
||||||
|
&& make \
|
||||||
|
&& make install install-libraries install-msgs install-tzdata
|
||||||
|
|
||||||
|
WORKDIR /tk
|
||||||
|
RUN curl -L https://prdownloads.sourceforge.net/tcl/tk9.0.1-src.tar.gz | tar --strip-components=1 -xzC . \
|
||||||
|
&& cd unix \
|
||||||
|
&& ./configure --prefix=/prefix --with-tcl=/prefix/lib \
|
||||||
|
&& make \
|
||||||
|
&& make install install-libraries
|
||||||
|
|
||||||
|
WORKDIR /prefix/bin
|
||||||
|
RUN cp ./wish9.0 ./wish
|
||||||
|
RUN cp ./tclsh9.0 ./tclsh
|
||||||
|
|
||||||
|
# Magic
|
||||||
|
WORKDIR /magic
|
||||||
|
COPY . .
|
||||||
|
|
||||||
|
RUN ./configure \
|
||||||
|
--prefix=/prefix \
|
||||||
|
--with-tcl=/prefix/lib \
|
||||||
|
--with-tk=/prefix/lib \
|
||||||
|
&& make clean \
|
||||||
|
&& make database/database.h \
|
||||||
|
&& make -j$(nproc) \
|
||||||
|
&& make install
|
||||||
|
|
||||||
|
# Produce summary of what was created and confirm their DSOs
|
||||||
|
RUN echo "### filesystem:" \
|
||||||
|
find /prefix -printf "%y/%M/%m %i/%n %l %u/%U %g/%G %s/%b %T+/%T@\t%p\n"; \
|
||||||
|
ls -lR /prefix; \
|
||||||
|
find /prefix -type f -perm /111 -exec bash -c "echo \#\#\# {}; ldd -v {}" \; 2>/dev/null; \
|
||||||
|
for name in libgcc_s libstdc++ libpng liblzma libxml2 libz libcairo libGL libGLU; do \
|
||||||
|
find /lib64 /usr/lib64 -maxdepth 2 -name "*.so" -name "${name}*" -exec bash -c "echo \#\#\# {}; ldd -v {}" \; 2>/dev/null; \
|
||||||
|
done; \
|
||||||
|
echo "###"
|
||||||
|
|
||||||
|
WORKDIR /
|
||||||
|
RUN tar -czf /prefix.tar.gz -C ./prefix .
|
||||||
|
|
||||||
|
CMD ["/bin/bash"]
|
||||||
|
|
@ -0,0 +1,43 @@
|
||||||
|
MAGIC_SRC_ROOT = ../..
|
||||||
|
RESOURCES := $(shell find ../rsc/ -type f)
|
||||||
|
ARCH := $(shell uname -m)
|
||||||
|
APPIMAGE = Magic-$(ARCH).AppImage
|
||||||
|
VERSION_MAGIC := $(shell cat $(MAGIC_SRC_ROOT)/VERSION)
|
||||||
|
VERSION_TSTAMP := $(shell git show -s "--format=%cs" | tr -d '-')
|
||||||
|
VERSION_HASH := $(shell git show-ref --hash=7 remotes/origin/HEAD)
|
||||||
|
VERSION_NUM ?= $(VERSION_MAGIC)~$(VERSION_TSTAMP)~$(VERSION_HASH)
|
||||||
|
VERSION := $(VERSION_NUM)
|
||||||
|
|
||||||
|
all: $(APPIMAGE)
|
||||||
|
|
||||||
|
.PHONY: prefix/bin/magic
|
||||||
|
prefix/bin/magic: Dockerfile Makefile
|
||||||
|
@echo "APPIMAGE=$(APPIMAGE)"
|
||||||
|
@echo "VERSION=$(VERSION)"
|
||||||
|
@echo "ARCH=$(ARCH)"
|
||||||
|
@echo "RESOURCES=$(RESOURCES)"
|
||||||
|
rm -rf prefix
|
||||||
|
docker build -t magic_build -f ./Dockerfile $(MAGIC_SRC_ROOT)
|
||||||
|
id=$$(docker create magic_build) ; \
|
||||||
|
docker cp $$id:/prefix ./prefix ; \
|
||||||
|
docker rm -v $$id
|
||||||
|
mkdir -p prefix/lib/tcl9.0.1
|
||||||
|
cp -r prefix/lib/tcl9.0 prefix/lib/tcl9.0.1/library
|
||||||
|
|
||||||
|
appimagetool:
|
||||||
|
curl -L https://github.com/AppImage/appimagetool/releases/download/1.9.0/appimagetool-x86_64.AppImage > ./appimagetool
|
||||||
|
chmod +x ./appimagetool
|
||||||
|
|
||||||
|
$(APPIMAGE): prefix/bin/magic appimagetool $(RESOURCES)
|
||||||
|
cp $(RESOURCES) ./prefix/
|
||||||
|
./appimagetool prefix
|
||||||
|
|
||||||
|
PREFIX ?= /usr/local
|
||||||
|
install:
|
||||||
|
install $(APPIMAGE) $(PREFIX)/bin/magic
|
||||||
|
|
||||||
|
.PHONY: clean
|
||||||
|
clean:
|
||||||
|
rm -f *.AppImage
|
||||||
|
rm -f prefix.tar.gz
|
||||||
|
rm -rf prefix
|
||||||
|
|
@ -0,0 +1,109 @@
|
||||||
|
This is an AppImage that runs on all GNU/Linux platforms with:
|
||||||
|
|
||||||
|
* FUSE
|
||||||
|
* This excludes non-privileged Docker containers unfortunately, unless pre-extracted.
|
||||||
|
* GLIBC 2.34+
|
||||||
|
* Cairo 1.17+
|
||||||
|
* May require runtime CPU matching Linux ABI x86-64-v2 and newer (CPUs with SSE4.2/CX16 via `lscpu`).
|
||||||
|
|
||||||
|
This AppImage build is based on EL9 (via AlmaLinux 9)
|
||||||
|
|
||||||
|
AlmaLinux 9 was first released on 26 May 2022, full support ends 31 May 2027,
|
||||||
|
maintenance support ends 31 May 2032 (please see AlmaLinux bulletins for
|
||||||
|
up-to-date information).
|
||||||
|
|
||||||
|
# Version Info
|
||||||
|
|
||||||
|
See the AppImage main binary file naming, release tag information and AppInfo metadata
|
||||||
|
for the exact magic version inside the archive. When starting AppImage by default the
|
||||||
|
Tcl console banner can also provide version information, also using the `version` Tcl
|
||||||
|
command.
|
||||||
|
|
||||||
|
# Build Info
|
||||||
|
|
||||||
|
* Based on AlmaLinux 9 (EL9)
|
||||||
|
* Tcl/Tk 9.0.1
|
||||||
|
* and Magic 8.x
|
||||||
|
* all default modules enabled (including all Display drivers cairo/X11/OpenGL)
|
||||||
|
|
||||||
|
# FAQ: How to use
|
||||||
|
|
||||||
|
Download the *.AppImage file relevant to your platform and run:
|
||||||
|
|
||||||
|
```
|
||||||
|
chmod +x Magic-x86_64.AppImage
|
||||||
|
./Magic-x86_64.AppImage
|
||||||
|
```
|
||||||
|
|
||||||
|
Example startup with command line options:
|
||||||
|
|
||||||
|
```
|
||||||
|
./Magic-x86_64.AppImage -d XR -T scmos
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
# Building Requirements
|
||||||
|
|
||||||
|
* A reasonably recent GNU/Linux host
|
||||||
|
* GNU make
|
||||||
|
* Docker
|
||||||
|
* Git
|
||||||
|
* curl
|
||||||
|
|
||||||
|
The final build is then packaged into an AppImage using AppImageTool on the host machine.
|
||||||
|
|
||||||
|
# Build Instructions
|
||||||
|
`make`
|
||||||
|
|
||||||
|
# Installation Instructions
|
||||||
|
`make install`
|
||||||
|
|
||||||
|
# FAQ: Is my CPU supported ?
|
||||||
|
|
||||||
|
This is built with the standard x86_64 Linux ABI version for AlmaLinux 9.
|
||||||
|
|
||||||
|
Use the command `/lib64/ld-linux-x86-64.so.2 --help` to see which CPUs your
|
||||||
|
Linux distribtion supports (and your CPU) look for the word "supported".
|
||||||
|
|
||||||
|
# FAQ: The DSO versioning link dependencies?
|
||||||
|
|
||||||
|
The information here provides an outline of what versions to expect from EL9
|
||||||
|
of the major dependencies, to assist you in a compatibility check with your
|
||||||
|
Linux distribution of choice.
|
||||||
|
|
||||||
|
The actual versions in our public releases can differ slightly inline with
|
||||||
|
the EL9 support compatibility and ABI versioning policies for the support
|
||||||
|
lifecycle of the distribution.
|
||||||
|
|
||||||
|
The most important items are the Direct Dependencies and the availabilty
|
||||||
|
of a suitable graphics DSO as per your '-d' choice.
|
||||||
|
|
||||||
|
Direct Runtime Dependencies (from /prefix/**):
|
||||||
|
|
||||||
|
| DSO Filename | DSO Symbol Version | Related Packages |
|
||||||
|
| :--------------------- | :------------------ | :------------------- |
|
||||||
|
| libc.so.6 | GLIBC_2.34 | glibc-2.34-168 |
|
||||||
|
| libz.so.1 | ZLIB_1.2.2 | zlib-1.2.11-40 |
|
||||||
|
|
||||||
|
Optional/Modular Runtime Dependencies (depending on graphics mode):
|
||||||
|
|
||||||
|
| DSO Filename | DSO Symbol Version | Related Packages |
|
||||||
|
| :--------------------- | :------------------ | :------------------- |
|
||||||
|
| libcairo.so.2 | | |
|
||||||
|
| libcairo.so.2.11704.0 | | cairo-1.17.4-7 |
|
||||||
|
| libGL.so.1 | | libglvnd-glx-1:1.3.4 |
|
||||||
|
| | | mesa-libGL-24.2.8-2 |
|
||||||
|
| libGLU.so.1 | | mesa-libGLU-9.0.1 |
|
||||||
|
|
||||||
|
Transitive/Third-Party Runtime Dependencies (for information only):
|
||||||
|
|
||||||
|
| DSO Filename | DSO Symbol Version | Related Packages |
|
||||||
|
| :--------------------- | :------------------ | :------------------- |
|
||||||
|
| libc.so.6 | GLIBC_2.35 | glibc-2.34-168 |
|
||||||
|
| libstdc++.so.6 | CXXABI_1.3.9 | gcc-c++-11.5.0-5 |
|
||||||
|
| libstdc++.so.6 | GLIBCXX_3.4 | gcc-c++-11.5.0-5 |
|
||||||
|
| libgcc_s.so.1 | GCC_4.2.0 | libgcc-11.5.0-2 |
|
||||||
|
| libxml2.so.2 | LIBXML2_2.6.0 | libxml2-2.9.13-9 |
|
||||||
|
| libpng16.so.16 | PNG16_0 | ibpng-2:1.6.37-12 |
|
||||||
|
| liblzma.so.5 | XZ_5.0 | xz-libs-5.2.5-8 |
|
||||||
|
| libz.so.1 | ZLIB_1.2.9 | zlib-1.2.11-40 |
|
||||||
Loading…
Reference in New Issue