Skip to content

Commit 4590c3a

Browse files
authored
Merge pull request #1607 from cdr/ci
Switch to GH Actions
2 parents c63f1ea + e9fe4c0 commit 4590c3a

22 files changed

+310
-308
lines changed

.dockerignore

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
**
2-
!release-github
2+
!release-packages
33
!ci

.github/workflows/ci.yaml

+89
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
name: ci
2+
3+
on: [push, pull_request]
4+
5+
jobs:
6+
test:
7+
runs-on: ubuntu-latest
8+
steps:
9+
- uses: actions/checkout@v1
10+
- name: Run ./ci/steps/test.sh
11+
uses: ./ci/container
12+
with:
13+
args: ./ci/steps/test.sh
14+
15+
release:
16+
runs-on: ubuntu-latest
17+
steps:
18+
- uses: actions/checkout@v1
19+
- name: Run ./ci/steps/release.sh
20+
uses: ./ci/container
21+
with:
22+
args: ./ci/steps/release.sh
23+
- name: Upload npm package artifact
24+
uses: actions/upload-artifact@v2
25+
with:
26+
name: npm-package
27+
path: ./release
28+
29+
linux-amd64:
30+
needs: release
31+
runs-on: ubuntu-latest
32+
steps:
33+
- uses: actions/checkout@v1
34+
- name: Download npm package
35+
uses: actions/download-artifact@v2
36+
with:
37+
name: npm-package
38+
path: ./release
39+
- name: Run ./ci/steps/release-static.sh
40+
uses: ./ci/container
41+
with:
42+
args: ./ci/steps/release-static.sh
43+
- name: Upload release artifacts
44+
uses: actions/upload-artifact@v2
45+
with:
46+
name: release-packages
47+
path: ./release-packages
48+
49+
linux-arm64:
50+
needs: release
51+
runs-on: ubuntu-arm64-latest
52+
steps:
53+
- uses: actions/checkout@v1
54+
- name: Download npm package
55+
uses: actions/download-artifact@v2
56+
with:
57+
name: npm-package
58+
path: ./release
59+
- name: Run ./ci/steps/release-static.sh
60+
uses: ./ci/container
61+
with:
62+
args: ./ci/steps/release-static.sh
63+
- name: Upload release artifacts
64+
uses: actions/upload-artifact@v2
65+
with:
66+
name: release-packages
67+
path: ./release-packages
68+
69+
macos-amd64:
70+
needs: release
71+
runs-on: macos-latest
72+
steps:
73+
- uses: actions/checkout@v1
74+
- name: Download npm package
75+
uses: actions/download-artifact@v2
76+
with:
77+
name: npm-package
78+
path: ./release
79+
- run: brew unlink node@12
80+
- run: brew install node
81+
- run: ./ci/steps/release-static.sh
82+
env:
83+
# Otherwise we get rate limited when fetching the ripgrep binary.
84+
GITHUB_TOKEN: ${{ secrets.github_token }}
85+
- name: Upload release artifacts
86+
uses: actions/upload-artifact@v2
87+
with:
88+
name: release-packages
89+
path: ./release-packages

.gitignore

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,6 @@ dist*
44
out*
55
release/
66
release-static/
7-
release-github/
7+
release-packages/
88
release-gcp/
99
node_modules

.travis.yml

-80
This file was deleted.

ci/README.md

+30-15
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,20 @@ Many of these scripts contain more detailed documentation and options in comment
66

77
Any file and directory added into this tree should be documented here.
88

9+
## Publishing a release
10+
11+
1. Change the version of code-server in `package.json` and push this commit.
12+
1. CI will run and generate an NPM package and release packages that you can download
13+
as artifacts on Github Actions.
14+
1. Create a new draft release with the built release packages.
15+
1. Run some basic sanity tests on one of the released packages.
16+
1. Publish.
17+
1. Download the built npm package and publish it.
18+
1. Place the debian releases into `./release-packages` and then push the docker
19+
image with `./ci/release-container/push.sh`.
20+
1. This will need to be ran on an ARM64 instance as well.
21+
1. At some point we need to automate this.
22+
923
## dev
1024

1125
This directory contains scripts used for the development of code-server.
@@ -32,27 +46,30 @@ This directory contains scripts used for the development of code-server.
3246
## build
3347

3448
This directory contains the scripts used to build code-server.
49+
You can disable minification by setting `MINIFY=`.
3550

