Started the base Electron project
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful

This commit is contained in:
Gregory Ballantine 2022-05-25 14:28:19 -04:00
parent 9351cd6266
commit 6e6fa2b757
15 changed files with 9459 additions and 129 deletions

136
.gitignore vendored
View File

@ -1,132 +1,12 @@
# ---> Node
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
lerna-debug.log*
.pnpm-debug.log*
# Node.js modules
node_modules
# Diagnostic reports (https://nodejs.org/api/report.html)
report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
# Generated HTML, CSS and JS files
public/
# Runtime data
pids
*.pid
*.seed
*.pid.lock
# SASS cache files
.sass-cache/
# Directory for instrumented libs generated by jscoverage/JSCover
lib-cov
# Coverage directory used by tools like istanbul
coverage
*.lcov
# nyc test coverage
.nyc_output
# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
.grunt
# Bower dependency directory (https://bower.io/)
bower_components
# node-waf configuration
.lock-wscript
# Compiled binary addons (https://nodejs.org/api/addons.html)
build/Release
# Dependency directories
node_modules/
jspm_packages/
# Snowpack dependency directory (https://snowpack.dev/)
web_modules/
# TypeScript cache
*.tsbuildinfo
# Optional npm cache directory
.npm
# Optional eslint cache
.eslintcache
# Optional stylelint cache
.stylelintcache
# Microbundle cache
.rpt2_cache/
.rts2_cache_cjs/
.rts2_cache_es/
.rts2_cache_umd/
# Optional REPL history
.node_repl_history
# Output of 'npm pack'
*.tgz
# Yarn Integrity file
.yarn-integrity
# dotenv environment variable files
.env
.env.development.local
.env.test.local
.env.production.local
.env.local
# parcel-bundler cache (https://parceljs.org/)
.cache
.parcel-cache
# Next.js build output
.next
out
# Nuxt.js build / generate output
.nuxt
dist
# Gatsby files
.cache/
# Comment in the public line in if your project uses Gatsby and not Next.js
# https://nextjs.org/blog/next-9-1#public-directory-support
# public
# vuepress build output
.vuepress/dist
# vuepress v2.x temp and cache directory
.temp
.cache
# Docusaurus cache and generated files
.docusaurus
# Serverless directories
.serverless/
# FuseBox cache
.fusebox/
# DynamoDB Local files
.dynamodb/
# TernJS port file
.tern-port
# Stores VSCode versions used for testing VSCode extensions
.vscode-test
# yarn v2
.yarn/cache
.yarn/unplugged
.yarn/build-state.yml
.yarn/install-state.gz
.pnp.*
# Build artifacts
dist/

32
.woodpecker.yml Normal file
View File

@ -0,0 +1,32 @@
workspace:
base: /usr/src
path: app
pipeline:
build:
image: node:16
commands:
- apt update && apt install -y ruby ruby-dev && gem install sass
- npm install
- npm run grunt
package_linux:
image: electronuserland/builder:16
commands:
- npm install
- npm run build-linux
when:
event: tag
gitea_release:
image: plugins/gitea-release
settings:
api_key:
from_secret: gitea_api_key
base_url: https://git.metaunix.net
title: "${CI_COMMIT_TAG}"
files:
- dist/sentry*.deb
- dist/sentry*.rpm
when:
event: tag

109
Gruntfile.js Normal file
View File

@ -0,0 +1,109 @@
module.exports = function(grunt) {
var pkg = grunt.file.readJSON('package.json')
// Project configuration.
grunt.initConfig({
sass: {
dist: {
options: {
style: 'compressed'
},
files: [{
expand: true,
cwd: 'assets/sass',
src: ['*.sass'],
dest: 'public/styles',
ext: '.css'
}]
}
},
coffee: {
options: {
sourceMap: true,
style: 'compressed'
},
files: {
expand: true,
flatten: true,
cwd: 'assets/coffee',
src: ['*.coffee'],
dest: 'public/js',
ext: '.js'
}
},
twigRender: {
compile: {
files : [{
data: {
file_root: __dirname + '/public'
},
expand: true,
cwd: 'assets/twig',
src: ['**/*.twig', '!**/_*.twig'],
dest: 'public',
ext: '.html'
}]
},
},
copy: {
main: {
files: [{
expand: true,
cwd: 'assets/static',
src: ['**'],
dest: 'public/',
}]
}
},
watch: {
html: {
files: ['assets/twig/*.twig', 'assets/twig/**/*.twig'],
tasks: ['twigRender'],
options: {
atBegin: true,
spawn: false
}
},
css: {
files: ['assets/sass/*.sass'],
tasks: ['sass'],
options: {
atBegin: true,
spawn: false
}
},
js: {
files: ['assets/coffee/*.coffee'],
tasks: ['coffee'],
options: {
atBegin: true,
spawn: false
}
},
static: {
files: ['assets/static/*/*'],
tasks: ['copy'],
options: {
atBegin: true,
spawn: false
}
}
}
});
// Load task plugins
grunt.loadNpmTasks('grunt-twig-render');
grunt.loadNpmTasks('grunt-contrib-sass');
grunt.loadNpmTasks('grunt-contrib-coffee');
grunt.loadNpmTasks('grunt-contrib-copy');
grunt.loadNpmTasks('grunt-contrib-watch');
// Default task(s).
grunt.registerTask('default', ['twigRender', 'sass', 'coffee', 'copy']);
};

View File

@ -1,4 +1,4 @@
Copyright (c) <year> <owner>
Copyright (c) 2022 Metaunix
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

View File

