From 33a6670cadc9d05fb0ce519ccce02d95e7ba7451 Mon Sep 17 00:00:00 2001 From: Baptiste Augrain Date: Fri, 17 Dec 2021 23:21:31 +0100 Subject: [PATCH] feat: publish snap (#942) --- .github/workflows/linux.yml | 25 +++++- README.md | 14 +-- stores/snapcraft/check_deploy.sh | 35 ++++++++ stores/snapcraft/deploy.sh | 9 ++ .../snapcraft/snap/local/bin/electron-launch | 34 +++++++ stores/snapcraft/snap/snapcraft.yaml | 90 +++++++++++++++++++ 6 files changed, 198 insertions(+), 9 deletions(-) create mode 100755 stores/snapcraft/check_deploy.sh create mode 100755 stores/snapcraft/deploy.sh create mode 100755 stores/snapcraft/snap/local/bin/electron-launch create mode 100644 stores/snapcraft/snap/snapcraft.yaml diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index 036219c..2a3e3f3 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -9,7 +9,7 @@ on: branches: [ master ] jobs: - linux: + release: runs-on: ubuntu-latest container: image: ${{ matrix.image }} @@ -93,9 +93,30 @@ jobs: if: env.SHOULD_BUILD == 'yes' && env.SHOULD_DEPLOY == 'yes' - name: Update versions repo - if: env.SHOULD_BUILD == 'yes' && env.SHOULD_DEPLOY == 'yes' run: ./update_version.sh env: GITHUB_TOKEN: ${{ secrets.STRONGER_GITHUB_TOKEN }} GITHUB_USERNAME: ${{ github.repository_owner }} + if: env.SHOULD_BUILD == 'yes' && env.SHOULD_DEPLOY == 'yes' + snap: + needs: release + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v2 + + - name: Check deploy + run: ./stores/snapcraft/check_deploy.sh + + - name: Build snap + uses: snapcore/action-build@v1 + with: + path: stores/snapcraft + if: env.SHOULD_DEPLOY == 'yes' + + - name: Publish snap + run: ./stores/snapcraft/deploy.sh + env: + SNAP_STORE_LOGIN: ${{ secrets.SNAP_STORE_LOGIN }} + if: env.SHOULD_DEPLOY == 'yes' diff --git a/README.md b/README.md index 704f508..27b4574 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@
- [![current release](https://img.shields.io/github/release/vscodium/vscodium.svg)](https://github.com/vscodium/vscodium/releases) +[![current release](https://img.shields.io/github/release/vscodium/vscodium.svg)](https://github.com/vscodium/vscodium/releases) [![windows_build_status](https://dev.azure.com/vscodium/VSCodium/_apis/build/status/VSCodium.vscodium?branchName=master)](https://dev.azure.com/vscodium/VSCodium/_build?definitionId=1) [![license](https://img.shields.io/github/license/VSCodium/vscodium.svg)](https://github.com/VSCodium/vscodium/blob/master/LICENSE) [![Gitter](https://img.shields.io/gitter/room/vscodium/vscodium.svg)](https://gitter.im/VSCodium/Lobby) @@ -65,14 +65,14 @@ scoop install vscodium ``` #### Install with snap (GNU/Linux) -VSCodium is available in the [Snap Store](https://snapcraft.io/) as [Codium](https://snapcraft.io/codium), published by the [Snapcrafters](https://github.com/snapcrafters/codium) community. +VSCodium is available in the [Snap Store](https://snapcraft.io/) as [Codium](https://snapcraft.io/codium), thanks to the help of the [Snapcrafters](https://github.com/snapcrafters/codium) community. If your GNU/Linux distribution has support for [snaps](https://snapcraft.io/docs/installing-snapd): ```bash snap install codium --classic ``` #### Install with Package Manager (GNU/Linux) -You can always install using the downloads (deb, rpm, tar) on the [releases page](https://github.com/VSCodium/vscodium/releases), but you can also install using your favorite package manager and get automatic updates. [@paulcarroty](https://github.com/paulcarroty) has set up a repository with instructions [here](https://gitlab.com/paulcarroty/vscodium-deb-rpm-repo). Any issues installing VSCodium using your package manager should be directed to that repository's issue tracker. +You can always install using the downloads (deb, rpm, tar) on the [releases page](https://github.com/VSCodium/vscodium/releases), but you can also install using your favorite package manager and get automatic updates. [@paulcarroty](https://github.com/paulcarroty) has set up a repository with instructions [here](https://gitlab.com/paulcarroty/vscodium-deb-rpm-repo). Any issues installing VSCodium using your package manager should be directed to that repository's issue tracker. #### Install on Arch Linux VSCodium is available in [AUR](https://wiki.archlinux.org/index.php/Arch_User_Repository) as package [vscodium-bin](https://aur.archlinux.org/packages/vscodium-bin/), maintained by [@binex-dsk](https://github.com/binex-dsk). An alternative package [vscodium-git](https://aur.archlinux.org/packages/vscodium-git/), maintained by [@cedricroijakkers](https://github.com/cedricroijakkers), is also available should you wish to compile from source yourself. @@ -88,10 +88,10 @@ flatpak run com.vscodium.codium ## Why Does This Exist This repository contains build files to generate free release binaries of Microsoft's VS Code. When we speak of "free software", we're talking about freedom, not price. -Microsoft's releases of Visual Studio Code are licensed under [this not-FLOSS license](https://code.visualstudio.com/license) and contain telemetry/tracking. According to [this comment](https://github.com/Microsoft/vscode/issues/60#issuecomment-161792005) from a Visual Studio Code maintainer: +Microsoft's releases of Visual Studio Code are licensed under [this not-FLOSS license](https://code.visualstudio.com/license) and contain telemetry/tracking. According to [this comment](https://github.com/Microsoft/vscode/issues/60#issuecomment-161792005) from a Visual Studio Code maintainer: > When we [Microsoft] build Visual Studio Code, we do exactly this. We clone the vscode repository, we lay down a customized product.json that has Microsoft specific functionality (telemetry, gallery, logo, etc.), and then produce a build that we release under our license. -> +> > When you clone and build from the vscode repo, none of these endpoints are configured in the default product.json. Therefore, you generate a "clean" build, without the Microsoft customizations, which is by default licensed under the MIT license This repo exists so that you don't have to download+build from source. The build scripts in this repo clone Microsoft's vscode repo, run the build commands, and upload the resulting binaries to [GitHub releases](https://github.com/VSCodium/vscodium/releases). __These binaries are licensed under the MIT license. Telemetry is disabled.__ @@ -120,7 +120,7 @@ Please note that some Visual Studio Code extensions have licenses that restrict ### How are the VSCodium binaries built? If you would like to see the commands we run to build `vscode` into VSCodium binaries, have a look at the workflow files in `.github/workflows` for Windows, GNU/Linux and macOS. These build files call all the other scripts in the repo. If you find something that doesn't make sense, feel free to ask about it [on Gitter](https://gitter.im/VSCodium/Lobby). -The builds are run every day, but exit early if there isn't a new release from Microsoft. +The builds are run every day, but exit early if there isn't a new release from Microsoft. ## Supported Platforms The minimal version is limitted by the core component Electron, you may want to check its [supported platform list](https://www.electronjs.org/docs/tutorial/support#supported-platforms). @@ -133,7 +133,7 @@ The minimal version is limitted by the core component Electron, you may want to - [x] Windows 7 or newer x64 - [x] Windows 7 or newer x86 - [x] Windows 10 arm64 - + ## Donate If you would like to support the development of VSCodium, feel free to send BTC to `3PgjE95yzBDTrSPxPiqoxSgZFuKPPAix1N`. diff --git a/stores/snapcraft/check_deploy.sh b/stores/snapcraft/check_deploy.sh new file mode 100755 index 0000000..0e989fd --- /dev/null +++ b/stores/snapcraft/check_deploy.sh @@ -0,0 +1,35 @@ +#!/bin/bash + +set -e + +if [[ "${GITHUB_EVENT_NAME}" == "pull_request" ]]; then + echo "It's a PR" + + export SHOULD_DEPLOY="no" +elif [[ "${GITHUB_EVENT_NAME}" == "push" ]]; then + echo "It's a Push" + + export SHOULD_DEPLOY="no" +else + echo "It's a cron" + + sudo apt install curl jq + + sudo curl -sS --unix-socket /run/snapd.socket http://localhost/v2/find\?q\=codium > snap_latest.json + SNAP_VERSION=$(jq -r '.result|map(select(.id == "lIZWXTqmo6LFSts5Cgk2VPlNwtysZAeH"))|.version' snap_latest.json) + echo "Snap version: ${SNAP_VERSION}" + + wget --quiet https://api.github.com/repos/VSCodium/vscodium/releases -O gh_latest.json + GH_VERSION=$(jq -r 'sort_by(.tag_name)|last.tag_name' gh_latest.json) + echo "GH version: ${GH_VERSION}" + + if [[ "${SNAP_VERSION}" == "${GH_VERSION}" ]]; then + export SHOULD_DEPLOY="no" + else + export SHOULD_DEPLOY="yes" + fi +fi + +if [[ $GITHUB_ENV ]]; then + echo "SHOULD_DEPLOY=$SHOULD_DEPLOY" >> $GITHUB_ENV +fi diff --git a/stores/snapcraft/deploy.sh b/stores/snapcraft/deploy.sh new file mode 100755 index 0000000..74d812a --- /dev/null +++ b/stores/snapcraft/deploy.sh @@ -0,0 +1,9 @@ +#!/bin/bash + +set -e + +echo "$SNAP_STORE_LOGIN" | snapcraft login --with - + +snapcraft upload --release=stable *.snap + +snapcraft logout diff --git a/stores/snapcraft/snap/local/bin/electron-launch b/stores/snapcraft/snap/local/bin/electron-launch new file mode 100755 index 0000000..9f4eb6a --- /dev/null +++ b/stores/snapcraft/snap/local/bin/electron-launch @@ -0,0 +1,34 @@ +#!/usr/bin/env bash + +# On Fedora $SNAP is under /var and there is some magic to map it to /snap. +# We need to handle that case and reset $SNAP +SNAP=$(echo "$SNAP" | sed -e "s|/var/lib/snapd||g") + +if [ "$SNAP_ARCH" == "amd64" ]; then + ARCH="x86_64-linux-gnu" +elif [ "$SNAP_ARCH" == "armhf" ]; then + ARCH="arm-linux-gnueabihf" +elif [ "$SNAP_ARCH" == "arm64" ]; then + ARCH="aarch64-linux-gnu" +else + ARCH="$SNAP_ARCH-linux-gnu" +fi + +GDK_CACHE_DIR="$SNAP_USER_COMMON/.cache" +if [[ -d "$SNAP_USER_DATA/.cache" && ! -e "$GDK_CACHE_DIR" ]]; then + # the .cache directory used to be stored under $SNAP_USER_DATA, migrate it + mv "$SNAP_USER_DATA/.cache" "$SNAP_USER_COMMON/" +fi +[ ! -d "$GDK_CACHE_DIR" ] && mkdir -p "$GDK_CACHE_DIR" + +# Gdk-pixbuf loaders +export GDK_PIXBUF_MODULE_FILE="$GDK_CACHE_DIR/gdk-pixbuf-loaders.cache" +export GDK_PIXBUF_MODULEDIR="$SNAP/usr/lib/$ARCH/gdk-pixbuf-2.0/2.10.0/loaders" +if [ -f "$SNAP/usr/lib/$ARCH/gdk-pixbuf-2.0/gdk-pixbuf-query-loaders" ]; then + "$SNAP/usr/lib/$ARCH/gdk-pixbuf-2.0/gdk-pixbuf-query-loaders" > "$GDK_PIXBUF_MODULE_FILE" +fi + +# Create $XDG_RUNTIME_DIR if not exists (to be removed when https://pad.lv/1656340 is fixed) +[ -n "$XDG_RUNTIME_DIR" ] && mkdir -p "$XDG_RUNTIME_DIR" -m 700 + +exec "$@" diff --git a/stores/snapcraft/snap/snapcraft.yaml b/stores/snapcraft/snap/snapcraft.yaml new file mode 100644 index 0000000..5a0380d --- /dev/null +++ b/stores/snapcraft/snap/snapcraft.yaml @@ -0,0 +1,90 @@ +name: codium +adopt-info: codium +summary: Code editing. Redefined. +description: | + Binary releases of Code without branding/telemetry/licensing + +base: core18 +grade: stable +confinement: classic +compression: lzo +architectures: + - build-on: amd64 + - build-on: arm64 + +parts: + codium: + plugin: nil + override-build: | + set -eu + ARCHITECTURE=$(dpkg --print-architecture) + # Get GitHub releases + wget --quiet https://api.github.com/repos/VSCodium/vscodium/releases -O latest.json + VERSION=$(jq -r 'sort_by(.tag_name)|last.tag_name' latest.json) + DEB_URL=$(jq -r 'map(select(.tag_name == "'"$VERSION"'"))|first.assets[].browser_download_url|select(endswith("'"_$ARCHITECTURE.deb"'"))' latest.json) + DEB=$(basename "${DEB_URL}") + # Downloading .deb" + wget "${DEB_URL}" -O "${SNAPCRAFT_PART_INSTALL}/${DEB}" + # Unpacking .deb" + dpkg -x "${SNAPCRAFT_PART_INSTALL}/${DEB}" ${SNAPCRAFT_PART_INSTALL} + rm -f latest.json + rm -f "${SNAPCRAFT_PART_INSTALL}/${DEB}" + # Correct path to icon. + sed -i 's|Icon=codium|Icon=${SNAP}/usr/share/pixmaps/codium.png|g' ${SNAPCRAFT_PART_INSTALL}/usr/share/applications/codium.desktop + sed -i 's|Exec=/usr/share/codium/codium|Exec=codium|g' ${SNAPCRAFT_PART_INSTALL}/usr/share/applications/codium.desktop + sed -i 's|Icon=codium|Icon=/usr/share/pixmaps/codium.png|g' ${SNAPCRAFT_PART_INSTALL}/usr/share/applications/codium-url-handler.desktop + # Set version + echo $VERSION > $SNAPCRAFT_STAGE/version + snapcraftctl set-version "$VERSION" + build-packages: + - dpkg + - jq + - sed + - wget + stage-packages: + - ibus-gtk3 + - fcitx-frontend-gtk3 + - gvfs-libs + - libasound2 + - libgconf-2-4 + - libglib2.0-bin + - libgnome-keyring0 + - libgbm1 + - libgtk-3-0 + - libxkbfile1 + - libnotify4 + - libnspr4 + - libnss3 + - libpcre3 + - libpulse0 + - libsecret-1-0 + - libxshmfence1 + - libxss1 + - libxtst6 + - zlib1g + prime: + - -usr/share/doc + - -usr/share/fonts + - -usr/share/icons + - -usr/share/lintian + - -usr/share/man + + electron-launch: + after: + - codium + plugin: dump + source: snap/local + +apps: + codium: + command: electron-launch $SNAP/usr/share/codium/bin/codium --no-sandbox + common-id: codium.desktop + environment: + DISABLE_WAYLAND: 1 + GSETTINGS_SCHEMA_DIR: $SNAP/usr/share/glib-2.0/schemas + + url-handler: + command: electron-launch $SNAP/usr/share/codium/bin/codium --open-url --no-sandbox + environment: + DISABLE_WAYLAND: 1 + GSETTINGS_SCHEMA_DIR: $SNAP/usr/share/glib-2.0/schemas