mirror of
https://github.com/cucumber-sp/yandex-music-linux.git
synced 2024-12-23 22:22:59 +03:00
Switch generate_packages to Python
dep fix
This commit is contained in:
parent
b3e166c8a5
commit
af2bdcbd02
24
.github/workflows/update-build-release.yml
vendored
24
.github/workflows/update-build-release.yml
vendored
@ -15,19 +15,23 @@ jobs:
|
||||
container:
|
||||
image: archlinux:latest
|
||||
steps:
|
||||
- name: Pacman database update
|
||||
run: pacman -Syy --noconfirm
|
||||
|
||||
- name: Install deps
|
||||
run: pacman -S --noconfirm git jq nix
|
||||
- name: Packages install
|
||||
run: pacman -Syy --noconfirm && pacman -S --noconfirm git jq nix python python-requests
|
||||
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Check and update current packages
|
||||
run: sh .github/workflows/update_packages.sh
|
||||
- name: Fix git access
|
||||
run:
|
||||
git config --global --add safe.directory "*"
|
||||
|
||||
- name: Retrieve version
|
||||
- name: Update version file
|
||||
run: python utility/update_version.py
|
||||
|
||||
- name: Update package files
|
||||
run: python utility/generate_packages.py
|
||||
|
||||
- name: Retrieve version to make commit
|
||||
run: sh .github/workflows/retrieve_version.sh
|
||||
|
||||
- name: Commit and push changes
|
||||
@ -38,7 +42,8 @@ jobs:
|
||||
add: "."
|
||||
author_name: "GitHub Actions"
|
||||
author_email: "loraner123@gmail.com"
|
||||
- name: Publish AUR package
|
||||
|
||||
- name: Publish package changes to AUR
|
||||
uses: KSXGitHub/github-actions-deploy-aur@v2.7.0
|
||||
with:
|
||||
pkgname: "yandex-music"
|
||||
@ -50,6 +55,7 @@ jobs:
|
||||
ssh_private_key: "${{ secrets.AUR_SSH_PRIVATE_KEY }}"
|
||||
commit_message: "${{ github.event.commits[0].message }}"
|
||||
ssh_keyscan_types: "rsa,dsa,ecdsa,ed25519"
|
||||
|
||||
outputs:
|
||||
new_version: ${{ steps.commit.outputs.commited }}
|
||||
commit_long_sha: ${{ steps.commit.outputs.commit_long_sha }}
|
||||
|
25
.github/workflows/update_packages.sh
vendored
25
.github/workflows/update_packages.sh
vendored
@ -1,25 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
|
||||
if [ -f /etc/os-release ]; then
|
||||
. /etc/os-release
|
||||
OS=$NAME
|
||||
elif [ -f /etc/lsb-release ]; then
|
||||
. /etc/lsb-release
|
||||
OS=$DISTRIB_ID
|
||||
else
|
||||
OS=$(uname -s)
|
||||
fi
|
||||
|
||||
case $OS in
|
||||
"Arch Linux")
|
||||
echo "Arch Linux"
|
||||
pacman -S --noconfirm git sudo base-devel jq nix
|
||||
git config --global --add safe.directory "*"
|
||||
sh ./utility/generate_packages.sh
|
||||
;;
|
||||
*)
|
||||
echo "Operating system is not recognized."
|
||||
;;
|
||||
esac
|
73
utility/generate_packages.py
Normal file
73
utility/generate_packages.py
Normal file
@ -0,0 +1,73 @@
|
||||
import json
|
||||
import os
|
||||
import shutil
|
||||
import subprocess
|
||||
|
||||
def check_dependency(dependency):
|
||||
if shutil.which(dependency):
|
||||
return True
|
||||
print(f"{dependency} not installed.")
|
||||
return False
|
||||
|
||||
script_dir = os.path.dirname(os.path.realpath(__file__))
|
||||
|
||||
# loading versions information from json
|
||||
version_info_path = os.path.join(script_dir, "version_info.json")
|
||||
with open(version_info_path, "r") as f:
|
||||
version_info = json.load(f)
|
||||
|
||||
# Arch
|
||||
def generate_arch():
|
||||
pkgbuild_template = os.path.join(script_dir, "../templates/PKGBUILD")
|
||||
pkgbuild_path = os.path.join(script_dir, "../PKGBUILD")
|
||||
|
||||
with open(pkgbuild_template, "r") as f:
|
||||
pkgbuild = f.read()
|
||||
|
||||
pkgbuild = pkgbuild.replace("%version%", version_info["ym"]["version"])
|
||||
pkgbuild = pkgbuild.replace("%release%", "1")
|
||||
pkgbuild = pkgbuild.replace("%exe_name%", version_info["ym"]["exe_name"])
|
||||
pkgbuild = pkgbuild.replace("%exe_link%", version_info["ym"]["exe_link"])
|
||||
pkgbuild = pkgbuild.replace("%exe_sha256%", version_info["ym"]["exe_sha256"])
|
||||
|
||||
with open(pkgbuild_path, "w") as f:
|
||||
f.write(pkgbuild)
|
||||
|
||||
|
||||
# Nix
|
||||
|
||||
def is_nix_version_2_19():
|
||||
version = subprocess.run(["nix", "--version"], capture_output=True, text=True).stdout.split()[2]
|
||||
major, minor, _ = map(int, version.split("."))
|
||||
if major > 2 or (minor >= 19 and major == 2):
|
||||
return True
|
||||
return False
|
||||
|
||||
def generate_nix():
|
||||
nixcmd = "nix --extra-experimental-features nix-command --extra-experimental-features flakes"
|
||||
flake_path = os.path.join(script_dir, "../flake.nix")
|
||||
|
||||
# Update url in flake.nix
|
||||
with open(flake_path, "r") as f:
|
||||
flake = f.read()
|
||||
_start_index = flake.find("ymExe.url = ")
|
||||
_end_index = flake.find(";", _start_index)
|
||||
flake = flake.replace(flake[_start_index:_end_index+1], f'ymExe.url = {version_info["ym"]["exe_link"]};')
|
||||
with open(flake_path, "w") as f:
|
||||
f.write(flake)
|
||||
|
||||
if not check_dependency("nix"):
|
||||
print("flake.nix was updated, but nix is not installed to update flake.lock")
|
||||
return
|
||||
|
||||
if is_nix_version_2_19():
|
||||
subprocess.run(f"{nixcmd} flake update ymExe", shell=True)
|
||||
else:
|
||||
subprocess.run(f"{nixcmd} flake lock --update-input ymExe", shell=True)
|
||||
|
||||
if subprocess.run("git status --porcelain -- flake.lock", shell=True).stdout:
|
||||
subprocess.run(f"{nixcmd} flake update", shell=True)
|
||||
|
||||
|
||||
generate_arch()
|
||||
generate_nix()
|
@ -1,113 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
|
||||
TEMPDIR=
|
||||
exe_link=
|
||||
version=
|
||||
exe_name=
|
||||
exe_sha256=
|
||||
|
||||
clear() {
|
||||
rm -rf "$TEMPDIR"
|
||||
}
|
||||
TEMPDIR="$(mktemp -d)"
|
||||
trap clear EXIT
|
||||
|
||||
check_dep() {
|
||||
if ! command -v "$@" &>/dev/null; then
|
||||
echo "$@" not installed. >&2
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
check_deps() {
|
||||
check_dep sed
|
||||
check_dep curl
|
||||
check_dep jq
|
||||
}
|
||||
|
||||
load_current_version() {
|
||||
# loading json from file https://music-desktop-application.s3.yandex.net/stable/download.json
|
||||
curl -s https://music-desktop-application.s3.yandex.net/stable/download.json > "$TEMPDIR"/download.json
|
||||
|
||||
exe_link=$(jq -r '.windows' "$TEMPDIR"/download.json)
|
||||
version="$(echo "$exe_link" | grep -oP '(?<=x64_).*(?=.exe)')"
|
||||
exe_name="$(basename "$exe_link")"
|
||||
|
||||
echo "Windows url: $exe_link"
|
||||
echo "Version: $version"
|
||||
echo "Exe name: $exe_name"
|
||||
|
||||
curl "$exe_link" > "$TEMPDIR/$exe_name"
|
||||
|
||||
exe_sha256="$(sha256sum "$TEMPDIR/$exe_name" | awk '{print $1}')"
|
||||
|
||||
echo "Exe sha256: $exe_sha256"
|
||||
}
|
||||
|
||||
update_version() {
|
||||
rm -rf ./utility/version_info.json
|
||||
|
||||
cat > ./utility/version_info.json <<EOF
|
||||
{
|
||||
"ym": {
|
||||
"version": "$version",
|
||||
"exe_name": "$exe_name",
|
||||
"exe_link": "$exe_link",
|
||||
"exe_sha256": "$exe_sha256"
|
||||
}
|
||||
}
|
||||
EOF
|
||||
|
||||
}
|
||||
|
||||
update_pkbuild() {
|
||||
cp ./templates/PKGBUILD ./PKGBUILD
|
||||
|
||||
sed -i "s#%version%#$version#g" ./PKGBUILD
|
||||
sed -i "s#%release%#1#g" ./PKGBUILD
|
||||
sed -i "s#%exe_name%#$exe_name#g" ./PKGBUILD
|
||||
sed -i "s#%exe_link%#$exe_link#g" ./PKGBUILD
|
||||
sed -i "s#%exe_sha256%#$exe_sha256#g" ./PKGBUILD
|
||||
}
|
||||
|
||||
is_nix_version_2_19() {
|
||||
local version re major minor
|
||||
|
||||
version="$(nix --version | awk '{print $3}')"
|
||||
re='([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)'
|
||||
if [[ $version =~ $re ]]; then
|
||||
major="${BASH_REMATCH[1]}"
|
||||
minor="${BASH_REMATCH[2]}"
|
||||
if [ "$major" -gt 2 ] || [ "$minor" -ge 19 ]; then
|
||||
return 0
|
||||
fi
|
||||
fi
|
||||
return 1
|
||||
}
|
||||
|
||||
update_flake() {
|
||||
local nixcmd="nix --extra-experimental-features nix-command --extra-experimental-features flakes"
|
||||
sed -i 's#\(ymExe\.url\s*=\s*\).*;#\1'"$exe_link"';#' ./flake.nix
|
||||
if check_dep nix; then
|
||||
# Starting from 2.19 the interface of `nix flake` command changed. See
|
||||
# https://nixos.org/manual/nix/stable/release-notes/rl-2.19
|
||||
if is_nix_version_2_19; then
|
||||
$nixcmd flake update ymExe
|
||||
else
|
||||
$nixcmd flake lock --update-input ymExe
|
||||
fi
|
||||
if [[ $(git status --porcelain -- flake.lock) ]]; then
|
||||
$nixcmd flake update
|
||||
fi
|
||||
else
|
||||
echo "flake.nix was updated, but nix is not installed to update flake.lock"
|
||||
fi
|
||||
}
|
||||
|
||||
check_deps
|
||||
load_current_version
|
||||
update_version
|
||||
update_pkbuild
|
||||
update_flake
|
77
utility/update_version.py
Normal file
77
utility/update_version.py
Normal file
@ -0,0 +1,77 @@
|
||||
import atexit
|
||||
import hashlib
|
||||
import json
|
||||
import os
|
||||
import shutil
|
||||
import tempfile
|
||||
import requests
|
||||
|
||||
YM_VERSIONS_URL = "https://music-desktop-application.s3.yandex.net/stable/download.json"
|
||||
ELECTRON_VERSIONS_URL = "https://releases.electronjs.org/releases.json"
|
||||
ELECTRON_DOWNLOAD_URL = "https://github.com/electron/electron/releases/download/v{0}/electron-v{0}-linux-{1}.zip"
|
||||
|
||||
script_dir = os.path.dirname(os.path.realpath(__file__))
|
||||
tempdir = tempfile.mkdtemp()
|
||||
|
||||
def clear():
|
||||
shutil.rmtree(tempdir)
|
||||
|
||||
atexit.register(clear)
|
||||
|
||||
def assert_dependency(dependency):
|
||||
if shutil.which(dependency):
|
||||
return
|
||||
print(f"{dependency} not installed.")
|
||||
exit(1)
|
||||
|
||||
# loading versions json
|
||||
versions_obj = requests.get(YM_VERSIONS_URL).json()
|
||||
exe_link = versions_obj["windows"]
|
||||
version = exe_link.split("x64_")[1].split(".exe")[0]
|
||||
exe_name = os.path.basename(exe_link)
|
||||
|
||||
# downloading exe file
|
||||
print(f"Downloading {exe_name}")
|
||||
exe_path = os.path.join(tempdir, exe_name)
|
||||
with open(exe_path, "wb") as f:
|
||||
f.write(requests.get(exe_link).content)
|
||||
|
||||
# calculating sha256
|
||||
print("Calculating sha256")
|
||||
with open(exe_path, "rb") as f:
|
||||
exe_sha256 = hashlib.sha256(f.read()).hexdigest()
|
||||
print(f"Sha256: {exe_sha256}")
|
||||
|
||||
# getting electron version
|
||||
print("Getting latest electron version")
|
||||
electron_releases = requests.get(ELECTRON_VERSIONS_URL).json()
|
||||
electron_versions = list(map(lambda x: x["version"], electron_releases))
|
||||
electron_versions = list(filter(lambda x: "-" not in x and x.startswith("27"), electron_versions))
|
||||
electron_version = electron_versions[0]
|
||||
print(f"Latest electron version: {electron_version}")
|
||||
electron_x64 = ELECTRON_DOWNLOAD_URL.format(electron_version, "x64")
|
||||
electron_armv7l = ELECTRON_DOWNLOAD_URL.format(electron_version, "armv7l")
|
||||
electron_arm64 = ELECTRON_DOWNLOAD_URL.format(electron_version, "arm64")
|
||||
|
||||
version_info = {
|
||||
"ym": {
|
||||
"version": version,
|
||||
"exe_name": exe_name,
|
||||
"exe_link": exe_link,
|
||||
"exe_sha256": exe_sha256
|
||||
},
|
||||
"electron": {
|
||||
"version": electron_version,
|
||||
"x64": electron_x64,
|
||||
"armv7l": electron_armv7l,
|
||||
"arm64": electron_arm64
|
||||
}
|
||||
}
|
||||
|
||||
version_file = os.path.join(script_dir, "version_info.json")
|
||||
|
||||
# writing json to file
|
||||
with open(version_file, "w") as f:
|
||||
f.write(json.dumps(version_info, indent=4))
|
||||
|
||||
print(f"Version info written to {version_file}")
|
Loading…
Reference in New Issue
Block a user