51+
- [./lib.sh](./lib.sh)
52+
- Contains code duplicated across these scripts.
3653
- [./build/build-code-server.sh](./build/build-code-server.sh) (`yarn build`)
3754
- Builds code-server into ./out and bundles the frontend into ./dist.
3855
- [./build/build-vscode.sh](./build/build-vscode.sh) (`yarn build:vscode`)
3956
- Builds vscode into ./lib/vscode/out-vscode.
4057
- [./build/build-release.sh](./build/build-release.sh) (`yarn release`)
41-
- Bundles the output of the above two scripts into a single node module at ./release.
42-
- Will build a static release with node/node_modules into `./release-static`
43-
if `STATIC=1` is set.
58+
- Bundles the output of the above two scripts into a single node module at `./release`.
59+
- [./build/build-static-release.sh](./build/build-static-release.sh) (`yarn release:static`)
60+
- Requires a release already built in `./release`.
61+
- Will build a static release with node and node_modules into `./release-static`
4462
- [./build/clean.sh](./build/clean.sh) (`yarn clean`)
4563
- Removes all git ignored files like build artifacts.
4664
- Will also `git reset --hard lib/vscode`
4765
- Useful to do a clean build.
4866
- [./build/code-server.sh](./build/code-server.sh)
4967
- Copied into static releases to run code-server with the bundled node binary.
50-
- [./build/archive-static-release.sh](./build/archive-static-release.sh)
51-
- Archives `./release-static` into a tar/zip for CI with the proper directory name scheme
5268
- [./build/test-release.sh](./build/test-static-release.sh)
5369
- Ensures code-server in the `./release-static` directory runs
54-
- [./build/build-static-pkgs.sh](./build/build-static-pkgs.sh) (`yarn pkg`)
55-
- Uses [nfpm](https://github.com/goreleaser/nfpm) to generate .deb and .rpm from a static release
70+
- [./build/build-packages.sh](./build/build-static-pkgs.sh) (`yarn package`)
71+
- Packages `./release-static` into an archive in `./release-packages`
72+
- If on linux, [nfpm](https://github.com/goreleaser/nfpm) is used to generate .deb and .rpm
5673
- [./build/nfpm.yaml](./build/nfpm.yaml)
5774
- Used to configure [nfpm](https://github.com/goreleaser/nfpm) to generate .deb and .rpm
5875
- [./build/code-server-nfpm.sh](./build/code-server-nfpm.sh)
@@ -68,15 +85,13 @@ This directory contains the container for CI.
6885

6986
## steps
7087

71-
This directory contains a few scripts used in CI. Just helps avoid clobbering .travis.yml.
88+
This directory contains a few scripts used in CI.
89+
Just helps avoid clobbering .travis.yml.
7290

7391
- [./steps/test.sh](./steps/test.sh)
7492
- Runs `yarn ci` after ensuring VS Code is patched
93+
- [./steps/release.sh](./steps/release.sh)
94+
- Runs the full release process
95+
- Generates the npm package at `./release`
7596
- [./steps/static-release.sh](./steps/static-release.sh)
76-
- Runs the full static build process for CI
77-
- [./steps/linux-release.sh](./steps/linux-release.sh)
78-
- Runs the full static build process for CI
79-
- Packages the release into a .deb and .rpm
80-
- Builds and pushes a docker release
81-
- [./steps/publish-npm.sh](./steps/publish-npm.sh)
82-
- Authenticates yarn and publishes the built package from `./release`
97+
- Takes the output of the previous script and generates a static release and packages

ci/build/archive-static-release.sh

-41
This file was deleted.

ci/build/build-packages.sh

+59
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
#!/usr/bin/env bash
2+
set -euo pipefail
3+
4+
# Packages code-server for the current OS and architecture into ./release-packages.
5+
# This script assumes that a static release is built already into ./release-static.
6+
7+
main() {
8+
cd "$(dirname "${0}")/../.."
9+
source ./ci/lib.sh
10+
11+
export VERSION
12+
VERSION="$(pkg_json_version)"
13+
14+
local OS
15+
OS="$(os)"
16+
17+
export ARCH
18+
ARCH="$(arch)"
19+
20+
local archive_name="code-server-$VERSION-$OS-$ARCH"
21+
mkdir -p release-packages
22+
23+
local ext
24+
if [[ $OS == "linux" ]]; then
25+
ext=".tar.gz"
26+
tar -czf "release-packages/$archive_name$ext" --transform "s/^\.\/release-static/$archive_name/" ./release-static
27+
else
28+
mv ./release-static "./$archive_name"
29+
ext=".zip"
30+
zip -r "release-packages/$archive_name$ext" "./$archive_name"
31+
mv "./$archive_name" ./release-static
32+
fi
33+
34+
echo "done (release-packages/$archive_name)"
35+
36+
release_gcp
37+
38+
if [[ $OSTYPE == linux* ]]; then
39+
release_nfpm
40+
fi
41+
}
42+
43+
release_gcp() {
44+
mkdir -p "release-gcp/$VERSION"
45+
cp "release-packages/$archive_name$ext" "./release-gcp/$VERSION/$OS-$ARCH$ext"
46+
mkdir -p "release-gcp/latest"
47+
cp "./release-packages/$archive_name$ext" "./release-gcp/latest/$OS-$ARCH$ext"
48+
}
49+
50+
# Generates deb and rpm packages.
51+
release_nfpm() {
52+
local nfpm_config
53+
nfpm_config=$(envsubst < ./ci/build/nfpm.yaml)
54+
55+
nfpm pkg -f <(echo "$nfpm_config") --target release-packages/code-server-"$VERSION-$ARCH.deb"
56+
nfpm pkg -f <(echo "$nfpm_config") --target release-packages/code-server-"$VERSION-$ARCH.rpm"
57+
}
58+
59+
main "$@"

0 commit comments

Comments
 (0)