Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
41 changes: 41 additions & 0 deletions .github/workflows/initializr-cn1-version-pr.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
name: Initializr CN1 Version PR

on:
push:
tags:
- "v*"
- "[0-9]*"

permissions:
contents: write
pull-requests: write

jobs:
update-initializr-versions:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4

- name: Update Initializr Codename One versions
run: ./scripts/initializr/update-cn1-version.sh "${GITHUB_REF_NAME}"

- name: Create pull request
uses: peter-evans/create-pull-request@v6
with:
commit-message: "scripts/initializr: bump Codename One versions to ${{ github.ref_name }}"
title: "scripts/initializr: bump Codename One versions to ${{ github.ref_name }}"
body: |
Automated update of Codename One versions in `scripts/initializr` after release `${{ github.ref_name }}`.

Updated:
- All `scripts/initializr/**/pom.xml` files containing `cn1.plugin.version`
- `scripts/initializr/common/src/main/java/com/codename1/initializr/model/GeneratorModel.java`
- `scripts/initializr/common/src/test/java/com/codename1/initializr/model/GeneratorModelMatrixTest.java`
branch: automation/initializr-cn1-version-${{ github.ref_name }}
delete-branch: true
labels: |
automation
initializr
add-paths: |
scripts/initializr
30 changes: 28 additions & 2 deletions .github/workflows/website-docs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -34,11 +34,11 @@ jobs:
hugo-version: 'latest'
extended: true

- name: Set up Java 25
- name: Set up Java 8 for Initializr build
uses: actions/setup-java@v4
with:
distribution: temurin
java-version: '25'
java-version: '8'

- name: Set up Ruby
uses: ruby/setup-ruby@v1
Expand Down Expand Up @@ -69,13 +69,39 @@ jobs:
env:
GITHUB_TOKEN: ${{ github.token }}

- name: Set up Java 25 for website build
uses: actions/setup-java@v4
with:
distribution: temurin
java-version: '25'

- name: Build website
run: |
set -euo pipefail
scripts/website/build.sh
env:
WEBSITE_INCLUDE_JAVADOCS: "true"
WEBSITE_INCLUDE_DEVGUIDE: "true"
WEBSITE_INCLUDE_INITIALIZR: "auto"
CN1_USER: ${{ secrets.CN1_USER }}
CN1_TOKEN: ${{ secrets.CN1_TOKEN }}

- name: Validate Initializr page output
run: |
set -euo pipefail
test -f docs/website/public/initializr/index.html

- name: Validate Initializr JS bundle output
run: |
set -euo pipefail
if [ -n "${CN1_USER}" ] && [ -n "${CN1_TOKEN}" ]; then
test -f docs/website/public/initializr-app/index.html
else
echo "CN1 credentials not configured; skipping Initializr JS bundle output validation."
fi
env:
CN1_USER: ${{ secrets.CN1_USER }}
CN1_TOKEN: ${{ secrets.CN1_TOKEN }}

- name: Validate redirects against local Pages runtime
run: |
Expand Down
5 changes: 5 additions & 0 deletions docs/website/content/initializr.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
+++
title = "Initializr"
description = "Create a new Codename One project directly in your browser."
layout = "initializr"
+++
2 changes: 1 addition & 1 deletion docs/website/data/cn1libs.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"source_url": "https://raw.githubusercontent.com/codenameone/CodenameOneLibs/refs/heads/master/CN1Libs.xml",
"generated_at_utc": "2026-02-19T02:09:34.831273+00:00",
"generated_at_utc": "2026-02-19T18:31:11.399307+00:00",
"status": "ok",
"error": "",
"count": 85,
Expand Down
6 changes: 6 additions & 0 deletions docs/website/hugo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,12 @@ name = "Dashboard"
url = "https://cloud.codenameone.com/secure/index.html"
weight = 15

[[menu.main]]
parent = "developers"
name = "Initializr"
url = "/initializr/"
weight = 16

[[menu.main]]
identifier = "resources"
name = "RESOURCES"
Expand Down
276 changes: 276 additions & 0 deletions docs/website/layouts/_default/initializr.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,276 @@
{{- define "main" }}
<section class="cn1-initializr-page">
<header class="cn1-initializr-header">
{{ partial "breadcrumbs.html" . }}
<h1>{{ .Title }}</h1>
{{ with .Description }}<p>{{ . }}</p>{{ end }}
</header>

