Started the base Electron project
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
This commit is contained in:
parent
9351cd6266
commit
6e6fa2b757
136
.gitignore
vendored
136
.gitignore
vendored
@ -1,132 +1,12 @@
|
|||||||
# ---> Node
|
# Node.js modules
|
||||||
# Logs
|
node_modules
|
||||||
logs
|
|
||||||
*.log
|
|
||||||
npm-debug.log*
|
|
||||||
yarn-debug.log*
|
|
||||||
yarn-error.log*
|
|
||||||
lerna-debug.log*
|
|
||||||
.pnpm-debug.log*
|
|
||||||
|
|
||||||
# Diagnostic reports (https://nodejs.org/api/report.html)
|
# Generated HTML, CSS and JS files
|
||||||
report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
|
public/
|
||||||
|
|
||||||
# Runtime data
|
# SASS cache files
|
||||||
pids
|
.sass-cache/
|
||||||
*.pid
|
|
||||||
*.seed
|
|
||||||
*.pid.lock
|
|
||||||
|
|
||||||
# Directory for instrumented libs generated by jscoverage/JSCover
|
# Build artifacts
|
||||||
lib-cov
|
dist/
|
||||||
|
|
||||||
# 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.*
|
|
||||||
|
|
||||||
|
32
.woodpecker.yml
Normal file
32
.woodpecker.yml
Normal 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
109
Gruntfile.js
Normal 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']);
|
||||||
|
|
||||||
|
};
|
2
LICENSE
2
LICENSE
@ -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:
|
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
9
assets/coffee/index.coffee
Normal file
9
assets/coffee/index.coffee
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
si = require('systeminformation')
|
||||||
|
|
||||||
|
window.onload = () ->
|
||||||
|
si.cpu()
|
||||||
|
.then((data) ->
|
||||||
|
console.log(data)
|
||||||
|
).catch((error) ->
|
||||||
|
console.error(error)
|
||||||
|
)
|
2
assets/coffee/sentry.coffee
Normal file
2
assets/coffee/sentry.coffee
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
@loadPage = (pagePath) ->
|
||||||
|
window.location.href = pagePath + '.html'
|
49
assets/sass/sentry.sass
Normal file
49
assets/sass/sentry.sass
Normal 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
|
1
assets/static/styles/skeleton-2.0.4.min.css
vendored
Normal file
1
assets/static/styles/skeleton-2.0.4.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
15
assets/twig/index.twig
Normal file
15
assets/twig/index.twig
Normal 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
34
assets/twig/layout.twig
Normal 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
BIN
build/icon.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 277 KiB |
45
main.js
Normal file
45
main.js
Normal 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
9087
package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load Diff
55
package.json
Normal file
55
package.json
Normal 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
12
preload.js
Normal 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])
|
||||||
|
}
|
||||||
|
})
|
Loading…
Reference in New Issue
Block a user