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 @@
- [](https://github.com/vscodium/vscodium/releases)
+[](https://github.com/vscodium/vscodium/releases)
[](https://dev.azure.com/vscodium/VSCodium/_build?definitionId=1)
[](https://github.com/VSCodium/vscodium/blob/master/LICENSE)
[](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