v1.0.5 (#25)
- Update sequence a bit optimized. - Dependency updates. - Edge case on repo/branch selection handled. - More default templates. Thanks to @SaraVieira
This commit is contained in:
parent
c691c52751
commit
703d941f23
@ -1,4 +1,6 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
|
preTasks() {
|
||||||
echo '
|
echo '
|
||||||
##############################
|
##############################
|
||||||
#### Pulling Git Updates #####
|
#### Pulling Git Updates #####
|
||||||
@ -39,9 +41,10 @@ if [ $? -ne 0 ]; then
|
|||||||
##################################'
|
##################################'
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
}
|
||||||
case "$1" in
|
case "$1" in
|
||||||
"all")
|
"all")
|
||||||
|
preTasks
|
||||||
echo '
|
echo '
|
||||||
#################################
|
#################################
|
||||||
#### Rebuilding everything. #####
|
#### Rebuilding everything. #####
|
||||||
@ -49,6 +52,7 @@ case "$1" in
|
|||||||
docker run --rm -v /var/run/docker.sock:/var/run/docker.sock -v /data/coolify:/data/coolify -u root -w /usr/src/app coolify-base node install/install.js --type all
|
docker run --rm -v /var/run/docker.sock:/var/run/docker.sock -v /data/coolify:/data/coolify -u root -w /usr/src/app coolify-base node install/install.js --type all
|
||||||
;;
|
;;
|
||||||
"coolify")
|
"coolify")
|
||||||
|
preTasks
|
||||||
echo '
|
echo '
|
||||||
##############################
|
##############################
|
||||||
#### Rebuilding Coolify. #####
|
#### Rebuilding Coolify. #####
|
||||||
@ -56,6 +60,7 @@ case "$1" in
|
|||||||
docker run --rm -v /var/run/docker.sock:/var/run/docker.sock -v /data/coolify:/data/coolify -u root -w /usr/src/app coolify-base node install/install.js --type coolify
|
docker run --rm -v /var/run/docker.sock:/var/run/docker.sock -v /data/coolify:/data/coolify -u root -w /usr/src/app coolify-base node install/install.js --type coolify
|
||||||
;;
|
;;
|
||||||
"proxy")
|
"proxy")
|
||||||
|
preTasks
|
||||||
echo '
|
echo '
|
||||||
############################
|
############################
|
||||||
#### Rebuilding Proxy. #####
|
#### Rebuilding Proxy. #####
|
||||||
@ -63,6 +68,7 @@ case "$1" in
|
|||||||
docker run --rm -v /var/run/docker.sock:/var/run/docker.sock -v /data/coolify:/data/coolify -u root -w /usr/src/app coolify-base node install/install.js --type proxy
|
docker run --rm -v /var/run/docker.sock:/var/run/docker.sock -v /data/coolify:/data/coolify -u root -w /usr/src/app coolify-base node install/install.js --type proxy
|
||||||
;;
|
;;
|
||||||
"upgrade-phase-1")
|
"upgrade-phase-1")
|
||||||
|
preTasks
|
||||||
echo '
|
echo '
|
||||||
################################
|
################################
|
||||||
#### Upgrading Coolify P1. #####
|
#### Upgrading Coolify P1. #####
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
FROM coolify-base
|
FROM coolify-base
|
||||||
WORKDIR /usr/src/app
|
WORKDIR /usr/src/app
|
||||||
RUN yarn build
|
RUN pnpm build
|
||||||
CMD ["yarn", "start"]
|
CMD ["pnpm", "start"]
|
||||||
EXPOSE 3000
|
EXPOSE 3000
|
@ -9,9 +9,10 @@ RUN apt update && apt install -y docker-ce-cli && apt clean all
|
|||||||
FROM node:14 as modules
|
FROM node:14 as modules
|
||||||
COPY --from=binaries /usr/bin/docker /usr/bin/docker
|
COPY --from=binaries /usr/bin/docker /usr/bin/docker
|
||||||
COPY --from=binaries /usr/bin/envsubst /usr/bin/envsubst
|
COPY --from=binaries /usr/bin/envsubst /usr/bin/envsubst
|
||||||
|
RUN curl -L https://pnpm.js.org/pnpm.js | node - add --global pnpm
|
||||||
WORKDIR /usr/src/app
|
WORKDIR /usr/src/app
|
||||||
COPY ./package*.json .
|
COPY ./package*.json .
|
||||||
RUN yarn install
|
RUN pnpm install
|
||||||
|
|
||||||
FROM modules
|
FROM modules
|
||||||
WORKDIR /usr/src/app
|
WORKDIR /usr/src/app
|
||||||
|
@ -13,7 +13,8 @@ program
|
|||||||
|
|
||||||
program.parse(process.argv)
|
program.parse(process.argv)
|
||||||
|
|
||||||
if (program.check) {
|
const options = program.opts()
|
||||||
|
if (options.check) {
|
||||||
checkConfig().then(() => {
|
checkConfig().then(() => {
|
||||||
console.log('Config: OK')
|
console.log('Config: OK')
|
||||||
}).catch((err) => {
|
}).catch((err) => {
|
||||||
@ -26,17 +27,17 @@ if (program.check) {
|
|||||||
console.error(`Please run as root! Current user: ${user}`)
|
console.error(`Please run as root! Current user: ${user}`)
|
||||||
process.exit(1)
|
process.exit(1)
|
||||||
}
|
}
|
||||||
shell.exec(`docker network create ${process.env.DOCKER_NETWORK} --driver overlay`, { silent: !program.debug })
|
shell.exec(`docker network create ${process.env.DOCKER_NETWORK} --driver overlay`, { silent: !options.debug })
|
||||||
shell.exec('docker build -t coolify -f install/Dockerfile .')
|
shell.exec('docker build -t coolify -f install/Dockerfile .')
|
||||||
if (program.type === 'all') {
|
if (options.type === 'all') {
|
||||||
shell.exec('docker stack rm coollabs-coolify', { silent: !program.debug })
|
shell.exec('docker stack rm coollabs-coolify', { silent: !options.debug })
|
||||||
} else if (program.type === 'coolify') {
|
} else if (options.type === 'coolify') {
|
||||||
shell.exec('docker service rm coollabs-coolify_coolify')
|
shell.exec('docker service rm coollabs-coolify_coolify')
|
||||||
} else if (program.type === 'proxy') {
|
} else if (options.type === 'proxy') {
|
||||||
shell.exec('docker service rm coollabs-coolify_proxy')
|
shell.exec('docker service rm coollabs-coolify_proxy')
|
||||||
}
|
}
|
||||||
if (program.type !== 'upgrade') {
|
if (options.type !== 'upgrade') {
|
||||||
shell.exec('set -a && source .env && set +a && envsubst < install/coolify-template.yml | docker stack deploy -c - coollabs-coolify', { silent: !program.debug, shell: '/bin/bash' })
|
shell.exec('set -a && source .env && set +a && envsubst < install/coolify-template.yml | docker stack deploy -c - coollabs-coolify', { silent: !options.debug, shell: '/bin/bash' })
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -10,13 +10,13 @@ program
|
|||||||
.option('-t, --type <type>', 'Deploy type.')
|
.option('-t, --type <type>', 'Deploy type.')
|
||||||
|
|
||||||
program.parse(process.argv)
|
program.parse(process.argv)
|
||||||
|
const options = program.opts()
|
||||||
if (user !== 'root') {
|
if (user !== 'root') {
|
||||||
console.error(`Please run as root! Current user: ${user}`)
|
console.error(`Please run as root! Current user: ${user}`)
|
||||||
process.exit(1)
|
process.exit(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (program.type === 'upgrade') {
|
if (options.type === 'upgrade') {
|
||||||
shell.exec('docker service rm coollabs-coolify_coolify')
|
shell.exec('docker service rm coollabs-coolify_coolify')
|
||||||
shell.exec('set -a && source .env && set +a && envsubst < install/coolify-template.yml | docker stack deploy -c - coollabs-coolify', { silent: !program.debug, shell: '/bin/bash' })
|
shell.exec('set -a && source .env && set +a && envsubst < install/coolify-template.yml | docker stack deploy -c - coollabs-coolify', { silent: !options.debug, shell: '/bin/bash' })
|
||||||
}
|
}
|
||||||
|
36
package.json
36
package.json
@ -16,45 +16,45 @@
|
|||||||
"build:svite": "svite build"
|
"build:svite": "svite build"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@roxi/routify": "^2.7.3",
|
"@roxi/routify": "^2.15.1",
|
||||||
"@zerodevx/svelte-toast": "^0.1.4",
|
"@zerodevx/svelte-toast": "^0.2.0",
|
||||||
"axios": "^0.21.0",
|
"axios": "^0.21.1",
|
||||||
"commander": "^6.2.1",
|
"commander": "^7.2.0",
|
||||||
"compare-versions": "^3.6.0",
|
"compare-versions": "^3.6.0",
|
||||||
"cuid": "^2.1.8",
|
"cuid": "^2.1.8",
|
||||||
"dayjs": "^1.10.4",
|
"dayjs": "^1.10.4",
|
||||||
"deepmerge": "^4.2.2",
|
"deepmerge": "^4.2.2",
|
||||||
"dockerode": "^3.2.1",
|
"dockerode": "^3.2.1",
|
||||||
"dotenv": "^8.2.0",
|
"dotenv": "^8.2.0",
|
||||||
"fastify": "^3.9.1",
|
"fastify": "^3.14.1",
|
||||||
"fastify-env": "^2.1.0",
|
"fastify-env": "^2.1.0",
|
||||||
"fastify-jwt": "^2.1.3",
|
"fastify-jwt": "^2.4.0",
|
||||||
"fastify-plugin": "^3.0.0",
|
"fastify-plugin": "^3.0.0",
|
||||||
"fastify-static": "^3.3.0",
|
"fastify-static": "^4.0.1",
|
||||||
"generate-password": "^1.6.0",
|
"generate-password": "^1.6.0",
|
||||||
"js-yaml": "^4.0.0",
|
"js-yaml": "^4.0.0",
|
||||||
"jsonwebtoken": "^8.5.1",
|
"jsonwebtoken": "^8.5.1",
|
||||||
"mongoose": "^5.11.4",
|
"mongoose": "^5.12.3",
|
||||||
"shelljs": "^0.8.4",
|
"shelljs": "^0.8.4",
|
||||||
"svelte-select": "^3.17.0",
|
"svelte-select": "^3.17.0",
|
||||||
"unique-names-generator": "^4.4.0"
|
"unique-names-generator": "^4.4.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"mongodb-memory-server-core": "^6.9.3",
|
"mongodb-memory-server-core": "^6.9.6",
|
||||||
"nodemon": "^2.0.6",
|
"nodemon": "^2.0.7",
|
||||||
"npm-run-all": "^4.1.5",
|
"npm-run-all": "^4.1.5",
|
||||||
"postcss": "^7.0.35",
|
"postcss": "^8.2.9",
|
||||||
"postcss-import": "^12.0.1",
|
"postcss-import": "^14.0.1",
|
||||||
"postcss-load-config": "^3.0.0",
|
"postcss-load-config": "^3.0.1",
|
||||||
"postcss-preset-env": "^6.7.0",
|
"postcss-preset-env": "^6.7.0",
|
||||||
"prettier": "1.19",
|
"prettier": "2.2.1",
|
||||||
"prettier-plugin-svelte": "^2.1.6",
|
"prettier-plugin-svelte": "^2.2.0",
|
||||||
"standard": "^16.0.3",
|
"standard": "^16.0.3",
|
||||||
"svelte": "^3.29.7",
|
"svelte": "^3.37.0",
|
||||||
"svelte-hmr": "^0.12.2",
|
"svelte-hmr": "^0.14.0",
|
||||||
"svelte-preprocess": "^4.6.1",
|
"svelte-preprocess": "^4.6.1",
|
||||||
"svite": "0.8.1",
|
"svite": "0.8.1",
|
||||||
"tailwindcss": "compat"
|
"tailwindcss": "2.1.1"
|
||||||
},
|
},
|
||||||
"keywords": [
|
"keywords": [
|
||||||
"svelte",
|
"svelte",
|
||||||
|
5770
pnpm-lock.yaml
generated
5770
pnpm-lock.yaml
generated
File diff suppressed because it is too large
Load Diff
@ -9,6 +9,10 @@
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="postcss">
|
<style lang="postcss">
|
||||||
|
:global(.main) {
|
||||||
|
width: calc(100% - 4rem);
|
||||||
|
margin-left: 4rem;
|
||||||
|
}
|
||||||
:global(._toastMsg) {
|
:global(._toastMsg) {
|
||||||
@apply text-sm font-bold !important;
|
@apply text-sm font-bold !important;
|
||||||
}
|
}
|
||||||
@ -57,6 +61,22 @@
|
|||||||
:global(.h-271) {
|
:global(.h-271) {
|
||||||
min-height: 271px !important;
|
min-height: 271px !important;
|
||||||
}
|
}
|
||||||
|
:global(.repository-select-search .listItem .item),
|
||||||
|
:global(.repository-select-search .empty) {
|
||||||
|
@apply text-sm py-3 font-bold bg-warmGray-800 text-white cursor-pointer border-none hover:bg-warmGray-700 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
:global(.repository-select-search .listContainer) {
|
||||||
|
@apply bg-transparent !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
:global(.repository-select-search .clearSelect) {
|
||||||
|
@apply text-white cursor-pointer !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
:global(.repository-select-search .selectedItem) {
|
||||||
|
@apply text-white relative cursor-pointer font-bold text-sm flex items-center !important;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<SvelteToast options="{options}" />
|
<SvelteToast options="{options}" />
|
||||||
|
@ -1,24 +1,46 @@
|
|||||||
<script>
|
<script>
|
||||||
export let loading, branches;
|
export let loading, branches;
|
||||||
|
import { isActive } from "@roxi/routify";
|
||||||
import { application } from "@store";
|
import { application } from "@store";
|
||||||
|
import Select from "svelte-select";
|
||||||
|
|
||||||
|
const selectedValue =
|
||||||
|
!$isActive("/application/new") && $application.repository.branch
|
||||||
|
|
||||||
|
function handleSelect(event) {
|
||||||
|
$application.repository.branch = null;
|
||||||
|
setTimeout(() => {
|
||||||
|
$application.repository.branch = event.detail.value;
|
||||||
|
}, 1);
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
{#if loading}
|
{#if loading}
|
||||||
<div class="grid grid-cols-1">
|
<div class="grid grid-cols-1">
|
||||||
<label for="branch">Branch</label>
|
<label for="branch">Branch</label>
|
||||||
<select disabled>
|
<div class="repository-select-search col-span-2">
|
||||||
<option selected>Loading branches</option>
|
<Select
|
||||||
</select>
|
containerClasses="w-full border-none bg-transparent"
|
||||||
|
placeholder="Loading branches..."
|
||||||
|
isDisabled
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{:else}
|
{:else}
|
||||||
<div class="grid grid-cols-1">
|
<div class="grid grid-cols-1">
|
||||||
<label for="branch">Branch</label>
|
<label for="branch">Branch</label>
|
||||||
<!-- svelte-ignore a11y-no-onchange -->
|
<div class="repository-select-search col-span-2">
|
||||||
<select id="branch" bind:value="{$application.repository.branch}">
|
<Select
|
||||||
<option disabled selected>Select a branch</option>
|
containerClasses="w-full border-none bg-transparent"
|
||||||
{#each branches as branch}
|
on:select="{handleSelect}"
|
||||||
<option value="{branch.name}" class="font-bold">{branch.name}</option>
|
selectedValue="{selectedValue}"
|
||||||
{/each}
|
isClearable="{false}"
|
||||||
</select>
|
items="{branches.map(b => ({ label: b.name, value: b.name }))}"
|
||||||
|
showIndicator="{$isActive('/application/new')}"
|
||||||
|
noOptionsMessage="No branches found"
|
||||||
|
placeholder="Select a branch"
|
||||||
|
isDisabled="{!$isActive('/application/new')}"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{/if}
|
{/if}
|
||||||
|
@ -29,6 +29,7 @@
|
|||||||
|
|
||||||
async function loadBranches() {
|
async function loadBranches() {
|
||||||
loading.branches = true;
|
loading.branches = true;
|
||||||
|
if ($isActive("/application/new")) $application.repository.branch = null
|
||||||
const selectedRepository = repositories.find(
|
const selectedRepository = repositories.find(
|
||||||
r => r.id === $application.repository.id,
|
r => r.id === $application.repository.id,
|
||||||
);
|
);
|
||||||
@ -80,7 +81,6 @@
|
|||||||
$application.github.installation.id,
|
$application.github.installation.id,
|
||||||
page,
|
page,
|
||||||
);
|
);
|
||||||
|
|
||||||
repositories = repositories.concat(repos.repositories);
|
repositories = repositories.concat(repos.repositories);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -97,9 +97,11 @@
|
|||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
return false;
|
return false;
|
||||||
}
|
} finally {
|
||||||
loading.github = false;
|
loading.github = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
}
|
||||||
function modifyGithubAppConfig() {
|
function modifyGithubAppConfig() {
|
||||||
const left = screen.width / 2 - 1020 / 2;
|
const left = screen.width / 2 - 1020 / 2;
|
||||||
const top = screen.height / 2 - 618 / 2;
|
const top = screen.height / 2 - 618 / 2;
|
||||||
|
@ -1,22 +1,3 @@
|
|||||||
<style lang="postcss">
|
|
||||||
:global(.repository-select-search .listItem .item),
|
|
||||||
:global(.repository-select-search .empty) {
|
|
||||||
@apply text-sm py-3 font-bold bg-warmGray-800 text-white cursor-pointer border-none hover:bg-warmGray-700 !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
:global(.repository-select-search .listContainer) {
|
|
||||||
@apply bg-transparent !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
:global(.repository-select-search .clearSelect) {
|
|
||||||
@apply text-white cursor-pointer !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
:global(.repository-select-search .selectedItem) {
|
|
||||||
@apply text-white relative cursor-pointer font-bold text-sm flex items-center !important;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import { createEventDispatcher } from "svelte";
|
import { createEventDispatcher } from "svelte";
|
||||||
import { isActive } from "@roxi/routify";
|
import { isActive } from "@roxi/routify";
|
||||||
@ -53,6 +34,7 @@
|
|||||||
selectedValue="{selectedValue}"
|
selectedValue="{selectedValue}"
|
||||||
isClearable="{false}"
|
isClearable="{false}"
|
||||||
items="{items}"
|
items="{items}"
|
||||||
|
showIndicator="{$isActive('/application/new')}"
|
||||||
noOptionsMessage="No Repositories found"
|
noOptionsMessage="No Repositories found"
|
||||||
placeholder="Select a Repository"
|
placeholder="Select a Repository"
|
||||||
isDisabled="{!$isActive('/application/new')}"
|
isDisabled="{!$isActive('/application/new')}"
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
import { redirect, isActive } from "@roxi/routify";
|
import { redirect, isActive } from "@roxi/routify";
|
||||||
import { onMount } from "svelte";
|
import { onMount } from "svelte";
|
||||||
import { toast } from "@zerodevx/svelte-toast";
|
import { toast } from "@zerodevx/svelte-toast";
|
||||||
|
import templates from "../../../utils/templates";
|
||||||
import { application, fetch, deployments } from "@store";
|
import { application, fetch, deployments } from "@store";
|
||||||
import General from "./ActiveTab/General.svelte";
|
import General from "./ActiveTab/General.svelte";
|
||||||
import BuildStep from "./ActiveTab/BuildStep.svelte";
|
import BuildStep from "./ActiveTab/BuildStep.svelte";
|
||||||
@ -57,30 +57,43 @@
|
|||||||
$application.build.pack = "custom";
|
$application.build.pack = "custom";
|
||||||
toast.push("Custom Dockerfile found. Build pack set to custom.");
|
toast.push("Custom Dockerfile found. Build pack set to custom.");
|
||||||
} else if (packageJson) {
|
} else if (packageJson) {
|
||||||
// Check here for things like nextjs,react,vue,blablabla
|
|
||||||
const { content } = await $fetch(packageJson.git_url);
|
const { content } = await $fetch(packageJson.git_url);
|
||||||
const packageJsonContent = JSON.parse(atob(content));
|
const packageJsonContent = JSON.parse(atob(content));
|
||||||
|
const checkPackageJSONContents = dep => {
|
||||||
if (packageJsonContent.dependencies.hasOwnProperty("next")) {
|
return(
|
||||||
// Next.js
|
packageJsonContent?.dependencies?.hasOwnProperty(dep) ||
|
||||||
$application.build.pack = "nodejs";
|
packageJsonContent?.devDependencies?.hasOwnProperty(dep)
|
||||||
$application.build.command.installation = "yarn install";
|
);
|
||||||
if (packageJsonContent.scripts.hasOwnProperty("build")) {
|
};
|
||||||
$application.build.command.build = `yarn build`;
|
Object.keys(templates).map(dep => {
|
||||||
|
if (checkPackageJSONContents(dep)) {
|
||||||
|
const config = templates[dep];
|
||||||
|
$application.build.pack = config.pack;
|
||||||
|
if (config.installation) {
|
||||||
|
$application.build.command.installation = config.installation;
|
||||||
}
|
}
|
||||||
toast.push("Next.js App detected. Build pack set to Node.js.");
|
|
||||||
} else if (packageJsonContent.dependencies.hasOwnProperty("react")) {
|
if (config.port) {
|
||||||
// CRA
|
$application.publish.port = config.port;
|
||||||
$application.build.pack = "static";
|
}
|
||||||
$application.publish.directory = "build";
|
|
||||||
$application.build.command.installation = "yarn install";
|
if (config.directory) {
|
||||||
if (packageJsonContent.scripts.hasOwnProperty("build")) {
|
$application.publish.directory = config.directory;
|
||||||
$application.build.command.build = `yarn build`;
|
}
|
||||||
|
|
||||||
|
if (
|
||||||
|
packageJsonContent.scripts.hasOwnProperty("build") &&
|
||||||
|
config.build
|
||||||
|
) {
|
||||||
|
$application.build.command.build = config.build;
|
||||||
}
|
}
|
||||||
toast.push(
|
toast.push(
|
||||||
"React App detected. Build pack set to static with build phase.",
|
`${config.name} App detected. Default values set.`,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
// Nothing detected
|
// Nothing detected
|
||||||
@ -106,7 +119,7 @@
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
{#if loading}
|
{#if loading}
|
||||||
<Loading github githubLoadingText="Scanning repository 🤖" />
|
<Loading github githubLoadingText="Scanning repository..." />
|
||||||
{:else}
|
{:else}
|
||||||
<div class="block text-center py-4">
|
<div class="block text-center py-4">
|
||||||
<nav
|
<nav
|
||||||
|
@ -50,7 +50,7 @@
|
|||||||
{#if fullscreen}
|
{#if fullscreen}
|
||||||
{#if github}
|
{#if github}
|
||||||
<div class="fixed left-0 top-0 flex flex-wrap content-center h-full w-full">
|
<div class="fixed left-0 top-0 flex flex-wrap content-center h-full w-full">
|
||||||
<div class="w-full flex justify-center items-center">
|
<div class="main flex justify-center items-center">
|
||||||
<div class="w-64">
|
<div class="w-64">
|
||||||
<svg
|
<svg
|
||||||
class=" w-28 animate-bounce mx-auto"
|
class=" w-28 animate-bounce mx-auto"
|
||||||
@ -65,15 +65,15 @@
|
|||||||
d="M9 19c-5 1.5-5-2.5-7-3m14 6v-3.87a3.37 3.37 0 0 0-.94-2.61c3.14-.35 6.44-1.54 6.44-7A5.44 5.44 0 0 0 20 4.77 5.07 5.07 0 0 0 19.91 1S18.73.65 16 2.48a13.38 13.38 0 0 0-7 0C6.27.65 5.09 1 5.09 1A5.07 5.07 0 0 0 5 4.77a5.44 5.44 0 0 0-1.5 3.78c0 5.42 3.3 6.61 6.44 7A3.37 3.37 0 0 0 9 18.13V22"
|
d="M9 19c-5 1.5-5-2.5-7-3m14 6v-3.87a3.37 3.37 0 0 0-.94-2.61c3.14-.35 6.44-1.54 6.44-7A5.44 5.44 0 0 0 20 4.77 5.07 5.07 0 0 0 19.91 1S18.73.65 16 2.48a13.38 13.38 0 0 0-7 0C6.27.65 5.09 1 5.09 1A5.07 5.07 0 0 0 5 4.77a5.44 5.44 0 0 0-1.5 3.78c0 5.42 3.3 6.61 6.44 7A3.37 3.37 0 0 0 9 18.13V22"
|
||||||
></path></svg
|
></path></svg
|
||||||
>
|
>
|
||||||
<div class="w-full text-xl font-bold text-center">
|
<div class="text-xl font-bold text-center">
|
||||||
{githubLoadingText}
|
{githubLoadingText}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{:else}
|
{:else}
|
||||||
<div class="fixed left-0 top-0 flex flex-wrap content-center h-full w-full">
|
<div class="main fixed left-0 top-0 flex flex-wrap content-center h-full">
|
||||||
<span class="loader"></span>
|
<span class=" loader"></span>
|
||||||
</div>
|
</div>
|
||||||
{/if}
|
{/if}
|
||||||
{/if}
|
{/if}
|
||||||
|
@ -17,6 +17,12 @@ body {
|
|||||||
--toastFont: 'Inter';
|
--toastFont: 'Inter';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.border-gradient {
|
||||||
|
border-bottom: 2px solid transparent;
|
||||||
|
border-image: linear-gradient(0.25turn, rgba(255, 249, 34), rgba(255, 0, 128), rgba(56, 2, 155, 0));
|
||||||
|
border-image-slice: 1;
|
||||||
|
}
|
||||||
|
|
||||||
[aria-label][role~="tooltip"]::after {
|
[aria-label][role~="tooltip"]::after {
|
||||||
background: rgba(41, 37, 36, 0.9);
|
background: rgba(41, 37, 36, 0.9);
|
||||||
color: white;
|
color: white;
|
||||||
|
@ -2,10 +2,6 @@
|
|||||||
.min-w-4rem {
|
.min-w-4rem {
|
||||||
min-width: 4rem;
|
min-width: 4rem;
|
||||||
}
|
}
|
||||||
.main {
|
|
||||||
width: calc(100% - 4rem);
|
|
||||||
margin-left: 4rem;
|
|
||||||
}
|
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
|
@ -151,7 +151,6 @@ import Tooltip from "../../components/Tooltip/Tooltip.svelte";
|
|||||||
<div class="border border-warmGray-700 h-8"></div>
|
<div class="border border-warmGray-700 h-8"></div>
|
||||||
<Tooltip position="bottom" label="Logs" >
|
<Tooltip position="bottom" label="Logs" >
|
||||||
<button
|
<button
|
||||||
|
|
||||||
class="icon"
|
class="icon"
|
||||||
class:text-warmGray-700="{$isActive('/application/new')}"
|
class:text-warmGray-700="{$isActive('/application/new')}"
|
||||||
disabled="{$isActive('/application/new')}"
|
disabled="{$isActive('/application/new')}"
|
||||||
|
@ -43,7 +43,7 @@
|
|||||||
<p
|
<p
|
||||||
class="mt-1 pb-8 font-extrabold text-white text-5xl sm:tracking-tight lg:text-6xl text-center"
|
class="mt-1 pb-8 font-extrabold text-white text-5xl sm:tracking-tight lg:text-6xl text-center"
|
||||||
>
|
>
|
||||||
Coolify
|
<span class="border-gradient">Coolify</span>
|
||||||
</p>
|
</p>
|
||||||
<h2 class="text-2xl md:text-3xl font-extrabold text-white">
|
<h2 class="text-2xl md:text-3xl font-extrabold text-white">
|
||||||
An open-source, hassle-free, self-hostable<br />
|
An open-source, hassle-free, self-hostable<br />
|
||||||
|
51
src/utils/templates.js
Normal file
51
src/utils/templates.js
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
const defaultBuildAndDeploy = {
|
||||||
|
installation: 'yarn install',
|
||||||
|
build: 'yarn build'
|
||||||
|
}
|
||||||
|
|
||||||
|
const templates = {
|
||||||
|
next: {
|
||||||
|
pack: 'nodejs',
|
||||||
|
...defaultBuildAndDeploy,
|
||||||
|
port: 3000,
|
||||||
|
name: 'Next.js'
|
||||||
|
},
|
||||||
|
nuxt: {
|
||||||
|
pack: 'nodejs',
|
||||||
|
...defaultBuildAndDeploy,
|
||||||
|
port: 8080,
|
||||||
|
name: 'Nuxt'
|
||||||
|
},
|
||||||
|
'react-scripts': {
|
||||||
|
pack: 'static',
|
||||||
|
...defaultBuildAndDeploy,
|
||||||
|
directory: 'build',
|
||||||
|
name: 'Create React'
|
||||||
|
},
|
||||||
|
'parcel-bundler': {
|
||||||
|
pack: 'static',
|
||||||
|
...defaultBuildAndDeploy,
|
||||||
|
directory: 'dist',
|
||||||
|
name: 'Parcel'
|
||||||
|
},
|
||||||
|
'vue-cli-service': {
|
||||||
|
pack: 'static',
|
||||||
|
...defaultBuildAndDeploy,
|
||||||
|
directory: 'dist',
|
||||||
|
name: 'Vue CLI'
|
||||||
|
},
|
||||||
|
gatsby: {
|
||||||
|
pack: 'static',
|
||||||
|
...defaultBuildAndDeploy,
|
||||||
|
directory: 'public',
|
||||||
|
name: 'Gatsby'
|
||||||
|
},
|
||||||
|
'preact-cli': {
|
||||||
|
pack: 'static',
|
||||||
|
...defaultBuildAndDeploy,
|
||||||
|
directory: 'build',
|
||||||
|
name: 'Preact CLI'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default templates
|
Loading…
x
Reference in New Issue
Block a user