@ -0,0 +1,9 @@
si = require('systeminformation')
window.onload = () ->
si.cpu()
.then((data) ->
console.log(data)
).catch((error) ->
console.error(error)
)

View File

@ -0,0 +1,2 @@
@loadPage = (pagePath) ->
window.location.href = pagePath + '.html'

49
assets/sass/sentry.sass Normal file
View File

@ -0,0 +1,49 @@
body
background: white
a
color: cornflowerblue
transition: all 200ms ease-in-out
&:hover
color: darken(cornflowerblue, 10%)
input
transition: all 200ms ease-in-out
input[type=submit],
button
background-color: cornflowerblue
color: #f0f0f0
transition: all 200ms ease-in-out
&:hover
background-color: darken(cornflowerblue, 10%)
color: white
.u-text-center
text-align: center
.container
max-width: 1024px
.container.fluid
max-width: 100%
#header h1
text-align: center
#footer
position: fixed
left: 0
right: 0
bottom: 0
padding-top: 25px
padding-bottom: 25px
border-top: 1px solid #999
.row
position: relative
p.no-margin
margin-bottom: 0

File diff suppressed because one or more lines are too long

15
assets/twig/index.twig Normal file
View File

@ -0,0 +1,15 @@
{% extends 'layout.twig' %}
{% block scripts %}
<script src="./js/index.js" charset="utf-8"></script>
{% endblock %}
{% block content %}
<header class="row">
<div class="columns twelve u-text-center">
<h1>Sentry System Info</h1>
</div>
</header>
{% endblock %}

34
assets/twig/layout.twig Normal file
View File

@ -0,0 +1,34 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<!-- https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP -->
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'">
<link rel="stylesheet" href="{{ file_root }}/styles/skeleton-2.0.4.min.css">
<link rel="stylesheet" href="{{ file_root }}//styles/sentry.css">
<title>Sentry System Monitor</title>
<script src="{{ file_root }}/js/sentry.js" charset="utf-8"></script>
{% block scripts %}{% endblock %}
</head>
<body>
<div class="container">
{% block content %}{% endblock %}
</div>
<footer id="footer">
<div class="container fluid">
<div class="row">
<div class="columns three"><p></p></div>
<div class="columns six">
<p class="no-margin">This app was built using:</p>
<p class="no-margin">
Node.js <span id="node-version"></span>,
Chromium <span id="chrome-version"></span>,
and Electron <span id="electron-version"></span>.
</p>
</div>
</div>
</div>
</footer>
</body>
</html>

BIN
build/icon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 277 KiB

45
main.js Normal file
View File

@ -0,0 +1,45 @@
// Modules to control application life and create native browser window
const {app, BrowserWindow} = require('electron');
const path = require('path');
function createWindow () {
// Create the browser window.
const mainWindow = new BrowserWindow({
width: 800,
height: 600,
webPreferences: {
nodeIntegration: true,
contextIsolation: false,
preload: path.join(__dirname, 'preload.js')
}
});
// and load the index.html of the app.
mainWindow.loadFile('public/index.html');
// Open the DevTools.
// mainWindow.webContents.openDevTools()
}
// This method will be called when Electron has finished
// initialization and is ready to create browser windows.
// Some APIs can only be used after this event occurs.
app.whenReady().then(() => {
createWindow();
app.on('activate', function () {
// On macOS it's common to re-create a window in the app when the
// dock icon is clicked and there are no other windows open.
if (BrowserWindow.getAllWindows().length === 0) createWindow()
});
});
// Quit when all windows are closed, except on macOS. There, it's common
// for applications and their menu bar to stay active until the user quits
// explicitly with Cmd + Q.
app.on('window-all-closed', function () {
if (process.platform !== 'darwin') app.quit();
});
// In this file you can include the rest of your app's specific main process
// code. You can also put them in separate files and require them here.

9087
package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

55
package.json Normal file
View File

@ -0,0 +1,55 @@
{
"name": "sentry",
"version": "0.1.0",
"description": "Desktop app to view system information and sensors",
"main": "main.js",
"scripts": {
"start": "electron .",
"build-linux": "electron-builder build --linux",
"build-win": "electron-builder build --win",
"grunt": "grunt"
},
"repository": "https://git.metaunix.net/metaunix/sentry",
"keywords": [
"sensors",
"cpu",
"gpu",
"memory"
],
"author": "Gregory Ballantine <gballantine@metaunix.net>",
"license": "BSD-2-Clause",
"devDependencies": {
"electron": "^18.2.4",
"electron-builder": "^23.0.3",
"grunt": "^1.5.3",
"grunt-contrib-coffee": "^2.1.0",
"grunt-contrib-copy": "^1.0.0",
"grunt-contrib-sass": "^2.0.0",
"grunt-contrib-watch": "^1.1.0",
"grunt-twig-render": "^1.8.3"
},
"dependencies": {
"systeminformation": "^5.11.15"
},
"build": {
"appId": "net.metaunix.sentry",
"copyright": "Copyright © 2022 ${author}",
"win": {
"target": "msi",
"icon": "build/icon.png"
},
"linux": {
"target": [
"deb",
"rpm"
],
"icon": "build/icon.png"
},
"deb": {
"category": "internet"
},
"rpm": {
"packageCategory": "internet"
}
}
}

12
preload.js Normal file
View File

@ -0,0 +1,12 @@
// All of the Node.js APIs are available in the preload process.
// It has the same sandbox as a Chrome extension.
window.addEventListener('DOMContentLoaded', () => {
const replaceText = (selector, text) => {
const element = document.getElementById(selector)
if (element) element.innerText = text
}
for (const type of ['chrome', 'node', 'electron']) {
replaceText(`${type}-version`, process.versions[type])
}
})