mirror of
https://github.com/voideditor/void
synced 2026-05-22 17:08:25 +00:00
168 lines
6.4 KiB
Bash
Executable file
168 lines
6.4 KiB
Bash
Executable file
#!/bin/bash
|
|
|
|
# Exit on error
|
|
set -e
|
|
|
|
# Check platform
|
|
platform=$(uname)
|
|
|
|
if [[ "$platform" == "Darwin" ]]; then
|
|
echo "Running on macOS. Note that the AppImage created will only work on Linux systems."
|
|
if ! command -v docker &> /dev/null; then
|
|
echo "Docker Desktop for Mac is not installed. Please install it from https://www.docker.com/products/docker-desktop"
|
|
exit 1
|
|
fi
|
|
elif [[ "$platform" == "Linux" ]]; then
|
|
echo "Running on Linux. Proceeding with AppImage creation..."
|
|
else
|
|
echo "This script is intended to run on macOS or Linux. Current platform: $platform"
|
|
exit 1
|
|
fi
|
|
|
|
# Enable BuildKit
|
|
export DOCKER_BUILDKIT=1
|
|
|
|
BUILD_IMAGE_NAME="void-appimage-builder"
|
|
|
|
# Check if Docker is running
|
|
if ! docker info >/dev/null 2>&1; then
|
|
echo "Docker is not running. Please start Docker first."
|
|
exit 1
|
|
fi
|
|
|
|
# Check and install Buildx if needed
|
|
if ! docker buildx version >/dev/null 2>&1; then
|
|
echo "Installing Docker Buildx..."
|
|
mkdir -p ~/.docker/cli-plugins/
|
|
curl -SL https://github.com/docker/buildx/releases/download/v0.13.1/buildx-v0.13.1.linux-amd64 -o ~/.docker/cli-plugins/docker-buildx
|
|
chmod +x ~/.docker/cli-plugins/docker-buildx
|
|
fi
|
|
|
|
# Download appimagetool if not present
|
|
if [ ! -f "appimagetool" ]; then
|
|
echo "Downloading appimagetool..."
|
|
wget -O appimagetool "https://github.com/AppImage/AppImageKit/releases/download/continuous/appimagetool-x86_64.AppImage"
|
|
chmod +x appimagetool
|
|
fi
|
|
|
|
# Delete any existing AppImage to avoid bloating the build
|
|
rm -f Void-x86_64.AppImage
|
|
|
|
# Create build Dockerfile
|
|
echo "Creating build Dockerfile..."
|
|
cat > Dockerfile.build << 'EOF'
|
|
# syntax=docker/dockerfile:1
|
|
FROM ubuntu:20.04
|
|
|
|
# Install required dependencies
|
|
RUN apt-get update && apt-get install -y \
|
|
libfuse2 \
|
|
libglib2.0-0 \
|
|
libgtk-3-0 \
|
|
libx11-xcb1 \
|
|
libxss1 \
|
|
libxtst6 \
|
|
libnss3 \
|
|
libasound2 \
|
|
libdrm2 \
|
|
libgbm1 \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
WORKDIR /app
|
|
EOF
|
|
|
|
# Create .dockerignore file
|
|
echo "Creating .dockerignore file..."
|
|
cat > .dockerignore << EOF
|
|
Dockerfile.build
|
|
.dockerignore
|
|
.git
|
|
.gitignore
|
|
.DS_Store
|
|
*~
|
|
*.swp
|
|
*.swo
|
|
*.tmp
|
|
*.bak
|
|
*.log
|
|
*.err
|
|
node_modules/
|
|
venv/
|
|
*.egg-info/
|
|
*.tox/
|
|
dist/
|
|
EOF
|
|
|
|
# Build Docker image without cache
|
|
echo "Building Docker image (no cache)..."
|
|
docker build --no-cache -t "$BUILD_IMAGE_NAME" -f Dockerfile.build .
|
|
|
|
# Create AppImage using local appimagetool
|
|
echo "Creating AppImage..."
|
|
docker run --rm --privileged -v "$(pwd):/app" "$BUILD_IMAGE_NAME" bash -c '
|
|
cd /app && \
|
|
rm -rf VoidApp.AppDir && \
|
|
mkdir -p VoidApp.AppDir/usr/bin VoidApp.AppDir/usr/lib VoidApp.AppDir/usr/share/applications && \
|
|
find . -maxdepth 1 ! -name VoidApp.AppDir ! -name "." ! -name ".." -exec cp -r {} VoidApp.AppDir/usr/bin/ \; && \
|
|
cp void.png VoidApp.AppDir/ && \
|
|
echo "[Desktop Entry]" > VoidApp.AppDir/void.desktop && \
|
|
echo "Name=Void" >> VoidApp.AppDir/void.desktop && \
|
|
echo "Comment=Open source AI code editor." >> VoidApp.AppDir/void.desktop && \
|
|
echo "GenericName=Text Editor" >> VoidApp.AppDir/void.desktop && \
|
|
echo "Exec=void %F" >> VoidApp.AppDir/void.desktop && \
|
|
echo "Icon=void" >> VoidApp.AppDir/void.desktop && \
|
|
echo "Type=Application" >> VoidApp.AppDir/void.desktop && \
|
|
echo "StartupNotify=false" >> VoidApp.AppDir/void.desktop && \
|
|
echo "StartupWMClass=Void" >> VoidApp.AppDir/void.desktop && \
|
|
echo "Categories=TextEditor;Development;IDE;" >> VoidApp.AppDir/void.desktop && \
|
|
echo "MimeType=application/x-void-workspace;" >> VoidApp.AppDir/void.desktop && \
|
|
echo "Keywords=void;" >> VoidApp.AppDir/void.desktop && \
|
|
echo "Actions=new-empty-window;" >> VoidApp.AppDir/void.desktop && \
|
|
echo "[Desktop Action new-empty-window]" >> VoidApp.AppDir/void.desktop && \
|
|
echo "Name=New Empty Window" >> VoidApp.AppDir/void.desktop && \
|
|
echo "Name[de]=Neues leeres Fenster" >> VoidApp.AppDir/void.desktop && \
|
|
echo "Name[es]=Nueva ventana vacía" >> VoidApp.AppDir/void.desktop && \
|
|
echo "Name[fr]=Nouvelle fenêtre vide" >> VoidApp.AppDir/void.desktop && \
|
|
echo "Name[it]=Nuova finestra vuota" >> VoidApp.AppDir/void.desktop && \
|
|
echo "Name[ja]=新しい空のウィンドウ" >> VoidApp.AppDir/void.desktop && \
|
|
echo "Name[ko]=새 빈 창" >> VoidApp.AppDir/void.desktop && \
|
|
echo "Name[ru]=Новое пустое окно" >> VoidApp.AppDir/void.desktop && \
|
|
echo "Name[zh_CN]=新建空窗口" >> VoidApp.AppDir/void.desktop && \
|
|
echo "Name[zh_TW]=開新空視窗" >> VoidApp.AppDir/void.desktop && \
|
|
echo "Exec=void --new-window %F" >> VoidApp.AppDir/void.desktop && \
|
|
echo "Icon=void" >> VoidApp.AppDir/void.desktop && \
|
|
chmod +x VoidApp.AppDir/void.desktop && \
|
|
cp VoidApp.AppDir/void.desktop VoidApp.AppDir/usr/share/applications/ && \
|
|
echo "[Desktop Entry]" > VoidApp.AppDir/void-url-handler.desktop && \
|
|
echo "Name=Void - URL Handler" > VoidApp.AppDir/void-url-handler.desktop && \
|
|
echo "Comment=Open source AI code editor." > VoidApp.AppDir/void-url-handler.desktop && \
|
|
echo "GenericName=Text Editor" > VoidApp.AppDir/void-url-handler.desktop && \
|
|
echo "Exec=void --open-url %U" > VoidApp.AppDir/void-url-handler.desktop && \
|
|
echo "Icon=void" > VoidApp.AppDir/void-url-handler.desktop && \
|
|
echo "Type=Application" > VoidApp.AppDir/void-url-handler.desktop && \
|
|
echo "NoDisplay=true" > VoidApp.AppDir/void-url-handler.desktop && \
|
|
echo "StartupNotify=true" > VoidApp.AppDir/void-url-handler.desktop && \
|
|
echo "Categories=Utility;TextEditor;Development;IDE;" > VoidApp.AppDir/void-url-handler.desktop && \
|
|
echo "MimeType=x-scheme-handler/void;" > VoidApp.AppDir/void-url-handler.desktop && \
|
|
echo "Keywords=void;" > VoidApp.AppDir/void-url-handler.desktop && \
|
|
chmod +x VoidApp.AppDir/void-url-handler.desktop && \
|
|
cp VoidApp.AppDir/void-url-handler.desktop VoidApp.AppDir/usr/share/applications/ && \
|
|
echo "#!/bin/bash" > VoidApp.AppDir/AppRun && \
|
|
echo "HERE=\$(dirname \"\$(readlink -f \"\${0}\")\")" >> VoidApp.AppDir/AppRun && \
|
|
echo "export PATH=\${HERE}/usr/bin:\${PATH}" >> VoidApp.AppDir/AppRun && \
|
|
echo "export LD_LIBRARY_PATH=\${HERE}/usr/lib:\${LD_LIBRARY_PATH}" >> VoidApp.AppDir/AppRun && \
|
|
echo "exec \${HERE}/usr/bin/void --no-sandbox \"\$@\"" >> VoidApp.AppDir/AppRun && \
|
|
chmod +x VoidApp.AppDir/AppRun && \
|
|
chmod -R 755 VoidApp.AppDir && \
|
|
|
|
# Strip unneeded symbols from the binary to reduce size
|
|
strip --strip-unneeded VoidApp.AppDir/usr/bin/void
|
|
|
|
ls -la VoidApp.AppDir/ && \
|
|
ARCH=x86_64 ./appimagetool -n VoidApp.AppDir Void-x86_64.AppImage
|
|
'
|
|
|
|
# Clean up
|
|
rm -rf VoidApp.AppDir .dockerignore appimagetool
|
|
|
|
echo "AppImage creation complete! Your AppImage is: Void-x86_64.AppImage"
|