diff --git a/.github/workflows/continuous.yml b/.github/workflows/continuous.yml index 0cddc4d1..de7ff1fb 100644 --- a/.github/workflows/continuous.yml +++ b/.github/workflows/continuous.yml @@ -14,9 +14,18 @@ jobs: sudo snap install --classic snapcraft snapcraft --destructive-mode + - name: Upload artifact + uses: actions/upload-artifact@v2 + with: + name: guiscrcpy-snap + path: 'guiscrcpy_*.snap' + + - name: Publish to Snap Store run: | echo "${{ secrets.SNAP_DEPLOY_TOKEN }}" > token.txt + mkdir -p ~/.snapcraft + cat token.txt | base64 --decode --ignore-garbage > ~/.snapcraft/snapcraft.cfg # if: github.ref == 'refs/heads/master' snapcraft upload --release=edge *.snap diff --git a/snap/snapcraft.yaml b/snap/snapcraft.yaml index ffb66351..dd787645 100644 --- a/snap/snapcraft.yaml +++ b/snap/snapcraft.yaml @@ -37,9 +37,7 @@ apps: command-chain: &command-chain-common - bin/debian-multiarch-triplet-provider-launch - bin/classic-launch - - bin/desktop-launch - bin/guiscrcpy - desktop: share/applications/guiscrcpy.desktop parts: @@ -61,12 +59,39 @@ parts: after: [classic-launch, debian-multiarch-triplet-provider-launch] # See 'snapcraft plugins' build-packages: - - python3-build + - python3-pip override-build: | - python -m build . - tar -xvf dist/*.tar.gz setup.py - rm -rf dist - snapcraftctl build + python -m venv $SNAPCRAFT_PART_INSTALL + source $SNAPCRAFT_PART_INSTALL/bin/activate + pip install poetry + python -m poetry install -E PySide2 --no-dev + ls -al $SNAPCRAFT_PART_INSTALL + find "${SNAPCRAFT_PART_INSTALL}" -type f -executable -print0 | xargs -0 \ + sed -i "1 s|^#\\!${SNAPCRAFT_PYTHON_VENV_INTERP_PATH}.*$|#\\!/usr/bin/env ${SNAPCRAFT_PYTHON_INTERPRETER}|" + + determine_link_target() { + opts_state="$(set +o +x | grep xtrace)" + interp_dir="$(dirname "${SNAPCRAFT_PYTHON_VENV_INTERP_PATH}")" + # Determine python based on PATH, then resolve it, e.g: + # (1) /home/ubuntu/.venv/snapcraft/bin/python3 -> /usr/bin/python3.8 + # (2) /usr/bin/python3 -> /usr/bin/python3.8 + # (3) /root/stage/python3 -> /root/stage/python3.8 + # (4) /root/parts//install/usr/bin/python3 -> /root/parts//install/usr/bin/python3.8 + python_path="$(which "${SNAPCRAFT_PYTHON_INTERPRETER}")" + python_path="$(readlink -e "${python_path}")" + for dir in "${SNAPCRAFT_PART_INSTALL}" "${SNAPCRAFT_STAGE}"; do + if echo "${python_path}" | grep -q "${dir}"; then + python_path="$(realpath --strip --relative-to="${interp_dir}" \\ + "${python_path}")" + break + fi + done + echo "${python_path}" + eval "${opts_state}" + } + python_path="$(determine_link_target)" + ln -sf "${python_path}" "${SNAPCRAFT_PYTHON_VENV_INTERP_PATH}" + plugin: python source: .