Compare commits

...

161 Commits

Author SHA1 Message Date
Pavlo Rudy
fdc6b32d8b close #1160 2022-07-15 21:29:11 +03:00
Todd Williams
81836873af docs: update legality of vscode marketplace's usage (#1092) 2022-07-09 08:13:26 +02:00
Baptiste Augrain
3fa8eee9fe feat: add script to update patches (#1138) 2022-06-20 10:34:50 +02:00
Baptiste Augrain
55d502d659 doc: add patch update process (#1136) 2022-06-19 12:08:28 +02:00
Pavel Sterin
f6a99949c5 feat: use github versions of included extensions (#1133) 2022-06-19 11:49:56 +02:00
Baptiste Augrain
85126f1a7c fix: set the built files at the built time (#1132) 2022-06-17 14:47:08 +02:00
Baptiste Augrain
bca4eea470 fix(snap): remove double env variable (#1131) 2022-06-16 23:09:25 +02:00
Baptiste Augrain
2b190dfe51 fix(snap): use master branch to publish (#1130) 2022-06-16 23:06:07 +02:00
Baptiste Augrain
c4583ad3f0 fix: use env variable instead of login option (#1128) 2022-06-16 12:20:10 +02:00
laksith19
79a9f4a292 Remove repeated dependency (#1125) 2022-06-15 18:36:20 +03:00
Baptiste Augrain
112f730493 fix: generate mssing out directory (#1117) 2022-06-11 13:46:15 +02:00
Baptiste Augrain
7313f3ad25 ci(linux): correctly detect reh binaries (#1116) 2022-06-10 07:31:34 +02:00
Baptiste Augrain
bbaaed2ec1 fix: update patches & install optional dependencies (#1115) 2022-06-09 22:19:30 +02:00
Frazer Smith
3737c9f4e2 build: Use cd ... || exit in case cd fails (#1107) 2022-06-08 22:03:44 +02:00
Baptiste Augrain
90bc38c840 vcs: fix lock workflow config (#1113) 2022-06-08 18:00:26 +02:00
Baptiste Augrain
84b4396476 feat: add support for reh (#1111) 2022-06-08 16:59:06 +02:00
Frazer Smith
add78d6829 build(stores/snapcraft): quote grep pattern so shell won't interpret it (#1108) 2022-06-07 23:20:09 +02:00
Frazer Smith
98d30bdc2c build: double quote args and wrap in brace expansions (#1105) 2022-06-05 21:30:23 +02:00
Baptiste Augrain
31355417a8 vcs: add workflow to lock old closed issues (#1106) 2022-06-05 16:52:38 +02:00
Baptiste Augrain
c3debb387d feat(macos): build script is detecting arch (#1085) 2022-05-16 01:35:17 +02:00
Baptiste Augrain
c53a88ee51 docs: improve macOS troubleshooting and add thanks table (#1083)
* docs: update supported macOS and link to troubleshooting wiki
* docs: add thanks table
2022-05-14 20:16:15 +02:00
Baptiste Augrain
c2469ff520 fix: re-enable 32bits builds with npm_config_force_process_config env variable (#1082) 2022-05-14 18:44:59 +02:00
Baptiste Augrain
70082e0f0f fix(macos): correctly clean up keychain (#1075) 2022-05-07 17:29:18 +02:00
Baptiste Augrain
e9ea41fcfa fix(macos): clean up keychain (#1074) 2022-05-07 17:18:14 +02:00
Baptiste Augrain
014d9a339d fix(macos): delete keychain to avoid conflict on next release (#1071) 2022-05-07 14:02:20 +02:00
Pavlo Rudy
4855694fd6 fix: add git workaround for release upload (#1069) 2022-05-07 13:51:07 +02:00
Maikel
e480df5b1f fix: update 'Report Issue' GitHub url. (#1068) 2022-05-07 09:51:33 +02:00
Baptiste Augrain
0932463dfb fix(1.67): update patches (#1066) 2022-05-07 09:50:30 +02:00
Baptiste Augrain
65e376786f ci: add macos arm64 (#1063) 2022-04-27 17:58:03 +02:00
Baptiste Augrain
afe72aba83 fix: disable updating the builtin extensions (#1062) 2022-04-27 17:20:47 +02:00
Pineapples
bff2e71e55 docs: update CODE_OF_CONDUCT.md from v1.4 to v2.1 (#1056) 2022-04-20 06:09:35 +02:00
Baptiste Augrain
966ae12699 build: use node v16 (#1054) 2022-04-19 22:55:02 +02:00
GeopJr
843ef66728 fix: letterpress icons names (#1042) 2022-04-19 20:35:22 +02:00
PF4Public
8336a4c7ad fix: update telemetry domains (#1047) 2022-04-14 23:28:22 +02:00
Frazer Smith
1eff01d6f0 ci: bump github actions (#1046) 2022-04-11 14:37:54 +02:00
Baptiste Augrain
db8d1e7a8d fix: add missing extensionEnabledApiProposals and more (#1040) 2022-04-07 23:15:32 +02:00
Baptiste Augrain
c741ae3347 refactor: remove deprecated telemetry.enableTelemetry (#1039) 2022-04-07 20:30:38 +02:00
Baptiste Augrain
becd52f518 ci: fully disable snap for arm64 (#1028) 2022-03-31 12:20:26 +02:00
Baptiste Augrain
7ee4f2f735 fix(1.66): update patches & linux workflow (#1027) 2022-03-31 10:46:32 +02:00
Baptiste Augrain
3208188249 build: use windows 2019 since 2016 is deprecated (#1017) 2022-03-16 09:02:30 +01:00
Baptiste Augrain
be445bcba6 docs: update CI shields in README.md (#1016) 2022-03-16 08:06:03 +01:00
Baptiste Augrain
3277bd4fa1 fix: try to fix snap (#1009) 2022-03-07 11:18:37 +01:00
Baptiste Augrain
08b0b1b3e5 fix(snap): add debug infos (#1008) 2022-03-04 15:08:21 +01:00
Baptiste Augrain
c46abc14ee fix(appimage): remove unnecessary glib (#1007) 2022-03-04 15:02:49 +01:00
Baptiste Augrain
5bd755a9cc fix(1.65): update patches (#1001) 2022-03-04 09:47:45 +01:00
Baptiste Augrain
1cbc6e55bf enhance: move variables outside loop (#1002) 2022-03-04 09:16:49 +01:00
Simon Sobisch
351460f992 Merge pull request #997 from dsm/master
changed hardcoded owner
2022-03-04 08:33:58 +01:00
Muhammet Şükrü Demir
f7e1c11ea7 owner and repository pre-calculated
added OWNER and REPOSITORY var using github env vars and if not available fallback option is available.
2022-03-04 10:30:33 +03:00
Muhammet Şükrü Demir
50197bbeef changed hardcoded owner 2022-02-15 15:03:01 +03:00
Baptiste Augrain
b319b178ea fix: update size of letterpress images (#992) 2022-02-06 16:05:53 +01:00
Baptiste Augrain
2dab7cfcdf fix(1.64): update patch (#988) 2022-02-03 21:46:31 +01:00
Baptiste Augrain
6a86200d38 docs: how to fix default file manager on linux (#983) 2022-01-30 14:12:54 +01:00
Rui Ming (Max) Xiong
c803059121 docs: update built-in package names (#982) 2022-01-28 08:16:44 +01:00
Pavlo Rudy
d529fd3c20 Merge pull request #978 from myersg86/master
Fix typos in DOCS.md and README.md
2022-01-22 19:53:53 +02:00
myersg86
f817226abd Fix typos in DOCS.md and README.md
DOCS.md:85,91: offical -> official
README.md:130: limitted -> limited
2022-01-22 10:50:18 -07:00
Baptiste Augrain
353c002605 fix(appimage): remove extraneous libs (#944) 2022-01-20 20:04:34 +01:00
Baptiste Augrain
3f00a255b1 build(win): remove superfluous files from archive (#967) 2021-12-26 10:34:08 +01:00
Baptiste Augrain
23152cf50f fix(snap): review snap only when needed (#959) 2021-12-18 16:08:51 +01:00
Bruno Cabral
1f31a1c27b indicate build documentation (#890) 2021-12-18 15:44:29 +01:00
Baptiste Augrain
49eb715333 fix(snap): publish snap as stable (#958) 2021-12-18 15:42:43 +01:00
Baptiste Augrain
bbcdc2be11 fix(snap): add missing icons and add review before publish (#957) 2021-12-18 10:24:44 +01:00
Baptiste Augrain
dfd7ebbf85 fix: updating snapcraft.yaml to latest version (#956) 2021-12-18 05:17:12 +01:00
Baptiste Augrain
e087f00ff1 fix: specify image for arm64 (#954) 2021-12-18 04:30:42 +01:00
Baptiste Augrain
79bc275386 fix: update acl (#953) 2021-12-18 04:03:23 +01:00
Baptiste Augrain
851b5f2659 fix: pass platform and correctly release (#952) 2021-12-18 03:28:34 +01:00
Baptiste Augrain
e5de9c3096 fix: install snapcraft to check version (#951) 2021-12-18 03:09:27 +01:00
Baptiste Augrain
3b6954231f fix: detect version based on the architecture (#950) 2021-12-18 02:58:54 +01:00
Baptiste Augrain
99840540ac fix: use diddlesnaps/snapcraft-multiarch-action to generate arm64 snap (#949) 2021-12-18 02:25:18 +01:00
Baptiste Augrain
3103c80234 fix: correct jobs' runs-on (#948) 2021-12-18 01:41:21 +01:00
Baptiste Augrain
6a4668040b fix: use ubuntu-18.04 (#947) 2021-12-18 01:35:10 +01:00
Baptiste Augrain
02755e7599 fix: build differently so arm64 can be generated (#946) 2021-12-18 01:24:22 +01:00
Baptiste Augrain
36b06dd66b fix: correct script to get latest snap version (#945) 2021-12-18 00:37:49 +01:00
Baptiste Augrain
33a6670cad feat: publish snap (#942) 2021-12-17 23:21:31 +01:00
Pavlo Rudy
1ef601a79b sync build dependencies with MS VSC docs 2021-12-12 23:08:34 +02:00
Pavlo Rudy
c67c2ad9f5 Merge pull request #891 from brccabral/dependencies
add missed Linux build dependencies
2021-12-12 22:49:45 +02:00
Baptiste Augrain
d164e43b78 fix(1.63): update patch (#937) 2021-12-09 02:30:35 +01:00
Pavlo Rudy
f3ba593ae7 Merge pull request #927 from matkoniecz/patch-1
do not suggest that EOL versions are supported
2021-11-29 18:10:19 +02:00
Mateusz Konieczny
78b32d7931 do not suggest that EOL versions are supported 2021-11-24 10:56:42 +01:00
Baptiste Augrain
c71f2250ce fix: remove bad negation (#916) 2021-11-12 02:14:13 +01:00
Baptiste Augrain
b0154c7831 fix: add debug log (#915) 2021-11-10 11:52:44 +01:00
Baptiste Augrain
23313d41ba fix: correctly read exit status (#914) 2021-11-10 10:40:20 +01:00
Baptiste Augrain
cf48030b59 fix: deleting bad assets (#913) 2021-11-10 10:13:12 +01:00
Baptiste Augrain
848aabfe54 fix: fixing release script (#912) 2021-11-10 09:36:35 +01:00
Baptiste Augrain
10a0cb4b30 fix: remove infinity loop in the release script (#904) 2021-11-06 12:58:53 +01:00
Baptiste Augrain
0469329683 fix: fixing release script (#903) 2021-11-06 12:26:36 +01:00
Baptiste Augrain
6acd2fbfe1 feat: break force the uploads (#902) 2021-11-06 12:03:44 +01:00
Baptiste Augrain
38810539a7 fix(1.62): fix patches (#899) 2021-11-06 02:52:55 +01:00
Bruno Cabral
34b399c05a update build.md
update dependencies list
2021-10-27 18:37:44 -07:00
Pavlo Rudy
b0ff3b4f34 re-disable telemetry; closes #872 (#883) 2021-10-19 20:55:44 +02:00
Baptiste Augrain
ca2dc5fcaf feat: remove use of lfs (#881) 2021-10-17 02:20:08 +02:00
Simon Sobisch
962326e182 Merge pull request #871 from GitMensch/msi
license conversion txt2rtf
2021-10-16 21:04:01 +02:00
Simon Sobisch
d3371f8aab license conversion txt2rtf
directly via shell as neither special escaping nor conversion are necessary
2021-10-16 21:01:37 +02:00
Baptiste Augrain
0f5a7d4a1b fix(1.61): update github authentication patch (#866) 2021-10-08 23:14:50 +02:00
Baptiste Augrain
02cc193086 fix: check of armhf's rpm is corrected (#860) 2021-10-01 19:21:07 +02:00
Baptiste Augrain
e564685c1e feat: selective publish (#858) 2021-10-01 18:47:10 +02:00
Baptiste Augrain
85cbd0b0f2 fix: remove macos arm64 build (#851) 2021-09-20 09:25:00 +02:00
Baptiste Augrain
b748657b09 feat: add arm64 on macos build (#848) 2021-09-18 10:12:10 +02:00
Baptiste Augrain
db02ad1133 feat: remove CORS validation patch (#845) 2021-09-17 23:25:34 +02:00
Baptiste Augrain
573c0230c5 fix(linux): add shell attribute to the AppImage can be copied (#844) 2021-09-15 23:04:58 +02:00
Baptiste Augrain
bb483f44e2 fix(linux): correctly check if the AppImage has been built (#843) 2021-09-15 22:28:27 +02:00
Baptiste Augrain
3fa3f18d91 fix(windows): generate checksum for both .msi files (#838) 2021-09-12 09:13:59 +02:00
Baptiste Augrain
ef1ce60ad8 fix: don't loop when there is no assets in the tag (#837) 2021-09-12 00:51:25 +02:00
Baptiste Augrain
a6da364b3c fix: correct filename (#834) 2021-09-10 09:49:32 +02:00
Baptiste Augrain
a8964122dc build(linux): reorganizing appimage build (#831) 2021-09-09 10:18:22 +02:00
Baptiste Augrain
f1dd2cf1cc ci(linux): copy should ignore missing files (#829) 2021-09-09 02:41:56 +02:00
Baptiste Augrain
108166f640 build: add MSI (#827)
Co-authored-by: Alexander Hass <4450722+alexhass@users.noreply.github.com>
2021-09-09 01:38:07 +02:00
Baptiste Augrain
07877c5e12 fix: correctly load internal pages (#826) 2021-09-07 12:24:50 +02:00
Baptiste Augrain
5439ac0757 fix: update license menu (#824) 2021-09-07 12:22:40 +02:00
Baptiste Augrain
9c2f61b79c fix: report issue to vscodium (#825) 2021-09-07 01:56:10 +02:00
Baptiste Augrain
0d433893b7 use github personal access token (#672) 2021-09-06 15:22:30 +02:00
Baptiste Augrain
bf524a9c2c fix(1.60): add patch to disable CORS (#822) 2021-09-06 12:01:31 +02:00
Baptiste Augrain
d862b86a27 fix(1.60): update custom gallery patch (#817) 2021-09-02 22:34:19 +02:00
Baptiste Augrain
8aa9de17b1 fix: rewrite tag search for linux arm (#809) 2021-08-27 23:40:30 +02:00
Baptiste Augrain
72363757b3 build: push event are detected to avoid premature deployment (#808) 2021-08-27 18:26:59 +02:00
Baptiste Augrain
96332714ae build: specify vscode version to build (#807) 2021-08-27 16:01:17 +02:00
Baptiste Augrain
a5506b975c add some small improvements (#803) 2021-08-23 05:05:01 +02:00
Baptiste Augrain
b175fd43eb fix: fail build when a patch can't be applied (#797) 2021-08-14 22:59:32 +02:00
Baptiste Augrain
b1970e82af do not start crashReporter when appCenter isn't configured (#787) 2021-08-06 01:49:57 +02:00
Baptiste Augrain
23160ad483 Disable cors (#774) 2021-08-03 18:51:40 +02:00
swinder0161
51ee66e019 Add support to build insider latest build: $ INSIDER=1 ./build/build_mac.sh (#784) 2021-08-03 14:43:49 +02:00
descodess
2abbfed911 fix typo in README.md (#785) 2021-08-03 14:42:23 +02:00
Baptiste Augrain
8187c7fd7f add a loop to apply patches (#779) 2021-07-29 12:31:54 +02:00
Baptiste Augrain
53b071366b Fix AppImage's dependency (#775)
* move dependency installation into workflow

* dependency install not needed
2021-07-26 01:15:55 +02:00
Baptiste Augrain
98372f9d1e Fixing python in AppImage (#773)
- overwrite AppRun to remove the env variables `PYTHONHOME` and `PYTHONPATH`
- update building script to it can be build manually in docker
2021-07-23 10:01:38 +02:00
Baptiste Augrain
30313a518b Update doc (#772)
* add missing dependencies for linux
* update node version
2021-07-23 09:48:52 +02:00
Michael Kirsch
2ecbd09c2b update icon paths (#440) 2021-07-22 16:43:39 -07:00
swinder0161
66551077f8 Add support to use GNU sed installed in mac osx (#770)
* Add support to use GNU sed installed in mac osx

* Move common functions to utils.sh

Co-authored-by: Swinder Pal Singh Juneja <swinder.juneja@oneplus.com>
2021-07-21 22:49:00 +02:00
Liwen Guo
e1b4583cf9 Use applicationName for update cache path (#765) 2021-07-16 16:37:07 -07:00
Baptiste Augrain
bbc6e8f4b7 Merge pull request #756 from larryw3i/larryw3i-patch-1
using snap to install codium requires classic mode
2021-07-15 11:10:03 +02:00
atesca09
d29337f328 Fix custom-gallery patch (#758)
* Fix custom-gallery patch

* Bump GA to node 14

Co-authored-by: Atesca <2404098-atesca@users.noreply.gitlab.com>
2021-07-10 07:09:37 -07:00
Larry Wei
ca52c1cfda using snap to install codium requires classic mode 2021-07-06 15:15:11 +08:00
Peter Squicciarini
c7cc061077 Merge pull request #742 from ShadowCreator250/add-extension-links-to-readme
README: add links to marketplace for extensions included during build process
2021-07-02 09:57:13 -07:00
Peter Squicciarini
34b5dbce34 Merge pull request #753 from daiyam/fix-preview
fix markdown's preview
2021-07-02 09:56:45 -07:00
Peter Squicciarini
cb8d774c77 Merge pull request #754 from daiyam/doc 2021-07-02 09:47:54 -07:00
Baptiste Augrain
6a5ba92d10 add link to build doc 2021-06-30 10:29:54 +02:00
Baptiste Augrain
643b0f869d - add build doc
- improve terminal doc
2021-06-30 10:24:06 +02:00
Baptiste Augrain
7d636ce0f7 build media files used for the preview 2021-06-29 20:02:52 +02:00
Peter Squicciarini
5b3b76e65b Merge pull request #748 from swinder0161/user-patches
Add ability to apply user specific patches to vscode source
2021-06-26 11:13:10 -07:00
Swinder Pal Singh Juneja
64e101b963 Add ability to apply user specific patches to vscode source 2021-06-21 08:50:25 +05:30
ShadowCreator250
527ce5efd2 README: add links to marketplace for extensions included during build process 2021-06-17 11:12:59 +02:00
Peter Squicciarini
8bb2491be1 Merge pull request #736 from daiyam/icon-builder
Make icons builder includable
2021-06-15 13:32:28 -07:00
Peter Squicciarini
63244816b6 Merge pull request #737 from daiyam/fix-build
fix build
2021-06-12 20:00:41 -07:00
Baptiste Augrain
e0944b1769 fix patches 2021-06-12 23:53:56 +02:00
Baptiste Augrain
28ccd0bf00 insert final newline 2021-06-07 22:47:56 +02:00
Baptiste Augrain
226c019adf rewrite script so it can be included 2021-06-07 22:40:02 +02:00
Peter Squicciarini
2a742910df Merge pull request #730 from papjul/patch-1
Vscodium officially available in Gentoo repos
2021-06-07 10:57:56 -07:00
Peter Squicciarini
15fac881ce Merge pull request #735 from daiyam/fix-sed
detect sed version
2021-06-07 02:12:33 -07:00
Baptiste Augrain
d5f6866981 detect sed version instead of using global variable 2021-06-07 10:05:57 +02:00
Baptiste Augrain
b00ffc8610 Fix icons (#734)
* move shared icon

* add generated Inno Setup icons
2021-06-06 09:03:25 -07:00
Baptiste Augrain
52ef4eb7be linux: fix appimage (#731)
* always use latest version of pkg2appimage

* generate zsync file to make the appimage updateable

* install fuse for GH actions

* remove fuse

* run AppImage

* comment converts

* getting info on images

* using bugfix from #536

* add DOCKER_BUILD flag

* extract AppImageAssistant before running it

* use local `convert` and not from `pkg2appimage`
2021-06-05 16:47:16 -07:00
Peter Squicciarini
efe3f6b103 Merge pull request #695 from jingyu9575/patch-1
Fix Jupyter extension crash
2021-06-05 08:29:07 -07:00
Peter Squicciarini
a8cd9694ee Merge pull request #683 from ghost/add-qol
Allow workflows to run by using the REST API or from the Actions tab on GitHub
2021-06-05 08:24:50 -07:00
Julien Papasian
d8bc3e7963 Vscodium officially available in Gentoo repos
No longer requires to install an overlay.
2021-06-04 20:06:56 +02:00
Peter Squicciarini
d636a66828 Merge pull request #728 from daiyam/fix-gallery
fix custom gallery on windows
2021-05-30 08:55:57 -07:00
Baptiste Augrain
97db123287 fix custom gallery on windows 2021-05-28 19:45:05 +02:00
Peter Squicciarini
10815a5b2d Merge pull request #715 from atesca09/custom_gallery_patch_fix
Fix custom gallery patch for 1.56
2021-05-09 08:42:17 -07:00
Atesca
656a02b50f Fix custom gallery pacht for 1.56 2021-05-06 16:30:55 +02:00
jingyu9575
3d016f4f48 Add all extensionAllowedProposedApi from VSCode 2021-04-10 05:31:26 +08:00
jingyu9575
9b538aebc3 Fix Jupyter extension crash 2021-04-07 01:23:54 +08:00
wdkse
c43a4e5136 obsolete win32-build.yml information 2021-03-29 12:12:44 -04:00
wdkse
336bfce8fd workflows manual trigger via dispatch event 2021-03-29 12:11:20 -04:00
93 changed files with 5126 additions and 1474 deletions

25
.editorconfig Normal file
View File

@@ -0,0 +1,25 @@
root = true
[*]
indent_style = space
indent_size = 2
tab_width = 2
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true
[*.sh]
indent_style = space
indent_size = 2
[*.{yml,yaml}]
indent_style = space
indent_size = 2
[*.patch]
trim_trailing_whitespace = false
insert_final_newline = false
[*.svg]
insert_final_newline = false

View File

@@ -30,7 +30,7 @@ A clear and concise description of what you expected to happen.
If applicable, add screenshots to help explain your problem.
**Desktop (please complete the following information):**
- OS: [e.g. Mac OS, Ubuntu 16.04, etc]
- OS: [e.g. Mac OS, Ubuntu 20.04, etc]
- Architecture [e.g. x64, ia32, arm64]
- Version [e.g. 1.33.0]

View File

@@ -1,6 +1,7 @@
name: linux_build
on:
workflow_dispatch:
schedule:
- cron: '0 0 * * *'
push:
@@ -8,9 +9,9 @@ on:
branches: [ master ]
jobs:
linux:
release:
runs-on: ubuntu-latest
container:
container:
image: ${{ matrix.image }}
env:
OS_NAME: 'linux'
@@ -19,7 +20,6 @@ jobs:
strategy:
fail-fast: false
matrix:
vscode_arch: [x64, arm64, armhf]
include:
- vscode_arch: x64
npm_arch: x64
@@ -32,22 +32,25 @@ jobs:
image: vscodium/vscodium-linux-build-agent:stretch-armhf
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v3
- name: Install GH
run: ./install_gh.sh
- name: Setup Node.js environment
uses: actions/setup-node@v1
uses: actions/setup-node@v3
with:
node-version: 12.14.1
node-version: 16
- name: Install Yarn
run: npm install -g yarn
- name: Check PR or cron
run: ./check_cron_or_pr.sh
- name: Clone VSCode repo
run: ./get_repo.sh
- name: Check PR or cron
run: ./check_cron_or_pr.sh
- name: Check existing VSCodium tags/releases
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
@@ -65,7 +68,7 @@ jobs:
if: env.SHOULD_BUILD == 'yes'
- name: Cache yarn directory
uses: actions/cache@v2
uses: actions/cache@v3
with:
path: ${{ steps.yarnCacheDirPath.outputs.dir }}
key: linux-${{ matrix.npm_arch }}-yarnCacheDir-${{ steps.yarnCacheKey.outputs.value }}
@@ -79,36 +82,68 @@ jobs:
run: ./build.sh
if: env.SHOULD_BUILD == 'yes'
- name: Zip release
run: |
cd VSCode-linux-${VSCODE_ARCH}
tar czf ../VSCodium-linux-${VSCODE_ARCH}-${LATEST_MS_TAG}.tar.gz .
- name: Prepare artifacts
run: ./prepare_artifacts.sh
if: env.SHOULD_BUILD == 'yes' && env.SHOULD_DEPLOY == 'yes'
- name: Generate shasums
run: ./sum.sh
if: env.SHOULD_BUILD == 'yes' && env.SHOULD_DEPLOY == 'yes'
- name: Release
uses: softprops/action-gh-release@v1
if: env.SHOULD_BUILD == 'yes' && env.SHOULD_DEPLOY == 'yes'
with:
tag_name: ${{ env.LATEST_MS_TAG }}
files: |
./*.sha256
./*.zip
./*.tar.gz
./*.deb
./*.rpm
./*.AppImage
./*.AppImage.zsync
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: ./release.sh
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
strategy:
fail-fast: false
matrix:
platform:
- amd64
# - arm64
steps:
- uses: actions/checkout@v3
- name: Check version
run: ./stores/snapcraft/check_version.sh
env:
ARCHITECTURE: ${{ matrix.platform }}
SNAPCRAFT_STORE_CREDENTIALS: ${{ secrets.SNAP_STORE_LOGIN }}
# - uses: docker/setup-qemu-action@v1
# if: env.SHOULD_DEPLOY == 'yes'
# - uses: diddlesnaps/snapcraft-multiarch-action@v1
# with:
# path: stores/snapcraft
# architecture: ${{ matrix.platform }}
# id: build
# if: env.SHOULD_DEPLOY == 'yes'
# - uses: diddlesnaps/snapcraft-review-action@v1
# with:
# snap: ${{ steps.build.outputs.snap }}
# isClassic: 'true'
# if: env.SHOULD_DEPLOY == 'yes'
- uses: snapcore/action-build@v1
with:
path: stores/snapcraft
id: build
if: env.SHOULD_DEPLOY == 'yes'
- uses: snapcore/action-publish@master
env:
SNAPCRAFT_STORE_CREDENTIALS: ${{ secrets.SNAP_STORE_LOGIN }}
with:
snap: ${{ steps.build.outputs.snap }}
release: stable
if: env.SHOULD_DEPLOY == 'yes'

15
.github/workflows/lock.yml vendored Normal file
View File

@@ -0,0 +1,15 @@
name: Lock Threads
on:
schedule:
- cron: '0 0 * * Mon'
jobs:
lock:
runs-on: ubuntu-latest
steps:
- uses: dessant/lock-threads@v3
with:
github-token: ${{ github.token }}
issue-inactive-days: '90'
pr-inactive-days: '90'

View File

@@ -1,6 +1,7 @@
name: macos_build
on:
workflow_dispatch:
schedule:
- cron: '0 0 * * *'
push:
@@ -9,31 +10,39 @@ on:
jobs:
build:
runs-on: macOS-latest
runs-on: ${{ matrix.runner }}
strategy:
fail-fast: false
matrix:
include:
- runner: macOS-10.15
vscode_arch: x64
- runner: [self-hosted, macOS, ARM64]
vscode_arch: arm64
env:
OS_NAME: "osx"
VSCODE_ARCH: "x64"
VSCODE_ARCH: ${{ matrix.vscode_arch }}
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v3
- name: Setup Node.js environment
uses: actions/setup-node@v1
uses: actions/setup-node@v3
with:
node-version: 12.14.1
- name: Check PR or cron
run: |
. check_cron_or_pr.sh
node-version: 16
- name: Clone VSCode repo
run: |
. get_repo.sh
run: . get_repo.sh
- name: Check PR or cron
run: . check_cron_or_pr.sh
- name: Check existing VSCodium tags/releases
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
. check_tags.sh
run: . check_tags.sh
if: env.SHOULD_DEPLOY == 'yes'
- name: Compute cache key
@@ -47,7 +56,7 @@ jobs:
if: env.SHOULD_BUILD == 'yes'
- name: Cache yarn directory
uses: actions/cache@v2
uses: actions/cache@v3
with:
path: ${{ steps.yarnCacheDirPath.outputs.dir }}
key: ${{ env.OS_NAME }}-${{ env.VSCODE_ARCH }}-yarnCacheDir-${{ steps.yarnCacheKey.outputs.value }}
@@ -71,7 +80,7 @@ jobs:
cd "VSCode-darwin-${VSCODE_ARCH}"
export CERTIFICATE_P12=VSCodium.p12
echo $CERTIFICATE_OSX_P12 | base64 --decode > $CERTIFICATE_P12
export KEYCHAIN=build.keychain
export KEYCHAIN=$RUNNER_TEMP/build.keychain
security create-keychain -p mysecretpassword $KEYCHAIN
security default-keychain -s $KEYCHAIN
security unlock-keychain -p mysecretpassword $KEYCHAIN
@@ -80,35 +89,15 @@ jobs:
codesign --deep --force --verbose --sign "$CERTIFICATE_OSX_ID" VSCodium.app
fi
- name: Zip release
run: |
cd "VSCode-darwin-${VSCODE_ARCH}"
zip -r -X -y ../VSCodium-darwin-${VSCODE_ARCH}-${LATEST_MS_TAG}.zip ./*.app
- name: Prepare artifacts
run: ./prepare_artifacts.sh
if: env.SHOULD_BUILD == 'yes' && env.SHOULD_DEPLOY == 'yes'
- name: DMG the release
run: |
pushd "VSCode-darwin-${VSCODE_ARCH}"
npx create-dmg VSCodium.app ..
mv "../VSCodium ${LATEST_MS_TAG}.dmg" "../VSCodium.${VSCODE_ARCH}.${LATEST_MS_TAG}.dmg"
popd
if: env.SHOULD_BUILD == 'yes' && env.SHOULD_DEPLOY == 'yes'
- name: Generate shasums
run: ./sum.sh
if: env.SHOULD_BUILD == 'yes' && env.SHOULD_DEPLOY == 'yes'
- name: Release
uses: softprops/action-gh-release@v1
if: env.SHOULD_BUILD == 'yes' && env.SHOULD_DEPLOY == 'yes'
with:
tag_name: ${{ env.LATEST_MS_TAG }}
files: |
./*.zip
./*.dmg
./*.sha256
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: ./release.sh
if: env.SHOULD_BUILD == 'yes' && env.SHOULD_DEPLOY == 'yes'
- name: Update versions repo
if: env.SHOULD_BUILD == 'yes' && env.SHOULD_DEPLOY == 'yes'
@@ -117,3 +106,12 @@ jobs:
GITHUB_TOKEN: ${{ secrets.STRONGER_GITHUB_TOKEN }}
GITHUB_USERNAME: ${{ github.repository_owner }}
- name: Clean up keychain
if: always()
run: |
KEYCHAIN=$RUNNER_TEMP/build.keychain
if [ -f "$KEYCHAIN" ];
then
security delete-keychain $KEYCHAIN
fi

View File

@@ -1,6 +1,7 @@
name: windows_build
on:
workflow_dispatch:
schedule:
- cron: '0 0 * * *'
push:
@@ -9,44 +10,47 @@ on:
jobs:
windows:
runs-on: windows-2016
runs-on: windows-2019
defaults:
run:
shell: bash
env:
VSCODE_ARCH: ${{ matrix.vscode_arch }}
OS_NAME: 'windows'
strategy:
fail-fast: false
matrix:
vscode_arch: [x64, ia32, arm64]
vscode_arch:
- x64
- ia32
- arm64
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v3
- name: Setup Node.js environment
uses: actions/setup-node@v1
uses: actions/setup-node@v3
with:
node-version: 12.18.3
node-version: 16
- name: Install Yarn
run: npm install -g yarn
- name: Setup Python 2
uses: actions/setup-python@v2
- name: Setup Python 3
uses: actions/setup-python@v3
with:
python-version: '2.x'
- name: Check PR or cron
run: ./check_cron_or_pr.sh
shell: bash
python-version: '3.x'
- name: Clone VSCode repo
run: ./get_repo.sh
shell: bash
- name: Check PR or cron
run: ./check_cron_or_pr.sh
- name: Check existing VSCodium tags/releases
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: ./check_tags.sh
shell: bash
if: env.SHOULD_DEPLOY == 'yes'
- name: Compute cache key
@@ -60,7 +64,7 @@ jobs:
if: env.SHOULD_BUILD == 'yes'
- name: Cache yarn directory
uses: actions/cache@v2
uses: actions/cache@v3
with:
path: ${{ steps.yarnCacheDirPath.outputs.dir }}
key: ${{ env.OS_NAME }}-${{ env.VSCODE_ARCH }}-yarnCacheDir-${{ steps.yarnCacheKey.outputs.value }}
@@ -73,39 +77,21 @@ jobs:
npm_config_arch: ${{ matrix.vscode_arch }}
npm_config_target_arch: ${{ matrix.vscode_arch }}
run: ./build.sh
shell: bash
if: env.SHOULD_BUILD == 'yes'
- name: Move/rename build artifacts
run: |
mv vscode\\.build\\win32-${VSCODE_ARCH}\\system-setup\\VSCodeSetup.exe VSCodiumSetup-${VSCODE_ARCH}-${LATEST_MS_TAG}.exe
mv vscode\\.build\\win32-${VSCODE_ARCH}\\user-setup\\VSCodeSetup.exe VSCodiumUserSetup-${VSCODE_ARCH}-${LATEST_MS_TAG}.exe
mv vscode\\.build\\win32-${VSCODE_ARCH}\\archive\\VSCode-win32-${VSCODE_ARCH}.zip VSCodium-win32-${VSCODE_ARCH}-${LATEST_MS_TAG}.zip
shell: bash
- name: Prepare artifacts
run: ./prepare_artifacts.sh
if: env.SHOULD_BUILD == 'yes' && env.SHOULD_DEPLOY == 'yes'
- name: Generate shasums
run: ./sum.sh
shell: bash
if: env.SHOULD_BUILD == 'yes' && env.SHOULD_DEPLOY == 'yes'
- name: Release
uses: softprops/action-gh-release@v1
if: env.SHOULD_BUILD == 'yes' && env.SHOULD_DEPLOY == 'yes'
with:
tag_name: ${{ env.LATEST_MS_TAG }}
files: |
./*.sha256
./VSCodium*.zip
./VSCodiumUserSetup*.exe
./VSCodiumSetup*.exe
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: ./release.sh
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
shell: bash
env:
GITHUB_TOKEN: ${{ secrets.STRONGER_GITHUB_TOKEN }}
GITHUB_USERNAME: ${{ github.repository_owner }}

8
.gitignore vendored
View File

@@ -1,3 +1,11 @@
vscode
VS*/*
.DS_Store
build/linux/appimage/out
build/linux/appimage/pkg2appimage.AppDir
build/linux/appimage/pkg2appimage-*.AppImage
build/linux/appimage/squashfs-root
build/linux/appimage/VSCodium
build/windows/msi/releasedir
build/windows/msi/Files*.wxs
build/windows/msi/Files*.wixobj

1
.nvmrc Normal file
View File

@@ -0,0 +1 @@
v16.14.2

View File

@@ -2,45 +2,122 @@
## Our Pledge
In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation.
We as members, contributors, and leaders pledge to make participation in our
community a harassment-free experience for everyone, regardless of age, body
size, visible or invisible disability, ethnicity, sex characteristics, gender
identity and expression, level of experience, education, socio-economic status,
nationality, personal appearance, race, caste, color, religion, or sexual
identity and orientation.
We pledge to act and interact in ways that contribute to an open, welcoming,
diverse, inclusive, and healthy community.
## Our Standards
Examples of behavior that contributes to creating a positive environment include:
Examples of behavior that contributes to a positive environment for our
community include:
* Using welcoming and inclusive language
* Being respectful of differing viewpoints and experiences
* Gracefully accepting constructive criticism
* Focusing on what is best for the community
* Showing empathy towards other community members
* Demonstrating empathy and kindness toward other people
* Being respectful of differing opinions, viewpoints, and experiences
* Giving and gracefully accepting constructive feedback
* Accepting responsibility and apologizing to those affected by our mistakes,
and learning from the experience
* Focusing on what is best not just for us as individuals, but for the overall
community
Examples of unacceptable behavior by participants include:
Examples of unacceptable behavior include:
* The use of sexualized language or imagery and unwelcome sexual attention or advances
* Trolling, insulting/derogatory comments, and personal or political attacks
* The use of sexualized language or imagery, and sexual attention or advances of
any kind
* Trolling, insulting or derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or electronic address, without explicit permission
* Other conduct which could reasonably be considered inappropriate in a professional setting
* Publishing others' private information, such as a physical or email address,
without their explicit permission
* Other conduct which could reasonably be considered inappropriate in a
professional setting
## Our Responsibilities
## Enforcement Responsibilities
Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior.
Community leaders are responsible for clarifying and enforcing our standards of
acceptable behavior and will take appropriate and fair corrective action in
response to any behavior that they deem inappropriate, threatening, offensive,
or harmful.
Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful.
Community leaders have the right and responsibility to remove, edit, or reject
comments, commits, code, wiki edits, issues, and other contributions that are
not aligned to this Code of Conduct, and will communicate reasons for moderation
decisions when appropriate.
## Scope
This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers.
This Code of Conduct applies within all community spaces, and also applies when
an individual is officially representing the community in public spaces.
Examples of representing our community include using an official e-mail address,
posting via an official social media account, or acting as an appointed
representative at an online or offline event.
## Enforcement
Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at vscodium@protonmail.com. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately.
Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported to the community leaders responsible for enforcement at
vscodium@protonmail.com.
All complaints will be reviewed and investigated promptly and fairly.
Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership.
All community leaders are obligated to respect the privacy and security of the
reporter of any incident.
## Enforcement Guidelines
Community leaders will follow these Community Impact Guidelines in determining
the consequences for any action they deem in violation of this Code of Conduct:
### 1. Correction
**Community Impact**: Use of inappropriate language or other behavior deemed
unprofessional or unwelcome in the community.
**Consequence**: A private, written warning from community leaders, providing
clarity around the nature of the violation and an explanation of why the
behavior was inappropriate. A public apology may be requested.
### 2. Warning
**Community Impact**: A violation through a single incident or series of
actions.
**Consequence**: A warning with consequences for continued behavior. No
interaction with the people involved, including unsolicited interaction with
those enforcing the Code of Conduct, for a specified period of time. This
includes avoiding interactions in community spaces as well as external channels
like social media. Violating these terms may lead to a temporary or permanent
ban.
### 3. Temporary Ban
**Community Impact**: A serious violation of community standards, including
sustained inappropriate behavior.
**Consequence**: A temporary ban from any sort of interaction or public
communication with the community for a specified period of time. No public or
private interaction with the people involved, including unsolicited interaction
with those enforcing the Code of Conduct, is allowed during this period.
Violating these terms may lead to a permanent ban.
### 4. Permanent Ban
**Community Impact**: Demonstrating a pattern of violation of community
standards, including sustained inappropriate behavior, harassment of an
individual, or aggression toward or disparagement of classes of individuals.
**Consequence**: A permanent ban from any sort of public interaction within the
community.
## Attribution
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version]
This Code of Conduct is adapted from the [Contributor Covenant][homepage],
version 2.1, available at
[https://www.contributor-covenant.org/version/2/1/code_of_conduct.html][v2.1].
[homepage]: http://contributor-covenant.org
[version]: http://contributor-covenant.org/version/1/4/
[homepage]: https://www.contributor-covenant.org
[v2.1]: https://www.contributor-covenant.org/version/2/1/code_of_conduct.html

51
DOCS.md
View File

@@ -9,10 +9,13 @@
- [Proprietary Debugging Tools](#proprietary-debugging-tools)
- [Proprietary Extensions](#proprietary-extensions)
- [Migrating from Visual Studio Code to VSCodium](#migrating)
- [Sign in with GitHub](#signin-github)
- [How do I run VSCodium in portable mode?](#portable)
- [How do I fix the default file manager?](#file-manager)
- [How do I press and hold a key and have it repeat in VSCodium?](#press-and-hold)
- [How do I open VSCodium from the terminal?](#terminal-support)
- [Gentoo overlay/ebuild](#gentoo-overlay)
- [From Linux .tar.gz](#from-linux-targz)
- [How to build VSCodium](https://github.com/VSCodium/vscodium/blob/master/docs/build.md)
## <a id="disable-telemetry"></a>Getting all the Telemetry Out
@@ -50,7 +53,7 @@ See [this article](https://www.gitpod.io/blog/open-vsx/) for more information on
### <a id="howto-vscode-marketplace"></a>How to use the VS Code Marketplace
You can switch and use the VS Code marketplace by using the following solutions. However, note that [it is not clear whether this is legal](https://github.com/microsoft/vscode/issues/31168).
You can switch and use the VS Code marketplace by using the following solutions. However, note that [ this is not legal](https://github.com/microsoft/vscode/issues/31168).
With the following environment variables:
- `VSCODE_GALLERY_SERVICE_URL='https://marketplace.visualstudio.com/_apis/public/gallery'`
@@ -60,9 +63,9 @@ With the following environment variables:
- `VSCODE_GALLERY_RECOMMENDATIONS_URL=''`
Or by creating a custom `product.json` at the following location:
- Windows: `%USER%\AppData\Roaming\VSCodium`
- Windows: `%APPDATA%\VSCodium` or `%USERPROFILE%\AppData\Roaming\VSCodium`
- macOS: `~/Library/Application Support/VSCodium`
- Linux: `~/.config/VSCodium`
- Linux: `$XDG_CONFIG_HOME/VSCodium` or `~/.config/VSCodium`
with the content:
@@ -80,13 +83,13 @@ with the content:
### <a id="proprietary-debugging-tools"></a>Proprietary Debugging Tools
The debugger provided with Microsoft's [C# extension](https://github.com/OmniSharp/omnisharp-vscode) as well as the (Windows) debugger provided with their [C++ extension](https://github.com/Microsoft/vscode-cpptools) are very restrictively licensed to only work with the offical Visual Studio Code build. See [this comment in the C# extension repo](https://github.com/OmniSharp/omnisharp-vscode/issues/2491#issuecomment-418811364) and [this comment in the C++ extension repo](https://github.com/Microsoft/vscode-cpptools/issues/21#issuecomment-248349017).
The debugger provided with Microsoft's [C# extension](https://github.com/OmniSharp/omnisharp-vscode) as well as the (Windows) debugger provided with their [C++ extension](https://github.com/Microsoft/vscode-cpptools) are very restrictively licensed to only work with the official Visual Studio Code build. See [this comment in the C# extension repo](https://github.com/OmniSharp/omnisharp-vscode/issues/2491#issuecomment-418811364) and [this comment in the C++ extension repo](https://github.com/Microsoft/vscode-cpptools/issues/21#issuecomment-248349017).
A workaround exists to get debugging working in C# projects, by using Samsung's opensource [netcoredbg](https://github.com/Samsung/netcoredbg) package. See [this comment](https://github.com/VSCodium/vscodium/issues/82#issue-409806641) for instructions on how to set that up.
### <a id="proprietary-extensions"></a>Proprietary Extensions
Like the debuggers mentioned above, some extensions you may find in the marketplace (like the [Remote Development Extensions](https://code.visualstudio.com/docs/remote/remote-overview)) only function with the offical Visual Studio Code build. You can work around this by adding the extension's internal ID (found on the extension's page) to the `extensionAllowedProposedApi` property of the product.json in your VSCodium installation. For example:
Like the debuggers mentioned above, some extensions you may find in the marketplace (like the [Remote Development Extensions](https://code.visualstudio.com/docs/remote/remote-overview)) only function with the official Visual Studio Code build. You can work around this by adding the extension's internal ID (found on the extension's page) to the `extensionAllowedProposedApi` property of the product.json in your VSCodium installation. For example:
```json
"extensionAllowedProposedApi": [
@@ -121,11 +124,38 @@ To copy your settings manually:
- Click the three dots `...` and choose 'Open settings.json'
- Copy the contents of settings.json into the same place in VSCodium
## <a id="signin-github"></a>Sign in with GitHub
In VSCodium, `Sign in with GitHub` is using a Personal Access Token.<br />
Follow the documentation https://docs.github.com/en/github/authenticating-to-github/creating-a-personal-access-token to create your token.<br />
Select the scopes dependending of the extension which need access to GitHub. (GitLens requires the `repo` scope.)
### Linux
If you are getting the error `Writing login information to the keychain failed with error 'The name org.freedesktop.secrets was not provided by any .service files'.`, you need to install the package `gnome-keyring`.
## <a id="portable"></a>How do I run VSCodium in portable mode?
You can follow the [Portable Mode instructions](https://code.visualstudio.com/docs/editor/portable) from the Visual Studio Code website.
You can follow the [Portable Mode instructions](https://code.visualstudio.com/docs/editor/portable) from the Visual Studio Code website.
- **Windows** / **Linux** : the instructions can be followed as written.
- **macOS** : portable mode is enabled by the existence of a specially named folder. For Visual Studio Code that folder name is `code-portable-data`. For VSCodium, that folder name is `codium-portable-data`. So to enable portable mode for VSCodium on Mac OS, follow the instructions outlined in the [link above](https://code.visualstudio.com/docs/editor/portable), but create a folder named `codium-portable-data` instead of `code-portable-data`.
## <a id="file-manager"></a>How do I fix the default file manager (Linux)?
In some case, VSCodium becomes the file manager used to open directories (instead of apps like Dolphin or Nautilus).<br />
It's due to that no application was defined as the default file manager and so the system is using the latest capable application.
To set the default app, create the file `~/.config/mimeapps.list` with the content like:
```
[Default Applications]
inode/directory=org.gnome.Nautilus.desktop;
```
You can find your regular file manager with the command:
```
> grep directory /usr/share/applications/mimeinfo.cache
inode/directory=codium.desktop;org.gnome.Nautilus.desktop;
```
## <a id="press-and-hold"></a>How do I press and hold a key and have it repeat in VSCodium (Mac)?
This is a common question for Visual Studio Code and the procedure is slightly different in VSCodium because the `defaults` path is different.
@@ -136,6 +166,7 @@ $ defaults write com.visualstudio.code.oss ApplePressAndHoldEnabled -bool false
## <a id="terminal-support"></a>How do I open VSCodium from the terminal?
For MacOS and Windows:
- Go to the command palette (View | Command Palette...)
- Choose `Shell command: Install 'codium' command in PATH`.
@@ -150,6 +181,8 @@ This allows you to open files or directories in VSCodium directly from your term
Feel free to alias this command to something easier to type in your shell profile (e.g. `alias code=codium`).
## <a id="gentoo-overlay"></a>Gentoo ebuild/overlay
On Linux, when installed with a package manager, `codium` has been installed in your `PATH`.
There is an external Gentoo overlay with a working ebuild to install VSCodium, provided by [@wolviecb](https://github.com/wolviecb/). The overlay can be found [here](https://github.com/wolviecb/overlay).
### <a id="from-linux-targz"></a>From Linux .tar.gz
When the archive `VSCodium-linux-<arch>-<version>.tar.gz` is extracted, the main entry point for VSCodium is `./bin/codium`.

View File

@@ -1,6 +1,8 @@
MIT License
Copyright (c) 2021 Peter Squicciarini
Copyright (c) 2018-present The VSCodium contributors
Copyright (c) 2018-present Peter Squicciarini
Copyright (c) 2015-present Microsoft Corporation
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal

View File

@@ -7,18 +7,22 @@
<div id="badges" align="center">
[![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)
[![current release](https://img.shields.io/github/release/vscodium/vscodium.svg)](https://github.com/vscodium/vscodium/releases)
[![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)
[![codium](https://snapcraft.io//codium/badge.svg)](https://snapcraft.io/codium)
[![codium](https://snapcraft.io//codium/trending.svg?name=0)](https://snapcraft.io/codium)
[![build status (linux)](https://img.shields.io/github/workflow/status/VSCodium/vscodium/linux_build/master?label=build%28linux%29)](https://github.com/VSCodium/vscodium/actions/workflows/linux.yml?query=branch%3Amaster)
[![build status (macos)](https://img.shields.io/github/workflow/status/VSCodium/vscodium/macos_build/master?label=build%28macos%29)](https://github.com/VSCodium/vscodium/actions/workflows/macos.yml?query=branch%3Amaster)
[![build status (windows)](https://img.shields.io/github/workflow/status/VSCodium/vscodium/windows_build/master?label=build%28windows%29)](https://github.com/VSCodium/vscodium/actions/workflows/windows.yml?query=branch%3Amaster)
</div>
**This is not a fork. This is a repository of scripts to automatically build Microsoft's `vscode` repository into freely-licensed binaries with a community-driven default configuration.**
## Table of Contents
- [Download/Install](#download-install)
- [Install with Brew](#install-with-brew)
- [Install with Windows Package Manager (WinGet)](#install-with-winget)
@@ -28,36 +32,42 @@
- [Install with Package Manager](#install-with-package-manager)
- [Install on Arch Linux](#install-on-arch-linux)
- [Flatpak Option](#flatpak)
- [Build](#build)
- [Why Does This Exist](#why)
- [More Info](#more-info)
- [Supported Platforms](#supported-platforms)
## <a id="download-install"></a>Download/Install
:tada: :tada: [Download latest release here](https://github.com/VSCodium/vscodium/releases) :tada: :tada:
[More info / helpful tips are here.](https://github.com/VSCodium/vscodium/blob/master/DOCS.md)
#### <a id="install-with-brew"></a>Install with Brew (Mac)
If you are on a Mac and have [Homebrew](https://brew.sh/) installed:
```bash
brew install --cask vscodium
```
_Note for Mac macOS Mojave users: if you see "App can't be opened because Apple cannot check it for malicious software" when opening VSCodium the first time, you can right-click the application and choose Open. This should only be required the first time opening on Mojave._
*Note for macOS users: if you can't open the App, please read [the following troubleshooting](https://github.com/VSCodium/vscodium/wiki/Troubleshooting#macos).*
#### <a id="install-with-winget"></a>Install with Windows Package Manager (WinGet)
If you use Windows and have [Windows Package Manager](https://github.com/microsoft/winget-cli) installed:
```bash
winget install vscodium
```
#### <a id="install-with-choco"></a>Install with Chocolatey (Windows)
If you use Windows and have [Chocolatey](https://chocolatey.org) installed (thanks to [@Thilas](https://github.com/Thilas)):
```bash
choco install vscodium
```
#### <a id="install-with-scoop"></a>Install with Scoop (Windows)
If you use Windows and have [Scoop](https://scoop.sh) installed:
```bash
scoop bucket add extras
@@ -65,19 +75,23 @@ scoop install vscodium
```
#### <a id="install-with-snap"></a>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
snap install codium --classic
```
#### <a id="install-with-package-manager"></a>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.
#### <a id="install-on-arch-linux"></a>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.
#### <a id="flatpak"></a>Flatpak Option (GNU/Linux)
VSCodium is (unofficially) available as a Flatpak app [here](https://flathub.org/apps/details/com.vscodium.codium) and the build repo is [here](https://github.com/flathub/com.vscodium.codium). If your distribution has support for [flatpak](https://flathub.org), and you have enabled the [flathub repo](https://flatpak.org/setup/):
```bash
flatpak install flathub com.vscodium.codium
@@ -85,24 +99,31 @@ flatpak install flathub com.vscodium.codium
flatpak run com.vscodium.codium
```
## <a id="build"></a>Build
Build instructions can be found [here](https://github.com/VSCodium/vscodium/blob/master/docs/build.md)
## <a id="why"></a>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.__
If you want to build from source yourself, head over to [Microsoft's vscode repo](https://github.com/Microsoft/vscode) and follow their [instructions](https://github.com/Microsoft/vscode/wiki/How-to-Contribute#build-and-run). This repo exists to make it easier to get the latest version of MIT-licensed VS Code.
Microsoft's build process (which we are running to build the binaries) does download additional files. This was brought up in [Microsoft/vscode#49159](https://github.com/Microsoft/vscode/issues/49159) and [Microsoft/vscode#45978](https://github.com/Microsoft/vscode/issues/45978). These are the packages downloaded during build:
Microsoft's build process (which we are running to build the binaries) does download additional files. This was brought up in [Microsoft/vscode#141340](https://github.com/Microsoft/vscode/issues/141340) and [Microsoft/vscode#45978](https://github.com/Microsoft/vscode/issues/45978). These are the packages downloaded during build:
- Extensions from the Microsoft Marketplace:
- ms-vscode.node-debug2
- ms-vscode.node-debug
- [ms-vscode.references-view](https://marketplace.visualstudio.com/items?itemName=ms-vscode.references-view)
- [ms-vscode.js-debug-companion](https://marketplace.visualstudio.com/items?itemName=ms-vscode.js-debug-companion)
- [ms-vscode.js-debug](https://marketplace.visualstudio.com/items?itemName=ms-vscode.js-debug)
- [ms-vscode.vscode-js-profile-table](https://marketplace.visualstudio.com/items?itemName=ms-vscode.vscode-js-profile-table)
- From [Electron releases](https://github.com/electron/electron/releases) (using [gulp-atom-electron](https://github.com/joaomoreno/gulp-atom-electron))
- electron
- ffmpeg
@@ -110,22 +131,26 @@ Microsoft's build process (which we are running to build the binaries) does down
## <a id="more-info"></a>More Info
### Documentation
For more information on getting all the telemetry disabled and tips for migrating from Visual Studio Code to VSCodium, have a look at this [Docs](https://github.com/VSCodium/vscodium/blob/master/DOCS.md) page.
### Extensions and the Marketplace
According to the VS Code Marketplace [Terms of Use](https://aka.ms/vsmarketplace-ToU), _you may only install and use Marketplace Offerings with Visual Studio Products and Services._ For this reason, VSCodium uses [open-vsx.org](https://open-vsx.org/), an open source registry for VS Code extensions. See the [Extensions + Marketplace](https://github.com/VSCodium/vscodium/blob/master/DOCS.md#extensions-marketplace) section on the Docs page for more details.
Please note that some Visual Studio Code extensions have licenses that restrict their use to the official Visual Studio Code builds and therefore do not work with VSCodium. See [this note](https://github.com/VSCodium/vscodium/blob/master/DOCS.md#proprietary-debugging-tools) on the Docs page for what's been found so far and possible workarounds.
### 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/workflow` (for GNU/Linux and macOS builds) and the `win32-build.yml` file (for Windows builds). 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.
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.
## <a id="supported-platforms"></a>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).
The minimal version is limited by the core component Electron, you may want to check its [platform prerequisites](https://www.electronjs.org/docs/latest/development/build-instructions-gn#platform-prerequisites).
- [x] macOS (`zip`, `dmg`) OS X 10.10 or newer x64
- [x] macOS (`zip`, `dmg`) macOS 11.0 or newer arm64 via x64 emulation, see [status issue](https://github.com/VSCodium/vscodium/issues/597)
- [x] macOS (`zip`, `dmg`) macOS 11.0 or newer arm64
- [x] GNU/Linux x64 (`deb`, `rpm`, `AppImage`, `tar.gz`)
- [x] GNU/Linux x86 (`deb`, `rpm`, `tar.gz`) ([up to v1.35.1](https://code.visualstudio.com/updates/v1_36#_linux-32bit-support-ends))
- [x] GNU/Linux arm64 (`deb`, `tar.gz`)
@@ -133,13 +158,32 @@ 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
## <a id="donate"></a>Donate
If you would like to support the development of VSCodium, feel free to send BTC to `3PgjE95yzBDTrSPxPiqoxSgZFuKPPAix1N`.
Special thanks to:
- @estatra for the latest logo
- @jaredreich for the previous logo
<table>
<tr>
<td>@estatra</td>
<td>for the latest logo</td>
</tr>
<tr>
<td><a href="https://github.com/jaredreich" target="_blank">@jaredreich</a></td>
<td>for the previous logo</td>
</tr>
<tr>
<td><a href="https://github.com/PalinuroSec" target="_blank">@PalinuroSec</a></td>
<td>for CDN and domain name</td>
</tr>
<tr>
<td><a href="https://www.macstadium.com" target="_blank"><img src="https://images.prismic.io/macstadium/66fbce64-707e-41f3-b547-241908884716_MacStadium_Logo.png?w=128&q=75" width="128" height="49" alt="MacStadium logo" /></a></td>
<td>for providing a Mac mini M1</td>
</tr>
</table>
## <a id="license"></a>License
[MIT](https://github.com/VSCodium/vscodium/blob/master/LICENSE)

View File

@@ -1,32 +0,0 @@
# Based on
# https://github.com/AppImage/pkg2appimage/blob/master/recipes/VSCode.yml
#
# On a Debian/Ubuntu system:
# wget -c "https://github.com/AppImage/pkg2appimage/raw/master/pkg2appimage"
# bash -ex pkg2appimage VSCodium
app: VSCodium
ingredients:
packages:
- code
- libgconf2-4
dist: trusty
sources:
- deb http://archive.ubuntu.com/ubuntu/ trusty main universe
script:
- pwd
- cp ../vscode/.build/linux/deb/amd64/deb/*.deb .
- ls codium_*.deb | cut -d _ -f 2 > VERSION
script:
- sed -i -e 's|/usr/share/pixmaps/||g' usr/share/applications/codium.desktop
- cp usr/share/applications/codium.desktop .
- cp usr/share/pixmaps/vscodium.png vscodium.png
- convert vscodium.png -resize 512x512 usr/share/icons/hicolor/512x512/apps/vscodium.png
- convert vscodium.png -resize 256x256 usr/share/icons/hicolor/256x256/apps/vscodium.png
- convert vscodium.png -resize 128x128 usr/share/icons/hicolor/128x128/apps/vscodium.png
- convert vscodium.png -resize 64x64 usr/share/icons/hicolor/64x64/apps/vscodium.png
- convert vscodium.png -resize 48x48 usr/share/icons/hicolor/48x48/apps/vscodium.png
- convert vscodium.png -resize 32x32 usr/share/icons/hicolor/32x32/apps/vscodium.png
- ( cd usr/bin/ ; ln -s ../share/codium/codium . )

View File

@@ -2,39 +2,86 @@
set -ex
if [[ "$SHOULD_BUILD" == "yes" ]]; then
if [[ "${SHOULD_BUILD}" == "yes" ]]; then
npm config set scripts-prepend-node-path true
npm config set node_gyp
echo "LATEST_MS_COMMIT: ${LATEST_MS_COMMIT}"
echo "MS_COMMIT: ${MS_COMMIT}"
. prepare_vscode.sh
cd vscode || exit
cd vscode || { echo "'vscode' dir not found"; exit 1; }
yarn monaco-compile-check
yarn valid-layers-check
yarn gulp compile-build
yarn gulp compile-extension-media
yarn gulp compile-extensions-build
yarn gulp minify-vscode
if [[ "$OS_NAME" == "osx" ]]; then
if [[ "${OS_NAME}" == "osx" ]]; then
yarn gulp "vscode-darwin-${VSCODE_ARCH}-min-ci"
elif [[ "$OS_NAME" == "windows" ]]; then
cp LICENSE.txt LICENSE.rtf # windows build expects rtf license
find "../VSCode-darwin-${VSCODE_ARCH}" -exec touch {} \;
VSCODE_PLATFORM="darwin"
elif [[ "${OS_NAME}" == "windows" ]]; then
. ../build/windows/rtf/make.sh
yarn gulp "vscode-win32-${VSCODE_ARCH}-min-ci"
yarn gulp "vscode-win32-${VSCODE_ARCH}-code-helper"
yarn gulp "vscode-win32-${VSCODE_ARCH}-inno-updater"
yarn gulp "vscode-win32-${VSCODE_ARCH}-archive"
yarn gulp "vscode-win32-${VSCODE_ARCH}-system-setup"
yarn gulp "vscode-win32-${VSCODE_ARCH}-user-setup"
if [[ "${SHOULD_BUILD_ZIP}" != "no" ]]; then
yarn gulp "vscode-win32-${VSCODE_ARCH}-archive"
fi
if [[ "${SHOULD_BUILD_EXE_SYS}" != "no" ]]; then
yarn gulp "vscode-win32-${VSCODE_ARCH}-system-setup"
fi
if [[ "${SHOULD_BUILD_EXE_USR}" != "no" ]]; then
yarn gulp "vscode-win32-${VSCODE_ARCH}-user-setup"
fi
if [[ "${VSCODE_ARCH}" == "ia32" || "${VSCODE_ARCH}" == "x64" ]]; then
if [[ "${SHOULD_BUILD_MSI}" != "no" ]]; then
. ../build/windows/msi/build.sh
fi
if [[ "${SHOULD_BUILD_MSI_NOUP}" != "no" ]]; then
. ../build/windows/msi/build-updates-disabled.sh
fi
else
SHOULD_BUILD_REH="no"
fi
VSCODE_PLATFORM="win32"
else # linux
yarn gulp "vscode-linux-${VSCODE_ARCH}-min-ci"
if [[ "$SKIP_LINUX_PACKAGES" != "True" ]]; then
yarn gulp "vscode-linux-${VSCODE_ARCH}-build-deb"
yarn gulp "vscode-linux-${VSCODE_ARCH}-build-rpm"
. ../create_appimage.sh
find "../VSCode-linux-${VSCODE_ARCH}" -exec touch {} \;
if [[ "${SKIP_LINUX_PACKAGES}" != "True" ]]; then
if [[ "${SHOULD_BUILD_DEB}" != "no" || "${SHOULD_BUILD_APPIMAGE}" != "no" ]]; then
yarn gulp "vscode-linux-${VSCODE_ARCH}-build-deb"
fi
if [[ "${SHOULD_BUILD_RPM}" != "no" ]]; then
yarn gulp "vscode-linux-${VSCODE_ARCH}-build-rpm"
fi
if [[ "${SHOULD_BUILD_APPIMAGE}" != "no" ]]; then
. ../build/linux/appimage/build.sh
fi
fi
VSCODE_PLATFORM="linux"
fi
if [[ "${SHOULD_BUILD_REH}" != "no" ]]; then
yarn gulp minify-vscode-reh
yarn gulp "vscode-reh-${VSCODE_PLATFORM}-${VSCODE_ARCH}-min-ci"
fi
cd ..

View File

@@ -3,6 +3,16 @@
rm -rf VSCode*
rm -rf vscode
UNAME_ARCH=$( uname -m )
if [[ "${UNAME_ARCH}" == "arm64" ]]; then
export VSCODE_ARCH="arm64"
else
export VSCODE_ARCH="x64"
fi
echo "-- VSCODE_ARCH: ${VSCODE_ARCH}"
. get_repo.sh
SHOULD_BUILD=yes CI_BUILD=no OS_NAME=osx VSCODE_ARCH=x64 . build.sh
SHOULD_BUILD=yes CI_BUILD=no OS_NAME=osx . build.sh

View File

@@ -1,14 +1,6 @@
# powershell -ExecutionPolicy ByPass -File .\build\build_windows.ps1
$env:Path += ";C:\Program Files\Git\bin"
# first so `bash` is the one installed with `git`, avoid conflict with WSL
$env:Path = "C:\Program Files\Git\bin;" + $env:Path
Remove-Item -Recurse -Force VSCode*
bash ./get_repo.sh
$Env:SHOULD_BUILD = 'yes'
$Env:CI_BUILD = 'no'
$Env:OS_NAME = 'windows'
$Env:VSCODE_ARCH = 'x64'
bash ./build.sh
bash ./build/build_windows.sh

11
build/build_windows.sh Executable file
View File

@@ -0,0 +1,11 @@
#!/bin/bash
# to run with Bash: "C:\Program Files\Git\bin\bash.exe" ./build/build_windows.sh
rm -rf VSCode*
rm -rf vscode
rm -rf build/windows/msi/releasedir
. get_repo.sh
SHOULD_BUILD=yes CI_BUILD=no OS_NAME=windows VSCODE_ARCH=x64 . build.sh

28
build/linux/appimage/build.sh Executable file
View File

@@ -0,0 +1,28 @@
#!/bin/bash
set -ex
CALLER_DIR=$( pwd )
cd "$( dirname "${BASH_SOURCE[0]}" )"
if [[ "${VSCODE_ARCH}" == "x64" ]]; then
wget -c https://github.com/$(wget -q https://github.com/AppImage/pkg2appimage/releases -O - | grep "pkg2appimage-.*-x86_64.AppImage" | head -n 1 | cut -d '"' -f 2)
chmod +x ./pkg2appimage-*.AppImage
./pkg2appimage-*.AppImage --appimage-extract && mv ./squashfs-root ./pkg2appimage.AppDir
# add update's url
sed -i 's/generate_type2_appimage/generate_type2_appimage -u "gh-releases-zsync|VSCodium|vscodium|latest|*.AppImage.zsync"/' pkg2appimage.AppDir/AppRun
# remove check so build in docker can succeed
sed -i 's/grep docker/# grep docker/' pkg2appimage.AppDir/usr/share/pkg2appimage/functions.sh
bash -ex pkg2appimage.AppDir/AppRun recipe.yml
rm -f pkg2appimage-*.AppImage
rm -rf pkg2appimage.AppDir
rm -rf VSCodium
fi
cd "${CALLER_DIR}"

View File

@@ -0,0 +1,46 @@
# Based on
# https://github.com/AppImage/pkg2appimage/blob/master/recipes/VSCode.yml
#
# On a Debian/Ubuntu system:
# wget -c "https://github.com/AppImage/pkg2appimage/raw/master/pkg2appimage"
# bash -ex pkg2appimage VSCodium
app: VSCodium
ingredients:
packages:
- code
- libgconf2-4
dist: trusty
sources:
- deb http://archive.ubuntu.com/ubuntu/ trusty main universe
script:
- pwd
- cp ../../../../vscode/.build/linux/deb/amd64/deb/*.deb .
- ls codium_*.deb | cut -d _ -f 2 > VERSION
script:
- sed -i -e 's|/usr/share/pixmaps/||g' usr/share/applications/codium.desktop
- cp usr/share/applications/codium.desktop .
- cp usr/share/pixmaps/vscodium.png .
- /usr/bin/convert vscodium.png -resize 512x512 usr/share/icons/hicolor/512x512/apps/vscodium.png
- /usr/bin/convert vscodium.png -resize 256x256 usr/share/icons/hicolor/256x256/apps/vscodium.png
- /usr/bin/convert vscodium.png -resize 128x128 usr/share/icons/hicolor/128x128/apps/vscodium.png
- /usr/bin/convert vscodium.png -resize 64x64 usr/share/icons/hicolor/64x64/apps/vscodium.png
- /usr/bin/convert vscodium.png -resize 48x48 usr/share/icons/hicolor/48x48/apps/vscodium.png
- /usr/bin/convert vscodium.png -resize 32x32 usr/share/icons/hicolor/32x32/apps/vscodium.png
- ( cd usr/bin/ ; ln -s ../share/codium/codium . )
- rm -rf usr/lib/x86_64-linux-gnu
- rm -f lib/x86_64-linux-gnu/libglib*
- cat > AppRun <<\EOF
- #!/bin/sh
- HERE="$(dirname "$(readlink -f "${0}")")"
- export PATH="${HERE}"/usr/bin/:"${HERE}"/usr/sbin/:"${HERE}"/usr/games/:"${HERE}"/bin/:"${HERE}"/sbin/:"${PATH}"
- export LD_LIBRARY_PATH="${HERE}"/usr/lib/:"${HERE}"/usr/lib32/:"${HERE}"/usr/lib64/:"${HERE}"/lib/:"${HERE}"/lib/i386-linux-gnu/:"${HERE}"/lib/x86_64-linux-gnu/:"${HERE}"/lib32/:"${HERE}"/lib64/:"${LD_LIBRARY_PATH}"
- export XDG_DATA_DIRS="${HERE}"/usr/share/:"${XDG_DATA_DIRS}"
- export PERLLIB="${HERE}"/usr/share/perl5/:"${HERE}"/usr/lib/perl5/:"${PERLLIB}"
- export GSETTINGS_SCHEMA_DIR="${HERE}"/usr/share/glib-2.0/schemas/:"${GSETTINGS_SCHEMA_DIR}"
- export QT_PLUGIN_PATH="${HERE}"/usr/lib/qt4/plugins/:"${HERE}"/usr/lib/i386-linux-gnu/qt4/plugins/:"${HERE}"/usr/lib/x86_64-linux-gnu/qt4/plugins/:"${HERE}"/usr/lib32/qt4/plugins/:"${HERE}"/usr/lib64/qt4/plugins/:"${HERE}"/usr/lib/qt5/plugins/:"${HERE}"/usr/lib/i386-linux-gnu/qt5/plugins/:"${HERE}"/usr/lib/x86_64-linux-gnu/qt5/plugins/:"${HERE}"/usr/lib32/qt5/plugins/:"${HERE}"/usr/lib64/qt5/plugins/:"${QT_PLUGIN_PATH}"
- EXEC=$(grep -e '^Exec=.*' "${HERE}"/*.desktop | head -n 1 | cut -d "=" -f 2- | sed -e 's|%.||g')
- exec ${EXEC} "$@"
- EOF

21
build/update_patches.sh Executable file
View File

@@ -0,0 +1,21 @@
#!/bin/bash
cd vscode || { echo "'vscode' dir not found"; exit 1; }
git add .
git reset -q --hard HEAD
for file in ../patches/*.patch; do
if [ -f "${file}" ]; then
echo applying patch: "${file}"
git apply --ignore-whitespace "${file}"
if [ $? -ne 0 ]; then
echo failed to apply patch "${file}"
git apply --reject "${file}"
read -p "Press any key when the conflict have been resolved..." -n1 -s
git diff > "${file}"
fi
git add .
git reset -q --hard HEAD
fi
done

View File

@@ -0,0 +1,21 @@
#!/bin/bash
set -ex
CALLER_DIR=$( pwd )
cd "$( dirname "${BASH_SOURCE[0]}" )"
SCRIPT_DIR=$( pwd )
cd "../../../VSCode-win32-${VSCODE_ARCH}/resources/app"
cp product.json product.json.bak
cat product.json.bak | jq "del(.updateUrl)" > product.json
rm -f product.json.bak
cd "${SCRIPT_DIR}"
./build.sh "updates-disabled"
cd "${CALLER_DIR}"

View File

@@ -0,0 +1,86 @@
#!/bin/bash
set -ex
CALLER_DIR=$( pwd )
cd "$( dirname "${BASH_SOURCE[0]}" )"
WIN_SDK_MAJOR_VERSION="10"
WIN_SDK_FULL_VERSION="10.0.17763.0"
PRODUCT_NAME="VSCodium"
PRODUCT_SKU="vscodium"
PRODUCT_ID=$( powershell.exe -command "[guid]::NewGuid().ToString().ToUpper()" )
PRODUCT_ID="${PRODUCT_ID%%[[:cntrl:]]}"
CULTURE="en-us"
LANGIDS="1033"
SETUP_RELEASE_DIR=".\\releasedir"
SETUP_RESOURCES_DIR=".\\resources"
BINARY_DIR="..\\..\\..\\VSCode-win32-${VSCODE_ARCH}"
ICON_DIR="..\\..\\..\\src\\resources\\win32"
LICENSE_DIR="..\\..\\..\\vscode"
PROGRAM_FILES_86=$( env | sed -n 's/^ProgramFiles(x86)=//p' )
if [[ -z "${1}" ]]; then
OUTPUT_BASE_FILENAME="${PRODUCT_NAME}-${VSCODE_ARCH}-${MS_TAG}"
else
OUTPUT_BASE_FILENAME="${PRODUCT_NAME}-${VSCODE_ARCH}-${1}-${MS_TAG}"
fi
if [[ "${VSCODE_ARCH}" == "ia32" ]]; then
export PLATFORM="x86"
else
export PLATFORM="${VSCODE_ARCH}"
fi
BuildSetupTranslationTransform() {
local CULTURE=${1}
local LANGID=${2}
LANGIDS="${LANGIDS},${LANGID}"
echo "Building setup translation for culture \"${CULTURE}\" with LangID \"${LANGID}\"..."
"${WIX}bin\\light.exe" vscodium.wixobj "Files-${OUTPUT_BASE_FILENAME}.wixobj" -ext WixUIExtension -ext WixUtilExtension -ext WixNetFxExtension -spdb -cc "${TEMP}\\vscodium-cab-cache\\${PLATFORM}" -reusecab -out "${SETUP_RELEASE_DIR}\\${OUTPUT_BASE_FILENAME}.${CULTURE}.msi" -loc "i18n\\${PRODUCT_SKU}.${CULTURE}.wxl" -cultures:"${CULTURE}" -sice:ICE60 -sice:ICE69
cscript "${PROGRAM_FILES_86}\\Windows Kits\\${WIN_SDK_MAJOR_VERSION}\\bin\\${WIN_SDK_FULL_VERSION}\\${PLATFORM}\\WiLangId.vbs" "${SETUP_RELEASE_DIR}\\${OUTPUT_BASE_FILENAME}.${CULTURE}.msi" Product "${LANGID}"
"${PROGRAM_FILES_86}\\Windows Kits\\${WIN_SDK_MAJOR_VERSION}\\bin\\${WIN_SDK_FULL_VERSION}\\x86\\msitran" -g "${SETUP_RELEASE_DIR}\\${OUTPUT_BASE_FILENAME}.msi" "${SETUP_RELEASE_DIR}\\${OUTPUT_BASE_FILENAME}.${CULTURE}.msi" "${SETUP_RELEASE_DIR}\\${OUTPUT_BASE_FILENAME}.${CULTURE}.mst"
cscript "${PROGRAM_FILES_86}\\Windows Kits\\${WIN_SDK_MAJOR_VERSION}\\bin\\${WIN_SDK_FULL_VERSION}\\${PLATFORM}\\wisubstg.vbs" "${SETUP_RELEASE_DIR}\\${OUTPUT_BASE_FILENAME}.msi" "${SETUP_RELEASE_DIR}\\${OUTPUT_BASE_FILENAME}.${CULTURE}.mst" "${LANGID}"
cscript "${PROGRAM_FILES_86}\\Windows Kits\\${WIN_SDK_MAJOR_VERSION}\\bin\\${WIN_SDK_FULL_VERSION}\\${PLATFORM}\\wisubstg.vbs" "${SETUP_RELEASE_DIR}\\${OUTPUT_BASE_FILENAME}.msi"
rm -f "${SETUP_RELEASE_DIR}\\${OUTPUT_BASE_FILENAME}.${CULTURE}.msi"
rm -f "${SETUP_RELEASE_DIR}\\${OUTPUT_BASE_FILENAME}.${CULTURE}.mst"
}
"${WIX}bin\\heat.exe" dir "${BINARY_DIR}" -out "Files-${OUTPUT_BASE_FILENAME}.wxs" -t vscodium.xsl -gg -sfrag -scom -sreg -srd -ke -cg "AppFiles" -var var.AppName -var var.ProductVersion -var var.IconDir -var var.LicenseDir -var var.BinaryDir -dr APPLICATIONFOLDER -platform "${PLATFORM}"
"${WIX}bin\\candle.exe" -arch "${PLATFORM}" vscodium.wxs "Files-${OUTPUT_BASE_FILENAME}.wxs" -ext WixUIExtension -ext WixUtilExtension -ext WixNetFxExtension -dAppName=${PRODUCT_NAME} -dProductVersion="${MS_TAG}" -dProductId="${PRODUCT_ID}" -dBinaryDir="${BINARY_DIR}" -dIconDir="${ICON_DIR}" -dLicenseDir="${LICENSE_DIR}" -dSetupResourcesDir="${SETUP_RESOURCES_DIR}" -dCulture="${CULTURE}"
"${WIX}bin\\light.exe" vscodium.wixobj "Files-${OUTPUT_BASE_FILENAME}.wixobj" -ext WixUIExtension -ext WixUtilExtension -ext WixNetFxExtension -spdb -cc "${TEMP}\\vscodium-cab-cache\\${PLATFORM}" -out "${SETUP_RELEASE_DIR}\\${OUTPUT_BASE_FILENAME}.msi" -loc "i18n\\${PRODUCT_SKU}.${CULTURE}.wxl" -cultures:"${CULTURE}" -sice:ICE60 -sice:ICE69
BuildSetupTranslationTransform de-de 1031
BuildSetupTranslationTransform es-es 3082
BuildSetupTranslationTransform fr-fr 1036
BuildSetupTranslationTransform it-it 1040
# WixUI_Advanced bug: https://github.com/wixtoolset/issues/issues/5909
# BuildSetupTranslationTransform ja-jp 1041
BuildSetupTranslationTransform ko-kr 1042
BuildSetupTranslationTransform ru-ru 1049
BuildSetupTranslationTransform zh-cn 2052
BuildSetupTranslationTransform zh-tw 1028
# Add all supported languages to MSI Package attribute
cscript "${PROGRAM_FILES_86}\\Windows Kits\\${WIN_SDK_MAJOR_VERSION}\\bin\\${WIN_SDK_FULL_VERSION}\\${PLATFORM}\\WiLangId.vbs" "${SETUP_RELEASE_DIR}\\${OUTPUT_BASE_FILENAME}.msi" Package "${LANGIDS}"
# Remove files we do not need any longer.
rm -rf "${TEMP}\\vscodium-cab-cache"
rm -f "Files-${OUTPUT_BASE_FILENAME}.wxs"
rm -f "Files-${OUTPUT_BASE_FILENAME}.wixobj"
rm -f "vscodium.wixobj"
cd "${CALLER_DIR}"

View File

@@ -0,0 +1,25 @@
<?xml version="1.0" encoding="utf-8"?>
<WixLocalization Culture="de-de" Codepage="1252" xmlns="http://schemas.microsoft.com/wix/2006/localization">
<String Id="ProductLanguage">1031</String>
<String Id="ProductName">VSCodium</String>
<String Id="ProductHelpLink">https://github.com/VSCodium/vscodium</String>
<String Id="ProductUrlInfoAbout">https://github.com/VSCodium/vscodium</String>
<String Id="ProductUrlUpdateInfo">https://github.com/VSCodium/vscodium</String>
<String Id="PackageDescription">Paket mit VSCodium</String>
<String Id="FeatureStartMenuShortcutTitle">Startmenü-Verknüpfung</String>
<String Id="FeatureStartMenuShortcutDescription">Startmenü-Symbol erstellen.</String>
<String Id="FeatureDesktopShortcutTitle">Desktop-Verknüpfung</String>
<String Id="FeatureDesktopShortcutDescription">Desktop-Symbol erstellen.</String>
<String Id="FeatureFileTypeAssociationsTitle">Dateizuordnungen</String>
<String Id="FeatureFileTypeAssociationsDescription">VSCodium als Editor für unterstützte Dateitypen registrieren.</String>
<String Id="FeatureAddContextMenuFilesTitle">Dateikontextmenü</String>
<String Id="FeatureAddContextMenuFilesDescription">Aktion "Mit VSCodium öffnen" dem Dateikontextmenü von Windows-Explorer hinzufügen.</String>
<String Id="FeatureAddContextMenuFoldersTitle">Verzeichniskontextmenü</String>
<String Id="FeatureAddContextMenuFoldersDescription">Aktion "Mit VSCodium öffnen" dem Verzeichniskontextmenü von Windows-Explorer hinzufügen.</String>
<String Id="FeatureEnvironmentTitle">Zu PATH hinzufügen</String>
<String Id="FeatureEnvironmentDescription">VSCodium zur PATH Variable hinzufügen. Nach dem Neustart verfügbar.</String>
<String Id="LaunchApplication">VSCodium ausführen</String>
<String Id="NewerVersionInstalled">Eine neuere Version von VSCodium ist bereits installiert.</String>
<String Id="MinimumNetFramworkRequired">Diese Anwendung erfordert .NET Framework 4.5.2 oder höher. Bitte installieren Sie .NET Framework und führen Sie dieses Installationsprogramm erneut aus.</String>
<String Id="OSVersionRequired">Windows 7 oder neuer ist erforderlich.</String>
</WixLocalization>

View File

@@ -0,0 +1,25 @@
<?xml version="1.0" encoding="utf-8"?>
<WixLocalization Culture="en-us" Codepage="1252" xmlns="http://schemas.microsoft.com/wix/2006/localization">
<String Id="ProductLanguage">1033</String>
<String Id="ProductName">VSCodium</String>
<String Id="ProductHelpLink">https://github.com/VSCodium/vscodium</String>
<String Id="ProductUrlInfoAbout">https://github.com/VSCodium/vscodium</String>
<String Id="ProductUrlUpdateInfo">https://github.com/VSCodium/vscodium</String>
<String Id="PackageDescription">Package with VSCodium</String>
<String Id="FeatureStartMenuShortcutTitle">Start Menu shortcut</String>
<String Id="FeatureStartMenuShortcutDescription">Create a start menu icon.</String>
<String Id="FeatureDesktopShortcutTitle">Desktop shortcut</String>
<String Id="FeatureDesktopShortcutDescription">Create a desktop icon.</String>
<String Id="FeatureFileTypeAssociationsTitle">File Associations</String>
<String Id="FeatureFileTypeAssociationsDescription">Register VSCodium as an editor for supported file types.</String>
<String Id="FeatureAddContextMenuFilesTitle">Files context menu</String>
<String Id="FeatureAddContextMenuFilesDescription">Add "Open with VSCodium" action to Windows Explorer file contect menu.</String>
<String Id="FeatureAddContextMenuFoldersTitle">Directory context menu</String>
<String Id="FeatureAddContextMenuFoldersDescription">Add "Open with VSCodium" action to Windows Explorer directory contect menu.</String>
<String Id="FeatureEnvironmentTitle">Add to PATH</String>
<String Id="FeatureEnvironmentDescription">Add VSCodium to PATH environment variable. Available after restart.</String>
<String Id="LaunchApplication">Launch VSCodium</String>
<String Id="NewerVersionInstalled">Newer version of VSCodium is already installed.</String>
<String Id="MinimumNetFramworkRequired">This application requires .NET Framework 4.5.2 or later. Please install the .NET Framework then run this installer again.</String>
<String Id="OSVersionRequired">Windows 7 or later is required.</String>
</WixLocalization>

View File

@@ -0,0 +1,25 @@
<?xml version="1.0" encoding="utf-8"?>
<WixLocalization Culture="es-es" Codepage="1252" xmlns="http://schemas.microsoft.com/wix/2006/localization">
<String Id="ProductLanguage">3082</String>
<String Id="ProductName">VSCodium</String>
<String Id="ProductHelpLink">https://github.com/VSCodium/vscodium</String>
<String Id="ProductUrlInfoAbout">https://github.com/VSCodium/vscodium</String>
<String Id="ProductUrlUpdateInfo">https://github.com/VSCodium/vscodium</String>
<String Id="PackageDescription">Package with VSCodium</String>
<String Id="FeatureStartMenuShortcutTitle">Start Menu shortcut</String>
<String Id="FeatureStartMenuShortcutDescription">Create a start menu icon.</String>
<String Id="FeatureDesktopShortcutTitle">Desktop shortcut</String>
<String Id="FeatureDesktopShortcutDescription">Create a desktop icon.</String>
<String Id="FeatureFileTypeAssociationsTitle">File Associations</String>
<String Id="FeatureFileTypeAssociationsDescription">Register VSCodium as an editor for supported file types.</String>
<String Id="FeatureAddContextMenuFilesTitle">Files context menu</String>
<String Id="FeatureAddContextMenuFilesDescription">Add "Open with VSCodium" action to Windows Explorer file contect menu.</String>
<String Id="FeatureAddContextMenuFoldersTitle">Directory context menu</String>
<String Id="FeatureAddContextMenuFoldersDescription">Add "Open with VSCodium" action to Windows Explorer directory contect menu.</String>
<String Id="FeatureEnvironmentTitle">Add to PATH</String>
<String Id="FeatureEnvironmentDescription">Add VSCodium to PATH environment variable. Available after restart.</String>
<String Id="LaunchApplication">Launch VSCodium</String>
<String Id="NewerVersionInstalled">Newer version of VSCodium is already installed.</String>
<String Id="MinimumNetFramworkRequired">This application requires .NET Framework 4.5.2 or later. Please install the .NET Framework then run this installer again.</String>
<String Id="OSVersionRequired">Windows 7 or later is required.</String>
</WixLocalization>

View File

@@ -0,0 +1,25 @@
<?xml version="1.0" encoding="utf-8"?>
<WixLocalization Culture="fr-fr" Codepage="1252" xmlns="http://schemas.microsoft.com/wix/2006/localization">
<String Id="ProductLanguage">1036</String>
<String Id="ProductName">VSCodium</String>
<String Id="ProductHelpLink">https://github.com/VSCodium/vscodium</String>
<String Id="ProductUrlInfoAbout">https://github.com/VSCodium/vscodium</String>
<String Id="ProductUrlUpdateInfo">https://github.com/VSCodium/vscodium</String>
<String Id="PackageDescription">Package with VSCodium</String>
<String Id="FeatureStartMenuShortcutTitle">Start Menu shortcut</String>
<String Id="FeatureStartMenuShortcutDescription">Create a start menu icon.</String>
<String Id="FeatureDesktopShortcutTitle">Desktop shortcut</String>
<String Id="FeatureDesktopShortcutDescription">Create a desktop icon.</String>
<String Id="FeatureFileTypeAssociationsTitle">File Associations</String>
<String Id="FeatureFileTypeAssociationsDescription">Register VSCodium as an editor for supported file types.</String>
<String Id="FeatureAddContextMenuFilesTitle">Files context menu</String>
<String Id="FeatureAddContextMenuFilesDescription">Add "Open with VSCodium" action to Windows Explorer file contect menu.</String>
<String Id="FeatureAddContextMenuFoldersTitle">Directory context menu</String>
<String Id="FeatureAddContextMenuFoldersDescription">Add "Open with VSCodium" action to Windows Explorer directory contect menu.</String>
<String Id="FeatureEnvironmentTitle">Add to PATH</String>
<String Id="FeatureEnvironmentDescription">Add VSCodium to PATH environment variable. Available after restart.</String>
<String Id="LaunchApplication">Launch VSCodium</String>
<String Id="NewerVersionInstalled">Newer version of VSCodium is already installed.</String>
<String Id="MinimumNetFramworkRequired">This application requires .NET Framework 4.5.2 or later. Please install the .NET Framework then run this installer again.</String>
<String Id="OSVersionRequired">Windows 7 or later is required.</String>
</WixLocalization>

View File

@@ -0,0 +1,25 @@
<?xml version="1.0" encoding="utf-8"?>
<WixLocalization Culture="it-it" Codepage="1252" xmlns="http://schemas.microsoft.com/wix/2006/localization">
<String Id="ProductLanguage">1040</String>
<String Id="ProductName">VSCodium</String>
<String Id="ProductHelpLink">https://github.com/VSCodium/vscodium</String>
<String Id="ProductUrlInfoAbout">https://github.com/VSCodium/vscodium</String>
<String Id="ProductUrlUpdateInfo">https://github.com/VSCodium/vscodium</String>
<String Id="PackageDescription">Package with VSCodium</String>
<String Id="FeatureStartMenuShortcutTitle">Start Menu shortcut</String>
<String Id="FeatureStartMenuShortcutDescription">Create a start menu icon.</String>
<String Id="FeatureDesktopShortcutTitle">Desktop shortcut</String>
<String Id="FeatureDesktopShortcutDescription">Create a desktop icon.</String>
<String Id="FeatureFileTypeAssociationsTitle">File Associations</String>
<String Id="FeatureFileTypeAssociationsDescription">Register VSCodium as an editor for supported file types.</String>
<String Id="FeatureAddContextMenuFilesTitle">Files context menu</String>
<String Id="FeatureAddContextMenuFilesDescription">Add "Open with VSCodium" action to Windows Explorer file contect menu.</String>
<String Id="FeatureAddContextMenuFoldersTitle">Directory context menu</String>
<String Id="FeatureAddContextMenuFoldersDescription">Add "Open with VSCodium" action to Windows Explorer directory contect menu.</String>
<String Id="FeatureEnvironmentTitle">Add to PATH</String>
<String Id="FeatureEnvironmentDescription">Add VSCodium to PATH environment variable. Available after restart.</String>
<String Id="LaunchApplication">Launch VSCodium</String>
<String Id="NewerVersionInstalled">Newer version of VSCodium is already installed.</String>
<String Id="MinimumNetFramworkRequired">This application requires .NET Framework 4.5.2 or later. Please install the .NET Framework then run this installer again.</String>
<String Id="OSVersionRequired">Windows 7 or later is required.</String>
</WixLocalization>

View File

@@ -0,0 +1,25 @@
<?xml version="1.0" encoding="utf-8"?>
<WixLocalization Culture="ja-jp" Codepage="932" xmlns="http://schemas.microsoft.com/wix/2006/localization">
<String Id="ProductLanguage">1041</String>
<String Id="ProductName">VSCodium</String>
<String Id="ProductHelpLink">https://github.com/VSCodium/vscodium</String>
<String Id="ProductUrlInfoAbout">https://github.com/VSCodium/vscodium</String>
<String Id="ProductUrlUpdateInfo">https://github.com/VSCodium/vscodium</String>
<String Id="PackageDescription">Package with VSCodium</String>
<String Id="FeatureStartMenuShortcutTitle">Start Menu shortcut</String>
<String Id="FeatureStartMenuShortcutDescription">Create a start menu icon.</String>
<String Id="FeatureDesktopShortcutTitle">Desktop shortcut</String>
<String Id="FeatureDesktopShortcutDescription">Create a desktop icon.</String>
<String Id="FeatureFileTypeAssociationsTitle">File Associations</String>
<String Id="FeatureFileTypeAssociationsDescription">Register VSCodium as an editor for supported file types.</String>
<String Id="FeatureAddContextMenuFilesTitle">Files context menu</String>
<String Id="FeatureAddContextMenuFilesDescription">Add "Open with VSCodium" action to Windows Explorer file contect menu.</String>
<String Id="FeatureAddContextMenuFoldersTitle">Directory context menu</String>
<String Id="FeatureAddContextMenuFoldersDescription">Add "Open with VSCodium" action to Windows Explorer directory contect menu.</String>
<String Id="FeatureEnvironmentTitle">Add to PATH</String>
<String Id="FeatureEnvironmentDescription">Add VSCodium to PATH environment variable. Available after restart.</String>
<String Id="LaunchApplication">Launch VSCodium</String>
<String Id="NewerVersionInstalled">Newer version of VSCodium is already installed.</String>
<String Id="MinimumNetFramworkRequired">This application requires .NET Framework 4.5.2 or later. Please install the .NET Framework then run this installer again.</String>
<String Id="OSVersionRequired">Windows 7 or later is required.</String>
</WixLocalization>

View File

@@ -0,0 +1,25 @@
<?xml version="1.0" encoding="utf-8"?>
<WixLocalization Culture="ko-kr" Codepage="949" xmlns="http://schemas.microsoft.com/wix/2006/localization">
<String Id="ProductLanguage">1042</String>
<String Id="ProductName">VSCodium</String>
<String Id="ProductHelpLink">https://github.com/VSCodium/vscodium</String>
<String Id="ProductUrlInfoAbout">https://github.com/VSCodium/vscodium</String>
<String Id="ProductUrlUpdateInfo">https://github.com/VSCodium/vscodium</String>
<String Id="PackageDescription">Package with VSCodium</String>
<String Id="FeatureStartMenuShortcutTitle">Start Menu shortcut</String>
<String Id="FeatureStartMenuShortcutDescription">Create a start menu icon.</String>
<String Id="FeatureDesktopShortcutTitle">Desktop shortcut</String>
<String Id="FeatureDesktopShortcutDescription">Create a desktop icon.</String>
<String Id="FeatureFileTypeAssociationsTitle">File Associations</String>
<String Id="FeatureFileTypeAssociationsDescription">Register VSCodium as an editor for supported file types.</String>
<String Id="FeatureAddContextMenuFilesTitle">Files context menu</String>
<String Id="FeatureAddContextMenuFilesDescription">Add "Open with VSCodium" action to Windows Explorer file contect menu.</String>
<String Id="FeatureAddContextMenuFoldersTitle">Directory context menu</String>
<String Id="FeatureAddContextMenuFoldersDescription">Add "Open with VSCodium" action to Windows Explorer directory contect menu.</String>
<String Id="FeatureEnvironmentTitle">Add to PATH</String>
<String Id="FeatureEnvironmentDescription">Add VSCodium to PATH environment variable. Available after restart.</String>
<String Id="LaunchApplication">Launch VSCodium</String>
<String Id="NewerVersionInstalled">Newer version of VSCodium is already installed.</String>
<String Id="MinimumNetFramworkRequired">This application requires .NET Framework 4.5.2 or later. Please install the .NET Framework then run this installer again.</String>
<String Id="OSVersionRequired">Windows 7 or later is required.</String>
</WixLocalization>

View File

@@ -0,0 +1,25 @@
<?xml version="1.0" encoding="utf-8"?>
<WixLocalization Culture="ru-ru" Codepage="1251" xmlns="http://schemas.microsoft.com/wix/2006/localization">
<String Id="ProductLanguage">1049</String>
<String Id="ProductName">VSCodium</String>
<String Id="ProductHelpLink">https://github.com/VSCodium/vscodium</String>
<String Id="ProductUrlInfoAbout">https://github.com/VSCodium/vscodium</String>
<String Id="ProductUrlUpdateInfo">https://github.com/VSCodium/vscodium</String>
<String Id="PackageDescription">Package with VSCodium</String>
<String Id="FeatureStartMenuShortcutTitle">Start Menu shortcut</String>
<String Id="FeatureStartMenuShortcutDescription">Create a start menu icon.</String>
<String Id="FeatureDesktopShortcutTitle">Desktop shortcut</String>
<String Id="FeatureDesktopShortcutDescription">Create a desktop icon.</String>
<String Id="FeatureFileTypeAssociationsTitle">File Associations</String>
<String Id="FeatureFileTypeAssociationsDescription">Register VSCodium as an editor for supported file types.</String>
<String Id="FeatureAddContextMenuFilesTitle">Files context menu</String>
<String Id="FeatureAddContextMenuFilesDescription">Add "Open with VSCodium" action to Windows Explorer file contect menu.</String>
<String Id="FeatureAddContextMenuFoldersTitle">Directory context menu</String>
<String Id="FeatureAddContextMenuFoldersDescription">Add "Open with VSCodium" action to Windows Explorer directory contect menu.</String>
<String Id="FeatureEnvironmentTitle">Add to PATH</String>
<String Id="FeatureEnvironmentDescription">Add VSCodium to PATH environment variable. Available after restart.</String>
<String Id="LaunchApplication">Launch VSCodium</String>
<String Id="NewerVersionInstalled">Newer version of VSCodium is already installed.</String>
<String Id="MinimumNetFramworkRequired">This application requires .NET Framework 4.5.2 or later. Please install the .NET Framework then run this installer again.</String>
<String Id="OSVersionRequired">Windows 7 or later is required.</String>
</WixLocalization>

View File

@@ -0,0 +1,25 @@
<?xml version="1.0" encoding="utf-8"?>
<WixLocalization Culture="zh-cn" Codepage="936" xmlns="http://schemas.microsoft.com/wix/2006/localization">
<String Id="ProductLanguage">2052</String>
<String Id="ProductName">VSCodium</String>
<String Id="ProductHelpLink">https://github.com/VSCodium/vscodium</String>
<String Id="ProductUrlInfoAbout">https://github.com/VSCodium/vscodium</String>
<String Id="ProductUrlUpdateInfo">https://github.com/VSCodium/vscodium</String>
<String Id="PackageDescription">Package with VSCodium</String>
<String Id="FeatureStartMenuShortcutTitle">Start Menu shortcut</String>
<String Id="FeatureStartMenuShortcutDescription">Create a start menu icon.</String>
<String Id="FeatureDesktopShortcutTitle">Desktop shortcut</String>
<String Id="FeatureDesktopShortcutDescription">Create a desktop icon.</String>
<String Id="FeatureFileTypeAssociationsTitle">File Associations</String>
<String Id="FeatureFileTypeAssociationsDescription">Register VSCodium as an editor for supported file types.</String>
<String Id="FeatureAddContextMenuFilesTitle">Files context menu</String>
<String Id="FeatureAddContextMenuFilesDescription">Add "Open with VSCodium" action to Windows Explorer file contect menu.</String>
<String Id="FeatureAddContextMenuFoldersTitle">Directory context menu</String>
<String Id="FeatureAddContextMenuFoldersDescription">Add "Open with VSCodium" action to Windows Explorer directory contect menu.</String>
<String Id="FeatureEnvironmentTitle">Add to PATH</String>
<String Id="FeatureEnvironmentDescription">Add VSCodium to PATH environment variable. Available after restart.</String>
<String Id="LaunchApplication">Launch VSCodium</String>
<String Id="NewerVersionInstalled">Newer version of VSCodium is already installed.</String>
<String Id="MinimumNetFramworkRequired">This application requires .NET Framework 4.5.2 or later. Please install the .NET Framework then run this installer again.</String>
<String Id="OSVersionRequired">Windows 7 or later is required.</String>
</WixLocalization>

View File

@@ -0,0 +1,25 @@
<?xml version="1.0" encoding="utf-8"?>
<WixLocalization Culture="zh-tw" Codepage="950" xmlns="http://schemas.microsoft.com/wix/2006/localization">
<String Id="ProductLanguage">1028</String>
<String Id="ProductName">VSCodium</String>
<String Id="ProductHelpLink">https://github.com/VSCodium/vscodium</String>
<String Id="ProductUrlInfoAbout">https://github.com/VSCodium/vscodium</String>
<String Id="ProductUrlUpdateInfo">https://github.com/VSCodium/vscodium</String>
<String Id="PackageDescription">Package with VSCodium</String>
<String Id="FeatureStartMenuShortcutTitle">Start Menu shortcut</String>
<String Id="FeatureStartMenuShortcutDescription">Create a start menu icon.</String>
<String Id="FeatureDesktopShortcutTitle">Desktop shortcut</String>
<String Id="FeatureDesktopShortcutDescription">Create a desktop icon.</String>
<String Id="FeatureFileTypeAssociationsTitle">File Associations</String>
<String Id="FeatureFileTypeAssociationsDescription">Register VSCodium as an editor for supported file types.</String>
<String Id="FeatureAddContextMenuFilesTitle">Files context menu</String>
<String Id="FeatureAddContextMenuFilesDescription">Add "Open with VSCodium" action to Windows Explorer file contect menu.</String>
<String Id="FeatureAddContextMenuFoldersTitle">Directory context menu</String>
<String Id="FeatureAddContextMenuFoldersDescription">Add "Open with VSCodium" action to Windows Explorer directory contect menu.</String>
<String Id="FeatureEnvironmentTitle">Add to PATH</String>
<String Id="FeatureEnvironmentDescription">Add VSCodium to PATH environment variable. Available after restart.</String>
<String Id="LaunchApplication">Launch VSCodium</String>
<String Id="NewerVersionInstalled">Newer version of VSCodium is already installed.</String>
<String Id="MinimumNetFramworkRequired">This application requires .NET Framework 4.5.2 or later. Please install the .NET Framework then run this installer again.</String>
<String Id="OSVersionRequired">Windows 7 or later is required.</String>
</WixLocalization>

View File

@@ -0,0 +1,27 @@
<?xml version="1.0" encoding="utf-8"?>
<Include>
<!-- Setup UI strings. -->
<?if $(env.Platform)=x86?>
<?define ProgramFilesFolder="ProgramFilesFolder" ?>
<?define Win64="no" ?>
<?define Arch="(x86)" ?>
<?else?>
<?define ProgramFilesFolder="ProgramFiles64Folder" ?>
<?define Win64="yes" ?>
<?define Arch="(x64)" ?>
<?endif?>
<!-- <?define ProductVersion="$(var.ProductVersion)" ?> -->
<?define ProductName="!(loc.ProductName)" ?>
<?define ProductNameWithVersion="!(loc.ProductName) $(var.ProductVersion) $(var.Arch)" ?>
<?define ProductLanguage="!(loc.ProductLanguage)" ?>
<?define AppCodeName="$(var.AppName)" ?>
<!-- <?define AppName="$(var.AppName)" ?> -->
<?define AppFolderName="$(var.AppName)" ?>
<?define ProductManufacturerShort="$(var.AppName)" ?>
<?define ProductManufacturerLong="$(var.AppName)" ?>
<!-- Static settings, DO NOT TOUCH or upgrades will break! -->
<?define ProductUpgradeCode="{965370CD-253C-4720-82FC-2E6B02A53808}" ?>
<?define RTMProductVersion="0.0.1" ?>
</Include>

Binary file not shown.

After

Width:  |  Height:  |  Size: 84 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 451 KiB

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,468 @@
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:wi="http://schemas.microsoft.com/wix/2006/wi">
<xsl:strip-space elements="*"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()" />
</xsl:copy>
</xsl:template>
<xsl:key name="vId1ToReplace" match="wi:Component[wi:File[contains(@Source,'VSCodium.exe')]]" use="@Id"/>
<xsl:template match="node()[key('vId1ToReplace', @Id)]">
<xsl:copy>
<xsl:attribute name="Id">VSCODIUM.EXE</xsl:attribute>
<xsl:copy-of select="@*[name()!='Id']"/>
<xsl:apply-templates />
</xsl:copy>
</xsl:template>
<xsl:template match="wi:Component/wi:File[contains(@Source,'VSCodium.exe')]">
<xsl:copy>
<xsl:attribute name="Id">VSCODIUM.EXE</xsl:attribute>
<xsl:copy-of select="@*[name()!='Id']"/>
<xsl:apply-templates />
</xsl:copy>
</xsl:template>
<xsl:key name="vId2ToReplace" match="wi:Component[wi:File[contains(@Source,'resources\app\resources\win32\bower.ico')]]" use="@Id"/>
<xsl:template match="node()[key('vId2ToReplace', @Id)]">
<xsl:copy>
<xsl:attribute name="Id">BOWER.ICO</xsl:attribute>
<xsl:copy-of select="@*[name()!='Id']"/>
<xsl:apply-templates />
</xsl:copy>
</xsl:template>
<xsl:template match="wi:Component/wi:File[contains(@Source,'resources\app\resources\win32\bower.ico')]">
<xsl:copy>
<xsl:attribute name="Id">BOWER.ICO</xsl:attribute>
<xsl:copy-of select="@*[name()!='Id']"/>
<xsl:apply-templates />
</xsl:copy>
</xsl:template>
<xsl:key name="vId3ToReplace" match="wi:Component[wi:File[contains(@Source,'resources\app\resources\win32\c.ico')]]" use="@Id"/>
<xsl:template match="node()[key('vId3ToReplace', @Id)]">
<xsl:copy>
<xsl:attribute name="Id">C.ICO</xsl:attribute>
<xsl:copy-of select="@*[name()!='Id']"/>
<xsl:apply-templates />
</xsl:copy>
</xsl:template>
<xsl:template match="wi:Component/wi:File[contains(@Source,'resources\app\resources\win32\c.ico')]">
<xsl:copy>
<xsl:attribute name="Id">C.ICO</xsl:attribute>
<xsl:copy-of select="@*[name()!='Id']"/>
<xsl:apply-templates />
</xsl:copy>
</xsl:template>
<xsl:key name="vId4ToReplace" match="wi:Component[wi:File[contains(@Source,'resources\app\resources\win32\config.ico')]]" use="@Id"/>
<xsl:template match="node()[key('vId4ToReplace', @Id)]">
<xsl:copy>
<xsl:attribute name="Id">CONFIG.ICO</xsl:attribute>
<xsl:copy-of select="@*[name()!='Id']"/>
<xsl:apply-templates />
</xsl:copy>
</xsl:template>
<xsl:template match="wi:Component/wi:File[contains(@Source,'resources\app\resources\win32\config.ico')]">
<xsl:copy>
<xsl:attribute name="Id">CONFIG.ICO</xsl:attribute>
<xsl:copy-of select="@*[name()!='Id']"/>
<xsl:apply-templates />
</xsl:copy>
</xsl:template>
<xsl:key name="vId5ToReplace" match="wi:Component[wi:File[contains(@Source,'resources\app\resources\win32\cpp.ico')]]" use="@Id"/>
<xsl:template match="node()[key('vId5ToReplace', @Id)]">
<xsl:copy>
<xsl:attribute name="Id">CPP.ICO</xsl:attribute>
<xsl:copy-of select="@*[name()!='Id']"/>
<xsl:apply-templates />
</xsl:copy>
</xsl:template>
<xsl:template match="wi:Component/wi:File[contains(@Source,'resources\app\resources\win32\cpp.ico')]">
<xsl:copy>
<xsl:attribute name="Id">CPP.ICO</xsl:attribute>
<xsl:copy-of select="@*[name()!='Id']"/>
<xsl:apply-templates />
</xsl:copy>
</xsl:template>
<xsl:key name="vId7ToReplace" match="wi:Component[wi:File[contains(@Source,'resources\app\resources\win32\csharp.ico')]]" use="@Id"/>
<xsl:template match="node()[key('vId7ToReplace', @Id)]">
<xsl:copy>
<xsl:attribute name="Id">CSHARP.ICO</xsl:attribute>
<xsl:copy-of select="@*[name()!='Id']"/>
<xsl:apply-templates />
</xsl:copy>
</xsl:template>
<xsl:template match="wi:Component/wi:File[contains(@Source,'resources\app\resources\win32\csharp.ico')]">
<xsl:copy>
<xsl:attribute name="Id">CSHARP.ICO</xsl:attribute>
<xsl:copy-of select="@*[name()!='Id']"/>
<xsl:apply-templates />
</xsl:copy>
</xsl:template>
<xsl:key name="vId8ToReplace" match="wi:Component[wi:File[contains(@Source,'resources\app\resources\win32\css.ico')]]" use="@Id"/>
<xsl:template match="node()[key('vId8ToReplace', @Id)]">
<xsl:copy>
<xsl:attribute name="Id">CSS.ICO</xsl:attribute>
<xsl:copy-of select="@*[name()!='Id']"/>
<xsl:apply-templates />
</xsl:copy>
</xsl:template>
<xsl:template match="wi:Component/wi:File[contains(@Source,'resources\app\resources\win32\css.ico')]">
<xsl:copy>
<xsl:attribute name="Id">CSS.ICO</xsl:attribute>
<xsl:copy-of select="@*[name()!='Id']"/>
<xsl:apply-templates />
</xsl:copy>
</xsl:template>
<xsl:key name="vId9ToReplace" match="wi:Component[wi:File[contains(@Source,'resources\app\resources\win32\default.ico')]]" use="@Id"/>
<xsl:template match="node()[key('vId9ToReplace', @Id)]">
<xsl:copy>
<xsl:attribute name="Id">DEFAULT.ICO</xsl:attribute>
<xsl:copy-of select="@*[name()!='Id']"/>
<xsl:apply-templates />
</xsl:copy>
</xsl:template>
<xsl:template match="wi:Component/wi:File[contains(@Source,'resources\app\resources\win32\default.ico')]">
<xsl:copy>
<xsl:attribute name="Id">DEFAULT.ICO</xsl:attribute>
<xsl:copy-of select="@*[name()!='Id']"/>
<xsl:apply-templates />
</xsl:copy>
</xsl:template>
<xsl:key name="vId10ToReplace" match="wi:Component[wi:File[contains(@Source,'resources\app\resources\win32\go.ico')]]" use="@Id"/>
<xsl:template match="node()[key('vId10ToReplace', @Id)]">
<xsl:copy>
<xsl:attribute name="Id">GO.ICO</xsl:attribute>
<xsl:copy-of select="@*[name()!='Id']"/>
<xsl:apply-templates />
</xsl:copy>
</xsl:template>
<xsl:template match="wi:Component/wi:File[contains(@Source,'resources\app\resources\win32\go.ico')]">
<xsl:copy>
<xsl:attribute name="Id">GO.ICO</xsl:attribute>
<xsl:copy-of select="@*[name()!='Id']"/>
<xsl:apply-templates />
</xsl:copy>
</xsl:template>
<xsl:key name="vId11ToReplace" match="wi:Component[wi:File[contains(@Source,'resources\app\resources\win32\html.ico')]]" use="@Id"/>
<xsl:template match="node()[key('vId11ToReplace', @Id)]">
<xsl:copy>
<xsl:attribute name="Id">HTML.ICO</xsl:attribute>
<xsl:copy-of select="@*[name()!='Id']"/>
<xsl:apply-templates />
</xsl:copy>
</xsl:template>
<xsl:template match="wi:Component/wi:File[contains(@Source,'resources\app\resources\win32\html.ico')]">
<xsl:copy>
<xsl:attribute name="Id">HTML.ICO</xsl:attribute>
<xsl:copy-of select="@*[name()!='Id']"/>
<xsl:apply-templates />
</xsl:copy>
</xsl:template>
<xsl:key name="vId12ToReplace" match="wi:Component[wi:File[contains(@Source,'resources\app\resources\win32\jade.ico')]]" use="@Id"/>
<xsl:template match="node()[key('vId12ToReplace', @Id)]">
<xsl:copy>
<xsl:attribute name="Id">JADE.ICO</xsl:attribute>
<xsl:copy-of select="@*[name()!='Id']"/>
<xsl:apply-templates />
</xsl:copy>
</xsl:template>
<xsl:template match="wi:Component/wi:File[contains(@Source,'resources\app\resources\win32\jade.ico')]">
<xsl:copy>
<xsl:attribute name="Id">JADE.ICO</xsl:attribute>
<xsl:copy-of select="@*[name()!='Id']"/>
<xsl:apply-templates />
</xsl:copy>
</xsl:template>
<xsl:key name="vId13ToReplace" match="wi:Component[wi:File[contains(@Source,'resources\app\resources\win32\java.ico')]]" use="@Id"/>
<xsl:template match="node()[key('vId13ToReplace', @Id)]">
<xsl:copy>
<xsl:attribute name="Id">JAVA.ICO</xsl:attribute>
<xsl:copy-of select="@*[name()!='Id']"/>
<xsl:apply-templates />
</xsl:copy>
</xsl:template>
<xsl:template match="wi:Component/wi:File[contains(@Source,'resources\app\resources\win32\java.ico')]">
<xsl:copy>
<xsl:attribute name="Id">JAVA.ICO</xsl:attribute>
<xsl:copy-of select="@*[name()!='Id']"/>
<xsl:apply-templates />
</xsl:copy>
</xsl:template>
<xsl:key name="vId14ToReplace" match="wi:Component[wi:File[contains(@Source,'resources\app\resources\win32\javascript.ico')]]" use="@Id"/>
<xsl:template match="node()[key('vId14ToReplace', @Id)]">
<xsl:copy>
<xsl:attribute name="Id">JAVASCRIPT.ICO</xsl:attribute>
<xsl:copy-of select="@*[name()!='Id']"/>
<xsl:apply-templates />
</xsl:copy>
</xsl:template>
<xsl:template match="wi:Component/wi:File[contains(@Source,'resources\app\resources\win32\javascript.ico')]">
<xsl:copy>
<xsl:attribute name="Id">JAVASCRIPT.ICO</xsl:attribute>
<xsl:copy-of select="@*[name()!='Id']"/>
<xsl:apply-templates />
</xsl:copy>
</xsl:template>
<xsl:key name="vId15ToReplace" match="wi:Component[wi:File[contains(@Source,'resources\app\resources\win32\json.ico')]]" use="@Id"/>
<xsl:template match="node()[key('vId15ToReplace', @Id)]">
<xsl:copy>
<xsl:attribute name="Id">JSON.ICO</xsl:attribute>
<xsl:copy-of select="@*[name()!='Id']"/>
<xsl:apply-templates />
</xsl:copy>
</xsl:template>
<xsl:template match="wi:Component/wi:File[contains(@Source,'resources\app\resources\win32\json.ico')]">
<xsl:copy>
<xsl:attribute name="Id">JSON.ICO</xsl:attribute>
<xsl:copy-of select="@*[name()!='Id']"/>
<xsl:apply-templates />
</xsl:copy>
</xsl:template>
<xsl:key name="vId16ToReplace" match="wi:Component[wi:File[contains(@Source,'resources\app\resources\win32\less.ico')]]" use="@Id"/>
<xsl:template match="node()[key('vId16ToReplace', @Id)]">
<xsl:copy>
<xsl:attribute name="Id">LESS.ICO</xsl:attribute>
<xsl:copy-of select="@*[name()!='Id']"/>
<xsl:apply-templates />
</xsl:copy>
</xsl:template>
<xsl:template match="wi:Component/wi:File[contains(@Source,'resources\app\resources\win32\less.ico')]">
<xsl:copy>
<xsl:attribute name="Id">LESS.ICO</xsl:attribute>
<xsl:copy-of select="@*[name()!='Id']"/>
<xsl:apply-templates />
</xsl:copy>
</xsl:template>
<xsl:key name="vId17ToReplace" match="wi:Component[wi:File[contains(@Source,'resources\app\resources\win32\markdown.ico')]]" use="@Id"/>
<xsl:template match="node()[key('vId17ToReplace', @Id)]">
<xsl:copy>
<xsl:attribute name="Id">MARKDOWN.ICO</xsl:attribute>
<xsl:copy-of select="@*[name()!='Id']"/>
<xsl:apply-templates />
</xsl:copy>
</xsl:template>
<xsl:template match="wi:Component/wi:File[contains(@Source,'resources\app\resources\win32\markdown.ico')]">
<xsl:copy>
<xsl:attribute name="Id">MARKDOWN.ICO</xsl:attribute>
<xsl:copy-of select="@*[name()!='Id']"/>
<xsl:apply-templates />
</xsl:copy>
</xsl:template>
<xsl:key name="vId18ToReplace" match="wi:Component[wi:File[contains(@Source,'resources\app\resources\win32\php.ico')]]" use="@Id"/>
<xsl:template match="node()[key('vId18ToReplace', @Id)]">
<xsl:copy>
<xsl:attribute name="Id">PHP.ICO</xsl:attribute>
<xsl:copy-of select="@*[name()!='Id']"/>
<xsl:apply-templates />
</xsl:copy>
</xsl:template>
<xsl:template match="wi:Component/wi:File[contains(@Source,'resources\app\resources\win32\php.ico')]">
<xsl:copy>
<xsl:attribute name="Id">PHP.ICO</xsl:attribute>
<xsl:copy-of select="@*[name()!='Id']"/>
<xsl:apply-templates />
</xsl:copy>
</xsl:template>
<xsl:key name="vId19ToReplace" match="wi:Component[wi:File[contains(@Source,'resources\app\resources\win32\powershell.ico')]]" use="@Id"/>
<xsl:template match="node()[key('vId19ToReplace', @Id)]">
<xsl:copy>
<xsl:attribute name="Id">POWERSHELL.ICO</xsl:attribute>
<xsl:copy-of select="@*[name()!='Id']"/>
<xsl:apply-templates />
</xsl:copy>
</xsl:template>
<xsl:template match="wi:Component/wi:File[contains(@Source,'resources\app\resources\win32\powershell.ico')]">
<xsl:copy>
<xsl:attribute name="Id">POWERSHELL.ICO</xsl:attribute>
<xsl:copy-of select="@*[name()!='Id']"/>
<xsl:apply-templates />
</xsl:copy>
</xsl:template>
<xsl:key name="vId20ToReplace" match="wi:Component[wi:File[contains(@Source,'resources\app\resources\win32\python.ico')]]" use="@Id"/>
<xsl:template match="node()[key('vId20ToReplace', @Id)]">
<xsl:copy>
<xsl:attribute name="Id">PYTHON.ICO</xsl:attribute>
<xsl:copy-of select="@*[name()!='Id']"/>
<xsl:apply-templates />
</xsl:copy>
</xsl:template>
<xsl:template match="wi:Component/wi:File[contains(@Source,'resources\app\resources\win32\python.ico')]">
<xsl:copy>
<xsl:attribute name="Id">PYTHON.ICO</xsl:attribute>
<xsl:copy-of select="@*[name()!='Id']"/>
<xsl:apply-templates />
</xsl:copy>
</xsl:template>
<xsl:key name="vId21ToReplace" match="wi:Component[wi:File[contains(@Source,'resources\app\resources\win32\react.ico')]]" use="@Id"/>
<xsl:template match="node()[key('vId21ToReplace', @Id)]">
<xsl:copy>
<xsl:attribute name="Id">REACT.ICO</xsl:attribute>
<xsl:copy-of select="@*[name()!='Id']"/>
<xsl:apply-templates />
</xsl:copy>
</xsl:template>
<xsl:template match="wi:Component/wi:File[contains(@Source,'resources\app\resources\win32\react.ico')]">
<xsl:copy>
<xsl:attribute name="Id">REACT.ICO</xsl:attribute>
<xsl:copy-of select="@*[name()!='Id']"/>
<xsl:apply-templates />
</xsl:copy>
</xsl:template>
<xsl:key name="vId22ToReplace" match="wi:Component[wi:File[contains(@Source,'resources\app\resources\win32\ruby.ico')]]" use="@Id"/>
<xsl:template match="node()[key('vId22ToReplace', @Id)]">
<xsl:copy>
<xsl:attribute name="Id">RUBY.ICO</xsl:attribute>
<xsl:copy-of select="@*[name()!='Id']"/>
<xsl:apply-templates />
</xsl:copy>
</xsl:template>
<xsl:template match="wi:Component/wi:File[contains(@Source,'resources\app\resources\win32\ruby.ico')]">
<xsl:copy>
<xsl:attribute name="Id">RUBY.ICO</xsl:attribute>
<xsl:copy-of select="@*[name()!='Id']"/>
<xsl:apply-templates />
</xsl:copy>
</xsl:template>
<xsl:key name="vId23ToReplace" match="wi:Component[wi:File[contains(@Source,'resources\app\resources\win32\sass.ico')]]" use="@Id"/>
<xsl:template match="node()[key('vId23ToReplace', @Id)]">
<xsl:copy>
<xsl:attribute name="Id">SASS.ICO</xsl:attribute>
<xsl:copy-of select="@*[name()!='Id']"/>
<xsl:apply-templates />
</xsl:copy>
</xsl:template>
<xsl:template match="wi:Component/wi:File[contains(@Source,'resources\app\resources\win32\sass.ico')]">
<xsl:copy>
<xsl:attribute name="Id">SASS.ICO</xsl:attribute>
<xsl:copy-of select="@*[name()!='Id']"/>
<xsl:apply-templates />
</xsl:copy>
</xsl:template>
<xsl:key name="vId24ToReplace" match="wi:Component[wi:File[contains(@Source,'resources\app\resources\win32\shell.ico')]]" use="@Id"/>
<xsl:template match="node()[key('vId24ToReplace', @Id)]">
<xsl:copy>
<xsl:attribute name="Id">SHELL.ICO</xsl:attribute>
<xsl:copy-of select="@*[name()!='Id']"/>
<xsl:apply-templates />
</xsl:copy>
</xsl:template>
<xsl:template match="wi:Component/wi:File[contains(@Source,'resources\app\resources\win32\shell.ico')]">
<xsl:copy>
<xsl:attribute name="Id">SHELL.ICO</xsl:attribute>
<xsl:copy-of select="@*[name()!='Id']"/>
<xsl:apply-templates />
</xsl:copy>
</xsl:template>
<xsl:key name="vId25ToReplace" match="wi:Component[wi:File[contains(@Source,'resources\app\resources\win32\sql.ico')]]" use="@Id"/>
<xsl:template match="node()[key('vId25ToReplace', @Id)]">
<xsl:copy>
<xsl:attribute name="Id">SQL.ICO</xsl:attribute>
<xsl:copy-of select="@*[name()!='Id']"/>
<xsl:apply-templates />
</xsl:copy>
</xsl:template>
<xsl:template match="wi:Component/wi:File[contains(@Source,'resources\app\resources\win32\sql.ico')]">
<xsl:copy>
<xsl:attribute name="Id">SQL.ICO</xsl:attribute>
<xsl:copy-of select="@*[name()!='Id']"/>
<xsl:apply-templates />
</xsl:copy>
</xsl:template>
<xsl:key name="vId26ToReplace" match="wi:Component[wi:File[contains(@Source,'resources\app\resources\win32\typescript.ico')]]" use="@Id"/>
<xsl:template match="node()[key('vId26ToReplace', @Id)]">
<xsl:copy>
<xsl:attribute name="Id">TYPESCRIPT.ICO</xsl:attribute>
<xsl:copy-of select="@*[name()!='Id']"/>
<xsl:apply-templates />
</xsl:copy>
</xsl:template>
<xsl:template match="wi:Component/wi:File[contains(@Source,'resources\app\resources\win32\typescript.ico')]">
<xsl:copy>
<xsl:attribute name="Id">TYPESCRIPT.ICO</xsl:attribute>
<xsl:copy-of select="@*[name()!='Id']"/>
<xsl:apply-templates />
</xsl:copy>
</xsl:template>
<xsl:key name="vId27ToReplace" match="wi:Component[wi:File[contains(@Source,'resources\app\resources\win32\vue.ico')]]" use="@Id"/>
<xsl:template match="node()[key('vId27ToReplace', @Id)]">
<xsl:copy>
<xsl:attribute name="Id">VUE.ICO</xsl:attribute>
<xsl:copy-of select="@*[name()!='Id']"/>
<xsl:apply-templates />
</xsl:copy>
</xsl:template>
<xsl:template match="wi:Component/wi:File[contains(@Source,'resources\app\resources\win32\vue.ico')]">
<xsl:copy>
<xsl:attribute name="Id">VUE.ICO</xsl:attribute>
<xsl:copy-of select="@*[name()!='Id']"/>
<xsl:apply-templates />
</xsl:copy>
</xsl:template>
<xsl:key name="vId28ToReplace" match="wi:Component[wi:File[contains(@Source,'resources\app\resources\win32\xml.ico')]]" use="@Id"/>
<xsl:template match="node()[key('vId28ToReplace', @Id)]">
<xsl:copy>
<xsl:attribute name="Id">XML.ICO</xsl:attribute>
<xsl:copy-of select="@*[name()!='Id']"/>
<xsl:apply-templates />
</xsl:copy>
</xsl:template>
<xsl:template match="wi:Component/wi:File[contains(@Source,'resources\app\resources\win32\xml.ico')]">
<xsl:copy>
<xsl:attribute name="Id">XML.ICO</xsl:attribute>
<xsl:copy-of select="@*[name()!='Id']"/>
<xsl:apply-templates />
</xsl:copy>
</xsl:template>
<xsl:key name="vId29ToReplace" match="wi:Component[wi:File[contains(@Source,'resources\app\resources\win32\yaml.ico')]]" use="@Id"/>
<xsl:template match="node()[key('vId29ToReplace', @Id)]">
<xsl:copy>
<xsl:attribute name="Id">YAML.ICO</xsl:attribute>
<xsl:copy-of select="@*[name()!='Id']"/>
<xsl:apply-templates />
</xsl:copy>
</xsl:template>
<xsl:template match="wi:Component/wi:File[contains(@Source,'resources\app\resources\win32\yaml.ico')]">
<xsl:copy>
<xsl:attribute name="Id">YAML.ICO</xsl:attribute>
<xsl:copy-of select="@*[name()!='Id']"/>
<xsl:apply-templates />
</xsl:copy>
</xsl:template>
<!-- Remove conflicting non-MSI updater -->
<xsl:key name="FileToRemove" match="wi:Component[wi:File[contains(@Source,'tools\inno_updater.exe')]]" use="@Id" />
<xsl:template match="*[self::wi:Component or self::wi:ComponentRef][key('FileToRemove', @Id)]" />
<xsl:key name="FileToRemove" match="wi:Component[wi:File[contains(@Source,'tools\vcruntime140.dll')]]" use="@Id" />
<xsl:template match="*[self::wi:Component or self::wi:ComponentRef][key('FileToRemove', @Id)]" />
</xsl:stylesheet>

20
build/windows/rtf/make.sh Normal file
View File

@@ -0,0 +1,20 @@
#!/bin/bash
cd "$( dirname "${BASH_SOURCE[0]}" )"/../../../vscode || { echo "'vscode' dir not found"; exit 1; }
input=LICENSE.txt
target=LICENSE.rtf
cat - >$target <<_EOF
{\rtf1\ansi\deff0{\fonttbl{\f0\fnil\fcharset0 Consolas;}}
\viewkind4\uc1\pard\lang1033\f0\fs22
_EOF
sed -zE -e 's/([A-Za-z,])\r?\n([A-Za-z])/\1 \2/g' -e 's/\r?\n\r?\n/\\par\n\n/g' -e 's/(\\par\n)/\\line\1/g' -e 's/\s*(Copyright)/\\line\n\1/g' -e 's/(\\par)\\line/\1\n/g' $input >> $target
cat - >>$target <<_EOF
\par
}
_EOF

View File

@@ -2,9 +2,14 @@
set -e
if [[ $GITHUB_EVENT_NAME == "pull_request" ]]; then
if [[ "${GITHUB_EVENT_NAME}" == "pull_request" ]]; then
echo "It's a PR"
export SHOULD_BUILD="yes"
export SHOULD_DEPLOY="no"
elif [[ "${GITHUB_EVENT_NAME}" == "push" ]]; then
echo "It's a Push"
export SHOULD_BUILD="yes"
export SHOULD_DEPLOY="no"
else
@@ -13,7 +18,7 @@ else
export SHOULD_DEPLOY="yes"
fi
if [[ $GITHUB_ENV ]]; then
echo "SHOULD_BUILD=$SHOULD_BUILD" >> $GITHUB_ENV
echo "SHOULD_DEPLOY=$SHOULD_DEPLOY" >> $GITHUB_ENV
if [[ "${GITHUB_ENV}" ]]; then
echo "SHOULD_BUILD=${SHOULD_BUILD}" >> "${GITHUB_ENV}"
echo "SHOULD_DEPLOY=${SHOULD_DEPLOY}" >> "${GITHUB_ENV}"
fi

View File

@@ -2,132 +2,304 @@
set -e
REPOSITORY=${GITHUB_REPOSITORY:-"VSCodium/vscodium"}
GITHUB_RESPONSE=$(curl -s -H "Authorization: token $GITHUB_TOKEN" https://api.github.com/repos/$REPOSITORY/releases/tags/$LATEST_MS_TAG)
VSCODIUM_ASSETS=$(echo $GITHUB_RESPONSE | jq '.assets')
# if we just don't have the github token, get out fast
if [ "$GITHUB_TOKEN" != "" ]; then
if [ "$VSCODIUM_ASSETS" != "null" ]; then
if [[ "$OS_NAME" == "osx" ]]; then
HAVE_MAC=$(echo $VSCODIUM_ASSETS | jq --arg suffix "darwin-$VSCODE_ARCH-$LATEST_MS_TAG.zip" 'map(.name) | contains([$suffix])')
if [[ "$HAVE_MAC" != "true" ]]; then
echo "Building on Mac because we have no ZIP"
export SHOULD_BUILD="yes"
fi
elif [[ "$OS_NAME" == "windows" ]]; then
if [[ $VSCODE_ARCH == "arm64" ]]; then
HAVE_ARM64_SYS=$(echo $VSCODIUM_ASSETS | jq --arg suffix "VSCodiumSetup-$VSCODE_ARCH-$LATEST_MS_TAG.exe" 'map(.name) | contains([$suffix])')
HAVE_ARM64_USR=$(echo $VSCODIUM_ASSETS | jq --arg suffix "UserSetup-$VSCODE_ARCH-$LATEST_MS_TAG.exe" 'map(.name) | contains([$suffix])')
HAVE_ARM64_ZIP=$(echo $VSCODIUM_ASSETS | jq --arg suffix "win32-$VSCODE_ARCH-$LATEST_MS_TAG.zip" 'map(.name) | contains([$suffix])')
if [[ "$HAVE_ARM64_SYS" != "true" ]]; then
echo "Building on Windows arm64 because we have no system setup"
export SHOULD_BUILD="yes"
fi
if [[ "$HAVE_ARM64_USR" != "true" ]]; then
echo "Building on Windows arm64 because we have no user setup"
export SHOULD_BUILD="yes"
fi
if [[ "$HAVE_ARM64_ZIP" != "true" ]]; then
echo "Building on Windows arm64 because we have no zip"
export SHOULD_BUILD="yes"
fi
if [[ "$SHOULD_BUILD" != "yes" ]]; then
echo "Already have all the Windows arm64 builds"
fi
elif [[ $VSCODE_ARCH == "ia32" ]]; then
HAVE_IA32_SYS=$(echo $VSCODIUM_ASSETS | jq --arg suffix "VSCodiumSetup-$VSCODE_ARCH-$LATEST_MS_TAG.exe" 'map(.name) | contains([$suffix])')
HAVE_IA32_USR=$(echo $VSCODIUM_ASSETS | jq --arg suffix "UserSetup-$VSCODE_ARCH-$LATEST_MS_TAG.exe" 'map(.name) | contains([$suffix])')
HAVE_IA32_ZIP=$(echo $VSCODIUM_ASSETS | jq --arg suffix "win32-$VSCODE_ARCH-$LATEST_MS_TAG.zip" 'map(.name) | contains([$suffix])')
if [[ "$HAVE_IA32_SYS" != "true" ]]; then
echo "Building on Windows ia32 because we have no system setup"
export SHOULD_BUILD="yes"
fi
if [[ "$HAVE_IA32_USR" != "true" ]]; then
echo "Building on Windows ia32 because we have no user setup"
export SHOULD_BUILD="yes"
fi
if [[ "$HAVE_IA32_ZIP" != "true" ]]; then
echo "Building on Windows ia32 because we have no zip"
export SHOULD_BUILD="yes"
fi
if [[ "$SHOULD_BUILD" != "yes" ]]; then
echo "Already have all the Windows ia32 builds"
fi
else # Windows x64
HAVE_X64_SYS=$(echo $VSCODIUM_ASSETS | jq --arg suffix "VSCodiumSetup-$VSCODE_ARCH-$LATEST_MS_TAG.exe" 'map(.name) | contains([$suffix])')
HAVE_X64_USR=$(echo $VSCODIUM_ASSETS | jq --arg suffix "UserSetup-$VSCODE_ARCH-$LATEST_MS_TAG.exe" 'map(.name) | contains([$suffix])')
HAVE_X64_ZIP=$(echo $VSCODIUM_ASSETS | jq --arg suffix "win32-$VSCODE_ARCH-$LATEST_MS_TAG.zip" 'map(.name) | contains([$suffix])')
if [[ "$HAVE_X64_SYS" != "true" ]]; then
echo "Building on Windows x64 because we have no system setup"
export SHOULD_BUILD="yes"
fi
if [[ "$HAVE_X64_USR" != "true" ]]; then
echo "Building on Windows x64 because we have no user setup"
export SHOULD_BUILD="yes"
fi
if [[ "$HAVE_X64_ZIP" != "true" ]]; then
echo "Building on Windows x64 because we have no zip"
export SHOULD_BUILD="yes"
fi
if [[ "$SHOULD_BUILD" != "yes" ]]; then
echo "Already have all the Windows x64 builds"
fi
fi
elif [[ "$OS_NAME" == "linux" ]]; then
if [[ $VSCODE_ARCH == "arm64" ]]; then
HAVE_ARM64_DEB=$(echo $VSCODIUM_ASSETS | jq 'map(.name) | contains(["arm64.deb"])')
HAVE_ARM64_TAR=$(echo $VSCODIUM_ASSETS | jq --arg suffix "arm64-$LATEST_MS_TAG.tar.gz" 'map(.name) | contains([$suffix])')
if [[ "$HAVE_ARM64_DEB" != "true" ]]; then
echo "Building on Linux arm64 because we have no DEB"
export SHOULD_BUILD="yes"
fi
if [[ "$HAVE_ARM64_TAR" != "true" ]]; then
echo "Building on Linux arm64 because we have no TAR"
export SHOULD_BUILD="yes"
fi
if [[ "$SHOULD_BUILD" != "yes" ]]; then
echo "Already have all the Linux arm64 builds"
fi
elif [[ $VSCODE_ARCH == "armhf" ]]; then
HAVE_ARM_DEB=$(echo $VSCODIUM_ASSETS | jq 'map(.name) | contains(["armhf.deb"])')
HAVE_ARM_TAR=$(echo $VSCODIUM_ASSETS | jq --arg suffix "armhf-$LATEST_MS_TAG.tar.gz" 'map(.name) | contains([$suffix])')
if [[ "$HAVE_ARM_DEB" != "true" ]]; then
echo "Building on Linux arm because we have no DEB"
export SHOULD_BUILD="yes"
fi
if [[ "$HAVE_ARM_TAR" != "true" ]]; then
echo "Building on Linux arm because we have no TAR"
export SHOULD_BUILD="yes"
fi
if [[ "$SHOULD_BUILD" != "yes" ]]; then
echo "Already have all the Linux arm builds"
fi
else # Linux x64
HAVE_64_RPM=$(echo $VSCODIUM_ASSETS | jq 'map(.name) | contains(["x86_64.rpm"])')
HAVE_64_DEB=$(echo $VSCODIUM_ASSETS | jq 'map(.name) | contains(["amd64.deb"])')
HAVE_64_TAR=$(echo $VSCODIUM_ASSETS | jq --arg suffix "x64-$LATEST_MS_TAG.tar.gz" 'map(.name) | contains([$suffix])')
if [[ "$HAVE_64_RPM" != "true" ]]; then
echo "Building on Linux x64 because we have no RPM"
export SHOULD_BUILD="yes"
fi
if [[ "$HAVE_64_DEB" != "true" ]]; then
echo "Building on Linux x64 because we have no DEB"
export SHOULD_BUILD="yes"
fi
if [[ "$HAVE_64_TAR" != "true" ]]; then
echo "Building on Linux x64 because we have no TAR"
export SHOULD_BUILD="yes"
fi
if [[ "$SHOULD_BUILD" != "yes" ]]; then
echo "Already have all the Linux x64 builds"
fi
fi
fi
else
echo "Release assets do not exist at all, continuing build"
export SHOULD_BUILD="yes"
fi
if [[ -z "${GITHUB_TOKEN}" ]]; then
echo "Will not build because no GITHUB_TOKEN defined"
exit
fi
echo "SHOULD_BUILD=$SHOULD_BUILD" >> $GITHUB_ENV
REPOSITORY="${GITHUB_REPOSITORY:-"VSCodium/vscodium"}"
GITHUB_RESPONSE=$( curl -s -H "Authorization: token ${GITHUB_TOKEN}" "https://api.github.com/repos/${REPOSITORY}/releases/tags/${MS_TAG}")
VSCODIUM_ASSETS=$( echo "${GITHUB_RESPONSE}" | jq -c '.assets | map(.name)?' )
contains() {
# add " to match the end of a string so any hashs won't be matched by mistake
echo "${VSCODIUM_ASSETS}" | grep "${1}\""
}
if [ "${VSCODIUM_ASSETS}" != "null" ]; then
# macos
if [[ "${OS_NAME}" == "osx" ]]; then
if [[ -z $( contains "VSCodium-darwin-${VSCODE_ARCH}-${MS_TAG}.zip" ) ]]; then
echo "Building on MacOS because we have no ZIP"
export SHOULD_BUILD="yes"
else
export SHOULD_BUILD_ZIP="no"
fi
if [[ -z $( contains ".${VSCODE_ARCH}.${MS_TAG}.dmg" ) ]]; then
echo "Building on MacOS because we have no DMG"
export SHOULD_BUILD="yes"
else
export SHOULD_BUILD_DMG="no"
fi
if [[ -z $( contains "vscodium-reh-darwin-${VSCODE_ARCH}-${MS_TAG}.tar.gz" ) ]]; then
echo "Building on MacOS because we have no REH archive"
export SHOULD_BUILD="yes"
else
export SHOULD_BUILD_REH="no"
fi
if [[ "${SHOULD_BUILD}" != "yes" ]]; then
echo "Already have all the MacOS builds"
fi
elif [[ "${OS_NAME}" == "windows" ]]; then
# windows-arm64
if [[ ${VSCODE_ARCH} == "arm64" ]]; then
if [[ -z $( contains "VSCodiumSetup-${VSCODE_ARCH}-${MS_TAG}.exe" ) ]]; then
echo "Building on Windows arm64 because we have no system setup"
export SHOULD_BUILD="yes"
else
export SHOULD_BUILD_EXE_SYS="no"
fi
if [[ -z $( contains "UserSetup-${VSCODE_ARCH}-${MS_TAG}.exe" ) ]]; then
echo "Building on Windows arm64 because we have no user setup"
export SHOULD_BUILD="yes"
else
export SHOULD_BUILD_EXE_USR="no"
fi
if [[ -z $( contains "VSCodium-win32-${VSCODE_ARCH}-${MS_TAG}.zip" ) ]]; then
echo "Building on Windows arm64 because we have no zip"
export SHOULD_BUILD="yes"
else
export SHOULD_BUILD_ZIP="no"
fi
export SHOULD_BUILD_REH="no"
if [[ "${SHOULD_BUILD}" != "yes" ]]; then
echo "Already have all the Windows arm64 builds"
fi
# windows-ia32
elif [[ ${VSCODE_ARCH} == "ia32" ]]; then
if [[ -z $( contains "VSCodiumSetup-${VSCODE_ARCH}-${MS_TAG}.exe" ) ]]; then
echo "Building on Windows ia32 because we have no system setup"
export SHOULD_BUILD="yes"
else
export SHOULD_BUILD_EXE_SYS="no"
fi
if [[ -z $( contains "UserSetup-${VSCODE_ARCH}-${MS_TAG}.exe" ) ]]; then
echo "Building on Windows ia32 because we have no user setup"
export SHOULD_BUILD="yes"
else
export SHOULD_BUILD_EXE_USR="no"
fi
if [[ -z $( contains "VSCodium-win32-${VSCODE_ARCH}-${MS_TAG}.zip" ) ]]; then
echo "Building on Windows ia32 because we have no zip"
export SHOULD_BUILD="yes"
else
export SHOULD_BUILD_ZIP="no"
fi
if [[ -z $( contains "VSCodium-${VSCODE_ARCH}-${MS_TAG}.msi" ) ]]; then
echo "Building on Windows ia32 because we have no msi"
export SHOULD_BUILD="yes"
else
export SHOULD_BUILD_MSI="no"
fi
if [[ -z $( contains "VSCodium-${VSCODE_ARCH}-updates-disabled-${MS_TAG}.msi" ) ]]; then
echo "Building on Windows ia32 because we have no updates-disabled msi"
export SHOULD_BUILD="yes"
else
export SHOULD_BUILD_MSI_NOUP="no"
fi
if [[ -z $( contains "vscodium-reh-win32-${VSCODE_ARCH}-${MS_TAG}.tar.gz" ) ]]; then
echo "Building on Windows ia32 because we have no REH archive"
export SHOULD_BUILD="yes"
else
export SHOULD_BUILD_REH="no"
fi
if [[ "${SHOULD_BUILD}" != "yes" ]]; then
echo "Already have all the Windows ia32 builds"
fi
# windows-x64
else
if [[ -z $( contains "VSCodiumSetup-${VSCODE_ARCH}-${MS_TAG}.exe" ) ]]; then
echo "Building on Windows x64 because we have no system setup"
export SHOULD_BUILD="yes"
else
export SHOULD_BUILD_EXE_SYS="no"
fi
if [[ -z $( contains "UserSetup-${VSCODE_ARCH}-${MS_TAG}.exe" ) ]]; then
echo "Building on Windows x64 because we have no user setup"
export SHOULD_BUILD="yes"
else
export SHOULD_BUILD_EXE_USR="no"
fi
if [[ -z $( contains "VSCodium-win32-${VSCODE_ARCH}-${MS_TAG}.zip" ) ]]; then
echo "Building on Windows x64 because we have no zip"
export SHOULD_BUILD="yes"
else
export SHOULD_BUILD_ZIP="no"
fi
if [[ -z $( contains "VSCodium-${VSCODE_ARCH}-${MS_TAG}.msi" ) ]]; then
echo "Building on Windows x64 because we have no msi"
export SHOULD_BUILD="yes"
else
export SHOULD_BUILD_MSI="no"
fi
if [[ -z $( contains "VSCodium-${VSCODE_ARCH}-updates-disabled-${MS_TAG}.msi" ) ]]; then
echo "Building on Windows x64 because we have no updates-disabled msi"
export SHOULD_BUILD="yes"
else
export SHOULD_BUILD_MSI_NOUP="no"
fi
if [[ -z $( contains "vscodium-reh-win32-${VSCODE_ARCH}-${MS_TAG}.tar.gz" ) ]]; then
echo "Building on Windows x64 because we have no REH archive"
export SHOULD_BUILD="yes"
else
export SHOULD_BUILD_REH="no"
fi
if [[ "${SHOULD_BUILD}" != "yes" ]]; then
echo "Already have all the Windows x64 builds"
fi
fi
elif [[ "${OS_NAME}" == "linux" ]]; then
# linux-arm64
if [[ ${VSCODE_ARCH} == "arm64" ]]; then
if [[ -z $( contains "arm64.deb" ) ]]; then
echo "Building on Linux arm64 because we have no DEB"
export SHOULD_BUILD="yes"
else
export SHOULD_BUILD_DEB="no"
fi
if [[ -z $( contains "aarch64.rpm" ) ]]; then
echo "Building on Linux arm64 because we have no RPM"
export SHOULD_BUILD="yes"
else
export SHOULD_BUILD_RPM="no"
fi
if [[ -z $( contains "VSCodium-linux-arm64-${MS_TAG}.tar.gz" ) ]]; then
echo "Building on Linux arm64 because we have no TAR"
export SHOULD_BUILD="yes"
else
export SHOULD_BUILD_TAR="no"
fi
if [[ -z $( contains "vscodium-reh-linux-arm64-${MS_TAG}.tar.gz" ) ]]; then
echo "Building on Linux arm64 because we have no REH archive"
export SHOULD_BUILD="yes"
else
export SHOULD_BUILD_REH="no"
fi
export SHOULD_BUILD_APPIMAGE="no"
if [[ "${SHOULD_BUILD}" != "yes" ]]; then
echo "Already have all the Linux arm64 builds"
fi
# linux-armhf
elif [[ ${VSCODE_ARCH} == "armhf" ]]; then
if [[ -z $( contains "armhf.deb" ) ]]; then
echo "Building on Linux arm because we have no DEB"
export SHOULD_BUILD="yes"
else
export SHOULD_BUILD_DEB="no"
fi
if [[ -z $( contains "armv7hl.rpm" ) ]]; then
echo "Building on Linux arm because we have no RPM"
export SHOULD_BUILD="yes"
else
export SHOULD_BUILD_RPM="no"
fi
if [[ -z $( contains "VSCodium-linux-armhf-${MS_TAG}.tar.gz" ) ]]; then
echo "Building on Linux arm because we have no TAR"
export SHOULD_BUILD="yes"
else
export SHOULD_BUILD_TAR="no"
fi
if [[ -z $( contains "vscodium-reh-linux-armhf-${MS_TAG}.tar.gz" ) ]]; then
echo "Building on Linux arm because we have no REH archive"
export SHOULD_BUILD="yes"
else
export SHOULD_BUILD_REH="no"
fi
export SHOULD_BUILD_APPIMAGE="no"
if [[ "${SHOULD_BUILD}" != "yes" ]]; then
echo "Already have all the Linux arm builds"
fi
# linux-x64
else
if [[ -z $( contains "amd64.deb" ) ]]; then
echo "Building on Linux x64 because we have no DEB"
export SHOULD_BUILD="yes"
else
export SHOULD_BUILD_DEB="no"
fi
if [[ -z $( contains "x86_64.rpm" ) ]]; then
echo "Building on Linux x64 because we have no RPM"
export SHOULD_BUILD="yes"
else
export SHOULD_BUILD_RPM="no"
fi
if [[ -z $( contains "VSCodium-linux-x64-${MS_TAG}.tar.gz" ) ]]; then
echo "Building on Linux x64 because we have no TAR"
export SHOULD_BUILD="yes"
else
export SHOULD_BUILD_TAR="no"
fi
if [[ -z $( contains "x86_64.AppImage" ) ]]; then
echo "Building on Linux x64 because we have no AppImage"
export SHOULD_BUILD="yes"
else
export SHOULD_BUILD_APPIMAGE="no"
fi
if [[ -z $( contains "vscodium-reh-linux-x64-${MS_TAG}.tar.gz" ) ]]; then
echo "Building on Linux x64 because we have no REH archive"
export SHOULD_BUILD="yes"
else
export SHOULD_BUILD_REH="no"
fi
if [[ "${SHOULD_BUILD}" != "yes" ]]; then
echo "Already have all the Linux x64 builds"
fi
fi
fi
else
echo "Release assets do not exist at all, continuing build"
export SHOULD_BUILD="yes"
fi
echo "SHOULD_BUILD=${SHOULD_BUILD}" >> "${GITHUB_ENV}"
echo "SHOULD_BUILD_APPIMAGE=${SHOULD_BUILD_APPIMAGE}" >> "${GITHUB_ENV}"
echo "SHOULD_BUILD_DEB=${SHOULD_BUILD_DEB}" >> "${GITHUB_ENV}"
echo "SHOULD_BUILD_DMG=${SHOULD_BUILD_DMG}" >> "${GITHUB_ENV}"
echo "SHOULD_BUILD_EXE_SYS=${SHOULD_BUILD_EXE_SYS}" >> "${GITHUB_ENV}"
echo "SHOULD_BUILD_EXE_USR=${SHOULD_BUILD_EXE_USR}" >> "${GITHUB_ENV}"
echo "SHOULD_BUILD_MSI=${SHOULD_BUILD_MSI}" >> "${GITHUB_ENV}"
echo "SHOULD_BUILD_MSI_NOUP=${SHOULD_BUILD_MSI_NOUP}" >> "${GITHUB_ENV}"
echo "SHOULD_BUILD_REH=${SHOULD_BUILD_REH}" >> "${GITHUB_ENV}"
echo "SHOULD_BUILD_RPM=${SHOULD_BUILD_RPM}" >> "${GITHUB_ENV}"
echo "SHOULD_BUILD_TAR=${SHOULD_BUILD_TAR}" >> "${GITHUB_ENV}"
echo "SHOULD_BUILD_ZIP=${SHOULD_BUILD_ZIP}" >> "${GITHUB_ENV}"

View File

@@ -1,9 +0,0 @@
#!/bin/bash
if [[ "$VSCODE_ARCH" == "x64" ]]; then
# install a dep needed for this process
sudo apt-get install desktop-file-utils
cd ..
export DOCKER_BUILD=1
bash -e src/resources/linux/appimage/pkg2appimage VSCodium-AppImage-Recipe.yml
fi

133
docs/build.md Normal file
View File

@@ -0,0 +1,133 @@
# Build
## Table of Contents
- [Dependencies](#dependencies)
- [Linux](#dependencies-linux)
- [MacOS](#dependencies-macos)
- [Windows](#dependencies-windows)
- [Build Scripts](#build-scripts)
- [Build in Docker](#build-docker)
- [X64](#build-docker-x64)
- [ARM 32bits](#build-docker-arm32)
- [Patch Update Process](#patch-update-process)
- [Semi-Automated](#patch-update-process-semiauto)
- [Manual](#patch-update-process-manual)
## <a id="dependencies"></a>Dependencies
- node 16
- yarn
- jq
- git
### <a id="dependencies-linux"></a>Linux
- GCC
- make
- pkg-config
- libx11-dev
- libxkbfile-dev
- libsecret-1-dev
- fakeroot
- rpm
- rpmbuild
- dpkg
- python3
- imagemagick (for AppImage)
### <a id="dependencies-macos"></a>MacOS
### <a id="dependencies-windows"></a>Windows
- powershell
- sed
- 7z
- [WiX Toolset](http://wixtoolset.org/releases/)
- python3
- 'Tools for Native Modules' from official Node.js installer
## <a id="build-scripts"></a>Build Scripts
Each platform has its build helper script in the directory `build`.
- Linux: `./build/build_linux.sh`
- MacOS: `./build/build_macos.sh`
- Windows: `powershell -ExecutionPolicy ByPass -File .\build\build_windows.ps1`
## <a id="build-docker"></a>Build in Docker
To build for Linux, you can alternatively build VSCodium in docker
### <a id="build-docker-x64"></a>X64
Firstly, create the container with:
```
docker run -ti --volume=<local vscodium source>:/root/vscodium --name=vscodium-build-agent vscodium/vscodium-linux-build-agent:bionic-x64 bash
```
When inside the container, you can use the following commands to build:
```
curl -fsSL https://deb.nodesource.com/setup_16.x | sudo -E bash -
sudo apt-get install -y nodejs desktop-file-utils
npm install -g yarn
cd /root/vscodium
./get_repo.sh
export SHOULD_BUILD=yes
export OS_NAME=linux
export VSCODE_ARCH=x64
./build.sh
```
### <a id="build-docker-arm32"></a>ARM 32bits
Firstly, create the container with:
```
docker run -ti --volume=<local vscodium source>:/root/vscodium --name=vscodium-build-agent vscodium/vscodium-linux-build-agent:stretch-armhf bash
```
When inside the container, you can use the following commands to build:
```
curl -fsSL https://deb.nodesource.com/setup_16.x | sudo -E bash -
sudo apt-get install -y nodejs desktop-file-utils
cd /root/vscodium
./get_repo.sh
export SHOULD_BUILD=yes
export OS_NAME=linux
export VSCODE_ARCH=armhf
export npm_config_arch=armv7l
export npm_config_force_process_config="true"
./build.sh
```
## <a id="patch-update-process"></a>Patch Update Process
## <a id="patch-update-process-semiauto"></a>Semi-Automated
- run `./build/build_<os>.sh`, if a patch is failing then,
- run `./build/update_patches.sh`
- when the script pause at `Press any key when the conflict have been resolved...`, open `vscode` directory in **VSCodium**
- fix all the `*.rej` files
- run `yarn watch`
- run `./script/code.sh` until everything ok
- press any key to continue the script `update_patches.sh`
## <a id="patch-update-process-manual"></a>Manual
- run `./build/build_<os>.sh`, if a patch is failing then,
- open `vscode` directory in **VSCodium**
- revert all changes
- run `git apply --reject ../patches/<name>.patch`
- fix all the `*.rej` files
- run `yarn watch`
- run `./script/code.sh` until everything ok
- run `git diff > ../patches/<name>.patch`

View File

@@ -1,15 +1,44 @@
#!/bin/bash
# figure out latest tag by calling MS update API
UPDATE_INFO=$(curl https://update.code.visualstudio.com/api/update/darwin/stable/lol)
export LATEST_MS_COMMIT=$(echo $UPDATE_INFO | jq -r '.version')
export LATEST_MS_TAG=$(echo $UPDATE_INFO | jq -r '.name')
echo "Got the latest MS tag: ${LATEST_MS_TAG}"
mkdir -p vscode
cd vscode || { echo "'vscode' dir not found"; exit 1; }
git clone https://github.com/Microsoft/vscode.git --branch $LATEST_MS_TAG --depth 1
git init -q
git remote add origin https://github.com/Microsoft/vscode.git
# figure out latest tag by calling MS update API
if [ "${INSIDER}" == "1" ]; then
UPDATE_INFO=$(curl https://update.code.visualstudio.com/api/update/darwin/insider/lol)
export MS_COMMIT=$(echo "${UPDATE_INFO}" | jq -r '.version')
export MS_TAG=$(echo "${UPDATE_INFO}" | jq -r '.name')
elif [[ -z "${MS_TAG}" ]]; then
UPDATE_INFO=$(curl https://update.code.visualstudio.com/api/update/darwin/stable/lol)
export MS_COMMIT=$(echo "${UPDATE_INFO}" | jq -r '.version')
export MS_TAG=$(echo "${UPDATE_INFO}" | jq -r '.name')
else
reference=$( git ls-remote --tags | grep -x ".*refs\/tags\/${MS_TAG}" | head -1 )
if [[ -z "${reference}" ]]; then
echo "The following tag can't be found: ${MS_TAG}"
exit 1
elif [[ "${reference}" =~ ^([[:alnum:]]+)[[:space:]]+refs\/tags\/([0-9]+\.[0-9]+\.[0-9]+)$ ]]; then
export MS_COMMIT="${BASH_REMATCH[1]}"
export MS_TAG="${BASH_REMATCH[2]}"
else
echo "The following reference can't be parsed: ${reference}"
exit 1
fi
fi
echo "Got the MS tag: ${MS_TAG} version: ${MS_COMMIT}"
git fetch --depth 1 origin "${MS_COMMIT}"
git checkout FETCH_HEAD
cd ..
# for GH actions
if [[ $GITHUB_ENV ]]; then
echo "LATEST_MS_COMMIT=$LATEST_MS_COMMIT" >> $GITHUB_ENV
echo "LATEST_MS_TAG=$LATEST_MS_TAG" >> $GITHUB_ENV
if [[ ${GITHUB_ENV} ]]; then
echo "MS_TAG=${MS_TAG}" >> "${GITHUB_ENV}"
echo "MS_COMMIT=${MS_COMMIT}" >> "${GITHUB_ENV}"
fi

View File

@@ -1,55 +1,151 @@
#!/usr/bin/env bash
set -e
# DEBUG
# set -o xtrace
check_programs() {
for arg in "$@"
do
if ! command -v $arg >/dev/null 2>&1
then
echo "$arg could not be found"
exit
fi
done
for arg in "$@"
do
if ! command -v "${arg}" >/dev/null 2>&1
then
echo "${arg} could not be found"
exit
fi
done
}
check_programs "icns2png" "composite" "convert" "png2icns" "icotool"
for file in vscode/resources/darwin/*
do
if [ -f "$file" ]; then
name=$(basename $file '.icns')
SRC_PREFIX=""
VSCODE_PREFIX=""
if [[ $name != 'code' ]] && [ ! -f "src/resources/darwin/$name.icns" ]; then
icns2png -x -s 512x512 $file -o .
build_darwin_types() {
for file in "${VSCODE_PREFIX}"vscode/resources/darwin/*
do
if [ -f "${file}" ]; then
name=$(basename "${file}" '.icns')
composite -blend 100% -geometry +323+365 icons/corner_512.png "${name}_512x512x32.png" "$name.png"
composite icons/code_darwin.png "$name.png" "$name.png"
if [[ ${name} != 'code' ]] && [ ! -f "${SRC_PREFIX}src/resources/darwin/${name}.icns" ]; then
icns2png -x -s 512x512 "${file}" -o .
convert "$name.png" -resize 256x256 "${name}_256.png"
composite -blend 100% -geometry +323+365 icons/corner_512.png "${name}_512x512x32.png" "${name}.png"
composite icons/code_darwin.png "${name}.png" "${name}.png"
png2icns "src/resources/darwin/$name.icns" "$name.png" "${name}_256.png"
convert "${name}.png" -resize 256x256 "${name}_256.png"
rm "${name}_512x512x32.png" "$name.png" "${name}_256.png"
fi
fi
done
png2icns "${SRC_PREFIX}src/resources/darwin/${name}.icns" "${name}.png" "${name}_256.png"
for file in vscode/resources/win32/*.ico
do
if [ -f "$file" ]; then
name=$(basename $file '.ico')
rm "${name}_512x512x32.png" "${name}.png" "${name}_256.png"
fi
fi
done
}
if [[ $name != 'code' ]] && [ ! -f "src/resources/win32/$name.ico" ]; then
icotool -x -w 256 $file
build_darwin_main() {
if [ ! -f "${SRC_PREFIX}src/resources/darwin/code.icns" ]; then
convert "${SRC_PREFIX}src/resources/linux/code.png" -resize 512x512 code_512.png
convert "${SRC_PREFIX}src/resources/linux/code.png" -resize 256x256 code_256.png
convert "${SRC_PREFIX}src/resources/linux/code.png" -resize 128x128 code_128.png
composite -geometry +150+185 icons/code_64.png "${name}_9_256x256x32.png" "${name}.png"
png2icns "${SRC_PREFIX}src/resources/darwin/code.icns" code_512.png code_256.png code_128.png
convert "${name}.png" -define icon:auto-resize=256,128,96,64,48,32,24,20,16 "src/resources/win32/$name.ico"
rm code_512.png code_256.png code_128.png
fi
}
rm "${name}_9_256x256x32.png" "${name}.png"
fi
fi
done
build_win32() {
for file in "${VSCODE_PREFIX}"vscode/resources/win32/*.ico
do
if [ -f "${file}" ]; then
name=$(basename "${file}" '.ico')
if [ ! -f "src/resources/win32/code.ico" ]; then
convert "src/resources/linux/code.png" -define icon:auto-resize=256,128,96,64,48,32,24,20,16 "src/resources/win32/code.ico"
if [[ ${name} != 'code' ]] && [ ! -f "${SRC_PREFIX}src/resources/win32/${name}.ico" ]; then
icotool -x -w 256 "${file}"
composite -geometry +150+185 icons/code_64.png "${name}_9_256x256x32.png" "${name}.png"
convert "${name}.png" -define icon:auto-resize=256,128,96,64,48,32,24,20,16 "${SRC_PREFIX}src/resources/win32/${name}.ico"
rm "${name}_9_256x256x32.png" "${name}.png"
fi
fi
done
if [ ! -f "${SRC_PREFIX}src/resources/win32/code.ico" ]; then
convert "${SRC_PREFIX}src/resources/linux/code.png" -define icon:auto-resize=256,128,96,64,48,32,24,20,16 "${SRC_PREFIX}src/resources/win32/code.ico"
fi
if [ ! -f "${SRC_PREFIX}src/resources/win32/inno-big-100.bmp" ]; then
convert -size 164x314 xc:white "${SRC_PREFIX}src/resources/win32/inno-big-100.bmp"
composite -size 126x -gravity center icons/codium_only.svg "${SRC_PREFIX}src/resources/win32/inno-big-100.bmp" "${SRC_PREFIX}src/resources/win32/inno-big-100.bmp"
fi
if [ ! -f "${SRC_PREFIX}src/resources/win32/inno-big-125.bmp" ]; then
convert -size 192x386 xc:white "${SRC_PREFIX}src/resources/win32/inno-big-125.bmp"
composite -size 147x -gravity center icons/codium_only.svg "${SRC_PREFIX}src/resources/win32/inno-big-125.bmp" "${SRC_PREFIX}src/resources/win32/inno-big-125.bmp"
fi
if [ ! -f "${SRC_PREFIX}src/resources/win32/inno-big-150.bmp" ]; then
convert -size 246x459 xc:white "${SRC_PREFIX}src/resources/win32/inno-big-150.bmp"
composite -size 190x -gravity center icons/codium_only.svg "${SRC_PREFIX}src/resources/win32/inno-big-150.bmp" "${SRC_PREFIX}src/resources/win32/inno-big-150.bmp"
fi
if [ ! -f "${SRC_PREFIX}src/resources/win32/inno-big-175.bmp" ]; then
convert -size 273x556 xc:white "${SRC_PREFIX}src/resources/win32/inno-big-175.bmp"
composite -size 211x -gravity center icons/codium_only.svg "${SRC_PREFIX}src/resources/win32/inno-big-175.bmp" "${SRC_PREFIX}src/resources/win32/inno-big-175.bmp"
fi
if [ ! -f "${SRC_PREFIX}src/resources/win32/inno-big-200.bmp" ]; then
convert -size 328x604 xc:white "${SRC_PREFIX}src/resources/win32/inno-big-200.bmp"
composite -size 255x -gravity center icons/codium_only.svg "${SRC_PREFIX}src/resources/win32/inno-big-200.bmp" "${SRC_PREFIX}src/resources/win32/inno-big-200.bmp"
fi
if [ ! -f "${SRC_PREFIX}src/resources/win32/inno-big-225.bmp" ]; then
convert -size 355x700 xc:white "${SRC_PREFIX}src/resources/win32/inno-big-225.bmp"
composite -size 273x -gravity center icons/codium_only.svg "${SRC_PREFIX}src/resources/win32/inno-big-225.bmp" "${SRC_PREFIX}src/resources/win32/inno-big-225.bmp"
fi
if [ ! -f "${SRC_PREFIX}src/resources/win32/inno-big-250.bmp" ]; then
convert -size 410x797 xc:white "${SRC_PREFIX}src/resources/win32/inno-big-250.bmp"
composite -size 317x -gravity center icons/codium_only.svg "${SRC_PREFIX}src/resources/win32/inno-big-250.bmp" "${SRC_PREFIX}src/resources/win32/inno-big-250.bmp"
fi
if [ ! -f "${SRC_PREFIX}src/resources/win32/inno-small-100.bmp" ]; then
convert -size 55x55 xc:white "${SRC_PREFIX}src/resources/win32/inno-small-100.bmp"
composite -size 44x -gravity center icons/codium_only.svg "${SRC_PREFIX}src/resources/win32/inno-small-100.bmp" "${SRC_PREFIX}src/resources/win32/inno-small-100.bmp"
fi
if [ ! -f "${SRC_PREFIX}src/resources/win32/inno-small-125.bmp" ]; then
convert -size 64x68 xc:white "${SRC_PREFIX}src/resources/win32/inno-small-125.bmp"
composite -size 52x -gravity center icons/codium_only.svg "${SRC_PREFIX}src/resources/win32/inno-small-125.bmp" "${SRC_PREFIX}src/resources/win32/inno-small-125.bmp"
fi
if [ ! -f "${SRC_PREFIX}src/resources/win32/inno-small-150.bmp" ]; then
convert -size 83x80 xc:white "${SRC_PREFIX}src/resources/win32/inno-small-150.bmp"
composite -size 63x -gravity center icons/codium_only.svg "${SRC_PREFIX}src/resources/win32/inno-small-150.bmp" "${SRC_PREFIX}src/resources/win32/inno-small-150.bmp"
fi
if [ ! -f "${SRC_PREFIX}src/resources/win32/inno-small-175.bmp" ]; then
convert -size 92x97 xc:white "${SRC_PREFIX}src/resources/win32/inno-small-175.bmp"
composite -size 76x -gravity center icons/codium_only.svg "${SRC_PREFIX}src/resources/win32/inno-small-175.bmp" "${SRC_PREFIX}src/resources/win32/inno-small-175.bmp"
fi
if [ ! -f "${SRC_PREFIX}src/resources/win32/inno-small-200.bmp" ]; then
convert -size 110x106 xc:white "${SRC_PREFIX}src/resources/win32/inno-small-200.bmp"
composite -size 86x -gravity center icons/codium_only.svg "${SRC_PREFIX}src/resources/win32/inno-small-200.bmp" "${SRC_PREFIX}src/resources/win32/inno-small-200.bmp"
fi
if [ ! -f "${SRC_PREFIX}src/resources/win32/inno-small-225.bmp" ]; then
convert -size 119x123 xc:white "${SRC_PREFIX}src/resources/win32/inno-small-225.bmp"
composite -size 103x -gravity center icons/codium_only.svg "${SRC_PREFIX}src/resources/win32/inno-small-225.bmp" "${SRC_PREFIX}src/resources/win32/inno-small-225.bmp"
fi
if [ ! -f "${SRC_PREFIX}src/resources/win32/inno-small-250.bmp" ]; then
convert -size 138x140 xc:white "${SRC_PREFIX}src/resources/win32/inno-small-250.bmp"
composite -size 116x -gravity center icons/codium_only.svg "${SRC_PREFIX}src/resources/win32/inno-small-250.bmp" "${SRC_PREFIX}src/resources/win32/inno-small-250.bmp"
fi
if [ ! -f "${SRC_PREFIX}build/windows/msi/resources/wix-banner.bmp" ]; then
convert -size 493x58 xc:white "${SRC_PREFIX}build/windows/msi/resources/wix-banner.bmp"
composite -geometry +438+6 \( icons/codium_only.svg -resize 50x50 \) "${SRC_PREFIX}build/windows/msi/resources/wix-banner.bmp" "${SRC_PREFIX}build/windows/msi/resources/wix-banner.bmp"
fi
if [ ! -f "${SRC_PREFIX}build/windows/msi/resources/wix-dialog.bmp" ]; then
convert -size 493x312 xc:white "${SRC_PREFIX}build/windows/msi/resources/wix-dialog.bmp"
composite -geometry +22+152 \( icons/codium_only.svg -resize 120x90 \) "${SRC_PREFIX}build/windows/msi/resources/wix-dialog.bmp" "${SRC_PREFIX}build/windows/msi/resources/wix-dialog.bmp"
fi
}
if [ "${0}" == "${BASH_SOURCE}" ];
then
build_darwin_types
build_win32
fi

13
icons/codium_only.svg Normal file
View File

@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0" y="0" width="100" height="100" viewBox="0, 0, 100, 100">
<defs>
<linearGradient id="Gradient_1" gradientUnits="userSpaceOnUse" x1="2.763" y1="-0.313" x2="94.027" y2="95.408">
<stop offset="0" stop-color="#56CCF2"/>
<stop offset="1" stop-color="#2F80ED"/>
</linearGradient>
</defs>
<g id="Layer_1">
<path d="M63.697,1.417 C64.354,0.381 65.529,-0.308 66.763,-0.313 C68.492,-0.317 70.138,0.654 71.139,2.037 C72.082,3.359 72.373,5.03 72.375,6.626 C72.36,8.87 71.843,11.075 71.227,13.222 C69.688,18.289 67.597,23.168 66.035,28.229 C64.315,33.972 63.49,40.372 65.801,46.074 C67.009,42.702 68.204,39.323 69.408,35.947 C69.75,35.055 70.2,34.041 71.156,33.675 C72.487,33.201 73.844,34.59 73.805,35.876 C73.441,37.749 72.735,39.534 72.179,41.356 C67.676,54.892 62.633,68.241 57.777,81.655 C64.235,75.75 70.713,69.867 77.179,63.973 C79.04,62.279 81.058,60.433 81.628,57.873 C82.197,55.36 81.139,52.866 79.94,50.708 C78.555,48.133 76.787,45.684 76.137,42.786 C75.81,41.285 75.909,39.558 76.921,38.328 C77.651,37.402 78.98,36.924 80.101,37.376 C81.208,37.799 81.876,38.862 82.399,39.866 C84.156,43.391 85.252,47.243 85.629,51.165 C86.829,48.744 88.043,46.333 89.245,43.914 C89.971,42.489 90.612,40.96 91.79,39.834 C92.501,39.132 93.537,38.69 94.54,38.918 C95.798,39.196 96.681,40.34 97.019,41.528 C97.402,42.79 96.997,44.104 96.59,45.303 C95.378,48.656 93.474,51.69 91.639,54.727 C89.081,58.747 86.364,62.67 83.398,66.402 C85.093,65.27 86.878,64.079 88.954,63.842 C90.918,63.579 93.089,64.729 93.739,66.646 C94.174,67.951 93.47,69.428 92.288,70.065 C90.554,71.032 88.502,71.019 86.575,71.105 C79.582,71.297 72.767,74.74 68.428,80.221 C65.004,84.592 63.255,90.023 59.78,94.358 C57.588,97 54.491,100.317 51.084,99.584 C46.547,98.609 46.547,91.518 45.416,88.003 C44.833,86.231 43.739,84.612 42.221,83.507 C40.894,82.527 39.305,81.965 37.699,81.657 C34.012,80.949 30.209,81.323 26.531,80.563 C24.69,80.188 22.877,79.45 21.471,78.177 C20.131,77.001 19.205,75.427 18.563,73.78 C17.177,70.192 16.895,66.299 15.663,62.666 C13.88,57.436 10.352,52.812 5.757,49.741 C4.788,49.087 3.735,48.449 3.108,47.429 C2.598,46.632 2.643,45.499 3.311,44.804 C4.437,43.578 6.472,43.477 7.773,44.491 C10.439,46.382 10.824,50.056 13.309,52.112 C13.313,48.718 13.296,45.327 13.29,41.935 C13.298,40.955 13.189,39.9 13.679,39.009 C14.125,38.165 15.359,37.936 16.076,38.569 C17.045,39.381 17.34,40.706 17.478,41.905 C17.96,46.58 18.426,51.257 18.91,55.935 C21.346,53.747 22.465,50.196 21.677,47.011 C21.438,45.994 21.051,44.948 21.27,43.893 C21.449,43.008 22.388,42.385 23.273,42.543 C24.268,42.678 24.978,43.531 25.351,44.407 C25.945,45.859 25.947,47.476 25.827,49.018 C25.474,52.53 23.988,55.773 22.963,59.115 C21.964,62.065 21.277,65.343 22.278,68.39 C23.17,71.239 25.431,73.491 28.084,74.768 C31.359,76.377 35.048,76.877 38.657,77.019 C36.463,73.179 34.077,69.116 34.118,64.548 C34.161,59.949 37.085,56.075 37.875,51.636 C39.221,44.272 35.898,36.267 29.712,32.042 C26.964,30.154 23.665,29.314 20.842,27.563 C18.288,26 15.994,23.218 16.395,20.05 C18.335,19.299 20.501,19.779 22.252,20.787 C25.674,22.613 27.851,26.075 31.29,27.873 C32.498,28.532 33.883,28.858 35.259,28.774 C36.004,26.988 35.259,24.988 34.057,23.597 C31.796,20.873 27.98,20.212 25.616,17.608 C24.431,16.249 23.77,14.307 24.268,12.53 C24.673,11.126 26.126,10.17 27.573,10.276 C29.716,10.409 31.561,11.751 33.026,13.228 C37.873,18.073 40.662,24.663 41.756,31.36 C43.048,39.259 42.044,47.317 40.453,55.095 C40.156,56.68 39.6,58.305 40.011,59.923 C40.188,60.672 40.728,61.445 41.558,61.512 C42.699,61.585 43.642,60.808 44.473,60.127 C47.072,58.004 49.138,55.146 49.99,51.873 C50.656,49.487 50.675,46.989 50.628,44.532 C50.641,43.303 50.55,41.946 51.285,40.882 C51.81,40.06 52.79,39.414 53.798,39.653 C54.588,39.803 55.148,40.488 55.389,41.222 C55.777,42.431 55.718,43.736 55.484,44.969 C54.741,48.372 54.069,51.819 52.723,55.05 C51.773,57.369 50.49,59.574 48.752,61.391 C46.836,63.422 44.469,65.05 42.925,67.417 C41.872,69.034 41.191,71.043 41.648,72.975 C41.982,74.516 43.155,75.774 44.57,76.416 C46.631,77.357 49.133,77.309 51.142,76.25 C52.736,75.388 53.869,73.898 54.771,72.367 C56.36,69.613 57.323,66.555 58.122,63.493 C59.351,58.549 60.075,53.48 60.359,48.393 C60.684,42.96 59.698,37.342 56.959,32.596 C55.503,30.055 53.444,27.891 51.039,26.235 C48.873,24.624 46.491,23.229 44.734,21.142 C43.091,19.208 41.952,16.598 42.55,14.031 C43.674,13.325 45.093,13.202 46.338,13.644 C48.687,14.443 50.527,16.329 51.713,18.463 C53.324,20.978 54.668,23.971 57.506,25.337 C55.197,20.795 52.816,16.292 50.479,11.766 C49.719,10.237 48.97,8.566 49.168,6.817 C49.312,5.484 50.55,4.391 51.887,4.397 C53.074,4.401 54.187,5.069 54.894,5.999 C55.701,7.046 56.087,8.336 56.451,9.589 C58.313,16.071 60.174,22.55 62.043,29.03 C64.392,24.555 65.385,19.37 64.717,14.348 C64.425,11.686 63.643,9.115 63.023,6.518 C62.601,4.819 62.728,2.913 63.697,1.417 z" fill="url(#Gradient_1)" id="Shape"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 5.1 KiB

15
install_gh.sh Executable file
View File

@@ -0,0 +1,15 @@
#!/bin/bash
set -e
GH_ARCH="amd64"
VERSION=`curl "https://api.github.com/repos/cli/cli/releases/latest" | grep '"tag_name"' | sed -E 's/.*"([^"]+)".*/\1/' | cut -c2-`
curl -sSL "https://github.com/cli/cli/releases/download/v${VERSION}/gh_${VERSION}_linux_${GH_ARCH}.tar.gz" -o "gh_${VERSION}_linux_${GH_ARCH}.tar.gz"
tar xf "gh_${VERSION}_linux_${GH_ARCH}.tar.gz"
cp "gh_${VERSION}_linux_${GH_ARCH}/bin/gh" /usr/local/bin/
gh --version

View File

@@ -1,45 +1,35 @@
diff --git a/build/gulpfile.vscode.js b/build/gulpfile.vscode.js
index 6d3a369..57009d4 100644
index 2686509..4fedec2 100644
--- a/build/gulpfile.vscode.js
+++ b/build/gulpfile.vscode.js
@@ -276,7 +276,7 @@ function packageTask(platform, arch, sourceFolderName, destinationFolderName, op
all = es.merge(all, gulp.src('resources/linux/code.png', { base: '.' }));
@@ -289,7 +289,7 @@ function packageTask(platform, arch, sourceFolderName, destinationFolderName, op
} else if (platform === 'darwin') {
const shortcut = gulp.src('resources/darwin/bin/code.sh')
.pipe(replace('@@APPNAME@@', product.applicationName))
- .pipe(rename('bin/code'));
+ .pipe(rename('bin/' + product.applicationName));
all = es.merge(all, shortcut);
}
@@ -483,7 +483,7 @@ const generateVSCodeConfigurationTask = task.define('generate-vscode-configurati
const arch = process.env['VSCODE_ARCH'];
const appRoot = path.join(buildDir, `VSCode-darwin-${arch}`);
const appName = process.env.VSCODE_QUALITY === 'insider' ? 'Visual\\ Studio\\ Code\\ -\\ Insiders.app' : 'Visual\\ Studio\\ Code.app';
- const appPath = path.join(appRoot, appName, 'Contents', 'Resources', 'app', 'bin', 'code');
+ const appPath = path.join(appRoot, appName, 'Contents', 'Resources', 'app', 'bin', product.applicationName);
const codeProc = cp.exec(
`${appPath} --export-default-configuration='${allConfigDetailsPath}' --wait --user-data-dir='${userDataDir}' --extensions-dir='${extensionsDir}'`,
(err, stdout, stderr) => {
diff --git a/src/vs/platform/native/electron-main/nativeHostMainService.ts b/src/vs/platform/native/electron-main/nativeHostMainService.ts
index 50c4460..bf73260 100644
index f7bd477..a489ae4 100644
--- a/src/vs/platform/native/electron-main/nativeHostMainService.ts
+++ b/src/vs/platform/native/electron-main/nativeHostMainService.ts
@@ -431,4 +431,4 @@ export class NativeHostMainService extends Disposable implements INativeHostMain
@@ -351,7 +351,7 @@ export class NativeHostMainService extends Disposable implements INativeHostMain
}
private async getShellCommandLink(): Promise<{ readonly source: string; readonly target: string }> {
- const target = resolve(this.environmentMainService.appRoot, 'bin', 'code');
+ const target = resolve(this.environmentMainService.appRoot, 'bin', this.productService.applicationName);
const source = `/usr/local/bin/${this.productService.applicationName}`;
// Ensure source exists
@@ -545,7 +545,7 @@ export class NativeHostMainService extends Disposable implements INativeHostMain
// macOS
if (this.environmentMainService.isBuilt) {
- return join(this.environmentMainService.appRoot, 'bin', 'code');
+ return join(this.environmentMainService.appRoot, 'bin', `${this.productService.applicationName}`);
}
diff --git a/src/vs/workbench/contrib/cli/node/cli.contribution.ts b/src/vs/workbench/contrib/cli/node/cli.contribution.ts
index 30972a4..0a9435c 100644
--- a/src/vs/workbench/contrib/cli/node/cli.contribution.ts
+++ b/src/vs/workbench/contrib/cli/node/cli.contribution.ts
@@ -29,7 +29,7 @@ let _source: string | null = null;
function getSource(): string {
if (!_source) {
const root = FileAccess.asFileUri('', require).fsPath;
- _source = path.resolve(root, '..', 'bin', 'code');
+ _source = path.resolve(root, '..', 'bin', product.applicationName);
}
return _source;
}
return join(this.environmentMainService.appRoot, 'scripts', 'code-cli.sh');

View File

@@ -0,0 +1,13 @@
diff --git a/build/gulpfile.vscode.win32.js b/build/gulpfile.vscode.win32.js
index 81ba509..59041e2 100644
--- a/build/gulpfile.vscode.win32.js
+++ b/build/gulpfile.vscode.win32.js
@@ -137,7 +137,7 @@ defineWin32SetupTasks('arm64', 'user');
*/
function archiveWin32Setup(arch) {
return cb => {
- const args = ['a', '-tzip', zipPath(arch), '-x!CodeSignSummary*.md', '.', '-r'];
+ const args = ['a', '-tzip', zipPath(arch), '-x!CodeSignSummary*.md', '-x!tools', '.', '-r'];
cp.spawn(_7z, args, { stdio: 'inherit', cwd: buildPath(arch) })
.on('error', cb)

View File

@@ -0,0 +1,13 @@
diff --git a/src/main.js b/src/main.js
index 19dde20..d9611f2 100644
--- a/src/main.js
+++ b/src/main.js
@@ -409,6 +409,8 @@ function configureCrashReporter() {
argv.splice(endOfArgsMarkerIndex, 0, '--crash-reporter-id', crashReporterId);
}
}
+ } else {
+ return;
}
}

View File

@@ -1,18 +1,36 @@
diff --git a/src/vs/base/common/product.ts b/src/vs/base/common/product.ts
index f822373..30a0a66 100644
--- a/src/vs/base/common/product.ts
+++ b/src/vs/base/common/product.ts
@@ -70,6 +70,7 @@ export interface IProductConfiguration {
readonly extensionsGallery?: {
readonly serviceUrl: string;
+ readonly cacheUrl?: string;
readonly itemUrl: string;
readonly publisherUrl: string;
readonly resourceUrlTemplate: string;
diff --git a/src/vs/platform/product/common/product.ts b/src/vs/platform/product/common/product.ts
index 251ed36..8065c6f 100644
index 7e63a16..3bfeab8 100644
--- a/src/vs/platform/product/common/product.ts
+++ b/src/vs/platform/product/common/product.ts
@@ -8,6 +8,7 @@ import { isWeb } from 'vs/base/common/platform';
@@ -4,11 +4,12 @@
*--------------------------------------------------------------------------------------------*/
import { FileAccess } from 'vs/base/common/network';
-import { globals } from 'vs/base/common/platform';
+import { globals, isWindows } from 'vs/base/common/platform';
import { env } from 'vs/base/common/process';
import { IProductConfiguration } from 'vs/base/common/product';
import { dirname, joinPath } from 'vs/base/common/resources';
import { IProductConfiguration } from 'vs/platform/product/common/productService';
import { ISandboxConfiguration } from 'vs/base/parts/sandbox/common/sandboxTypes';
+import { getUserDataPath } from 'vs/platform/environment/node/userDataPath';
let product: IProductConfiguration;
@@ -49,6 +50,29 @@ else {
/**
* @deprecated You MUST use `IProductService` if possible.
@@ -34,6 +35,32 @@ else if (typeof require?.__$__nodeRequire === 'function') {
product = require.__$__nodeRequire(joinPath(rootPath, 'product.json').fsPath);
const pkg = require.__$__nodeRequire(joinPath(rootPath, 'package.json').fsPath) as { version: string; };
const pkg = require.__$__nodeRequire(joinPath(rootPath, 'package.json').fsPath) as { version: string };
+ // Merge user-customized product.json
+ try {
@@ -31,16 +49,19 @@ index 251ed36..8065c6f 100644
+ return result;
+ }, {}) as any;
+
+ const userProduct = require.__$__nodeRequire(joinPath(FileAccess.asFileUri(getUserDataPath({} as any), require), 'product.json').fsPath);
+ const userDataPath = getUserDataPath({} as any);
+ const userProductPath = isWindows ? `file:///${userDataPath}/product.json` : `file://${userDataPath}/product.json`;
+
+ product = merge(product, userProduct)
+ const userProduct = require.__$__nodeRequire(FileAccess.asFileUri(userProductPath, require).fsPath);
+
+ product = merge(product, userProduct);
+ } catch (ex) {
+ }
+
// Running out of sources
if (env['VSCODE_DEV']) {
Object.assign(product, {
@@ -58,6 +82,19 @@ else {
@@ -44,6 +71,19 @@ else if (typeof require?.__$__nodeRequire === 'function') {
});
}
@@ -60,15 +81,3 @@ index 251ed36..8065c6f 100644
Object.assign(product, {
version: pkg.version
});
diff --git a/src/vs/platform/product/common/productService.ts b/src/vs/platform/product/common/productService.ts
index 34acc14..d3a2764 100644
--- a/src/vs/platform/product/common/productService.ts
+++ b/src/vs/platform/product/common/productService.ts
@@ -67,6 +67,7 @@ export interface IProductConfiguration {
readonly extensionsGallery?: {
readonly serviceUrl: string;
+ readonly cacheUrl?: string;
readonly itemUrl: string;
readonly controlUrl: string;
readonly recommendationsUrl: string;

View File

@@ -0,0 +1,36 @@
diff --git a/build/linux/rpm/dependencies-generator.js b/build/linux/rpm/dependencies-generator.js
index 1d91eb8..ed6b775 100644
--- a/build/linux/rpm/dependencies-generator.js
+++ b/build/linux/rpm/dependencies-generator.js
@@ -16,7 +16,7 @@ const dep_lists_1 = require("./dep-lists");
// If true, we fail the build if there are new dependencies found during that task.
// The reference dependencies, which one has to update when the new dependencies
// are valid, are in dep-lists.ts
-const FAIL_BUILD_FOR_NEW_DEPENDENCIES = true;
+const FAIL_BUILD_FOR_NEW_DEPENDENCIES = false;
function getDependencies(buildDir, applicationName, arch) {
// Get the files for which we want to find dependencies.
const nativeModulesPath = path.join(buildDir, 'resources', 'app', 'node_modules.asar.unpacked');
diff --git a/build/linux/rpm/dependencies-generator.ts b/build/linux/rpm/dependencies-generator.ts
index 95953ec..f5ffc2e 100644
--- a/build/linux/rpm/dependencies-generator.ts
+++ b/build/linux/rpm/dependencies-generator.ts
@@ -18,7 +18,7 @@ import { ArchString } from './types';
// If true, we fail the build if there are new dependencies found during that task.
// The reference dependencies, which one has to update when the new dependencies
// are valid, are in dep-lists.ts
-const FAIL_BUILD_FOR_NEW_DEPENDENCIES: boolean = true;
+const FAIL_BUILD_FOR_NEW_DEPENDENCIES: boolean = false;
export function getDependencies(buildDir: string, applicationName: string, arch: ArchString): string[] {
// Get the files for which we want to find dependencies.
diff --git a/resources/linux/rpm/code.spec.template b/resources/linux/rpm/code.spec.template
index 5b7eadb..87c914d 100644
--- a/resources/linux/rpm/code.spec.template
+++ b/resources/linux/rpm/code.spec.template
@@ -74,3 +74,5 @@ update-mime-database /usr/share/mime &> /dev/null || :
/usr/share/pixmaps/@@ICON@@.png
/usr/share/bash-completion/completions/@@NAME@@
/usr/share/zsh/site-functions/_@@NAME@@
+
+%config(noreplace) /usr/share/@@NAME@@/resources/app/product.json

View File

@@ -1,8 +0,0 @@
--- vscode/resources/linux/rpm/code.spec.template 2021-03-02 19:26:53.000000000 +0100
+++ vscode/resources/linux/rpm/code.spec.template.new 2021-03-02 19:28:12.000000000 +0100
@@ -69,3 +69,5 @@
/usr/share/pixmaps/@@ICON@@.png
/usr/share/bash-completion/completions/@@NAME@@
/usr/share/zsh/site-functions/_@@NAME@@
+
+%config(noreplace) /usr/share/@@NAME@@/resources/app/product.json

View File

@@ -0,0 +1,48 @@
diff --git a/src/vs/code/electron-sandbox/issue/issueReporterMain.ts b/src/vs/code/electron-sandbox/issue/issueReporterMain.ts
index fcd4485..8d97e5a 100644
--- a/src/vs/code/electron-sandbox/issue/issueReporterMain.ts
+++ b/src/vs/code/electron-sandbox/issue/issueReporterMain.ts
@@ -682,7 +682,7 @@ export class IssueReporter extends Disposable {
sourceSelect.innerText = '';
sourceSelect.append(this.makeOption('', localize('selectSource', "Select source"), true));
- sourceSelect.append(this.makeOption('vscode', localize('vscode', "Visual Studio Code"), false));
+ sourceSelect.append(this.makeOption('vscode', localize('vscode', "VSCodium"), false));
sourceSelect.append(this.makeOption('extension', localize('extension', "An extension"), false));
if (this.configuration.product.reportMarketplaceIssueUrl) {
sourceSelect.append(this.makeOption('marketplace', localize('marketplace', "Extensions marketplace"), false));
diff --git a/src/vs/workbench/contrib/extensions/electron-sandbox/extensionsSlowActions.ts b/src/vs/workbench/contrib/extensions/electron-sandbox/extensionsSlowActions.ts
index 0c5855b..654f9a4 100644
--- a/src/vs/workbench/contrib/extensions/electron-sandbox/extensionsSlowActions.ts
+++ b/src/vs/workbench/contrib/extensions/electron-sandbox/extensionsSlowActions.ts
@@ -144,7 +144,7 @@ class ReportExtensionSlowAction extends Action {
- Extension Name: \`${this.extension.name}\`
- Extension Version: \`${this.extension.version}\`
- OS Version: \`${osVersion}\`
-- VS Code version: \`${this._productService.version}\`\n\n${message}`);
+- VSCodium version: \`${this._productService.version}\`\n\n${message}`);
const url = `${this.repoInfo.base}/${this.repoInfo.owner}/${this.repoInfo.repo}/issues/new/?body=${body}&title=${title}`;
this._openerService.open(URI.parse(url));
diff --git a/src/vs/workbench/contrib/extensions/electron-sandbox/reportExtensionIssueAction.ts b/src/vs/workbench/contrib/extensions/electron-sandbox/reportExtensionIssueAction.ts
index f1755db..e77be21 100644
--- a/src/vs/workbench/contrib/extensions/electron-sandbox/reportExtensionIssueAction.ts
+++ b/src/vs/workbench/contrib/extensions/electron-sandbox/reportExtensionIssueAction.ts
@@ -14,7 +14,7 @@ import { ExtensionType, IExtensionDescription } from 'vs/platform/extensions/com
import { IOpenerService } from 'vs/platform/opener/common/opener';
import { URI } from 'vs/base/common/uri';
-const builtinExtensionIssueUrl = 'https://github.com/microsoft/vscode';
+const builtinExtensionIssueUrl = 'https://github.com/VSCodium/vscodium';
export class ReportExtensionIssueAction extends Action {
@@ -76,7 +76,7 @@ export class ReportExtensionIssueAction extends Action {
- Extension Name: \`${extension.description.name}\`
- Extension Version: \`${extension.description.version}\`
- OS Version: \`${osVersion}\`
-- VS Code version: \`${this.productService.version}\`\n\n${message}`
+- VSCodium version: \`${this.productService.version}\`\n\n${message}`
);
return `${baseUrl}${queryStringPrefix}body=${body}&title=${encodeURIComponent(title)}`;

View File

@@ -1,11 +1,13 @@
diff --git a/src/vs/platform/update/electron-main/updateService.win32.ts b/src/vs/platform/update/electron-main/updateService.win32.ts
index 93424ca..133657e 100644
--- a/src/vs/platform/update/electron-main/updateService.win32.ts
+++ b/src/vs/platform/update/electron-main/updateService.win32.ts
@@ -55,7 +55,7 @@ export class Win32UpdateService extends AbstractUpdateService {
@@ -53,7 +53,7 @@ export class Win32UpdateService extends AbstractUpdateService {
@memoize
get cachePath(): Promise<string> {
- const result = path.join(tmpdir(), `vscode-update-${this.productService.target}-${process.arch}`);
+ const result = path.join(tmpdir(), `${this.productService.nameShort.toLowerCase()}-update-${this.productService.target}-${process.arch}`);
return fs.promises.mkdir(result, { recursive: true }).then(() => result);
+ const result = path.join(tmpdir(), `${this.productService.applicationName}-update-${this.productService.target}-${process.arch}`);
return pfs.Promises.mkdir(result, { recursive: true }).then(() => result);
}

View File

@@ -0,0 +1,12 @@
diff --git a/build/gulpfile.extensions.js b/build/gulpfile.extensions.js
--- a/build/gulpfile.extensions.js
+++ b/build/gulpfile.extensions.js
@@ -223,7 +223,7 @@ const cleanExtensionsBuildTask = task.define('clean-extensions-build', util.rimr
const compileExtensionsBuildTask = task.define('compile-extensions-build', task.series(
cleanExtensionsBuildTask,
task.define('bundle-extensions-build', () => ext.packageLocalExtensionsStream(false).pipe(gulp.dest('.build'))),
- task.define('bundle-marketplace-extensions-build', () => ext.packageMarketplaceExtensionsStream(false, product.extensionsGallery?.serviceUrl).pipe(gulp.dest('.build'))),
+ task.define('bundle-marketplace-extensions-build', () => ext.packageMarketplaceExtensionsStream(false).pipe(gulp.dest('.build'))),
));
gulp.task(compileExtensionsBuildTask);

View File

@@ -0,0 +1,413 @@
diff --git a/extensions/github-authentication/src/githubServer.ts b/extensions/github-authentication/src/githubServer.ts
index c366ff3..75f32da 100644
--- a/extensions/github-authentication/src/githubServer.ts
+++ b/extensions/github-authentication/src/githubServer.ts
@@ -3,27 +3,13 @@
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
-import * as nls from 'vscode-nls';
import * as vscode from 'vscode';
import fetch, { Response } from 'node-fetch';
-import { v4 as uuid } from 'uuid';
-import { PromiseAdapter, promiseFromEvent } from './common/utils';
import { ExperimentationTelemetry } from './experimentationService';
import { AuthProviderType } from './github';
import { Log } from './common/logger';
-import { isSupportedEnvironment } from './common/env';
-import { LoopbackAuthServer } from './authServer';
-import path = require('path');
-
-const localize = nls.loadMessageBundle();
-const CLIENT_ID = '01ab8ac9400c4e429b23';
-const GITHUB_AUTHORIZE_URL = 'https://github.com/login/oauth/authorize';
-// TODO: change to stable when that happens
-const GITHUB_TOKEN_URL = 'https://vscode.dev/codeExchangeProxyEndpoints/github/login/oauth/access_token';
-const NETWORK_ERROR = 'network error';
-const REDIRECT_URL_STABLE = 'https://vscode.dev/redirect';
-const REDIRECT_URL_INSIDERS = 'https://insiders.vscode.dev/redirect';
+const NETWORK_ERROR = 'network error';
class UriEventHandler extends vscode.EventEmitter<vscode.Uri> implements vscode.UriHandler {
constructor(private readonly Logger: Log) {
@@ -43,14 +29,6 @@ export interface IGitHubServer extends vscode.Disposable {
friendlyName: string;
type: AuthProviderType;
}
-
-interface IGitHubDeviceCodeResponse {
- device_code: string;
- user_code: string;
- verification_uri: string;
- interval: number;
-}
-
async function getScopes(token: string, serverUri: vscode.Uri, logger: Log): Promise<string[]> {
try {
logger.info('Getting token scopes...');
@@ -118,23 +96,11 @@ export class GitHubServer implements IGitHubServer {
friendlyName = 'GitHub';
type = AuthProviderType.github;
- private _pendingNonces = new Map<string, string[]>();
- private _codeExchangePromises = new Map<string, { promise: Promise<string>; cancel: vscode.EventEmitter<void> }>();
private _disposable: vscode.Disposable;
private _uriHandler = new UriEventHandler(this._logger);
- private readonly getRedirectEndpoint: Thenable<string>;
- constructor(private readonly _supportDeviceCodeFlow: boolean, private readonly _logger: Log, private readonly _telemetryReporter: ExperimentationTelemetry) {
+ constructor(_supportDeviceCodeFlow: boolean, private readonly _logger: Log, private readonly _telemetryReporter: ExperimentationTelemetry) {
this._disposable = vscode.window.registerUriHandler(this._uriHandler);
-
- this.getRedirectEndpoint = vscode.commands.executeCommand<{ [providerId: string]: string } | undefined>('workbench.getCodeExchangeProxyEndpoints').then((proxyEndpoints) => {
- // If we are running in insiders vscode.dev, then ensure we use the redirect route on that.
- let redirectUri = REDIRECT_URL_STABLE;
- if (proxyEndpoints?.github && new URL(proxyEndpoints.github).hostname === 'insiders.vscode.dev') {
- redirectUri = REDIRECT_URL_INSIDERS;
- }
- return redirectUri;
- });
}
dispose() {
@@ -152,181 +118,17 @@ export class GitHubServer implements IGitHubServer {
// Used for showing a friendlier message to the user when the explicitly cancel a flow.
let userCancelled: boolean | undefined;
- const yes = localize('yes', "Yes");
- const no = localize('no', "No");
- const promptToContinue = async () => {
- if (userCancelled === undefined) {
- // We haven't had a failure yet so wait to prompt
- return;
- }
- const message = userCancelled
- ? localize('userCancelledMessage', "Having trouble logging in? Would you like to try a different way?")
- : localize('otherReasonMessage', "You have not yet finished authorizing this extension to use GitHub. Would you like to keep trying?");
- const result = await vscode.window.showWarningMessage(message, yes, no);
- if (result !== yes) {
- throw new Error('Cancelled');
- }
- };
-
- const nonce = uuid();
- const callbackUri = await vscode.env.asExternalUri(vscode.Uri.parse(`${vscode.env.uriScheme}://vscode.github-authentication/did-authenticate?nonce=${encodeURIComponent(nonce)}`));
-
- const supported = isSupportedEnvironment(callbackUri);
- if (supported) {
- try {
- return await this.doLoginWithoutLocalServer(scopes, nonce, callbackUri);
- } catch (e) {
- this._logger.error(e);
- userCancelled = e.message ?? e === 'User Cancelled';
- }
- }
-
- // Starting a local server isn't supported in web
- if (vscode.env.uiKind === vscode.UIKind.Desktop) {
- try {
- await promptToContinue();
- return await this.doLoginWithLocalServer(scopes);
- } catch (e) {
- this._logger.error(e);
- userCancelled = e.message ?? e === 'User Cancelled';
- }
- }
- if (this._supportDeviceCodeFlow) {
- try {
- await promptToContinue();
- return await this.doLoginDeviceCodeFlow(scopes);
- } catch (e) {
- this._logger.error(e);
- userCancelled = e.message ?? e === 'User Cancelled';
- }
- } else if (!supported) {
- try {
- await promptToContinue();
- return await this.doLoginWithPat(scopes);
- } catch (e) {
- this._logger.error(e);
- userCancelled = e.message ?? e === 'User Cancelled';
- }
+ try {
+ return await this.doLoginWithPat(scopes);
+ } catch (e) {
+ this._logger.error(e);
+ userCancelled = e.message ?? e === 'User Cancelled';
}
throw new Error(userCancelled ? 'Cancelled' : 'No auth flow succeeded.');
}
- private async doLoginWithoutLocalServer(scopes: string, nonce: string, callbackUri: vscode.Uri): Promise<string> {
- this._logger.info(`Trying without local server... (${scopes})`);
- return await vscode.window.withProgress<string>({
- location: vscode.ProgressLocation.Notification,
- title: localize('signingIn', "Signing in to github.com..."),
- cancellable: true
- }, async (_, token) => {
- const existingNonces = this._pendingNonces.get(scopes) || [];
- this._pendingNonces.set(scopes, [...existingNonces, nonce]);
- const redirectUri = await this.getRedirectEndpoint;
- const searchParams = new URLSearchParams([
- ['client_id', CLIENT_ID],
- ['redirect_uri', redirectUri],
- ['scope', scopes],
- ['state', encodeURIComponent(callbackUri.toString(true))]
- ]);
- const uri = vscode.Uri.parse(`${GITHUB_AUTHORIZE_URL}?${searchParams.toString()}`);
- await vscode.env.openExternal(uri);
-
- // Register a single listener for the URI callback, in case the user starts the login process multiple times
- // before completing it.
- let codeExchangePromise = this._codeExchangePromises.get(scopes);
- if (!codeExchangePromise) {
- codeExchangePromise = promiseFromEvent(this._uriHandler.event, this.handleUri(scopes));
- this._codeExchangePromises.set(scopes, codeExchangePromise);
- }
-
- try {
- return await Promise.race([
- codeExchangePromise.promise,
- new Promise<string>((_, reject) => setTimeout(() => reject('Cancelled'), 60000)),
- promiseFromEvent<any, any>(token.onCancellationRequested, (_, __, reject) => { reject('User Cancelled'); }).promise
- ]);
- } finally {
- this._pendingNonces.delete(scopes);
- codeExchangePromise?.cancel.fire();
- this._codeExchangePromises.delete(scopes);
- }
- });
- }
-
- private async doLoginWithLocalServer(scopes: string): Promise<string> {
- this._logger.info(`Trying with local server... (${scopes})`);
- return await vscode.window.withProgress<string>({
- location: vscode.ProgressLocation.Notification,
- title: localize('signingInAnotherWay', "Signing in to github.com..."),
- cancellable: true
- }, async (_, token) => {
- const redirectUri = await this.getRedirectEndpoint;
- const searchParams = new URLSearchParams([
- ['client_id', CLIENT_ID],
- ['redirect_uri', redirectUri],
- ['scope', scopes],
- ]);
- const loginUrl = `${GITHUB_AUTHORIZE_URL}?${searchParams.toString()}`;
- const server = new LoopbackAuthServer(path.join(__dirname, '../media'), loginUrl);
- const port = await server.start();
-
- let codeToExchange;
- try {
- vscode.env.openExternal(vscode.Uri.parse(`http://127.0.0.1:${port}/signin?nonce=${encodeURIComponent(server.nonce)}`));
- const { code } = await Promise.race([
- server.waitForOAuthResponse(),
- new Promise<any>((_, reject) => setTimeout(() => reject('Cancelled'), 60000)),
- promiseFromEvent<any, any>(token.onCancellationRequested, (_, __, reject) => { reject('User Cancelled'); }).promise
- ]);
- codeToExchange = code;
- } finally {
- setTimeout(() => {
- void server.stop();
- }, 5000);
- }
-
- const accessToken = await this.exchangeCodeForToken(codeToExchange);
- return accessToken;
- });
- }
-
- private async doLoginDeviceCodeFlow(scopes: string): Promise<string> {
- this._logger.info(`Trying device code flow... (${scopes})`);
-
- // Get initial device code
- const uri = `https://github.com/login/device/code?client_id=${CLIENT_ID}&scope=${scopes}`;
- const result = await fetch(uri, {
- method: 'POST',
- headers: {
- Accept: 'application/json'
- }
- });
- if (!result.ok) {
- throw new Error(`Failed to get one-time code: ${await result.text()}`);
- }
-
- const json = await result.json() as IGitHubDeviceCodeResponse;
-
-
- const modalResult = await vscode.window.showInformationMessage(
- localize('code.title', "Your Code: {0}", json.user_code),
- {
- modal: true,
- detail: localize('code.detail', "To finish authenticating, navigate to GitHub and paste in the above one-time code.")
- }, 'Copy & Continue to GitHub');
-
- if (modalResult !== 'Copy & Continue to GitHub') {
- throw new Error('User Cancelled');
- }
-
- await vscode.env.clipboard.writeText(json.user_code);
-
- const uriToOpen = await vscode.env.asExternalUri(vscode.Uri.parse(json.verification_uri));
- await vscode.env.openExternal(uriToOpen);
-
- return await this.waitForDeviceCodeAccessToken(json);
- }
private async doLoginWithPat(scopes: string): Promise<string> {
this._logger.info(`Trying to retrieve PAT... (${scopes})`);
@@ -351,118 +153,6 @@ export class GitHubServer implements IGitHubServer {
return token;
}
- private async waitForDeviceCodeAccessToken(
- json: IGitHubDeviceCodeResponse,
- ): Promise<string> {
- return await vscode.window.withProgress<string>({
- location: vscode.ProgressLocation.Notification,
- cancellable: true,
- title: localize(
- 'progress',
- "Open [{0}]({0}) in a new tab and paste your one-time code: {1}",
- json.verification_uri,
- json.user_code)
- }, async (_, token) => {
- const refreshTokenUri = `https://github.com/login/oauth/access_token?client_id=${CLIENT_ID}&device_code=${json.device_code}&grant_type=urn:ietf:params:oauth:grant-type:device_code`;
-
- // Try for 2 minutes
- const attempts = 120 / json.interval;
- for (let i = 0; i < attempts; i++) {
- await new Promise(resolve => setTimeout(resolve, json.interval * 1000));
- if (token.isCancellationRequested) {
- throw new Error('User Cancelled');
- }
- let accessTokenResult;
- try {
- accessTokenResult = await fetch(refreshTokenUri, {
- method: 'POST',
- headers: {
- Accept: 'application/json'
- }
- });
- } catch {
- continue;
- }
-
- if (!accessTokenResult.ok) {
- continue;
- }
-
- const accessTokenJson = await accessTokenResult.json();
-
- if (accessTokenJson.error === 'authorization_pending') {
- continue;
- }
-
- if (accessTokenJson.error) {
- throw new Error(accessTokenJson.error_description);
- }
-
- return accessTokenJson.access_token;
- }
-
- throw new Error('Cancelled');
- });
- }
-
- private handleUri: (scopes: string) => PromiseAdapter<vscode.Uri, string> =
- (scopes) => (uri, resolve, reject) => {
- const query = new URLSearchParams(uri.query);
- const code = query.get('code');
- const nonce = query.get('nonce');
- if (!code) {
- reject(new Error('No code'));
- return;
- }
- if (!nonce) {
- reject(new Error('No nonce'));
- return;
- }
-
- const acceptedNonces = this._pendingNonces.get(scopes) || [];
- if (!acceptedNonces.includes(nonce)) {
- // A common scenario of this happening is if you:
- // 1. Trigger a sign in with one set of scopes
- // 2. Before finishing 1, you trigger a sign in with a different set of scopes
- // In this scenario we should just return and wait for the next UriHandler event
- // to run as we are probably still waiting on the user to hit 'Continue'
- this._logger.info('Nonce not found in accepted nonces. Skipping this execution...');
- return;
- }
-
- resolve(this.exchangeCodeForToken(code));
- };
-
- private async exchangeCodeForToken(code: string): Promise<string> {
- this._logger.info('Exchanging code for token...');
-
- const proxyEndpoints: { [providerId: string]: string } | undefined = await vscode.commands.executeCommand('workbench.getCodeExchangeProxyEndpoints');
- const endpointUrl = proxyEndpoints?.github ? `${proxyEndpoints.github}login/oauth/access_token` : GITHUB_TOKEN_URL;
-
- const body = `code=${code}`;
- const result = await fetch(endpointUrl, {
- method: 'POST',
- headers: {
- Accept: 'application/json',
- 'Content-Type': 'application/x-www-form-urlencoded',
- 'Content-Length': body.toString()
-
- },
- body
- });
-
- if (result.ok) {
- const json = await result.json();
- this._logger.info('Token exchange success!');
- return json.access_token;
- } else {
- const text = await result.text();
- const error = new Error(text);
- error.name = 'GitHubTokenExchangeError';
- throw error;
- }
- }
-
private getServerUri(path: string = '') {
const apiUri = vscode.Uri.parse('https://api.github.com');
return vscode.Uri.parse(`${apiUri.scheme}://${apiUri.authority}${path}`);
diff --git a/src/vs/workbench/browser/parts/activitybar/activitybarActions.ts b/src/vs/workbench/browser/parts/activitybar/activitybarActions.ts
index 36647e6..55e722b 100644
--- a/src/vs/workbench/browser/parts/activitybar/activitybarActions.ts
+++ b/src/vs/workbench/browser/parts/activitybar/activitybarActions.ts
@@ -271,7 +271,7 @@ export class AccountsActivityActionViewItem extends MenuActivityActionViewItem {
}
});
- if (providers.length && !menus.length) {
+ if (!menus.length) {
const noAccountsAvailableAction = disposables.add(new Action('noAccountsAvailable', localize('noAccounts', "You are not signed in to any accounts"), undefined, false));
menus.push(noAccountsAvailableAction);
}
diff --git a/src/vs/workbench/services/authentication/browser/authenticationService.ts b/src/vs/workbench/services/authentication/browser/authenticationService.ts
index f543021..ad40bc3 100644
--- a/src/vs/workbench/services/authentication/browser/authenticationService.ts
+++ b/src/vs/workbench/services/authentication/browser/authenticationService.ts
@@ -272,16 +272,6 @@ export class AuthenticationService extends Disposable implements IAuthentication
this.removeAccessRequest(id, extensionId);
});
}
-
- if (!this._authenticationProviders.size) {
- this._placeholderMenuItem = MenuRegistry.appendMenuItem(MenuId.AccountsContext, {
- command: {
- id: 'noAuthenticationProviders',
- title: nls.localize('loading', "Loading..."),
- precondition: ContextKeyExpr.false()
- },
- });
- }
}
async sessionsUpdate(id: string, event: AuthenticationSessionsChangeEvent): Promise<void> {

1
patches/user/readme.txt Normal file
View File

@@ -0,0 +1 @@
store user patches at location patches/user and those will be applied to vscode source git by the scripts

105
prepare_artifacts.sh Executable file
View File

@@ -0,0 +1,105 @@
#!/bin/bash
set -e
npm install -g checksum
sum_file() {
if [[ -f "${1}" ]]; then
echo "Calcuating checksum for ${1}"
checksum -a sha256 "${1}" > "${1}".sha256
checksum "${1}" > "${1}".sha1
fi
}
mkdir artifacts
if [[ "${OS_NAME}" == "osx" ]]; then
if [[ "${SHOULD_BUILD_ZIP}" != "no" ]]; then
echo "Building and moving ZIP"
cd "VSCode-darwin-${VSCODE_ARCH}"
zip -r -X -y "../artifacts/VSCodium-darwin-${VSCODE_ARCH}-${MS_TAG}.zip" ./*.app
cd ..
fi
if [[ "${SHOULD_BUILD_DMG}" != "no" ]]; then
echo "Building and moving DMG"
pushd "VSCode-darwin-${VSCODE_ARCH}"
npx create-dmg VSCodium.app ..
mv "../VSCodium ${MS_TAG}.dmg" "../artifacts/VSCodium.${VSCODE_ARCH}.${MS_TAG}.dmg"
popd
fi
VSCODE_PLATFORM="darwin"
elif [[ "${OS_NAME}" == "windows" ]]; then
if [[ "${SHOULD_BUILD_ZIP}" != "no" ]]; then
echo "Moving ZIP"
mv "vscode\\.build\\win32-${VSCODE_ARCH}\\archive\\VSCode-win32-${VSCODE_ARCH}.zip" "artifacts\\VSCodium-win32-${VSCODE_ARCH}-${MS_TAG}.zip"
fi
if [[ "${SHOULD_BUILD_EXE_SYS}" != "no" ]]; then
echo "Moving System EXE"
mv "vscode\\.build\\win32-${VSCODE_ARCH}\\system-setup\\VSCodeSetup.exe" "artifacts\\VSCodiumSetup-${VSCODE_ARCH}-${MS_TAG}.exe"
fi
if [[ "${SHOULD_BUILD_EXE_USR}" != "no" ]]; then
echo "Moving User EXE"
mv "vscode\\.build\\win32-${VSCODE_ARCH}\\user-setup\\VSCodeSetup.exe" "artifacts\\VSCodiumUserSetup-${VSCODE_ARCH}-${MS_TAG}.exe"
fi
if [[ "${VSCODE_ARCH}" == "ia32" || "${VSCODE_ARCH}" == "x64" ]]; then
if [[ "${SHOULD_BUILD_MSI}" != "no" ]]; then
echo "Moving MSI"
mv "build\\windows\\msi\\releasedir\\VSCodium-${VSCODE_ARCH}-${MS_TAG}.msi" artifacts/
fi
if [[ "${SHOULD_BUILD_MSI_NOUP}" != "no" ]]; then
echo "Moving MSI with disabled updates"
mv "build\\windows\\msi\\releasedir\\VSCodium-${VSCODE_ARCH}-updates-disabled-${MS_TAG}.msi" artifacts/
fi
fi
VSCODE_PLATFORM="win32"
else
if [[ "${SHOULD_BUILD_TAR}" != "no" ]]; then
echo "Building and moving TAR"
cd "VSCode-linux-${VSCODE_ARCH}"
tar czf "../artifacts/VSCodium-linux-${VSCODE_ARCH}-${MS_TAG}.tar.gz" .
cd ..
fi
if [[ "${SHOULD_BUILD_DEB}" != "no" ]]; then
echo "Moving DEB"
mv vscode/.build/linux/deb/*/deb/*.deb artifacts/
fi
if [[ "${SHOULD_BUILD_RPM}" != "no" ]]; then
echo "Moving RPM"
mv vscode/.build/linux/rpm/*/*.rpm artifacts/
fi
if [[ "${SHOULD_BUILD_APPIMAGE}" != "no" ]]; then
echo "Moving AppImage"
mv build/linux/appimage/out/*.AppImage* artifacts/
fi
VSCODE_PLATFORM="linux"
fi
if [[ "${SHOULD_BUILD_REH}" != "no" ]]; then
echo "Building and moving REH"
cd "vscode-reh-${VSCODE_PLATFORM}-${VSCODE_ARCH}"
tar czf "../artifacts/vscodium-reh-${VSCODE_PLATFORM}-${VSCODE_ARCH}-${MS_TAG}.tar.gz" .
cd ..
fi
cd artifacts
for FILE in *
do
if [[ -f "${FILE}" ]]; then
sum_file "${FILE}"
fi
done
cd ..

View File

@@ -3,19 +3,50 @@
set -e
cp -rp src/* vscode/
cd vscode || exit
cp -f LICENSE vscode/LICENSE.txt
cd vscode || { echo "'vscode' dir not found"; exit 1; }
../update_settings.sh
# apply patches
patch -u src/vs/platform/update/electron-main/updateService.win32.ts -i ../patches/update-cache-path.patch
patch -u resources/linux/rpm/code.spec.template -i ../patches/fix-rpm-spec.patch
git apply --ignore-whitespace ../patches/binary-name.patch
git apply --ignore-whitespace ../patches/custom-gallery.patch
{ set +x; } 2>/dev/null
if [[ "$OS_NAME" == "osx" ]]; then
CHILD_CONCURRENCY=1 yarn --frozen-lockfile --ignore-optional
npm_config_argv='{"original":["--ignore-optional"]}' yarn postinstall
for file in ../patches/*.patch; do
if [ -f "${file}" ]; then
echo applying patch: "${file}";
git apply --ignore-whitespace "${file}"
if [ $? -ne 0 ]; then
echo failed to apply patch "${file}" 1>&2
fi
fi
done
for file in ../patches/user/*.patch; do
if [ -f "${file}" ]; then
echo applying user patch: "${file}";
git apply --ignore-whitespace "${file}"
if [ $? -ne 0 ]; then
echo failed to apply patch "${file}" 1>&2
fi
fi
done
set -x
if [[ "${OS_NAME}" == "osx" ]]; then
CHILD_CONCURRENCY=1 yarn --frozen-lockfile
yarn postinstall
elif [[ "${npm_config_arch}" == "armv7l" || "${npm_config_arch}" == "ia32" ]]; then
# node-gyp@9.0.0 shipped with node@16.15.0 starts using config.gypi
# from the custom headers path if dist-url option was set instead of
# using the config value from the process. Electron builds with pointer compression
# enabled for x64 and arm64, but incorrectly ships a single copy of config.gypi
# with v8_enable_pointer_compression option always set for all target architectures.
# We use the force_process_config option to use the config.gypi from the
# nodejs process executing npm for 32-bit architectures.
export npm_config_force_process_config="true"
CHILD_CONCURRENCY=1 yarn --frozen-lockfile
else
CHILD_CONCURRENCY=1 yarn --frozen-lockfile
fi
@@ -29,7 +60,6 @@ twitterUrl='setpath(["twitterUrl"]; "https://go.microsoft.com/fwlink/?LinkID=533
requestFeatureUrl='setpath(["requestFeatureUrl"]; "https://go.microsoft.com/fwlink/?LinkID=533482")'
documentationUrl='setpath(["documentationUrl"]; "https://go.microsoft.com/fwlink/?LinkID=533484#vscode")'
introductoryVideosUrl='setpath(["introductoryVideosUrl"]; "https://go.microsoft.com/fwlink/?linkid=832146")'
extensionAllowedBadgeProviders='setpath(["extensionAllowedBadgeProviders"]; ["api.bintray.com", "api.travis-ci.com", "api.travis-ci.org", "app.fossa.io", "badge.fury.io", "badge.waffle.io", "badgen.net", "badges.frapsoft.com", "badges.gitter.im", "badges.greenkeeper.io", "cdn.travis-ci.com", "cdn.travis-ci.org", "ci.appveyor.com", "circleci.com", "cla.opensource.microsoft.com", "codacy.com", "codeclimate.com", "codecov.io", "coveralls.io", "david-dm.org", "deepscan.io", "dev.azure.com", "flat.badgen.net", "gemnasium.com", "githost.io", "gitlab.com", "godoc.org", "goreportcard.com", "img.shields.io", "isitmaintained.com", "marketplace.visualstudio.com", "nodesecurity.io", "opencollective.com", "snyk.io", "travis-ci.com", "travis-ci.org", "visualstudio.com", "vsmarketplacebadge.apphb.com", "www.bithound.io", "www.versioneye.com"])'
updateUrl='setpath(["updateUrl"]; "https://vscodium.now.sh")'
releaseNotesUrl='setpath(["releaseNotesUrl"]; "https://go.microsoft.com/fwlink/?LinkID=533483#vscode")'
keyboardShortcutsUrlMac='setpath(["keyboardShortcutsUrlMac"]; "https://go.microsoft.com/fwlink/?linkid=832143")'
@@ -50,42 +80,48 @@ win32AppUserModelId='setpath(["win32AppUserModelId"]; "Microsoft.VSCodium")'
win32ShellNameShort='setpath(["win32ShellNameShort"]; "VSCodium")'
win32x64UserAppId='setpath (["win32x64UserAppId"]; "{{2E1F05D1-C245-4562-81EE-28188DB6FD17}")'
urlProtocol='setpath(["urlProtocol"]; "vscodium")'
extensionAllowedProposedApi='setpath(["extensionAllowedProposedApi"]; getpath(["extensionAllowedProposedApi"]) + ["ms-vsliveshare.vsliveshare", "ms-vscode-remote.remote-ssh", "ms-vscode.cpptools", "ms-azuretools.vscode-docker", "visualstudioexptteam.vscodeintellicode", "ms-python.python"])'
serverDataFolderName='setpath(["serverDataFolderName"]; ".vscode-server-oss")'
serverApplicationName='setpath(["serverApplicationName"]; "codium-server")'
serverDataFolderName='setpath(["serverDataFolderName"]; ".vscodium-server")'
reportIssueUrl='setpath(["reportIssueUrl"]; "https://github.com/VSCodium/vscodium/issues/new")'
licenseUrl='setpath(["licenseUrl"]; "https://github.com/VSCodium/vscodium/blob/master/LICENSE")'
product_json_changes="${checksumFailMoreInfoUrl} | ${tipsAndTricksUrl} | ${twitterUrl} | ${requestFeatureUrl} | ${documentationUrl} | ${introductoryVideosUrl} | ${updateUrl} | ${releaseNotesUrl} | ${keyboardShortcutsUrlMac} | ${keyboardShortcutsUrlLinux} | ${keyboardShortcutsUrlWin} | ${quality} | ${extensionsGallery} | ${linkProtectionTrustedDomains} | ${nameShort} | ${nameLong} | ${linuxIconName} | ${applicationName} | ${win32MutexName} | ${win32DirName} | ${win32NameVersion} | ${win32RegValueName} | ${win32AppUserModelId} | ${win32ShellNameShort} | ${win32x64UserAppId} | ${urlProtocol} | ${serverApplicationName} | ${serverDataFolderName} | ${reportIssueUrl} | ${licenseUrl}"
cat product.json.bak | jq "${product_json_changes}" > product.json.tmp
jq -s '.[0] * .[1]' product.json.tmp ../product.json > product.json
rm -f product.json.tmp
product_json_changes="${checksumFailMoreInfoUrl} | ${tipsAndTricksUrl} | ${twitterUrl} | ${requestFeatureUrl} | ${documentationUrl} | ${introductoryVideosUrl} | ${extensionAllowedBadgeProviders} | ${updateUrl} | ${releaseNotesUrl} | ${keyboardShortcutsUrlMac} | ${keyboardShortcutsUrlLinux} | ${keyboardShortcutsUrlWin} | ${quality} | ${extensionsGallery} | ${linkProtectionTrustedDomains} | ${nameShort} | ${nameLong} | ${linuxIconName} | ${applicationName} | ${win32MutexName} | ${win32DirName} | ${win32NameVersion} | ${win32RegValueName} | ${win32AppUserModelId} | ${win32ShellNameShort} | ${win32x64UserAppId} | ${urlProtocol} | ${extensionAllowedProposedApi} | ${serverDataFolderName}"
cat product.json.bak | jq "${product_json_changes}" > product.json
cat product.json
../undo_telemetry.sh
if [[ "$OS_NAME" == "linux" ]]; then
if [[ "${OS_NAME}" == "linux" ]]; then
# microsoft adds their apt repo to sources
# unless the app name is code-oss
# as we are renaming the application to vscodium
# we need to edit a line in the post install template
sed -i "s/code-oss/codium/" resources/linux/debian/postinst.template
# fix the packages metadata
# code.appdata.xml
sed -i 's|Visual Studio Code|VSCodium|g' resources/linux/code.appdata.xml
sed -i 's|https://code.visualstudio.com/docs/setup/linux|https://github.com/VSCodium/vscodium#download-install|' resources/linux/code.appdata.xml
sed -i 's|https://code.visualstudio.com/home/home-screenshot-linux-lg.png|https://vscodium.com/img/vscodium.png|' resources/linux/code.appdata.xml
sed -i 's|https://code.visualstudio.com|https://vscodium.com|' resources/linux/code.appdata.xml
# control.template
sed -i 's|Microsoft Corporation <vscode-linux@microsoft.com>|VSCodium Team https://github.com/VSCodium/vscodium/graphs/contributors|' resources/linux/debian/control.template
sed -i 's|https://code.visualstudio.com|https://vscodium.com|' resources/linux/debian/control.template
sed -i 's|Visual Studio Code|VSCodium|g' resources/linux/debian/control.template
sed -i 's|https://code.visualstudio.com/docs/setup/linux|https://github.com/VSCodium/vscodium#download-install|' resources/linux/debian/control.template
# code.spec.template
sed -i 's|https://code.visualstudio.com/docs/setup/linux|https://github.com/VSCodium/vscodium#download-install|' resources/linux/rpm/code.spec.template
sed -i 's|Microsoft Corporation|VSCodium Team|' resources/linux/rpm/code.spec.template
sed -i 's|Visual Studio Code Team <vscode-linux@microsoft.com>|VSCodium Team https://github.com/VSCodium/vscodium/graphs/contributors|' resources/linux/rpm/code.spec.template
sed -i 's|https://code.visualstudio.com|https://vscodium.com|' resources/linux/rpm/code.spec.template
sed -i 's|Visual Studio Code|VSCodium|' resources/linux/rpm/code.spec.template
# snapcraft.yaml
sed -i 's|Visual Studio Code|VSCodium|' resources/linux/rpm/code.spec.template
fi

427
product.json Normal file
View File

@@ -0,0 +1,427 @@
{
"extensionAllowedBadgeProviders": [
"api.bintray.com",
"api.travis-ci.com",
"api.travis-ci.org",
"app.fossa.io",
"badge.buildkite.com",
"badge.fury.io",
"badge.waffle.io",
"badgen.net",
"badges.frapsoft.com",
"badges.gitter.im",
"badges.greenkeeper.io",
"cdn.travis-ci.com",
"cdn.travis-ci.org",
"ci.appveyor.com",
"circleci.com",
"cla.opensource.microsoft.com",
"codacy.com",
"codeclimate.com",
"codecov.io",
"coveralls.io",
"david-dm.org",
"deepscan.io",
"dev.azure.com",
"docs.rs",
"flat.badgen.net",
"gemnasium.com",
"githost.io",
"gitlab.com",
"godoc.org",
"goreportcard.com",
"img.shields.io",
"isitmaintained.com",
"marketplace.visualstudio.com",
"nodesecurity.io",
"opencollective.com",
"snyk.io",
"travis-ci.com",
"travis-ci.org",
"visualstudio.com",
"vsmarketplacebadge.apphb.com",
"www.bithound.io",
"www.versioneye.com"
],
"extensionAllowedBadgeProvidersRegex": [
"^https:\\/\\/github\\.com\\/[^/]+\\/[^/]+\\/(actions\\/)?workflows\\/.*badge\\.svg"
],
"extensionEnabledApiProposals": {
"ms-vscode.vscode-selfhost-test-provider": [
"testObserver"
],
"VisualStudioExptTeam.vscodeintellicode-completions": [
"inlineCompletions"
],
"ms-vsliveshare.vsliveshare": [
"contribMenuBarHome",
"diffCommand",
"documentFiltersExclusive",
"fileSearchProvider",
"findTextInFiles",
"notebookCellExecutionState",
"notebookContentProvider",
"notebookDocumentEvents",
"notebookEditor",
"notebookEditorEdit",
"notebookLiveShare",
"terminalDimensions",
"terminalDataWriteEvent",
"textDocumentNotebook",
"textSearchProvider"
],
"ms-vscode.js-debug": [
"portsAttributes",
"findTextInFiles",
"workspaceTrust",
"resolvers"
],
"ms-toolsai.vscode-ai-remote": [
"resolvers",
"notebookEditor"
],
"ms-python.python": [
"quickPickSortByLabel",
"testObserver",
"notebookEditor"
],
"ms-dotnettools.dotnet-interactive-vscode": [
"notebookConcatTextDocument",
"notebookContentProvider",
"notebookCellExecutionState",
"notebookControllerKind",
"notebookDebugOptions",
"notebookDeprecated",
"notebookEditor",
"notebookEditorDecorationType",
"notebookEditorEdit",
"notebookLiveShare",
"notebookMessaging",
"notebookMime",
"textDocumentNotebook"
],
"GitHub.codespaces": [
"contribMenuBarHome",
"contribRemoteHelp",
"contribViewsRemote",
"notebookEditor",
"resolvers",
"terminalDataWriteEvent",
"treeViewReveal"
],
"ms-vscode.azure-repos": [
"extensionRuntime",
"fileSearchProvider",
"resolvers",
"textSearchProvider"
],
"ms-vscode.remote-repositories": [
"contribRemoteHelp",
"contribMenuBarHome",
"contribViewsRemote",
"contribViewsWelcome",
"documentFiltersExclusive",
"extensionRuntime",
"fileSearchProvider",
"quickPickSortByLabel",
"workspaceTrust",
"scmSelectedProvider",
"scmValidation",
"textSearchProvider",
"timeline",
"notebookEditor"
],
"ms-vscode.vscode-github-issue-notebooks": [
"notebookEditor"
],
"tanhakabir.rest-book": [
"notebookEditor"
],
"ms-vscode-remote.remote-wsl": [
"resolvers",
"contribViewsRemote",
"telemetry"
],
"ms-vscode-remote.remote-ssh": [
"resolvers",
"terminalDataWriteEvent",
"contribViewsRemote",
"telemetry"
],
"ms-vscode-remote.remote-containers": [
"resolvers",
"workspaceTrust",
"terminalDimensions",
"contribViewsRemote"
],
"ms-vscode.js-debug-nightly": [
"portsAttributes",
"findTextInFiles",
"workspaceTrust",
"resolvers"
],
"ms-vscode.lsif-browser": [
"documentFiltersExclusive"
],
"GitHub.vscode-pull-request-github": [
"tokenInformation"
],
"GitHub.copilot": [
"inlineCompletions",
"textDocumentNotebook"
],
"GitHub.copilot-nightly": [
"inlineCompletions",
"textDocumentNotebook"
],
"GitHub.remotehub": [
"contribRemoteHelp",
"contribMenuBarHome",
"contribViewsRemote",
"contribViewsWelcome",
"documentFiltersExclusive",
"extensionRuntime",
"fileSearchProvider",
"quickPickSortByLabel",
"workspaceTrust",
"resolvers",
"scmSelectedProvider",
"scmValidation",
"textSearchProvider",
"timeline",
"notebookEditor"
],
"GitHub.remotehub-insiders": [
"contribRemoteHelp",
"contribMenuBarHome",
"contribViewsRemote",
"contribViewsWelcome",
"documentFiltersExclusive",
"extensionRuntime",
"fileSearchProvider",
"quickPickSortByLabel",
"workspaceTrust",
"resolvers",
"scmSelectedProvider",
"scmValidation",
"textSearchProvider",
"timeline",
"notebookEditor"
],
"ms-python.gather": [
"notebookEditor",
"notebookCellExecutionState"
],
"ms-python.vscode-pylance": [
"notebookDocumentEvents",
"notebookEditor",
"notebookCellExecutionState"
],
"ms-toolsai.jupyter": [
"notebookConcatTextDocument",
"notebookControllerKind",
"notebookDebugOptions",
"notebookDeprecated",
"notebookEditor",
"notebookDocumentEvents",
"notebookEditorDecorationType",
"notebookEditorEdit",
"notebookMessaging",
"notebookMime",
"notebookCellExecutionState",
"portsAttributes",
"textDocumentNotebook",
"quickPickSortByLabel"
],
"dbaeumer.vscode-eslint": [
"tabs",
"notebookDocumentEvents",
"notebookEditor",
"notebookCellExecutionState"
],
"ms-vscode.azure-sphere-tools-ui": [
"resolvers"
],
"ms-azuretools.vscode-azureappservice": [
"terminalDataWriteEvent"
]
},
"extensionKind": {
"Shan.code-settings-sync": [
"ui"
],
"shalldie.background": [
"ui"
],
"techer.open-in-browser": [
"ui"
],
"CoenraadS.bracket-pair-colorizer-2": [
"ui"
],
"CoenraadS.bracket-pair-colorizer": [
"ui",
"workspace"
],
"hiro-sun.vscode-emacs": [
"ui",
"workspace"
],
"hnw.vscode-auto-open-markdown-preview": [
"ui",
"workspace"
],
"wayou.vscode-todo-highlight": [
"ui",
"workspace"
],
"aaron-bond.better-comments": [
"ui",
"workspace"
],
"vscodevim.vim": [
"ui"
],
"ollyhayes.colmak-vim": [
"ui"
]
},
"extensionPointExtensionKind": {
"typescriptServerPlugins": [
"workspace"
]
},
"extensionSyncedKeys": {
"ritwickdey.liveserver": [
"liveServer.setup.version"
]
},
"extensionVirtualWorkspacesSupport": {
"esbenp.prettier-vscode": {
"default": false
},
"msjsdiag.debugger-for-chrome": {
"default": false
},
"redhat.java": {
"default": false
},
"HookyQR.beautify": {
"default": false
},
"ritwickdey.LiveServer": {
"default": false
},
"VisualStudioExptTeam.vscodeintellicode": {
"default": false
},
"octref.vetur": {
"default": false
},
"formulahendry.code-runner": {
"default": false
},
"xdebug.php-debug": {
"default": false
},
"ms-mssql.mssql": {
"default": false
},
"christian-kohler.path-intellisense": {
"default": false
},
"eg2.tslint": {
"default": false
},
"eg2.vscode-npm-script": {
"default": false
},
"donjayamanne.githistory": {
"default": false
},
"Zignd.html-css-class-completion": {
"default": false
},
"christian-kohler.npm-intellisense": {
"default": false
},
"EditorConfig.EditorConfig": {
"default": false
},
"austin.code-gnu-global": {
"default": false
},
"johnpapa.Angular2": {
"default": false
},
"ms-vscode.vscode-typescript-tslint-plugin": {
"default": false
},
"DotJoshJohnson.xml": {
"default": false
},
"techer.open-in-browser": {
"default": false
},
"tht13.python": {
"default": false
},
"bmewburn.vscode-intelephense-client": {
"default": false
},
"Angular.ng-template": {
"default": false
},
"xdebug.php-pack": {
"default": false
},
"dbaeumer.jshint": {
"default": false
},
"yzhang.markdown-all-in-one": {
"default": false
},
"Dart-Code.flutter": {
"default": false
},
"streetsidesoftware.code-spell-checker": {
"default": false
},
"rebornix.Ruby": {
"default": false
},
"ms-vscode.sublime-keybindings": {
"default": false
},
"mitaki28.vscode-clang": {
"default": false
},
"steoates.autoimport": {
"default": false
},
"donjayamanne.python-extension-pack": {
"default": false
},
"shd101wyy.markdown-preview-enhanced": {
"default": false
},
"mikestead.dotenv": {
"default": false
},
"pranaygp.vscode-css-peek": {
"default": false
},
"ikappas.phpcs": {
"default": false
},
"platformio.platformio-ide": {
"default": false
},
"jchannon.csharpextensions": {
"default": false
},
"gruntfuggly.todo-tree": {
"default": false
}
}
}

70
release.sh Executable file
View File

@@ -0,0 +1,70 @@
#!/bin/bash
set -e
if [[ -z "${GITHUB_TOKEN}" ]]; then
echo "Will not release because no GITHUB_TOKEN defined"
exit
fi
npm install -g github-release-cli
if [[ $( gh release view "${MS_TAG}" 2>&1 ) =~ "release not found" ]]; then
echo "Creating release '${MS_TAG}'"
gh release create "${MS_TAG}"
fi
cd artifacts
set +e
OWNER="${GITHUB_REPOSITORY_OWNER:-"VSCodium"}"
REPO_NAME="${GITHUB_REPOSITORY:(${#OWNER}+1)}"
REPOSITORY="${REPO_NAME:-"vscodium"}"
# git workaround
git config --global --add safe.directory /__w/vscodium/vscodium
for FILE in *
do
if [[ -f "${FILE}" ]] && [[ "${FILE}" != *.sha1 ]] && [[ "${FILE}" != *.sha256 ]]; then
echo "::group::Uploading '${FILE}' at $( date "+%T" )"
gh release upload "${MS_TAG}" "${FILE}" "${FILE}.sha1" "${FILE}.sha256"
EXIT_STATUS=$?
echo "exit: ${EXIT_STATUS}"
if (( "${EXIT_STATUS}" )); then
for (( i=0; i<10; i++ ))
do
github-release delete --owner "${OWNER}" --repo "${REPOSITORY}" --tag "${MS_TAG}" "${FILE}" "${FILE}.sha1" "${FILE}.sha256"
sleep $(( 15 * (i + 1)))
echo "RE-Uploading '${FILE}' at $( date "+%T" )"
gh release upload "${MS_TAG}" "${FILE}" "${FILE}.sha1" "${FILE}.sha256"
EXIT_STATUS=$?
echo "exit: ${EXIT_STATUS}"
if ! (( "${EXIT_STATUS}" )); then
break
fi
done
echo "exit: ${EXIT_STATUS}"
if (( "${EXIT_STATUS}" )); then
echo "'${FILE}' hasn't been uploaded!"
github-release delete --owner "${OWNER}" --repo "${REPOSITORY}" --tag "${MS_TAG}" "${FILE}" "${FILE}.sha1" "${FILE}.sha256"
exit 1
fi
fi
echo "::endgroup::"
fi
done
cd ..

View File

@@ -1,11 +0,0 @@
#!/bin/sh
HERE="$(dirname "$(readlink -f "${0}")")"
export UNION_PRELOAD="${HERE}"
export PATH="${HERE}"/usr/bin/:"${HERE}"/usr/sbin/:"${HERE}"/usr/games/:"${HERE}"/bin/:"${HERE}"/sbin/:"${PATH}"
export LD_LIBRARY_PATH="${HERE}"/usr/lib/:"${HERE}"/usr/lib/i386-linux-gnu/:"${HERE}"/usr/lib/x86_64-linux-gnu/:"${HERE}"/usr/lib32/:"${HERE}"/usr/lib64/:"${HERE}"/lib/:"${HERE}"/lib/i386-linux-gnu/:"${HERE}"/lib/x86_64-linux-gnu/:"${HERE}"/lib32/:"${HERE}"/lib64/:"${LD_LIBRARY_PATH}"
export XDG_DATA_DIRS="${HERE}"/usr/share/:"${XDG_DATA_DIRS}"
export PERLLIB="${HERE}"/usr/share/perl5/:"${HERE}"/usr/lib/perl5/:"${PERLLIB}"
export GSETTINGS_SCHEMA_DIR="${HERE}"/usr/share/glib-2.0/schemas/:"${GSETTINGS_SCHEMA_DIR}"
export QT_PLUGIN_PATH="${HERE}"/usr/lib/qt4/plugins/:"${HERE}"/usr/lib/i386-linux-gnu/qt4/plugins/:"${HERE}"/usr/lib/x86_64-linux-gnu/qt4/plugins/:"${HERE}"/usr/lib32/qt4/plugins/:"${HERE}"/usr/lib64/qt4/plugins/:"${HERE}"/usr/lib/qt5/plugins/:"${HERE}"/usr/lib/i386-linux-gnu/qt5/plugins/:"${HERE}"/usr/lib/x86_64-linux-gnu/qt5/plugins/:"${HERE}"/usr/lib32/qt5/plugins/:"${HERE}"/usr/lib64/qt5/plugins/:"${QT_PLUGIN_PATH}"
EXEC=$(grep -e '^Exec=.*' "${HERE}"/*.desktop | head -n 1 | cut -d "=" -f 2- | sed -e 's|%.||g')
exec ${EXEC} "$@"

View File

@@ -1,349 +0,0 @@
# This file is supposed to be sourced by each Recipe
# that wants to use the functions contained herein
# like so:
# wget -q https://github.com/AppImage/AppImages/raw/${PKG2AICOMMIT}/functions.sh -O ./functions.sh
# . ./functions.sh
# RECIPE=$(realpath "$0")
# Specify a certain commit if you do not want to use master
# by using:
# export PKG2AICOMMIT=<git sha>
if [ -z "$PKG2AICOMMIT" ] ; then
PKG2AICOMMIT=master
fi
# Options for apt-get to use local files rather than the system ones
OPTIONS="-o Debug::NoLocking=1
-o APT::Cache-Limit=125829120
-o Dir::Etc::sourcelist=./sources.list
-o Dir::State=./tmp
-o Dir::Cache=./tmp
-o Dir::State::status=./status
-o Dir::Etc::sourceparts=-
-o APT::Get::List-Cleanup=0
-o APT::Get::AllowUnauthenticated=1
-o Debug::pkgProblemResolver=true
-o Debug::pkgDepCache::AutoInstall=true
-o APT::Install-Recommends=0
-o APT::Install-Suggests=0
"
# Detect if we are running inside Docker
grep docker /proc/1/cgroup >/dev/null && export DOCKER_BUILD=1 || true
# Detect system architecture to know which binaries of AppImage tools
# should be downloaded and used.
case "$(uname -i)" in
x86_64|amd64)
# echo "x86-64 system architecture"
SYSTEM_ARCH="x86_64";;
i?86)
# echo "x86 system architecture"
SYSTEM_ARCH="i686";;
# arm*)
# echo "ARM system architecture"
# SYSTEM_ARCH="";;
unknown|AuthenticAMD|GenuineIntel)
# uname -i not answer on debian, then:
case "$(uname -m)" in
x86_64|amd64)
# echo "x86-64 system architecture"
SYSTEM_ARCH="x86_64";;
i?86)
# echo "x86 system architecture"
SYSTEM_ARCH="i686";;
esac ;;
*)
echo "Unsupported system architecture"
exit 1;;
esac
# Either get the file from remote or from a static place.
# critical for builds without network access like in Open Build Service
cat_file_from_url()
{
cat_excludelist="wget -q $1 -O -"
[ -e "$STATIC_FILES/${1##*/}" ] && cat_excludelist="cat $STATIC_FILES/${1##*/}"
$cat_excludelist
}
git_pull_rebase_helper()
{
git reset --hard HEAD
git pull
}
# Patch /usr to ././ in ./usr
# to make the contents of usr/ relocateable
# (this requires us to cd ./usr before running the application; AppRun does that)
patch_usr()
{
find usr/ -type f -executable -exec sed -i -e "s|/usr|././|g" {} \;
}
# Download AppRun and make it executable
get_apprun()
{
cp ${HERE}/AppRun .
chmod a+x AppRun
}
# Copy the library dependencies of all exectuable files in the current directory
# (it can be beneficial to run this multiple times)
copy_deps()
{
PWD=$(readlink -f .)
FILES=$(find . -type f -executable -or -name *.so.* -or -name *.so | sort | uniq )
for FILE in $FILES ; do
ldd "${FILE}" | grep "=>" | awk '{print $3}' | xargs -I '{}' echo '{}' >> DEPSFILE
done
DEPS=$(cat DEPSFILE | sort | uniq)
for FILE in $DEPS ; do
if [ -e $FILE ] && [[ $(readlink -f $FILE)/ != $PWD/* ]] ; then
cp -v --parents -rfL $FILE ./ || true
fi
done
rm -f DEPSFILE
}
# Move ./lib/ tree to ./usr/lib/
move_lib()
{
mkdir -p ./usr/lib ./lib && find ./lib/ -exec cp -v --parents -rfL {} ./usr/ \; && rm -rf ./lib
mkdir -p ./usr/lib ./lib64 && find ./lib64/ -exec cp -v --parents -rfL {} ./usr/ \; && rm -rf ./lib64
}
# Delete blacklisted files
delete_blacklisted()
{
BLACKLISTED_FILES=$(cat_file_from_url https://github.com/AppImage/pkg2appimage/raw/${PKG2AICOMMIT}/excludelist | sed 's|#.*||g')
echo $BLACKLISTED_FILES
for FILE in $BLACKLISTED_FILES ; do
FILES="$(find . -name "${FILE}" -not -path "./usr/optional/*")"
for FOUND in $FILES ; do
rm -vf "$FOUND" "$(readlink -f "$FOUND")"
done
done
# Do not bundle developer stuff
rm -rf usr/include || true
rm -rf usr/lib/cmake || true
rm -rf usr/lib/pkgconfig || true
find . -name '*.la' | xargs -i rm {}
}
# Echo highest glibc version needed by the executable files in the current directory
glibc_needed()
{
find . -name *.so -or -name *.so.* -or -type f -executable -exec strings {} \; | grep ^GLIBC_2 | sed s/GLIBC_//g | sort --version-sort | uniq | tail -n 1
# find . -name *.so -or -name *.so.* -or -type f -executable -exec readelf -s '{}' 2>/dev/null \; | sed -n 's/.*@GLIBC_//p'| awk '{print $1}' | sort --version-sort | tail -n 1
}
# Add desktop integration
# Usage: get_desktopintegration name_of_desktop_file_and_exectuable
get_desktopintegration()
{
# REALBIN=$(grep -o "^Exec=.*" *.desktop | sed -e 's|Exec=||g' | cut -d " " -f 1 | head -n 1)
# cat_file_from_url https://raw.githubusercontent.com/AppImage/AppImageKit/deprecated/AppImageAssistant/desktopintegration > ./usr/bin/$REALBIN.wrapper
# chmod a+x ./usr/bin/$REALBIN.wrapper
echo "The desktopintegration script is deprecated. Please advise users to use https://github.com/AppImage/appimaged instead."
# sed -i -e "s|^Exec=$REALBIN|Exec=$REALBIN.wrapper|g" $1.desktop
}
# Generate AppImage; this expects $ARCH, $APP and $VERSION to be set
generate_appimage()
{
# Download AppImageAssistant
URL="https://github.com/AppImage/AppImageKit/releases/download/6/AppImageAssistant_6-${SYSTEM_ARCH}.AppImage"
wget -c "$URL" -O AppImageAssistant
chmod a+x ./AppImageAssistant
# if [[ "$RECIPE" == *ecipe ]] ; then
# echo "#!/bin/bash -ex" > ./$APP.AppDir/Recipe
# echo "# This recipe was used to generate this AppImage." >> ./$APP.AppDir/Recipe
# echo "# See http://appimage.org for more information." >> ./$APP.AppDir/Recipe
# echo "" >> ./$APP.AppDir/Recipe
# cat $RECIPE >> ./$APP.AppDir/Recipe
# fi
#
# Detect the architecture of what we are packaging.
# The main binary could be a script, so let's use a .so library
BIN=$(find . -name *.so* -type f | head -n 1)
INFO=$(file "$BIN")
if [ -z $ARCH ] ; then
if [[ $INFO == *"x86-64"* ]] ; then
ARCH=x86_64
elif [[ $INFO == *"i686"* ]] ; then
ARCH=i686
elif [[ $INFO == *"armv6l"* ]] ; then
ARCH=armhf
else
echo "Could not automatically detect the architecture."
echo "Please set the \$ARCH environment variable."
exit 1
fi
fi
mkdir -p ../out || true
rm ../out/$APP"-"$VERSION".glibc"$GLIBC_NEEDED"-"$ARCH".AppImage" 2>/dev/null || true
GLIBC_NEEDED=$(glibc_needed)
./AppImageAssistant --appimage-extract-and-run ./$APP.AppDir/ ../out/$APP"-"$VERSION".glibc"$GLIBC_NEEDED"-"$ARCH".AppImage"
}
# Generate AppImage type 2
# Additional parameters given to this routine will be passed on to appimagetool
#
# If the environment variable NO_GLIBC_VERSION is set, the required glibc version
# will not be added to the AppImage filename
generate_type2_appimage()
{
# Get the ID of the last successful build on Travis CI
# ID=$(wget -q https://api.travis-ci.org/repos/AppImage/appimagetool/builds -O - | head -n 1 | sed -e 's|}|\n|g' | grep '"result":0' | head -n 1 | sed -e 's|,|\n|g' | grep '"id"' | cut -d ":" -f 2)
# Get the transfer.sh URL from the logfile of the last successful build on Travis CI
# Only Travis knows why build ID and job ID don't match and why the above doesn't give both...
# URL=$(wget -q "https://s3.amazonaws.com/archive.travis-ci.org/jobs/$((ID+1))/log.txt" -O - | grep "https://transfer.sh/.*/appimagetool" | tail -n 1 | sed -e 's|\r||g')
# if [ -z "$URL" ] ; then
# URL=$(wget -q "https://s3.amazonaws.com/archive.travis-ci.org/jobs/$((ID+2))/log.txt" -O - | grep "https://transfer.sh/.*/appimagetool" | tail -n 1 | sed -e 's|\r||g')
# fi
if [ -z "$(which appimagetool)" ] ; then
URL="https://github.com/AppImage/AppImageKit/releases/download/continuous/appimagetool-${SYSTEM_ARCH}.AppImage"
wget -c "$URL" -O appimagetool
chmod a+x ./appimagetool
appimagetool=$(readlink -f appimagetool)
else
appimagetool=$(which appimagetool)
fi
if [ "$DOCKER_BUILD" ]; then
appimagetool_tempdir=$(mktemp -d)
mv appimagetool "$appimagetool_tempdir"
pushd "$appimagetool_tempdir" &>/dev/null
ls -al
./appimagetool --appimage-extract
rm appimagetool
appimagetool=$(readlink -f squashfs-root/AppRun)
popd &>/dev/null
_appimagetool_cleanup() { [ -d "$appimagetool_tempdir" ] && rm -r "$appimagetool_tempdir"; }
trap _appimagetool_cleanup EXIT
fi
if [ -z ${NO_GLIBC_VERSION+true} ]; then
GLIBC_NEEDED=$(glibc_needed)
VERSION_EXPANDED=$VERSION.glibc$GLIBC_NEEDED
else
VERSION_EXPANDED=$VERSION
fi
set +x
GLIBC_NEEDED=$(glibc_needed)
if ( [ ! -z "$KEY" ] ) && ( ! -z "$TRAVIS" ) ; then
wget https://github.com/AppImage/AppImageKit/files/584665/data.zip -O data.tar.gz.gpg
( set +x ; echo $KEY | gpg2 --batch --passphrase-fd 0 --no-tty --skip-verify --output data.tar.gz --decrypt data.tar.gz.gpg )
tar xf data.tar.gz
sudo chown -R $USER .gnu*
mv $HOME/.gnu* $HOME/.gnu_old ; mv .gnu* $HOME/
VERSION=$VERSION_EXPANDED "$appimagetool" $@ -n -s --bintray-user $BINTRAY_USER --bintray-repo $BINTRAY_REPO -v ./$APP.AppDir/
else
VERSION=$VERSION_EXPANDED "$appimagetool" $@ -n --bintray-user $BINTRAY_USER --bintray-repo $BINTRAY_REPO -v ./$APP.AppDir/
fi
set -x
mkdir -p ../out/ || true
mv *.AppImage* ../out/
}
# Generate status file for use by apt-get; assuming that the recipe uses no newer
# ingredients than what would require more recent dependencies than what we assume
# to be part of the base system
generate_status()
{
mkdir -p ./tmp/archives/
mkdir -p ./tmp/lists/partial
touch tmp/pkgcache.bin tmp/srcpkgcache.bin
if [ -e "${HERE}/usr/share/pkg2appimage/excludedeblist" ] ; then
EXCLUDEDEBLIST="${HERE}/usr/share/pkg2appimage/excludedeblist"
else
wget -q -c "https://github.com/AppImage/AppImages/raw/${PKG2AICOMMIT}/excludedeblist"
EXCLUDEDEBLIST=excludedeblist
fi
rm status 2>/dev/null || true
for PACKAGE in $(cat excludedeblist | cut -d "#" -f 1) ; do
printf "Package: $PACKAGE\nStatus: install ok installed\nArchitecture: all\nVersion: 9:999.999.999\n\n" >> status
done
}
# Find the desktop file and copy it to the AppDir
get_desktop()
{
find usr/share/applications -iname "*${LOWERAPP}.desktop" -exec cp {} . \; || true
}
fix_desktop() {
# fix trailing semicolons
for key in Actions Categories Implements Keywords MimeType NotShowIn OnlyShowIn; do
sed -i '/'"$key"'.*[^;]$/s/$/;/' $1
done
}
# Find the icon file and copy it to the AppDir
get_icon()
{
find ./usr/share/pixmaps/$LOWERAPP.png -exec cp {} . \; 2>/dev/null || true
find ./usr/share/icons -path *64* -name $LOWERAPP.png -exec cp {} . \; 2>/dev/null || true
find ./usr/share/icons -path *128* -name $LOWERAPP.png -exec cp {} . \; 2>/dev/null || true
find ./usr/share/icons -path *512* -name $LOWERAPP.png -exec cp {} . \; 2>/dev/null || true
find ./usr/share/icons -path *256* -name $LOWERAPP.png -exec cp {} . \; 2>/dev/null || true
ls -lh $LOWERAPP.png || true
}
# Find out the version
get_version()
{
THEDEB=$(find ../*.deb -name $LOWERAPP"_*" | head -n 1)
if [ -z "$THEDEB" ] ; then
echo "Version could not be determined from the .deb; you need to determine it manually"
fi
VERSION=$(echo $THEDEB | cut -d "~" -f 1 | cut -d "_" -f 2 | cut -d "-" -f 1 | sed -e 's|1%3a||g' | sed -e 's|.dfsg||g' )
echo $VERSION
}
# transfer.sh
transfer() { if [ $# -eq 0 ]; then echo "No arguments specified. Usage:\necho transfer /tmp/test.md\ncat /tmp/test.md | transfer test.md"; return 1; fi
tmpfile=$( mktemp -t transferXXX ); if tty -s; then basefile=$(basename "$1" | sed -e 's/[^a-zA-Z0-9._-]/-/g'); curl --progress-bar --upload-file "$1" "https://transfer.sh/$basefile" >> $tmpfile; else curl --progress-bar --upload-file "-" "https://transfer.sh/$1" >> $tmpfile ; fi; cat $tmpfile; rm -f $tmpfile; }
# Patch binary files; fill with padding if replacement is shorter than original
# http://everydaywithlinux.blogspot.de/2012/11/patch-strings-in-binary-files-with-sed.html
# Example: patch_strings_in_file foo "/usr/local/lib/foo" "/usr/lib/foo"
patch_strings_in_file() {
local FILE="$1"
local PATTERN="$2"
local REPLACEMENT="$3"
# Find all unique strings in FILE that contain the pattern
STRINGS=$(strings ${FILE} | grep ${PATTERN} | sort -u -r)
if [ "${STRINGS}" != "" ] ; then
echo "File '${FILE}' contain strings with '${PATTERN}' in them:"
for OLD_STRING in ${STRINGS} ; do
# Create the new string with a simple bash-replacement
NEW_STRING=${OLD_STRING//${PATTERN}/${REPLACEMENT}}
# Create null terminated ASCII HEX representations of the strings
OLD_STRING_HEX="$(echo -n ${OLD_STRING} | xxd -g 0 -u -ps -c 256)00"
NEW_STRING_HEX="$(echo -n ${NEW_STRING} | xxd -g 0 -u -ps -c 256)00"
if [ ${#NEW_STRING_HEX} -le ${#OLD_STRING_HEX} ] ; then
# Pad the replacement string with null terminations so the
# length matches the original string
while [ ${#NEW_STRING_HEX} -lt ${#OLD_STRING_HEX} ] ; do
NEW_STRING_HEX="${NEW_STRING_HEX}00"
done
# Now, replace every occurrence of OLD_STRING with NEW_STRING
echo -n "Replacing ${OLD_STRING} with ${NEW_STRING}... "
hexdump -ve '1/1 "%.2X"' ${FILE} | \
sed "s/${OLD_STRING_HEX}/${NEW_STRING_HEX}/g" | \
xxd -r -p > ${FILE}.tmp
chmod --reference ${FILE} ${FILE}.tmp
mv ${FILE}.tmp ${FILE}
echo "Done!"
else
echo "New string '${NEW_STRING}' is longer than old" \
"string '${OLD_STRING}'. Skipping."
fi
done
fi
}

View File

@@ -1,471 +0,0 @@
#!/usr/bin/env bash
# env
ARCH=x86_64
HERE="$(dirname "$(readlink -f "${0}")")"
# Use privately bundled apt-get and dpkg-deb if available; can be got on trusty using
# apt download apt libapt-pkg4.12 libbz2-1.0 liblzma5 multiarch-support zlib1g dpkg
if [ -e "${HERE}/libunionpreload.so" ] ; then
export UNION_PRELOAD="${HERE}"
export LD_PRELOAD="${HERE}/libunionpreload.so"
export PATH="${HERE}"/usr/bin/:"${HERE}"/usr/sbin/:"${HERE}"/usr/games/:"${HERE}"/bin/:"${HERE}"/sbin/:"${PATH}"
export LD_LIBRARY_PATH="${HERE}"/usr/lib/:"${HERE}"/usr/lib/i386-linux-gnu/:"${HERE}"/usr/lib/x86_64-linux-gnu/:"${HERE}"/usr/lib32/:"${HERE}"/usr/lib64/:"${HERE}"/lib/:"${HERE}"/lib/i386-linux-gnu/:"${HERE}"/lib/x86_64-linux-gnu/:"${HERE}"/lib32/:"${HERE}"/lib64/:"${LD_LIBRARY_PATH}"
export XDG_DATA_DIRS="${HERE}"/usr/share/:"${XDG_DATA_DIRS}"
fi
# Specify a certain commit if you do not want to use master
# by using:
# export PKG2AICOMMIT=<git sha>
if [ -z "$PKG2AICOMMIT" ] ; then
PKG2AICOMMIT=master
fi
usage() {
if [ -z "$APPIMAGE" ] ; then
MYSELF="$0"
else
MYSELF="$APPIMAGE"
fi
echo "usage:"
echo " $MYSELF [--no-di] META-NAME|YAMLFILE"
echo ""
echo "options:"
echo " --di enable legacy desktop integration (unsupported)"
exit 1
}
if [ $# -eq 0 ] || [ "x${!#}" = "x--di" ] ; then
usage
fi
if [ $# -eq 2 ] && [ "x$1" != "x--di" ] ; then
usage
fi
if [ "x$1" = "x--di" ] ; then
ENABLE_DI="yes"
else
ENABLE_DI="no"
fi
# Halt on errors
set -e
set -x
# Check dependencies
which wget >/dev/null 2>&1 || ( echo wget missing && exit 1 )
which grep >/dev/null 2>&1 || ( echo grep missing && exit 1 )
which sed >/dev/null 2>&1 || ( echo sed missing && exit 1 )
which cut >/dev/null 2>&1 || ( echo cut missing && exit 1 )
which file >/dev/null 2>&1 || ( echo file missing && exit 1 )
which desktop-file-validate >/dev/null 2>&1 || ( echo desktop-file-validate missing && exit 1 )
# If the yaml file doesn't exist locally, get it from GitHub
if [ ! -f "${!#}" ] ; then
YAMLFILE=/tmp/_recipe.yml
rm -f "$YAMLFILE"
wget -q "https://github.com/AppImage/AppImages/raw/${PKG2AICOMMIT}/recipes/${!#}.yml" -O "$YAMLFILE"
else
YAMLFILE=$(readlink -f "${!#}")
fi
# Lightweight bash-only dpkg-scanpackages replacement
scanpackages() {
for deb in *.deb ; do
dpkg -I $deb | sed 's/^ *//g' | grep -i -E '(package|version|installed-size|architecture|depends|priority):'
echo "Filename: $(readlink -f $deb)"
echo "MD5sum: $(md5sum -b $deb | cut -d' ' -f1)"
echo "SHA1: $(sha1sum -b $deb | cut -d' ' -f1)"
echo "SHA256: $(sha256sum -b $deb | cut -d' ' -f1)"
echo
done
}
# Function to parse yaml
# https://gist.github.com/epiloque/8cf512c6d64641bde388
# based on https://gist.github.com/pkuczynski/8665367
parse_yaml() {
local prefix=$2
local s
local w
local fs
s='[[:blank:]]*'
w='[a-zA-Z0-9_]*'
fs="$(echo @|tr @ '\034')"
sed -ne "s|^\($s\)\($w\)$s:$s\"\(.*\)\"$s\$|\1$fs\2$fs\3|p" \
-e "s|^\($s\)\($w\)$s[:-]$s\(.*\)$s\$|\1$fs\2$fs\3|p" "$1" |
awk -F"$fs" '{
indent = length($1)/2;
vname[indent] = $2;
for (i in vname) {if (i > indent) {delete vname[i]}}
if (length($3) > 0) {
vn=""; for (i=0; i<indent; i++) {vn=(vn)(vname[i])("_")}
printf("%s%s%s=(\"%s\")\n", "'"$prefix"'",vn, $2, $3);
}
}' | sed 's/_=/+=/g'
}
# Read yaml file
parse_yaml $YAMLFILE "_"
eval $(parse_yaml $YAMLFILE "_")
if [ ! -z $_enable_di ]; then
ENABLE_DI="$_enable_di"
fi
# Execute multiple script lines together as one
# shell_execute filename key_of_group_of_commands
shell_execute() {
if [ -f /tmp/recipe_script ] ; then
rm /tmp/recipe_script
fi
parse_yaml $YAMLFILE "_" | grep "^$2+=" > /tmp/recipe_script
sed -i -e 's|^'$2'+=("||g' /tmp/recipe_script
sed -i -e 's|")$||g' /tmp/recipe_script
bash -ex /tmp/recipe_script
rm /tmp/recipe_script
}
APP=$_app
LOWERAPP=${APP,,}
if [ ! -z $_lowerapp ] ; then
LOWERAPP=$_lowerapp
fi
mkdir -p ./$APP/$APP.AppDir/usr/lib
cd ./$APP/
if [ -d "./$APP.AppDir/" ] ; then
rm -rf ./$APP.AppDir/
fi
# Source the bundled functions.sh if it exists
# in "${HERE}/usr/share/pkg2appimage/functions.sh"
# or source a user-provided functions.sh if the environment
# variable FUNCTIONS_SH was set and the file exists
if [ -e "${HERE}/usr/share/pkg2appimage/functions.sh" ] ; then
. "${HERE}/usr/share/pkg2appimage/functions.sh"
elif [ -z "$FUNCTIONS_SH" ] ; then
if [ ! -e "${HERE}/functions.sh" ] ; then
echo "functions.sh IS NOT FOUND, PLEASE CONTACT CODIUM APPIMAGE MAINTAINER!!!"
fi
cp ${HERE}/functions.sh ./functions.sh
. ./functions.sh
else
if [ -e "$FUNCTIONS_SH" ] ; then
. "$FUNCTIONS_SH"
fi
fi
# If there is an ARCH environment variable, then use that
# architecture to for apt-get. Not that for the AppImage to be
# operable, we also need to embed a matching AppImage runtime
# and ingredients of that architecture. Debian packages
# should be available for most architectures, e.g., oldstable
# has "armhf"
if [ ! -z $ARCH ] ; then
OPTIONS="$OPTIONS -o APT::Architecture=$ARCH"
fi
if [ ! -z "${_ingredients_ghreleases[0]}" ] ; then
for GHREPO in "${_ingredients_ghreleases[@]}" ; do
wget -q "https://github.com/${GHREPO}/releases/" -O /tmp/gh-release.html
DEB=$(cat /tmp/gh-release.html | grep ".deb" | grep x86_64 | head -n 1 | cut -d '"' -f 2)
if [ -z "$DEB" ] ; then
DEB=$(cat /tmp/gh-release.html | grep ".deb" | grep amd64 | head -n 1 | cut -d '"' -f 2)
fi
if [ -z "$DEB" ] ; then
DEB=$(cat /tmp/gh-release.html | grep ".deb" | grep x64 | head -n 1 | cut -d '"' -f 2)
fi
if [ -z "$DEB" ] ; then
DEB=$(cat /tmp/gh-release.html | grep ".deb" | grep linux64 | head -n 1 | cut -d '"' -f 2)
fi
rm /tmp/gh-release.html
wget -c "https://github.com/${DEB}"
done
fi
if [ ! -z "${_ingredients_dist}" ] ; then
rm status 2>/dev/null || true
generate_status
# Some packages depend on packages which we do not want to bundle,
# in addition to the global excludes defined in excludedeblist.
# Use
# ingredients:
# exclude:
# - packagename
if [ ! -z "${_ingredients_exclude[0]}" ] ; then
for PACKAGE in "${_ingredients_exclude[@]}" ; do
printf "Package: $PACKAGE\nStatus: install ok installed\nArchitecture: all\nVersion: 9:999.999.999\n\n" >> status
done
fi
# Some packages depend on an exact version of a dependency to be installed.
# Use
# ingredients:
# pretend:
# - packagename version_to_be_pretended
if [ ! -z "${_ingredients_pretend[0]}" ] ; then
for PRETEND in "${_ingredients_pretend[@]}" ; do
P_PKG=$(echo "$PRETEND" | cut -d " " -f 1)
P_VER=$(echo "$PRETEND" | cut -d " " -f 2)
cat status | tr '\n' '@' | sed -e 's|@@|\n\n|g' | sed -e 's|Package: '"$P_PKG"'@Status: install ok installed@Architecture: all@Version: 9:999.999.999|Package: '"$P_PKG"'@Status: install ok installed@Architecture: all@Version: '"$P_VER"'|g' | sed -e 's|@|\n|g' > status.temp
mv status.temp status
done
fi
if [ -e sources.list ] ; then
rm sources.list
fi
for SOURCE in "${_ingredients_sources[@]}" ; do
echo "${SOURCE}" >> sources.list
done
for PPA in "${_ingredients_ppas[@]}" ; do
echo "deb http://ppa.launchpad.net/${PPA}/ubuntu ${_ingredients_dist} main" >> sources.list
done
for DEBFILE in "${_ingredients_debs[@]}" ; do
cp ${DEBFILE} .
done
# Use libcurl-slim to reduce AppImage size, thanks darealshinji
# Not really compiled on xenial but CentOS 6, https://github.com/AppImage/AppImages/issues/187
echo "deb http://ppa.launchpad.net/djcj/libcurl-slim/ubuntu xenial main" >> sources.list
# Use gnutls-patched to have libgnutls look in various distributions' places for certificates,
# https://github.com/darealshinji/vlc-AppImage/issues/1#issuecomment-321041496
# echo "deb http://ppa.launchpad.net/djcj/gnutls-patched/ubuntu ${_ingredients_dist} main" >> sources.list
### echo "deb http://ppa.launchpad.net/djcj/gnutls-patched/ubuntu trusty main" >> sources.list # https://github.com/AppImage/pkg2appimage/issues/345
fi
if [ ! -z "${_ingredients_script[0]}" ] ; then
# Execute extra steps defined in recipe
shell_execute $YAMLFILE _ingredients_script
fi
if [ ! -z "${_ingredients_dist}" ] ; then
# Some projects provide raw .deb files without a repository
# hence we create our own local repository as part of
# the AppImage creation process in order to "install"
# the package using apt-get as normal
if [ ! -z "${_ingredients_debs[0]}" ] ; then
for DEB in "${_ingredients_debs[@]}" ; do
if [ ! -f $(basename "$DEB") ] ; then
wget -c $DEB
fi
done
fi
scanpackages | gzip -9c > Packages.gz
echo "deb file:$(readlink -e $PWD) ./" >> sources.list
INSTALL=$LOWERAPP
if [ ! -z "${_ingredients_package}" ] ; then
INSTALL="${_ingredients_package}"
fi
if [ ! -z "${_ingredients_packages}" ] ; then
INSTALL=""
fi
# If packages are specifically listed, only install these, not a package with the name of the app
if [ ! -z "${_ingredients_packages[0]}" ] ; then
INSTALL=${_ingredients_packages[@]}
fi
apt-get -o Acquire::AllowInsecureRepositories=true -o Acquire::Languages="none" -o Acquire::AllowDowngradeToInsecureRepositories=true $OPTIONS update || true
URLS=$(apt-get --allow-unauthenticated -o Apt::Get::AllowUnauthenticated=true $OPTIONS -y install --print-uris $INSTALL | cut -d "'" -f 2 | grep -e "^http") || true
if which aria2c &>/dev/null; then
dltool=aria2c
else
dltool=wget
fi
$dltool -c -i- <<<"$URLS"
fi
if [ ! -z "${_ingredients_post_script[0]}" ] ; then
# Execute extra steps defined in recipe
shell_execute $YAMLFILE _ingredients_post_script
fi
mkdir -p ./$APP.AppDir/
cd ./$APP.AppDir/
mkdir -p usr/bin usr/lib
find ../*.deb -exec dpkg-deb -X {} . \; || true
unset LD_PRELOAD
# Try to copy icons to standard locations where appimaged can pick them up
mkdir -p usr/share/icons/hicolor/{22x22,24x24,32x32,48x48,64x64,128x128,256x256,512x512}/apps/
find . -path *icons* -path *22* -name "*$LOWERAPP*" -exec cp {} usr/share/icons/hicolor/22x22/apps/ \; || true
find . -path *icons* -path *24* -name "*$LOWERAPP*" -exec cp {} usr/share/icons/hicolor/24x24/apps/ \; || true
find . -path *icons* -path *32* -name "*$LOWERAPP*" -exec cp {} usr/share/icons/hicolor/32x32/apps/ \; || true
find . -path *icons* -path *48* -name "*$LOWERAPP*" -exec cp {} usr/share/icons/hicolor/48x48/apps/ \; || true
find . -path *icons* -path *64* -name "*$LOWERAPP*" -exec cp {} usr/share/icons/hicolor/64x64/apps/ \; || true
find . -path *icons* -path *128* -name "*$LOWERAPP*" -exec cp {} usr/share/icons/hicolor/128x128/apps/ \; || true
find . -path *icons* -path *256* -name "*$LOWERAPP*" -exec cp {} usr/share/icons/hicolor/256x256/apps/ \; || true
find . -path *icons* -path *512* -name "*$LOWERAPP*" -exec cp {} usr/share/icons/hicolor/512x512/apps/ \; || true
get_icon
if [ -z "${_union}" ] ; then
get_apprun
else
cat > AppRun <<\EOF
#!/bin/sh
HERE="$(dirname "$(readlink -f "${0}")")"
export UNION_PRELOAD="${HERE}"
export LD_PRELOAD="${HERE}/libunionpreload.so"
export PATH="${HERE}"/usr/bin/:"${HERE}"/usr/sbin/:"${HERE}"/usr/games/:"${HERE}"/bin/:"${HERE}"/sbin/:"${PATH}"
export LD_LIBRARY_PATH="${HERE}"/usr/lib/:"${HERE}"/usr/lib/i386-linux-gnu/:"${HERE}"/usr/lib/x86_64-linux-gnu/:"${HERE}"/usr/lib32/:"${HERE}"/usr/lib64/:"${HERE}"/lib/:"${HERE}"/lib/i386-linux-gnu/:"${HERE}"/lib/x86_64-linux-gnu/:"${HERE}"/lib32/:"${HERE}"/lib64/:"${LD_LIBRARY_PATH}"
export PYTHONPATH="${HERE}"/usr/share/pyshared/:"${PYTHONPATH}"
export PYTHONHOME="${HERE}"/usr/
export XDG_DATA_DIRS="${HERE}"/usr/share/:"${XDG_DATA_DIRS}"
export PERLLIB="${HERE}"/usr/share/perl5/:"${HERE}"/usr/lib/perl5/:"${PERLLIB}"
export GSETTINGS_SCHEMA_DIR="${HERE}"/usr/share/glib-2.0/schemas/:"${GSETTINGS_SCHEMA_DIR}"
export QT_PLUGIN_PATH="${HERE}"/usr/lib/qt4/plugins/:"${HERE}"/usr/lib/i386-linux-gnu/qt4/plugins/:"${HERE}"/usr/lib/x86_64-linux-gnu/qt4/plugins/:"${HERE}"/usr/lib32/qt4/plugins/:"${HERE}"/usr/lib64/qt4/plugins/:"${HERE}"/usr/lib/qt5/plugins/:"${HERE}"/usr/lib/i386-linux-gnu/qt5/plugins/:"${HERE}"/usr/lib/x86_64-linux-gnu/qt5/plugins/:"${HERE}"/usr/lib32/qt5/plugins/:"${HERE}"/usr/lib64/qt5/plugins/:"${QT_PLUGIN_PATH}"
EXEC=$(grep -e '^Exec=.*' "${HERE}"/*.desktop | head -n 1 | cut -d "=" -f 2- | sed -e 's|%.||g')
exec ${EXEC} "$@"
EOF
chmod a+x AppRun
fi
get_desktop
# Prevent Qt from loading plugins from the system
unset QTPATH
QTPATH=$(find usr/lib -type d -name qt4 -or -name qt5 | sed -e 's|usr/|../|g')
if [ ! -z $QTPATH ] ; then
cat > usr/bin/qt.conf <<EOF
[Paths]
Prefix = $QTPATH
EOF
fi
# http://www.mono-project.com/docs/advanced/assemblies-and-the-gac/
# At runtime, Mono looks in three places for assemblies necessary
# to run a program. It first searches the location of the executing assembly.
# For this to work without setting $MONO_PATH, we need to move the
# main *.exe to usr/lib/mono/exe, because we move all "assemblies" (sic)
# there in this script
if [ -e usr/lib/mono ] ; then
# Force all so files referenced in config files into LD_LIBRARY_PATH
find . -name "*.dll.config" -exec cat {} > temp \;
# Remove all absolute paths
sed -i -E 's|target=\"\/(.*\/)([a-z0-9].*?)>|target=\"\2>|g' temp
SONAMES=$(cat temp | cut -d '"' -f 4 | grep ".so" || true)
if [ "" != "$SONAMES" ] ; then
for SONAME in $SONAMES; do
find . -name "$SONAME" -exec mv {} usr/lib \;
done
fi
rm temp
PATH_OF_THE_EXE="usr/lib/mono/exe"
mkdir -p "$PATH_OF_THE_EXE"
# Force all dll files into PATH_OF_THE_EXE (or MONO_PATH which we would have to set)
find . -name "*.dll" -and -not -name "mscorlib.dll" -exec mv {} "$PATH_OF_THE_EXE" \;
# Edit all config files in place to remove absolute paths
find . -name "*.dll.config" -exec sed -i -E 's|target=\"\/(.*\/)([a-z0-9].*?)>|target=\"\2>|g' {} \;
# Force all config files into the PATH_OF_THE_EXE (or MONO_PATH which we would have to set)
find . -name "*.dll.config" -exec mv {} "$PATH_OF_THE_EXE" \;
# Remove gac, we are not using it since it is convoluted
rm -rf usr/lib/mono/gac/
fi
if [ -d "./usr/lib/x86_64-linux-gnu/gstreamer-1.0/" ] ; then
mv ./usr/lib/x86_64-linux-gnu/gstreamer-1.0/* ./usr/lib/x86_64-linux-gnu/
rm -r ./usr/lib/x86_64-linux-gnu/gstreamer-1.0
fi
if [ -d "./usr/lib/x86_64-linux-gnu/pulseaudio/" ] ; then
mv ./usr/lib/x86_64-linux-gnu/pulseaudio/* ./usr/lib/x86_64-linux-gnu/
rm -r ./usr/lib/x86_64-linux-gnu/pulseaudio
fi
# Execute extra steps defined in recipe
if [ ! -z "${_script}" ] ; then
shell_execute $YAMLFILE _script
fi
DESKTOP=$(find . -name '*.desktop' | sort | head -n 1)
# desktop-file-validate complains about missing trailing semicolons for some
# keys although the format definition says that they are optional
fix_desktop "$DESKTOP"
# Some non-distribution provided applications have an absolute
# path in the Exec= line which we remove for relocateability
if [ -z "$DESKTOP" ] ; then
echo "desktop file not found, aborting"
exit 1
else
desktop-file-validate "$DESKTOP" || exit 1
ORIG=$(grep -o "^Exec=.*$" "${DESKTOP}" | head -n 1| cut -d " " -f 1)
REPL=$(basename $(grep -o "^Exec=.*$" "${DESKTOP}" | head -n 1 | cut -d " " -f 1 | sed -e 's|Exec=||g'))
sed -i -e 's|'"${ORIG}"'|Exec='"${REPL}"'|g' "${DESKTOP}"
fi
# Compile GLib schemas if the subdirectory is present in the AppImage
# AppRun has to export GSETTINGS_SCHEMA_DIR for this to work
if [ -d usr/share/glib-2.0/schemas/ ] ; then
( cd usr/share/glib-2.0/schemas/ ; glib-compile-schemas . )
fi
if [ -f ../VERSION ] ; then
VERSION=$(cat ../VERSION)
else
get_version || true
fi
# patch_usr
# Patching only the executable files seems not to be enough for some apps
if [ ! -z "${_binpatch}" ] ; then
find usr/ -type f -exec sed -i -e 's|/usr|././|g' {} \;
find usr/ -type f -exec sed -i -e 's@././/bin/env@/usr/bin/env@g' {} \;
fi
# Don't suffer from NIH; use LD_PRELOAD to override calls to /usr paths
if [ ! -z "${_union}" ] ; then
mkdir -p usr/src/
wget -q "https://raw.githubusercontent.com/mikix/deb2snap/master/src/preload.c" -O - | \
sed -e 's|SNAPPY|UNION|g' | sed -e 's|SNAPP|UNION|g' | sed -e 's|SNAP|UNION|g' | \
sed -e 's|snappy|union|g' > usr/src/libunionpreload.c
gcc -shared -fPIC usr/src/libunionpreload.c -o libunionpreload.so -ldl -DUNION_LIBNAME=\"libunionpreload.so\"
strip libunionpreload.so
fi
delete_blacklisted
if [ "$ENABLE_DI" = "yes" ] ; then
get_desktopintegration $LOWERAPP
fi
# Fix desktop files that have file endings for icons
sed -i -e 's|\.png||g' *.desktop || true
sed -i -e 's|\.svg||g' *.desktop || true
sed -i -e 's|\.svgz||g' *.desktop || true
sed -i -e 's|\.xpm||g' *.desktop || true
# Setting PYTHONHOME instead
# Fix Python imports,
# https://github.com/AppImage/AppImages/issues/172
# SITECUSTOMIZEFILES=$(find . -name "sitecustomize.py")
# for SITECUSTOMIZEFILE in $SITECUSTOMIZEFILES ; do
# rm $SITECUSTOMIZEFILE # Remove symlinks, replace by files
# cat > $SITECUSTOMIZEFILE <<\EOF
# import sys,os
# if sys.version_info[0] < 3:
# prefix = os.path.dirname(os.path.dirname(os.path.dirname(os.path.dirname(sys.path[0]))))
# sys.path = [ prefix+s for s in sys.path if not s.startswith(prefix) ]
# EOF
# done
# Execute extra steps defined in recipe
if [ ! -z "${_post_script[0]}" ] ; then
shell_execute $YAMLFILE _post_script
fi
# Go out of AppImage
cd ..
generate_type2_appimage -u "gh-releases-zsync|VSCodium|vscodium|latest|*.AppImage.zsync"
ls -lh ../out/*.AppImage*

Binary file not shown.

After

Width:  |  Height:  |  Size: 151 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 201 KiB

After

Width:  |  Height:  |  Size: 217 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 332 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 445 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 580 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 730 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 959 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

View File

Before

Width:  |  Height:  |  Size: 8.7 KiB

After

Width:  |  Height:  |  Size: 8.7 KiB

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="1024px" height="1024px" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<svg width="40" height="40" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<!-- Generator: Sketch 55 (78076) - https://sketchapp.com -->
<title>codium_grey_dark_letterpress</title>
<desc>Created with Sketch.</desc>

Before

Width:  |  Height:  |  Size: 7.5 KiB

After

Width:  |  Height:  |  Size: 7.5 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 7.5 KiB

After

Width:  |  Height:  |  Size: 7.5 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 8.7 KiB

After

Width:  |  Height:  |  Size: 7.5 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 7.5 KiB

After

Width:  |  Height:  |  Size: 7.5 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 8.7 KiB

View File

@@ -0,0 +1,41 @@
#!/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 snap install --channel stable --classic snapcraft
echo "Architecture: ${ARCHITECTURE}"
SNAP_VERSION=$(snapcraft list-revisions codium | grep -F "stable*" | grep "${ARCHITECTURE}" | tr -s ' ' | cut -d ' ' -f 4)
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}"
rm -f gh_latest.json
if [[ "${SNAP_VERSION}" == "${GH_VERSION}" ]]; then
export SHOULD_DEPLOY="no"
else
export SHOULD_DEPLOY="yes"
snap version
snap info codium
fi
fi
if [[ "${GITHUB_ENV}" ]]; then
echo "SHOULD_DEPLOY=${SHOULD_DEPLOY}" >> "${GITHUB_ENV}"
fi

View File

@@ -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 "$@"

View File

@@ -0,0 +1,91 @@
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}"
# Set version
snapcraftctl set-version "$VERSION"
# Correct path to icon.
sed -i 's|Icon=vscodium|Icon=${SNAP}/usr/share/pixmaps/vscodium.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=vscodium|Icon=/usr/share/pixmaps/vscodium.png|g' ${SNAPCRAFT_PART_INSTALL}/usr/share/applications/codium-url-handler.desktop
build-packages:
- wget
- jq
stage-packages:
- fcitx-frontend-gtk3
- gvfs-libs
- libasound2
- libgconf-2-4
- libglib2.0-bin
- libgnome-keyring0
- libgtk-3-0
- libnotify4
- libnspr4
- libnss3
- libpcre3
- libpulse0
- libsecret-1-0
- libxshmfence1
- libxss1
- libxtst6
- zlib1g
- libx11-xcb1
- libxkbfile1
- libdrm2
- libgbm1
- libxcb-dri3-0
prime:
- -usr/share/doc
- -usr/share/fonts
- -usr/share/icons
- -usr/share/lintian
- -usr/share/man
- -usr/share/codium/chrome-sandbox
electron-launch:
after:
- codium
plugin: dump
source: snap/local
apps:
codium:
command: electron-launch $SNAP/usr/share/codium/bin/codium --no-sandbox
desktop: usr/share/applications/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
desktop: usr/share/applications/codium-url-handler.desktop
environment:
DISABLE_WAYLAND: 1
GSETTINGS_SCHEMA_DIR: $SNAP/usr/share/glib-2.0/schemas

30
sum.sh
View File

@@ -1,30 +0,0 @@
#!/bin/bash
npm install -g checksum
sum_file () {
if [[ -f "$1" ]]; then
checksum -a sha256 "$1" > "$1".sha256
checksum "$1" > "$1".sha1
fi
}
if [[ "$SHOULD_BUILD" == "yes" ]]; then
if [[ "$OS_NAME" == "osx" ]]; then
sum_file VSCodium-darwin-*.zip
sum_file VSCodium*.dmg
elif [[ "$OS_NAME" == "windows" ]]; then
sum_file VSCodiumSetup-*.exe
sum_file VSCodiumUserSetup-*.exe
sum_file VSCodium-win32-*.zip
else # linux
cp out/*.AppImage* .
cp vscode/.build/linux/deb/*/deb/*.deb .
cp vscode/.build/linux/rpm/*/*.rpm .
sum_file *.AppImage
sum_file VSCodium-linux*.tar.gz
sum_file *.deb
sum_file *.rpm
fi
fi

View File

@@ -1,10 +1,17 @@
# dc.services.visualstudio.com
# mobile.events.data.microsoft.com
# vortex.data.microsoft.com
TELEMETRY_URLS="(dc\.services\.visualstudio\.com)|(vortex\.data\.microsoft\.com)"
REPLACEMENT="s/$TELEMETRY_URLS/0\.0\.0\.0/g"
TELEMETRY_URLS="[^/]+\.data\.microsoft\.com"
REPLACEMENT="s/${TELEMETRY_URLS}/0\.0\.0\.0/g"
if [[ "$OS_NAME" == "osx" ]]; then
grep -rl --exclude-dir=.git -E $TELEMETRY_URLS . | xargs sed -i '' -E $REPLACEMENT
#include common functions
. ../utils.sh
if [[ "${OS_NAME}" == "osx" ]]; then
if is_gnu_sed; then
grep -rl --exclude-dir=.git -E "${TELEMETRY_URLS}" . | xargs sed -i -E "${REPLACEMENT}"
else
grep -rl --exclude-dir=.git -E "${TELEMETRY_URLS}" . | xargs sed -i '' -E "${REPLACEMENT}"
fi
else
grep -rl --exclude-dir=.git -E $TELEMETRY_URLS . | xargs sed -i -E $REPLACEMENT
grep -rl --exclude-dir=.git -E "${TELEMETRY_URLS}" . | xargs sed -i -E "${REPLACEMENT}"
fi

View File

@@ -1,49 +1,49 @@
DEFAULT_TRUE="'default': true"
DEFAULT_FALSE="'default': false"
TELEMETRY_ENABLE="'telemetry.enableTelemetry':"
DEFAULT_ON="'default': TelemetryConfiguration.ON"
DEFAULT_OFF="'default': TelemetryConfiguration.OFF"
TELEMETRY_CRASH_REPORTER="'telemetry.enableCrashReporter':"
TELEMETRY_CONFIGURATION=" TelemetryConfiguration.ON"
replace () {
echo $1
if [[ "$OS_NAME" == "osx" ]]; then
sed -i '' -E "$1" $2
else
sed -i -E "$1" $2
fi
}
#include common functions
. ../utils.sh
update_setting () {
local FILENAME="$2"
local FILENAME="${2}"
# check that the file exists
if [ ! -f $FILENAME ]; then
if [ ! -f "${FILENAME}" ]; then
echo "File to update setting in does not exist ${FILENAME}"
return
fi
# go through lines of file, looking for block that contains setting
local SETTING="$1"
local SETTING="${1}"
local LINE_NUM=0
while read -r line; do
local LINE_NUM=$(( $LINE_NUM + 1 ))
if [[ $line == *"$SETTING"* ]]; then
if [[ "${line}" == *"${SETTING}"* ]]; then
local IN_SETTING=1
fi
if [[ $line == *"$DEFAULT_TRUE"* && "$IN_SETTING" == "1" ]]; then
if [[ ("${line}" == *"${DEFAULT_TRUE}"* || "${line}" == *"${DEFAULT_ON}"*) && "${IN_SETTING}" == "1" ]]; then
local FOUND=1
break
fi
done < $FILENAME
done < "${FILENAME}"
if [[ "$FOUND" != "1" ]]; then
echo "$DEFAULT_TRUE not found for setting $SETTING in file $FILENAME"
if [[ "${FOUND}" != "1" ]]; then
echo "${DEFAULT_TRUE} not found for setting ${SETTING} in file ${FILENAME}"
return
fi
# construct line-aware replacement string
local DEFAULT_TRUE_TO_FALSE="${LINE_NUM}s/${DEFAULT_TRUE}/${DEFAULT_FALSE}/"
if [[ "${line}" == *"${DEFAULT_TRUE}"* ]]; then
local DEFAULT_TRUE_TO_FALSE="${LINE_NUM}s/${DEFAULT_TRUE}/${DEFAULT_FALSE}/"
else
local DEFAULT_TRUE_TO_FALSE="${LINE_NUM}s/${DEFAULT_ON}/${DEFAULT_OFF}/"
fi
replace "$DEFAULT_TRUE_TO_FALSE" $FILENAME
replace "${DEFAULT_TRUE_TO_FALSE}" "${FILENAME}"
}
update_setting "$TELEMETRY_ENABLE" src/vs/platform/telemetry/common/telemetryService.ts
update_setting "$TELEMETRY_CRASH_REPORTER" src/vs/workbench/electron-sandbox/desktop.contribution.ts
update_setting "${TELEMETRY_CRASH_REPORTER}" src/vs/workbench/electron-sandbox/desktop.contribution.ts
update_setting "${TELEMETRY_CONFIGURATION}" src/vs/platform/telemetry/common/telemetryService.ts

View File

@@ -1,10 +1,17 @@
#!/bin/bash
if [[ "$SHOULD_BUILD" != "yes" ]]; then
set -e
if [[ "${SHOULD_BUILD}" != "yes" ]]; then
echo "Will not update version JSON because we did not build"
exit
fi
if [[ -z "${GITHUB_TOKEN}" ]]; then
echo "Will not update version JSON because no GITHUB_TOKEN defined"
exit
fi
# {
# "url": "https://az764295.vo.msecnd.net/stable/51b0b28134d51361cf996d2f0a1c698247aeabd8/VSCode-darwin-stable.zip",
# "name": "1.33.1",
@@ -16,45 +23,48 @@ fi
# }
# `url` is URL_BASE + filename of asset e.g.
# darwin: https://github.com/VSCodium/vscodium/releases/download/${LATEST_MS_TAG}/VSCodium-darwin-${LATEST_MS_TAG}.zip
# `name` is $LATEST_MS_TAG
# `version` is $LATEST_MS_COMMIT
# `productVersion` is $LATEST_MS_TAG
# darwin: https://github.com/VSCodium/vscodium/releases/download/${MS_TAG}/VSCodium-darwin-${MS_TAG}.zip
# `name` is $MS_TAG
# `version` is $MS_COMMIT
# `productVersion` is $MS_TAG
# `hash` in <filename>.sha1
# `timestamp` is $(node -e 'console.log(Date.now())')
# `sha256hash` in <filename>.sha256
URL_BASE=https://github.com/VSCodium/vscodium/releases/download/${LATEST_MS_TAG}
URL_BASE="https://github.com/VSCodium/vscodium/releases/download/${MS_TAG}"
# to make testing on forks easier
VERSIONS_REPO="${GITHUB_USERNAME}/versions"
echo "Versions repo:" $VERSIONS_REPO
echo "Versions repo: ${VERSIONS_REPO}"
# generateJson <assetName>
# e.g. generateJson VSCodium-darwin-1.33.0.zip
generateJson() {
local assetName=$1
JSON_DATA="{}"
# generate parts
local url=${URL_BASE}/${assetName}
local name=$LATEST_MS_TAG
local version=$LATEST_MS_COMMIT
local productVersion=$LATEST_MS_TAG
local url="${URL_BASE}/${ASSET_NAME}"
local name="${MS_TAG}"
local version="${MS_COMMIT}"
local productVersion="${MS_TAG}"
local timestamp=$(node -e 'console.log(Date.now())')
local sha1hash=$(cat ${assetName}.sha1 | awk '{ print $1 }')
local sha256hash=$(cat ${assetName}.sha256 | awk '{ print $1 }')
if [[ ! -f "artifacts/${ASSET_NAME}" ]]; then
echo "Downloading artifact '${ASSET_NAME}'"
gh release download "${MS_TAG}" --dir "artifacts" --pattern "${ASSET_NAME}*"
fi
local sha1hash=$(cat "artifacts/${ASSET_NAME}.sha1" | awk '{ print $1 }')
local sha256hash=$(cat "artifacts/${ASSET_NAME}.sha256" | awk '{ print $1 }')
# check that nothing is blank (blank indicates something awry with build)
for key in url name version productVersion sha1hash timestamp sha256hash; do
if [[ "${!key}" == "" ]]; then
echo "Missing data for version update; exiting..."
if [[ -z "${key}" ]]; then
echo "Variable '${key}' is empty; exiting..."
exit 1
fi
done
# generate json
local json=$(jq \
JSON_DATA=$(jq \
--arg url "${url}" \
--arg name "${name}" \
--arg version "${version}" \
@@ -64,76 +74,86 @@ generateJson() {
--arg sha256hash "${sha256hash}" \
'. | .url=$url | .name=$name | .version=$version | .productVersion=$productVersion | .hash=$hash | .timestamp=$timestamp | .sha256hash=$sha256hash' \
<<<'{}')
echo "$json"
}
updateLatestVersion() {
echo "Generating ${VERSION_PATH}/latest.json"
generateJson
cd versions
local versionPath=$1
local json=$2
# create/update the latest.json file in the correct location
mkdir -p $versionPath
echo $json > $versionPath/latest.json
mkdir -p "${VERSION_PATH}"
echo "${JSON_DATA}" > "${VERSION_PATH}/latest.json"
cd ..
}
# init versions repo for later commiting + pushing the json file to it
# thank you https://www.vinaygopinath.me/blog/tech/commit-to-master-branch-on-github-using-travis-ci/
git clone https://github.com/${VERSIONS_REPO}.git
git clone "https://github.com/${VERSIONS_REPO}.git"
cd versions
git config user.email "vscodium-ci@not-real.com"
git config user.name "VSCodium CI"
git remote rm origin
git remote add origin https://${GITHUB_USERNAME}:${GITHUB_TOKEN}@github.com/${VERSIONS_REPO}.git > /dev/null 2>&1
git remote add origin "https://${GITHUB_USERNAME}:${GITHUB_TOKEN}@github.com/${VERSIONS_REPO}.git" > /dev/null 2>&1
cd ..
if [[ "$OS_NAME" == "osx" ]]; then
# zip, sha1, and sha256 files are all at top level dir
ASSET_NAME=VSCodium-darwin-${VSCODE_ARCH}-${LATEST_MS_TAG}.zip
if [[ "${OS_NAME}" == "osx" ]]; then
ASSET_NAME=VSCodium-darwin-${VSCODE_ARCH}-${MS_TAG}.zip
VERSION_PATH="darwin/${VSCODE_ARCH}"
JSON="$(generateJson ${ASSET_NAME})"
updateLatestVersion "$VERSION_PATH" "$JSON"
elif [[ "$OS_NAME" == "windows" ]]; then
updateLatestVersion
elif [[ "${OS_NAME}" == "windows" ]]; then
# system installer
ASSET_NAME=VSCodiumSetup-${VSCODE_ARCH}-${LATEST_MS_TAG}.exe
ASSET_NAME=VSCodiumSetup-${VSCODE_ARCH}-${MS_TAG}.exe
VERSION_PATH="win32/${VSCODE_ARCH}/system"
JSON="$(generateJson ${ASSET_NAME})"
updateLatestVersion "$VERSION_PATH" "$JSON"
updateLatestVersion
# user installer
ASSET_NAME=VSCodiumUserSetup-${VSCODE_ARCH}-${LATEST_MS_TAG}.exe
ASSET_NAME=VSCodiumUserSetup-${VSCODE_ARCH}-${MS_TAG}.exe
VERSION_PATH="win32/${VSCODE_ARCH}/user"
JSON="$(generateJson ${ASSET_NAME})"
updateLatestVersion "$VERSION_PATH" "$JSON"
updateLatestVersion
# windows archive
ASSET_NAME=VSCodium-win32-${VSCODE_ARCH}-${LATEST_MS_TAG}.zip
ASSET_NAME=VSCodium-win32-${VSCODE_ARCH}-${MS_TAG}.zip
VERSION_PATH="win32/${VSCODE_ARCH}/archive"
JSON="$(generateJson ${ASSET_NAME})"
updateLatestVersion "$VERSION_PATH" "$JSON"
updateLatestVersion
if [[ "${VSCODE_ARCH}" == "ia32" || "${VSCODE_ARCH}" == "x64" ]]; then
# msi
ASSET_NAME=VSCodium-${VSCODE_ARCH}-${MS_TAG}.msi
VERSION_PATH="win32/${VSCODE_ARCH}/msi"
updateLatestVersion
# updates-disabled msi
ASSET_NAME=VSCodium-${VSCODE_ARCH}-updates-disabled-${MS_TAG}.msi
VERSION_PATH="win32/${VSCODE_ARCH}/msi-updates-disabled"
updateLatestVersion
fi
else # linux
# update service links to tar.gz file
# see https://update.code.visualstudio.com/api/update/linux-x64/stable/VERSION
# as examples
ASSET_NAME=VSCodium-linux-${VSCODE_ARCH}-${LATEST_MS_TAG}.tar.gz
ASSET_NAME=VSCodium-linux-${VSCODE_ARCH}-${MS_TAG}.tar.gz
VERSION_PATH="linux/${VSCODE_ARCH}"
JSON="$(generateJson ${ASSET_NAME})"
updateLatestVersion "$VERSION_PATH" "$JSON"
updateLatestVersion
fi
cd versions
git pull origin master # in case another build just pushed
git add .
dateAndMonth=`date "+%D %T"`
git commit -m "CI update: $dateAndMonth (Build $GITHUB_RUN_NUMBER)"
if ! git push origin master --quiet; then
git pull origin master
git push origin master --quiet
CHANGES=$( git status --porcelain )
if [[ ! -z "${CHANGES}" ]]; then
dateAndMonth=$( date "+%D %T" )
git commit -m "CI update: ${dateAndMonth} (Build ${GITHUB_RUN_NUMBER})"
if ! git push origin master --quiet; then
git pull origin master
git push origin master --quiet
fi
fi
cd ..

16
utils.sh Executable file
View File

@@ -0,0 +1,16 @@
#!/bin/bash
#All common functions can be added to this file
is_gnu_sed () {
sed --version >/dev/null 2>&1
}
replace () {
echo "${1}"
if is_gnu_sed; then
sed -i -E "${1}" "${2}"
else
sed -i '' -E "${1}" "${2}"
fi
}