Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
96 commits
Select commit Hold shift + click to select a range
ae719fd
switching to lincd 1.0
Mar 11, 2024
eefb122
turned metadata off and switched to lincd 1.0
Apr 3, 2024
c905b78
fix env variables
Apr 5, 2024
2e9e3c1
rename variable
Apr 15, 2024
3490681
Merge branch 'main' into next
Apr 15, 2024
8d61d2b
Towards ESM support across all Lincd packages
Apr 17, 2024
e84ac7b
remake of `lincd build` command, without grunt!
Apr 22, 2024
a4c1eed
added custom css loader for node.js, currently needs to be used like …
May 11, 2024
b62709c
only 1 place now where CSS scoped names are generated.
May 12, 2024
bc4fa15
changes to lincd-cli on MYND
May 23, 2024
128dfe4
Merge branch 'next' of github.com:Semantu/lincd-cli into next
May 23, 2024
669b7ab
ignoring order - which should be safe for our use case (fixing strang…
May 27, 2024
9957747
fix some commands by applying dirname fix everywhere
May 29, 2024
907a3b2
published 1.1.3 and fixed dependency
May 29, 2024
58c0cf5
ignore lincd-server so that it can be built without lincd.org depende…
olfiarach May 31, 2024
6b27829
better build errors
olfiarach May 31, 2024
beabed4
small fixes in build time
Nov 11, 2024
b67a945
1.1.5 & Merge branches
Nov 11, 2024
5440def
skip upload to storage when S3_BUCKET_ENDPOINT is not set in environment
abdipramana Nov 14, 2024
26c9a00
Merge pull request #15 from Semantu/feature/ignore-upload-to-storage
linked-admin Nov 18, 2024
b806e73
fix require error for parsing scss during build process
Nov 18, 2024
ccbb10e
published as 1.2
Nov 19, 2024
d8f283c
upgraded typescript
Apr 25, 2025
304523f
first working tailwind config, inserting all lincd modules as tailwin…
May 6, 2025
c6429e2
published new version with updated defaults for LINCD 1.0
May 9, 2025
fddd0f9
updating default app config further for new setup
May 9, 2025
814f43c
only check source folder for imports
May 14, 2025
5e5c4fe
upgrade default lincd-cli requirement
May 21, 2025
f122af7
added "call" method, which allows to either create a stand alone serv…
May 30, 2025
6bf790d
check imports first
Jun 3, 2025
c28007c
need cssnano in prod?
Jun 30, 2025
1317479
Merge branch 'next' of github.com:Semantu/lincd-cli into next
Jun 30, 2025
313bf72
remaking backend build process now that we dont use babel anymore we …
Jul 1, 2025
8421ff7
App with capital
Jul 1, 2025
ac9c3a8
turning css nano off for now
Jul 2, 2025
ac7a02b
ah, css classnames were actually minified in our own css modules conf…
Jul 2, 2025
e8fe077
fixes to build processes
Jul 2, 2025
858e2d4
stop building jsonld the old way
Jul 6, 2025
1356a36
finish prev work & fix build err
Jul 8, 2025
f061f10
fix bug that excluded 1 package from startup process
Aug 17, 2025
f907bce
parse the request json data before passing it to app context
Aug 18, 2025
ab6e5a5
adjusting defaults for lincd package and new shape classes, upgrading…
Sep 10, 2025
7024967
attempt to fix build errors and run install as one command
Sep 11, 2025
f2ce3e6
attempt at fixing install - published lincd-cli and semantu-cli
Sep 11, 2025
f521a23
fixing a startup error
Sep 16, 2025
5e36da1
allow importing .js
Sep 26, 2025
d63d45b
some fixes for VS code output
Oct 1, 2025
eaaaa0d
optimisation for build-all, it only builds packages relevant to the app
Oct 8, 2025
4a0acae
upgrades to build-updated and build-workspace
Oct 8, 2025
023ec76
published 1.2.3
Oct 16, 2025
52f1f0c
removing SCSS/LESS support
Oct 16, 2025
95a1a45
Merge branch 'next' of github.com:Semantu/lincd-cli into next
Oct 16, 2025
13c0bf9
updating package build
Oct 16, 2025
9dadb21
support for type inference for config files. lincd.config.js now need…
Oct 16, 2025
a777868
Refactor server initialization to set default loadAppComponent in lin…
Oct 16, 2025
0976f12
Add custom preflight CSS and update build scripts in package.json
Oct 17, 2025
7b520ea
Add webpack-manifest-plugin to package.json and update server configu…
Oct 18, 2025
fdf7e2e
this new setup ensures that all ccs for a specific chunk (like a lazy…
Oct 18, 2025
aa1a452
Update default CSS mode to 'tailwind' in webpack configuration and ad…
Oct 20, 2025
49bc9b2
Add extension aliasing in webpack configuration to support TypeScript…
abdipramana Oct 28, 2025
19e0e9c
Add CSS-only loader registration to support TypeScript and CSS integr…
abdipramana Oct 28, 2025
c0dd093
Refactor public path handling in webpack configuration to support Cap…
abdipramana Nov 4, 2025
89c45e3
this came up in a review, not suire if its really needed and if its r…
Nov 6, 2025
7c13860
Merge branch 'next' of github.com:Semantu/lincd-cli into next
Nov 6, 2025
700e10b
enhance CSS asset URL handling in webpack configuration to support bo…
abdipramana Nov 12, 2025
95e63c4
fixing process that runs forever
Nov 25, 2025
40f4829
required changes as found when creating a new lincd app
Nov 26, 2025
fc90581
improved create-app command, which now asks for info interactively.
Dec 1, 2025
f3ec03c
published 1.2.8
Dec 2, 2025
d910a97
changes to build-updated and build package so that filewatcher plugin…
Dec 24, 2025
a44e437
published 1.2.9
Dec 28, 2025
ec8c1e6
fix for issue with paths
Dec 29, 2025
bb4644d
using console.error so that filewatcher processes in VS code detect e…
Jan 4, 2026
779c408
allow commend line variables to override the .env file values
Feb 24, 2026
e0c8237
enhance create-app command to accept options for app configuration
carlenmy Mar 9, 2026
b837c62
migrate LinkedFileStorage import to @_linked/core
Mar 25, 2026
b72ae16
remove lincd, lincd-jsonld, lincd-modules deps from package.json
Mar 26, 2026
62a6a98
upgrading to @_linked
Apr 7, 2026
0a79972
Merge remote-tracking branch 'origin/feature/cn-project' into next
Apr 16, 2026
33e2b3a
rename package to @_linked/cli, add lincd deprecation shim
Apr 22, 2026
15895db
modernize package template, accept linkedPackage/linkedApp flags
Apr 22, 2026
b620a5d
add build-workspace, build-package, yarn commands
Apr 22, 2026
41a6dad
update app template: add mrgit-template.json, yarn setup script, link…
Apr 22, 2026
d9522d0
add linkedPackage flag to cli; build-package uses yarn exec linked build
Apr 22, 2026
d710773
add CHANGELOG.md for 1.2.11; add mrgit devDep + two-step yarn setup
Apr 22, 2026
8a2222e
safeYarn: add LINKED_YARN_DRY_RUN env for testing arg forwarding
Apr 22, 2026
eaa6e86
add publishConfig: {access: public} for @_linked scoped publish
Apr 22, 2026
df8f7fe
package template: use 'yarn linked build' pattern matching foundation…
Apr 22, 2026
75cdc76
runOnPackagesGroupedByDependencies: tolerate packages without 'depend…
Apr 22, 2026
6c6e469
build-workspace: invoke each package's own 'yarn build' script
Apr 22, 2026
59326c5
add 'linked setup-publish' command
Apr 22, 2026
ba207d8
set up single-branch publish workflow (via 'linked setup-publish')
Apr 22, 2026
00ac452
setup-publish: add --dual-branch mode + fixes
Apr 22, 2026
3c81281
add changeset for Phase 0.3 minor bump
Apr 23, 2026
36a1b61
Merge origin/main into next (resolve conflicts: keep next's @_linked/…
Apr 23, 2026
bbeedf2
stop gitignoring src/**/*.d.ts and src/**/*.js — hand-written files a…
Apr 23, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 20 additions & 0 deletions .changeset/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
# Changesets

This package uses [changesets](https://github.com/changesets/changesets) for version management and publishing.

## Adding a changeset

When making a change that should trigger a new release, run:

```bash
npx changeset
```

This generates a markdown file in `.changeset/` describing the change. Commit it with your PR.

On merge to `main`, the publish workflow either:

1. Creates (or updates) a **Release PR** that bumps the version + updates `CHANGELOG.md`, or
2. If the Release PR is already merged, publishes the new version to npm.

Changes that don't need a release (docs, CI config, tooling) can skip the changeset — the check is a warning, not a block.
14 changes: 14 additions & 0 deletions .changeset/config.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
{
"$schema": "https://unpkg.com/@changesets/config@3.1.1/schema.json",
"changelog": [
"@changesets/changelog-github",
{ "repo": "linked-cm/cli" }
],
"commit": false,
"fixed": [],
"linked": [],
"access": "public",
"baseBranch": "main",
"updateInternalDependencies": "patch",
"ignore": []
}
17 changes: 17 additions & 0 deletions .changeset/phase-0-3-rename-and-publish-workflow.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
---
'@_linked/cli': minor
---

Phase 0.3 accumulated changes:

- **New `linked setup-publish` command**: scaffolds a changesets-based publish workflow in any package repo. Supports single-branch (default) and `--dual-branch` (main + dev with `@next` prereleases). Patches package.json (publishConfig + changesets devDeps), generates package-lock.json in an isolated tmpdir, writes `.github/workflows/{ci,publish,changeset-check}.yml`, and optionally configures GitHub branch protection via `--configure-github` (uses `gh` CLI).
- **`linked build-workspace` now invokes each package's own `yarn build` script** instead of the internal buildPackage pipeline. Lets @_linked/core use pure tsc, pure-CSS packages use no-ops, and lincd-style packages use `yarn linked build`.
- **`linked yarn` (safeYarn) gains `LINKED_YARN_DRY_RUN` env** for testing arg forwarding without executing.
- **Import checker is warn-only** (was fatal): emits yellow warnings listing missing `.js` extensions but doesn't abort the build.
- **compilePackageESM/CJS** skip gracefully when tsconfig-{esm,cjs}.json is absent (pure-CSS packages).
- **Dual-package step** uses `npx tsconfig-to-dual-package` so the binary resolves from nearest node_modules.
- **runOnPackagesGroupedByDependencies**: tolerate packages without `dependencies` field.
- **Package template modernized**: uses `yarn linked build` pattern (matches foundational packages), Gruntfile removed.
- **App template**: adds `mrgit-template.json`, `yarn setup` script, `linkedApp: true` flag, `mrgit` devDep.
- **`linkedPackage: true` / `linkedApp: true`** flags added to cli-methods readers (alongside legacy `lincd` / `lincdApp` for transition period).
- **Bug fix**: lingering `lincd-server/*` imports in LincdServer.tsx migrated to `@_linked/server/*`.
44 changes: 44 additions & 0 deletions .github/workflows/changeset-check.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
name: Changeset Check

on:
pull_request:
branches:
- main

jobs:
changeset-check:
name: Check for changeset
# Skip the check on the automated Release PR.
if: ${{ github.head_ref != 'changeset-release/main' }}
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0

- name: Check for changeset files
uses: actions/github-script@v7
with:
script: |
const { data: files } = await github.rest.pulls.listFiles({
owner: context.repo.owner,
repo: context.repo.repo,
pull_number: context.issue.number,
});

const hasChangeset = files.some(f =>
f.filename.startsWith('.changeset/') &&
f.filename.endsWith('.md') &&
f.filename !== '.changeset/README.md'
);

if (!hasChangeset) {
await github.rest.issues.createComment({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: context.issue.number,
body: "No changeset found. If this PR should trigger a release, run `npx changeset` and commit the generated file.\n\nIf this change doesn't need a release (docs, CI config, etc.), you can ignore this message."
});
core.warning('No changeset file found in this PR.');
}
30 changes: 30 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
name: CI

on:
pull_request:
branches:
- main

jobs:
build-and-test:
name: Build & Test
# Skip CI on the automated Release PR created by changesets/action.
if: ${{ !(github.event.pull_request.base.ref == 'main' && github.head_ref == 'changeset-release/main') }}
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4

- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: 22.16.0

- name: Install dependencies
run: npm ci --legacy-peer-deps

- name: Build
run: npm run build

- name: Test
run: npm test --if-present
42 changes: 42 additions & 0 deletions .github/workflows/publish.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
name: Publish

on:
push:
branches:
- main

concurrency: ${{ github.workflow }}-${{ github.ref }}

jobs:
release:
name: Publish Release
runs-on: ubuntu-latest
permissions:
contents: write
pull-requests: write
steps:
- name: Checkout
uses: actions/checkout@v4

- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: 22.16.0
registry-url: 'https://registry.npmjs.org'

- name: Install dependencies
run: npm ci --legacy-peer-deps

- name: Build
run: npm run build

- name: Create release Pull Request or Publish
uses: changesets/action@v1
with:
publish: npx changeset publish
title: 'chore: release'
commit: 'chore: release'
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
NODE_AUTH_TOKEN: ${{ secrets.NPM_AUTH_TOKEN }}
NPM_TOKEN: ${{ secrets.NPM_AUTH_TOKEN }}
14 changes: 11 additions & 3 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,4 +1,12 @@
node_modules
node_modules/
lib/
yarn.lock
.yarnrc.yml
.idea
lib
.yarnrc.yml
*.log
.DS_Store

# tsc sourcemap output — always in lib/, never src/.
# (.d.ts not gitignored — hand-written type declarations like
# src/plugins/colors.d.ts are legit sources.)
src/**/*.js.map
34 changes: 34 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
# Changelog

All notable changes to `@_linked/cli` (formerly `lincd-cli`) are documented here.

This project follows [Keep a Changelog](https://keepachangelog.com/) and [Semantic Versioning](https://semver.org/).

## [1.2.11] - 2026-04-22

### Changed
- **Renamed package**: `lincd-cli` → `@_linked/cli`. Repo moved from `semantu/lincd-cli` → `linked-cm/cli`.
- **Primary binary** is now `linked` (with `lnk` as a short alias).
- **Flag in package.json** is now `linkedPackage: true` (packages) / `linkedApp: true` (apps). The legacy flags `lincd: true` / `lincdApp: true` are still read for a transition period.
- **Package template** (`defaults/package/`) no longer ships a `Gruntfile.js`. New packages use `rimraf + tsc + tsconfig-to-dual-package` for dual ESM/CJS output.
- **App template** (`defaults/app-with-backend/`) now includes `mrgit-template.json`, a `yarn setup` script, and `mrgit` as a devDep. Run `yarn setup` after `linked create-app` to optionally clone sibling `@_linked/*` repos for local development.

### Added
- `linked build-workspace` — builds all linked packages in the current workspace in dependency order. Supports `-u` (updated only) and `--use-git` (git-based change detection). Migrated from `@semantu/cli`.
- `linked build-package <filepath>` — given a file path, walks up to the nearest `package.json` and rebuilds that package. Designed for editor save hooks. Migrated from `@semantu/cli`.
- `linked yarn <args>` — safe-yarn wrapper that preserves nested repo yarn.lock files during root-level yarn commands (for mrgit workflows). Migrated from `@semantu/cli`.

### Deprecated
- The `lincd` binary is retained as a deprecated alias that prints a warning to stderr on invocation. It will be removed in a future major release; migrate scripts to `linked`.
- `generateGruntConfig` export has been removed; it had no active callers. If you still reference it, migrate your package build to `tsc + tsconfig-to-dual-package` (see the package template).

### Removed
- Grunt bin entry (`grunt`) removed from package.json bins.
- Internal `config-grunt.cts` and `getGruntConfig` helper removed.
- Grunt-related devDependencies (`grunt`, `grunt-cli`, `grunt-*`, `@lodder/grunt-postcss`, `load-grunt-tasks`) removed.

### Migration notes
- Update `package.json` deps: `lincd-cli` → `@_linked/cli`.
- Update `package.json` flag: `lincd: true` → `linkedPackage: true` (and `lincdApp: true` → `linkedApp: true` for apps). Legacy flags still read for now.
- Update scripts: `yarn lincd <cmd>` → `yarn linked <cmd>`. The legacy alias still works but emits a deprecation warning.
- Update import paths: `lincd-cli/<module>` → `@_linked/cli/<module>`.
17 changes: 17 additions & 0 deletions defaults/app-static/.env-cmdrc.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
{
"app-main": {
"APP_ID": "com.yourdomain.www",
"APP_ENV": true,
"OUTPUT_PATH": "./web/assets",
"ASSET_PATH": "./assets/",
"ENTRY_PATH": "./src/index-static.tsx"
},
"app-local-android": {
"NODE_ENV": "app",
"SITE_ROOT": "http://10.0.2.2:4000"
},
"app-local-ios": {
"NODE_ENV": "app",
"SITE_ROOT": "http://localhost:4000"
}
}
8 changes: 8 additions & 0 deletions defaults/app-static/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{
"scripts": {
"app": "env-cmd -e _main,production,app-main node scripts/build.js && npx cap sync",
"app-local-ios": "env-cmd -e _main,development,app-main,app-local-ios node scripts/build.js && npx cap sync",
"app-local-android": "env-cmd -e _main,development,app-main,app-local-android node scripts/build.js && npx cap sync",
"app-staging": "env-cmd -e _main,staging,app-main,app-staging node scripts/build.js && npx cap sync"
}
}
6 changes: 3 additions & 3 deletions defaults/app-static/src/index-static.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import {AppContextProvider} from 'lincd-server-utils/lib/components/AppContext';
import './config-frontend';

const root = ReactDOM.createRoot(
document.getElementById('root') as HTMLElement
document.getElementById('root') as HTMLElement,
);

root.render(
Expand All @@ -18,5 +18,5 @@ root.render(
<App />
</AppContextProvider>
</BrowserRouter>
</React.StrictMode>
);
</React.StrictMode>,
);
13 changes: 5 additions & 8 deletions defaults/app-with-backend/.env-cmdrc.json
Original file line number Diff line number Diff line change
@@ -1,20 +1,17 @@
{
"_main": {
"DATA_ROOT": "https://app.${hyphen_name}.com/data",
"APP_PREFIX": "${underscore_name}",
"APP_NAME": "${name}",
"DATA_ROOT": "https://${app_domain}/data",
"APP_PREFIX": "${app_prefix}",
"APP_NAME": "${app_name}",
"SOURCE_PATH": "./src"
},
"development": {
"NODE_ENV": "development",
"SITE_ROOT": "http://localhost:4000"
},
"staging": {
"NODE_ENV": "staging",
"SITE_ROOT": "https://next.${hyphen_name}.com"
},
"production": {
"PORT": "4000",
"NODE_ENV": "production",
"SITE_ROOT": "https://app.${hyphen_name}.com"
"SITE_ROOT": "https://${app_domain}"
}
}
4 changes: 3 additions & 1 deletion defaults/app-with-backend/.eslintignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
node_modules
public
build
build
data
web
4 changes: 0 additions & 4 deletions defaults/app-with-backend/babel.config.js

This file was deleted.

1 change: 1 addition & 0 deletions defaults/app-with-backend/gitignore.template
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
node_modules
build
mrgit.json
public/bundles
data/uploads
data/metadata
Expand Down
10 changes: 4 additions & 6 deletions defaults/app-with-backend/lincd.config.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
module.exports = {
cssMode: 'scss-modules',
cacheWebpack:true,
cssGlobalModulePaths:[/global-overwrites.scss/],
analyse:false,

export default {
cssMode: 'tailwind',
cacheWebpack: true,
analyse: false,
};
3 changes: 3 additions & 0 deletions defaults/app-with-backend/mrgit-template.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"dependencies": {}
}
Loading
Loading