<div class="cn1-initializr-shell">
<div id="cn1-splash" class="cn1-splash">
<img class="icon" src="/initializr-app/icon.png" alt="Initializr icon" />
<div class="cn1-loader"></div>
<div class="progress-bar">
<div class="progress-bar-internal"></div>
</div>
<p class="cn1-splash-label">Preparing Initializr...</p>
</div>
<canvas width="320" height="480" id="codenameone-canvas"></canvas>
</div>
</section>

<style>
.cn1-initializr-page {
max-width: 1180px;
margin: 0 auto;
padding: 1.25rem 1rem 2rem;
}

.cn1-initializr-header h1 {
margin: 0.25rem 0 0.35rem;
}

.cn1-initializr-header p {
margin: 0 0 1rem;
opacity: 0.82;
}

.cn1-initializr-shell {
position: relative;
min-height: clamp(560px, 74vh, 900px);
border-radius: 16px;
overflow: hidden;
border: 1px solid var(--border);
background: radial-gradient(circle at 20% 0%, #e9f1ff 0%, #f9fbff 40%, #ffffff 100%);
box-shadow: 0 14px 42px rgba(0, 0, 0, 0.12);
}

html.dark .cn1-initializr-shell {
background: radial-gradient(circle at 20% 0%, #172236 0%, #121a2a 45%, #0d1321 100%);
box-shadow: 0 20px 48px rgba(0, 0, 0, 0.48);
}

#codenameone-canvas {
position: absolute;
inset: 0;
width: 100%;
height: 100%;
}

.cn1-splash {
position: absolute;
inset: 0;
display: grid;
place-items: center;
align-content: center;
gap: 1rem;
z-index: 2;
text-align: center;
padding: 2rem;
color: #1d2638;
background:
radial-gradient(1000px 420px at 20% 0%, rgba(99, 142, 255, 0.22), rgba(99, 142, 255, 0) 65%),
radial-gradient(720px 360px at 100% 100%, rgba(60, 173, 216, 0.2), rgba(60, 173, 216, 0) 65%);
}

html.dark .cn1-splash {
color: #d8e4ff;
}

.cn1-splash img.icon {
width: 110px;
height: auto;
border-radius: 18px;
box-shadow: 0 10px 28px rgba(0, 0, 0, 0.25);
}

.cn1-loader {
width: 46px;
height: 46px;
border-radius: 50%;
border: 3px solid rgba(49, 105, 230, 0.25);
border-top-color: #3169e6;
animation: cn1-spin 0.9s linear infinite;
}

.cn1-splash .progress-bar {
display: block;
width: min(340px, 75vw);
height: 9px;
border-radius: 999px;
overflow: hidden;
border: 1px solid rgba(49, 105, 230, 0.25);
background: rgba(255, 255, 255, 0.7);
}

.cn1-splash .progress-bar .progress-bar-internal {
width: 0;
height: 100%;
border-radius: 999px;
background: linear-gradient(90deg, #2f66e4, #3dc8d1);
box-shadow: 0 0 18px rgba(47, 102, 228, 0.5);
transition: width 160ms ease-out;
}

.cn1-splash .cn1-splash-label {
margin: 0;
font-size: 0.95rem;
opacity: 0.88;
}

.cn1-edit-string, .cn1-string-picker {
position: absolute;
background-color: transparent;
z-index: 1000;
box-sizing: content-box;
}

.cn1-native-peer {
position: absolute;
border: none;
}

.cn1-capture-dialog,
.cn1-capture-preview-dialog {
position: fixed;
top: 10px;
left: 10px;
right: 10px;
bottom: 10px;
border: 1px solid #222;
background: rgba(33, 33, 33, 0.9);
z-index: 1000;
}

@keyframes cn1-spin {
to {
transform: rotate(360deg);
}
}
</style>

<script>
window.cn1_debug_flags = {
disableTouchstart: false,
disableTouchend: false,
disableHover: false,
disableMouseup: false,
disableMousedown: false,
disableWheel: false,
debugLog: false,
useNativeQueue: false
};

(function() {
var cn1ToLoad = {
"teavm/classes.js": {size: 0, loaded: false},
"style.css": {size: 4923, loaded: false},
"js/pwa.js": {size: 584, loaded: false},
"js/bootstrap.min.js": {size: 35951, loaded: false},
"js/fontmetrics.js": {size: 145730, loaded: false},
"js/upup.min.js": {size: 939, loaded: false},
"js/push.js": {size: 12310, loaded: false},
"js/jquery.min.js": {size: 84319, loaded: false},
"js/manup.js": {size: 6493, loaded: false},
"css/bootstrap-theme.min.css": {size: 19963, loaded: false},
"css/bootstrap.min.css": {size: 117305, loaded: false},
"assets/material-design-font.ttf": {size: 353892, loaded: false},
"assets/grub-css.zip": {size: 1915434, loaded: false},
"assets/barebones-css.zip": {size: 599, loaded: false},
"assets/cn1-version-numbers": {size: 41, loaded: false},
"assets/iOS7Theme.res": {size: 300158, loaded: false},
"assets/common.zip": {size: 297101, loaded: false},
"assets/idea.zip": {size: 4555, loaded: false},
"assets/tweet-css.zip": {size: 2884, loaded: false},
"assets/android_holo_light.res": {size: 114442, loaded: false},
"assets/grub-cn1libs.zip": {size: 967546, loaded: false},
"assets/tweet-pom.xml": {size: 16251, loaded: false},
"assets/vscode.zip": {size: 1024, loaded: false},
"assets/CN1Resource.res": {size: 5961, loaded: false},
"assets/kotlin-pom.xml": {size: 15565, loaded: false},
"assets/theme.res": {size: 425304, loaded: false},
"assets/tweet-src.zip": {size: 357703, loaded: false},
"assets/barebones-src.zip": {size: 1327, loaded: false},
"assets/grub-pom.xml": {size: 15778, loaded: false},
"assets/barebones-pom.xml": {size: 15843, loaded: false},
"assets/grub-src.zip": {size: 279805, loaded: false},
"assets/eclipse.zip": {size: 11898, loaded: false},
"assets/kotlin-src.zip": {size: 1507, loaded: false},
"assets/netbeans.zip": {size: 2877, loaded: false}
};

window.cn1LoadedFile = function(filename) {
if (filename.indexOf("?") >= 0) {
filename = filename.substring(0, filename.indexOf("?"));
}
if (cn1ToLoad[filename]) {
cn1ToLoad[filename].loaded = true;
}
};

var progressTimer = window.setInterval(function() {
if (!window.jQuery) {
return;
}
var splash = jQuery("#cn1-splash");
if (splash.length === 0) {
clearInterval(progressTimer);
return;
}
var bytesRequired = 0;
var bytesLoaded = 0;
for (var f in cn1ToLoad) {
bytesRequired += cn1ToLoad[f].size;
if (cn1ToLoad[f].loaded) {
bytesLoaded += cn1ToLoad[f].size;
}
}
if (bytesRequired > 0) {
var pct = Math.min(100, Math.round(bytesLoaded / bytesRequired * 100));
jQuery(".progress-bar-internal", splash).css("width", pct + "%");
if (pct >= 100) {
jQuery(".cn1-splash-label", splash).text("Launching Initializr...");
}
}
}, 180);
})();
</script>
<link rel="stylesheet" href="/initializr-app/css/bootstrap.min.css">
<link rel="stylesheet" href="/initializr-app/css/bootstrap-theme.min.css">
<link rel="stylesheet" href="/initializr-app/style.css">
<script src="/initializr-app/js/push.js"></script>
<script>window.cn1LoadedFile("js/push.js");</script>
<script src="/initializr-app/js/jquery.min.js"></script>
<script>window.cn1LoadedFile("js/jquery.min.js");</script>
<script src="/initializr-app/js/fontmetrics.js"></script>
<script>window.cn1LoadedFile("js/fontmetrics.js");</script>
<script src="/initializr-app/teavm/classes.js"></script>
<script>window.cn1LoadedFile("teavm/classes.js");</script>
<script>
(function() {
function splashMessage(msg) {
var node = document.querySelector("#cn1-splash .cn1-splash-label");
if (node) {
node.textContent = msg;
}
}
if (!window.jQuery) {
splashMessage("Initializr bundle is unavailable in this preview.");
return;
}
jQuery(document).ready(function() {
if (typeof window.main === "function") {
window.main();
} else {
splashMessage("Initializr failed to initialize.");
}
});
})();
</script>
<script src="/initializr-app/js/bootstrap.min.js"></script>
<script>window.cn1LoadedFile("js/bootstrap.min.js");</script>
<script src="/initializr-app/js/upup.min.js"></script>
<script>window.cn1LoadedFile("js/upup.min.js");</script>
<script src="/initializr-app/js/manup.js"></script>
<script>window.cn1LoadedFile("js/manup.js");</script>
{{- end }}
Binary file added scripts/initializr/cn1libs/CodeRAD/jars/css.zip
Binary file not shown.
Binary file added scripts/initializr/cn1libs/CodeRAD/jars/main.zip
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Loading