mirror of
https://git.mirrors.martin98.com/https://github.com/Ultimaker/Cura
synced 2025-06-04 11:14:21 +08:00
Fix the AppImage-builder scripts
Contributes CURA-10951
This commit is contained in:
parent
f1df7f67d5
commit
c5e3821116
2
.github/workflows/linux.yml
vendored
2
.github/workflows/linux.yml
vendored
@ -245,7 +245,7 @@ jobs:
|
|||||||
|
|
||||||
- name: Create the Linux AppImage (Bash)
|
- name: Create the Linux AppImage (Bash)
|
||||||
run: |
|
run: |
|
||||||
python ../cura_inst/packaging/AppImage/create_appimage.py ./UltiMaker-Cura $CURA_VERSION_FULL "${{ steps.filename.outputs.INSTALLER_FILENAME }}.AppImage"
|
python ../cura_inst/packaging/AppImage-builder/create_appimage.py ./UltiMaker-Cura $CURA_VERSION_FULL "${{ steps.filename.outputs.INSTALLER_FILENAME }}.AppImage"
|
||||||
chmod +x "${{ steps.filename.outputs.INSTALLER_FILENAME }}.AppImage"
|
chmod +x "${{ steps.filename.outputs.INSTALLER_FILENAME }}.AppImage"
|
||||||
working-directory: dist
|
working-directory: dist
|
||||||
|
|
||||||
|
@ -7,7 +7,7 @@ AppDir:
|
|||||||
name: UltiMaker-Cura
|
name: UltiMaker-Cura
|
||||||
icon: {{ icon }}
|
icon: {{ icon }}
|
||||||
version: {{ version }}
|
version: {{ version }}
|
||||||
exec: entrypoint.sh
|
exec: UltiMaker-Cura
|
||||||
exec_args: $@
|
exec_args: $@
|
||||||
apt:
|
apt:
|
||||||
arch:
|
arch:
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
# Cura is released under the terms of the LGPLv3 or higher.
|
# Cura is released under the terms of the LGPLv3 or higher.
|
||||||
|
|
||||||
|
|
||||||
|
from pathlib import Path
|
||||||
import argparse # Command line arguments parsing and help.
|
import argparse # Command line arguments parsing and help.
|
||||||
from jinja2 import Template
|
from jinja2 import Template
|
||||||
import os # Finding installation directory.
|
import os # Finding installation directory.
|
||||||
@ -10,6 +11,7 @@ import shutil # Copying files.
|
|||||||
import stat # For setting file permissions.
|
import stat # For setting file permissions.
|
||||||
import subprocess # For calling system commands.
|
import subprocess # For calling system commands.
|
||||||
|
|
||||||
|
|
||||||
def build_appimage(dist_path, version, appimage_filename):
|
def build_appimage(dist_path, version, appimage_filename):
|
||||||
"""
|
"""
|
||||||
Creates an AppImage file from the build artefacts created so far.
|
Creates an AppImage file from the build artefacts created so far.
|
||||||
@ -27,37 +29,38 @@ def build_appimage(dist_path, version, appimage_filename):
|
|||||||
|
|
||||||
|
|
||||||
def generate_appimage_builder_config(dist_path, version, appimage_filename):
|
def generate_appimage_builder_config(dist_path, version, appimage_filename):
|
||||||
with open(os.path.join(dist_path, "AppImageBuilder.yml.jinja"), "r") as appimage_builder_file:
|
with open(os.path.join(Path(__file__).parent, "AppImageBuilder.yml.jinja"), "r") as appimage_builder_file:
|
||||||
appimage_builder = appimage_builder_file.read()
|
appimage_builder = appimage_builder_file.read()
|
||||||
|
|
||||||
template = Template(appimage_builder)
|
template = Template(appimage_builder)
|
||||||
appimage_builder = template.render(app_dir = dist_path,
|
appimage_builder = template.render(app_dir = "./AppDir",
|
||||||
icon = os.path.join("..", "icons", "cura-icon_256x256.png"),
|
icon = "cura-icon.png",
|
||||||
version = version,
|
version = version,
|
||||||
arch = "x86_64",
|
arch = "x86_64",
|
||||||
file_name = appimage_filename)
|
file_name = appimage_filename)
|
||||||
|
|
||||||
with open(os.path.join(dist_path, "AppImageBuilder.yml"), "w") as appimage_builder_file:
|
with open(os.path.join(Path(__file__).parent, "AppImageBuilder.yml"), "w") as appimage_builder_file:
|
||||||
appimage_builder_file.write(appimage_builder)
|
appimage_builder_file.write(appimage_builder)
|
||||||
|
|
||||||
|
|
||||||
def generate_appimage_entrypoint(dist_path):
|
def generate_appimage_entrypoint(dist_path):
|
||||||
with open(os.path.join(dist_path, "entrypoint.sh.jinja"), "r") as entrypoint_file:
|
with open(os.path.join(Path(__file__).parent, "entrypoint.sh.jinja"), "r") as entrypoint_file:
|
||||||
entrypoint = entrypoint_file.read()
|
entrypoint = entrypoint_file.read()
|
||||||
|
|
||||||
template = Template(entrypoint)
|
template = Template(entrypoint)
|
||||||
entrypoint = template.render(executable = "UltiMaker-Cura")
|
entrypoint = template.render(executable = "UltiMaker-Cura")
|
||||||
|
|
||||||
with open(os.path.join(dist_path, "entrypoint.sh"), "w") as entrypoint_file:
|
with open(os.path.join(Path(__file__).parent, "entrypoint.sh"), "w") as entrypoint_file:
|
||||||
entrypoint_file.write(entrypoint)
|
entrypoint_file.write(entrypoint)
|
||||||
|
|
||||||
|
|
||||||
def copy_files(dist_path):
|
def copy_files(dist_path):
|
||||||
"""
|
"""
|
||||||
Copy metadata files for the metadata of the AppImage.
|
Copy metadata files for the metadata of the AppImage.
|
||||||
"""
|
"""
|
||||||
copied_files = {
|
copied_files = {
|
||||||
os.path.join("..", "icons", "cura-icon.svg"): os.path.join("usr", "share", "icons", "hicolor", "scalable", "apps", "cura-icon.svg"),
|
os.path.join("..", "icons", "cura-icon.svg"): os.path.join("usr", "share", "icons", "hicolor", "scalable", "apps", "cura-icon.svg"),
|
||||||
os.path.join("..", "icons", "cura-icon_64x64.png"): os.path.join("usr", "share", "icons", "hicolor", "64x64", "apps", "cura-icon.png"),
|
os.path.join("..", "icons", "cura-icon_64x64.png"): os.path.join("usr", "share", "icons", "hicolor", "64x64", "apps", "cura-icon.png"),
|
||||||
os.path.join("..", "icons", "cura-icon_128x128.png"): os.path.join("usr", "share", "icons", "hicolor", "128x128", "apps", "cura-icon.png"),
|
os.path.join("..", "icons", "cura-icon_128x128.png"): os.path.join("usr", "share", "icons", "hicolor", "128x128", "apps", "cura-icon.png"),
|
||||||
os.path.join("..", "icons", "cura-icon_256x256.png"): os.path.join("usr", "share", "icons", "hicolor", "256x256", "apps", "cura-icon.png"),
|
os.path.join("..", "icons", "cura-icon_256x256.png"): os.path.join("usr", "share", "icons", "hicolor", "256x256", "apps", "cura-icon.png"),
|
||||||
os.path.join("..", "icons", "cura-icon_256x256.png"): "cura-icon.png",
|
os.path.join("..", "icons", "cura-icon_256x256.png"): "cura-icon.png",
|
||||||
@ -69,20 +72,25 @@ def copy_files(dist_path):
|
|||||||
packaging_dir = os.path.dirname(__file__)
|
packaging_dir = os.path.dirname(__file__)
|
||||||
for source, dest in copied_files.items():
|
for source, dest in copied_files.items():
|
||||||
dest_file_path = os.path.join(dist_path, dest)
|
dest_file_path = os.path.join(dist_path, dest)
|
||||||
os.makedirs(os.path.dirname(dest_file_path), exist_ok=True)
|
os.makedirs(os.path.dirname(dest_file_path), exist_ok = True)
|
||||||
shutil.copyfile(os.path.join(packaging_dir, source), dest_file_path)
|
shutil.copyfile(os.path.join(packaging_dir, source), dest_file_path)
|
||||||
|
|
||||||
# Ensure that entrypoint.sh has the proper permissions: 755 (user reads, writes and executes, group reads and executes, world reads and executes).
|
# Ensure that entrypoint.sh has the proper permissions: 755 (user reads, writes and executes, group reads and executes, world reads and executes).
|
||||||
os.chmod(os.path.join(dist_path, "entrypoint.sh"), stat.S_IRUSR | stat.S_IWUSR | stat.S_IXUSR | stat.S_IRGRP | stat.S_IXGRP | stat.S_IROTH | stat.S_IXOTH)
|
os.chmod(os.path.join(dist_path, "entrypoint.sh"), stat.S_IRUSR | stat.S_IWUSR | stat.S_IXUSR | stat.S_IRGRP | stat.S_IXGRP | stat.S_IROTH | stat.S_IXOTH)
|
||||||
|
|
||||||
|
|
||||||
def create_appimage(dist_path, appimage_filename):
|
def create_appimage(dist_path, appimage_filename):
|
||||||
appimage_path = os.path.join(dist_path, "..", appimage_filename)
|
try:
|
||||||
appimagetool = os.getenv("APPIMAGETOOL_LOCATION", "appimagetool")
|
os.rename(dist_path, "AppDir")
|
||||||
command = [appimagetool, "--appimage-extract-and-run", f"{dist_path}/", appimage_path]
|
except OSError:
|
||||||
|
pass
|
||||||
|
appimagetool = os.getenv("APPIMAGEBUILDER_LOCATION", "appimage-builder-x86_64.AppImage")
|
||||||
|
command = [appimagetool, "--recipe", os.path.join(Path(__file__).parent, "AppImageBuilder.yml")]
|
||||||
result = subprocess.call(command)
|
result = subprocess.call(command)
|
||||||
if result != 0:
|
if result != 0:
|
||||||
raise RuntimeError(f"The AppImageTool command returned non-zero: {result}")
|
raise RuntimeError(f"The AppImageTool command returned non-zero: {result}")
|
||||||
|
|
||||||
|
|
||||||
def sign_appimage(dist_path, appimage_filename):
|
def sign_appimage(dist_path, appimage_filename):
|
||||||
appimage_path = os.path.join(dist_path, "..", appimage_filename)
|
appimage_path = os.path.join(dist_path, "..", appimage_filename)
|
||||||
command = ["gpg", "--yes", "--armor", "--detach-sig", appimage_path]
|
command = ["gpg", "--yes", "--armor", "--detach-sig", appimage_path]
|
||||||
@ -90,10 +98,11 @@ def sign_appimage(dist_path, appimage_filename):
|
|||||||
if result != 0:
|
if result != 0:
|
||||||
raise RuntimeError(f"The GPG command returned non-zero: {result}")
|
raise RuntimeError(f"The GPG command returned non-zero: {result}")
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
parser = argparse.ArgumentParser(description = "Create AppImages of Cura.")
|
parser = argparse.ArgumentParser(description = "Create AppImages of Cura.")
|
||||||
parser.add_argument("dist_path", type=str, help="Path to where PyInstaller installed the distribution of Cura.")
|
parser.add_argument("dist_path", type = str, help = "Path to where PyInstaller installed the distribution of Cura.")
|
||||||
parser.add_argument("version", type=str, help="Full version number of Cura (e.g. '5.1.0-beta')")
|
parser.add_argument("version", type = str, help = "Full version number of Cura (e.g. '5.1.0-beta')")
|
||||||
parser.add_argument("filename", type = str, help = "Filename of the AppImage (e.g. 'UltiMaker-Cura-5.1.0-beta-Linux-X64.AppImage')")
|
parser.add_argument("filename", type = str, help = "Filename of the AppImage (e.g. 'UltiMaker-Cura-5.1.0-beta-Linux-X64.AppImage')")
|
||||||
args = parser.parse_args()
|
args = parser.parse_args()
|
||||||
build_appimage(args.dist_path, args.version, args.filename)
|
build_appimage(args.dist_path, args.version, args.filename)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user