Skip to content

Commit efaacc3

Browse files
committed
Add CI + test
1 parent 115fa1d commit efaacc3

File tree

5 files changed

+96
-16
lines changed

5 files changed

+96
-16
lines changed

.github/workflows/ci.yml

+56
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
name: CI
2+
3+
on:
4+
push:
5+
branches: [master]
6+
# See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#filter-pattern-cheat-sheet
7+
tags:
8+
- "v[0-9]+.[0-9]+.[0-9]+"
9+
- "v[0-9]+.[0-9]+.[0-9]+-*"
10+
11+
pull_request:
12+
branches: [master]
13+
14+
concurrency:
15+
group: ci-${{ github.ref }}-1
16+
# Cancel previous builds for pull requests only.
17+
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
18+
19+
jobs:
20+
build:
21+
strategy:
22+
fail-fast: false
23+
matrix:
24+
os: [
25+
macos-13, # x64
26+
macos-14, # ARM
27+
ubuntu-latest, # x64
28+
buildjet-2vcpu-ubuntu-2204-arm, # ARM
29+
windows-latest,
30+
]
31+
32+
runs-on: ${{matrix.os}}
33+
34+
steps:
35+
- name: Checkout
36+
uses: actions/checkout@v4
37+
38+
- name: Use Node.js
39+
uses: actions/setup-node@v4
40+
with:
41+
node-version: 18
42+
43+
- name: NPM install
44+
run: npm ci
45+
46+
- name: Build
47+
run: npx rescript
48+
49+
- name: Test
50+
env:
51+
CI: 1
52+
shell: bash
53+
run: |
54+
npm pack
55+
npm i -g ./create-rescript-app-*.tgz
56+
npx create-rescript-app

src/CI.res

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
@val @scope("process.env") external ci: string = "CI"
2+
3+
let isRunningInCI = switch ci {
4+
| "1" | "true" | "TRUE" => true
5+
| _ => false
6+
}

src/CI.resi

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
let isRunningInCI: bool

src/Main.res

+5-1
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,11 @@ https://rescript-lang.org`,
3535
let rescriptJsonPath = Path.join2(Process.cwd(), "rescript.json")
3636
let bsconfigJsonPath = Path.join2(Process.cwd(), "bsconfig.json")
3737

38-
if Fs.existsSync(rescriptJsonPath) || Fs.existsSync(bsconfigJsonPath) {
38+
if CI.isRunningInCI {
39+
P.note(~title="CI Mode", ~message="Running in CI, will create a test project")
40+
await NewProject.createNewProject()
41+
P.outro("CI test completed successfully.")
42+
} else if Fs.existsSync(rescriptJsonPath) || Fs.existsSync(bsconfigJsonPath) {
3943
ExistingRescriptProject.showUpgradeHint()
4044
P.outro("No changes were made to your project.")
4145
} else if Fs.existsSync(packageJsonPath) {

src/NewProject.res

+28-15
Original file line numberDiff line numberDiff line change
@@ -51,21 +51,7 @@ let getTemplateOptions = () =>
5151
hint: shortDescription,
5252
})
5353

54-
let createNewProject = async () => {
55-
P.note(~title="New Project", ~message=newProjectMessage)
56-
57-
let projectName = await P.text({
58-
message: "What is the name of your new ReScript project?",
59-
placeholder: "my-rescript-app",
60-
initialValue: ?Process.argv[2],
61-
validate: validateProjectName,
62-
})->P.resultOrRaise
63-
64-
let templateName =
65-
await P.select({message: "Select a template", options: getTemplateOptions()})->P.resultOrRaise
66-
67-
let versions = await RescriptVersions.promptVersions()
68-
54+
let createProject = async (~templateName, ~projectName, ~versions) => {
6955
let templatePath = CraPaths.getTemplatePath(~templateName)
7056
let projectPath = Path.join2(Process.cwd(), projectName)
7157

@@ -85,3 +71,30 @@ let createNewProject = async () => {
8571

8672
s->P.Spinner.stop("Project created.")
8773
}
74+
75+
let createNewProject = async () => {
76+
P.note(~title="New Project", ~message=newProjectMessage)
77+
78+
if CI.isRunningInCI {
79+
// type versions = {rescriptVersion: string, rescriptCoreVersion: string}
80+
await createProject(
81+
~templateName="rescript-template-basic",
82+
~projectName="test",
83+
~versions={rescriptVersion: "11.1.1", rescriptCoreVersion: "1.5.0"},
84+
)
85+
} else {
86+
let projectName = await P.text({
87+
message: "What is the name of your new ReScript project?",
88+
placeholder: "my-rescript-app",
89+
initialValue: ?Process.argv[2],
90+
validate: validateProjectName,
91+
})->P.resultOrRaise
92+
93+
let templateName =
94+
await P.select({message: "Select a template", options: getTemplateOptions()})->P.resultOrRaise
95+
96+
let versions = await RescriptVersions.promptVersions()
97+
98+
await createProject(~templateName, ~projectName, ~versions)
99+
}
100+
}

0 commit comments

Comments
 (0)