Compare commits
8 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| c6323fb7ce | |||
| 349c7d4def | |||
| 19ac712b78 | |||
| c95b272485 | |||
| 43231d7ec3 | |||
| 3f6537e94c | |||
| b021797919 | |||
| 7ad997cc0e |
@@ -0,0 +1,154 @@
|
|||||||
|
labels: ["needs-confirmation"]
|
||||||
|
body:
|
||||||
|
- type: markdown
|
||||||
|
attributes:
|
||||||
|
value: |
|
||||||
|
> [!IMPORTANT]
|
||||||
|
> Please read through [the Discussion rules](https://github.com/AnalogJ/scrutiny/discussions/876), review [the docs](https://github.com/AnalogJ/scrutiny/tree/master/docs), and check for both existing [Discussions](https://github.com/AnalogJ/scrutiny/discussions?discussions_q=) and [Issues](https://github.com/AnalogJ/scrutiny/issues?q=sort%3Areactions-desc) prior to opening a new Discussion.
|
||||||
|
- type: markdown
|
||||||
|
attributes:
|
||||||
|
value: "# Issue Details"
|
||||||
|
- type: textarea
|
||||||
|
attributes:
|
||||||
|
label: Issue Description
|
||||||
|
description: |
|
||||||
|
Provide a detailed description of the issue. Include relevant information, such as:
|
||||||
|
- The feature or configuration option you encounter the issue with.
|
||||||
|
- Screenshots, screen recordings, or other supporting media (as needed).
|
||||||
|
- If this is a regression of an existing issue that was closed or resolved, please include the previous item reference (Discussion, Issue, PR, commit) in your description.
|
||||||
|
placeholder: |
|
||||||
|
Temperature data is missing from the plots.
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
- type: textarea
|
||||||
|
attributes:
|
||||||
|
label: Expected Behavior
|
||||||
|
description: |
|
||||||
|
Describe how you expect scrutiny to behave in this situation. Include any relevant documentation links.
|
||||||
|
placeholder: |
|
||||||
|
All temperature data uploaded by collectors should make it into the plots.
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
- type: textarea
|
||||||
|
attributes:
|
||||||
|
label: Actual Behavior
|
||||||
|
description: |
|
||||||
|
Describe how scrutiny actually behaves in this situation. If it is not immediately obvious how the actual behavior differs from the expected behavior described above, please be sure to mention the deviation specifically.
|
||||||
|
placeholder: |
|
||||||
|
Only half the points appear.
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
- type: textarea
|
||||||
|
attributes:
|
||||||
|
label: Reproduction Steps
|
||||||
|
description: |
|
||||||
|
Provide a detailed set of step-by-step instructions for reproducing this issue. If you can't, describe what you were doing when the issue occurred.
|
||||||
|
placeholder: |
|
||||||
|
1. Set up the omnibus docker image
|
||||||
|
2. Launch the web dashboard
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
- type: textarea
|
||||||
|
attributes:
|
||||||
|
label: scrutiny logs
|
||||||
|
description: |
|
||||||
|
Provide any captured scrutiny logs or panic dumps during your issue reproduction in this field.
|
||||||
|
render: text
|
||||||
|
- type: input
|
||||||
|
attributes:
|
||||||
|
label: Scrutiny Version
|
||||||
|
description: The version of scrutiny you are using
|
||||||
|
placeholder: v0.8.2
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
- type: input
|
||||||
|
attributes:
|
||||||
|
label: Smartmontools Version
|
||||||
|
description: The version of smartmontools you are using (or "docker", if you're using the docker image)
|
||||||
|
placeholder: "7.2"
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
- type: input
|
||||||
|
attributes:
|
||||||
|
label: OS Version Information
|
||||||
|
description: |
|
||||||
|
Please tell us what operating system (name and version) you are using.
|
||||||
|
placeholder: Ubuntu 24.04.1 (Noble Numbat)
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
- type: dropdown
|
||||||
|
attributes:
|
||||||
|
label: Component
|
||||||
|
description: Which component of scrutiny has a problem?
|
||||||
|
options:
|
||||||
|
- web
|
||||||
|
- collector
|
||||||
|
- omnibus (docker only)
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
- type: checkboxes
|
||||||
|
attributes:
|
||||||
|
label: Deployment Method
|
||||||
|
description: How are you running scrutiny?
|
||||||
|
options:
|
||||||
|
- label: docker
|
||||||
|
- label: binaries
|
||||||
|
- label: systemd
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
- type: input
|
||||||
|
attributes:
|
||||||
|
label: Hard Drive Information
|
||||||
|
description: |
|
||||||
|
If the problem is related to a specific hard drive, what are the make and model?
|
||||||
|
placeholder: Seagate ST8000DM004-2CX188
|
||||||
|
validations:
|
||||||
|
required: false
|
||||||
|
- type: textarea
|
||||||
|
attributes:
|
||||||
|
label: smartctl output
|
||||||
|
description: |
|
||||||
|
What is the output of smartctl --xall --json <drive>?
|
||||||
|
render: json
|
||||||
|
validations:
|
||||||
|
required: false
|
||||||
|
- type: textarea
|
||||||
|
attributes:
|
||||||
|
label: scrutiny.yaml
|
||||||
|
description: |
|
||||||
|
Please provide your full scrutiny.yaml file.
|
||||||
|
render: yaml
|
||||||
|
validations:
|
||||||
|
required: false
|
||||||
|
- type: textarea
|
||||||
|
attributes:
|
||||||
|
label: collector.yaml
|
||||||
|
description: |
|
||||||
|
Please provide your full collector.yaml file.
|
||||||
|
render: yaml
|
||||||
|
validations:
|
||||||
|
required: false
|
||||||
|
- type: textarea
|
||||||
|
attributes:
|
||||||
|
label: Additional relevant configuration
|
||||||
|
description: |
|
||||||
|
Please any additional relevant configuration (e.g. systemd service definitions, OS configuration)
|
||||||
|
render: text
|
||||||
|
validations:
|
||||||
|
required: false
|
||||||
|
- type: markdown
|
||||||
|
attributes:
|
||||||
|
value: |
|
||||||
|
# User Acknowledgements
|
||||||
|
> [!TIP]
|
||||||
|
> Use these links to review the existing scrutiny [Discussions](https://github.com/AnalogJ/scrutiny/discussions?discussions_q=) and [Issues](https://github.com/AnalogJ/scrutiny/issues?q=sort%3Areactions-desc).
|
||||||
|
- type: checkboxes
|
||||||
|
attributes:
|
||||||
|
label: "I acknowledge that:"
|
||||||
|
options:
|
||||||
|
- label: I have reviewed the FAQ and confirm that my issue is NOT among them.
|
||||||
|
required: true
|
||||||
|
- label: I have searched the scrutiny repository (both open and closed Discussions and Issues) and confirm this is not a duplicate of an existing issue or discussion.
|
||||||
|
required: true
|
||||||
|
- label: I have checked the "Preview" tab on all text fields to ensure that everything looks right, and have wrapped all configuration and code in code blocks with a group of three backticks (` ``` `) on separate lines.
|
||||||
|
required: true
|
||||||
@@ -1,42 +0,0 @@
|
|||||||
---
|
|
||||||
name: Bug report
|
|
||||||
about: Create a report to help us improve
|
|
||||||
title: "[BUG]"
|
|
||||||
labels: bug
|
|
||||||
assignees: ''
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
**Describe the bug**
|
|
||||||
A clear and concise description of what the bug is.
|
|
||||||
|
|
||||||
**Expected behavior**
|
|
||||||
A clear and concise description of what you expected to happen.
|
|
||||||
|
|
||||||
**Screenshots**
|
|
||||||
If applicable, add screenshots to help explain your problem.
|
|
||||||
|
|
||||||
**Log Files**
|
|
||||||
If related to missing devices or SMART data, please run the `collector` in DEBUG mode, and attach the log file.
|
|
||||||
See [/docs/TROUBLESHOOTING_DEVICE_COLLECTOR.md](docs/TROUBLESHOOTING_DEVICE_COLLECTOR.md) for other troubleshooting tips.
|
|
||||||
|
|
||||||
```
|
|
||||||
docker run -it --rm -p 8080:8080 \
|
|
||||||
-v `pwd`/config:/opt/scrutiny/config \
|
|
||||||
-v /run/udev:/run/udev:ro \
|
|
||||||
--cap-add SYS_RAWIO \
|
|
||||||
--device=/dev/sda \
|
|
||||||
--device=/dev/sdb \
|
|
||||||
-e DEBUG=true \
|
|
||||||
-e COLLECTOR_LOG_FILE=/opt/scrutiny/config/collector.log \
|
|
||||||
-e SCRUTINY_LOG_FILE=/opt/scrutiny/config/web.log \
|
|
||||||
--name scrutiny \
|
|
||||||
ghcr.io/analogj/scrutiny:master-omnibus
|
|
||||||
|
|
||||||
# in another terminal trigger the collector
|
|
||||||
docker exec scrutiny scrutiny-collector-metrics run
|
|
||||||
```
|
|
||||||
|
|
||||||
The log files will be available on your host in the `config` directory. Please attach them to this issue.
|
|
||||||
|
|
||||||
Please also provide the output of `docker info`
|
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
blank_issues_enabled: false
|
||||||
|
contact_links:
|
||||||
|
- name: Features, Bug Reports, Questions
|
||||||
|
url: https://github.com/AnalogJ/scrutiny/discussions/new/choose
|
||||||
|
about: Our preferred starting point if you have any questions or suggestions about configuration, features or behavior.
|
||||||
@@ -1,17 +0,0 @@
|
|||||||
---
|
|
||||||
name: Feature request
|
|
||||||
about: Suggest an idea for this project
|
|
||||||
title: "[FEAT]"
|
|
||||||
labels: ''
|
|
||||||
assignees: ''
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
**Is your feature request related to a problem? Please describe.**
|
|
||||||
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
|
|
||||||
|
|
||||||
**Describe the solution you'd like**
|
|
||||||
A clear and concise description of what you want to happen.
|
|
||||||
|
|
||||||
**Additional context**
|
|
||||||
Add any other context or screenshots about the feature request here.
|
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
---
|
||||||
|
name: Pre-Discussed and Approved Topics
|
||||||
|
about: |-
|
||||||
|
Only for topics already discussed and approved in the GitHub Discussions section.
|
||||||
|
---
|
||||||
|
|
||||||
|
**DO NOT OPEN A NEW ISSUE. PLEASE USE THE DISCUSSIONS SECTION.**
|
||||||
|
|
||||||
|
**I DIDN'T READ THE ABOVE LINE. PLEASE CLOSE THIS ISSUE.**
|
||||||
@@ -1,7 +1,6 @@
|
|||||||
name: Docker
|
name: Docker
|
||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
branches: [ master, beta ]
|
|
||||||
# Publish semver tags as releases.
|
# Publish semver tags as releases.
|
||||||
tags: [ 'v*.*.*' ]
|
tags: [ 'v*.*.*' ]
|
||||||
|
|
||||||
@@ -18,20 +17,17 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v6
|
||||||
with:
|
|
||||||
fetch-depth: 0
|
|
||||||
- name: Set up QEMU
|
- name: Set up QEMU
|
||||||
uses: docker/setup-qemu-action@v2
|
uses: docker/setup-qemu-action@v3
|
||||||
with:
|
with:
|
||||||
platforms: 'arm64,arm'
|
platforms: 'arm64,arm'
|
||||||
- name: Set up Docker Buildx
|
- name: Set up Docker Buildx
|
||||||
uses: docker/setup-buildx-action@v2
|
uses: docker/setup-buildx-action@v3
|
||||||
# Login against a Docker registry except on PR
|
# Login against a Docker registry except on PR
|
||||||
# https://github.com/docker/login-action
|
# https://github.com/docker/login-action
|
||||||
- name: Log into registry ${{ env.REGISTRY }}
|
- name: Log into registry ${{ env.REGISTRY }}
|
||||||
if: github.event_name != 'pull_request'
|
uses: docker/login-action@v3
|
||||||
uses: docker/login-action@v2
|
|
||||||
with:
|
with:
|
||||||
registry: ${{ env.REGISTRY }}
|
registry: ${{ env.REGISTRY }}
|
||||||
username: ${{ github.actor }}
|
username: ${{ github.actor }}
|
||||||
@@ -40,30 +36,30 @@ jobs:
|
|||||||
# https://github.com/docker/metadata-action
|
# https://github.com/docker/metadata-action
|
||||||
- name: Extract Docker metadata
|
- name: Extract Docker metadata
|
||||||
id: meta
|
id: meta
|
||||||
uses: docker/metadata-action@v4
|
uses: docker/metadata-action@v5
|
||||||
with:
|
with:
|
||||||
flavor: |
|
flavor: |
|
||||||
latest=false
|
latest=true
|
||||||
|
suffix=-collector,onlatest=true
|
||||||
tags: |
|
tags: |
|
||||||
type=ref,enable=true,event=branch,suffix=-collector
|
type=semver,pattern=v{{major}}.{{minor}}.{{patch}}
|
||||||
type=semver,pattern=v{{major}}.{{minor}}.{{patch}},suffix=-collector
|
type=semver,pattern=v{{major}}.{{minor}}
|
||||||
type=semver,pattern=v{{major}}.{{minor}},suffix=-collector
|
type=semver,pattern=v{{major}}
|
||||||
type=semver,pattern=v{{major}},suffix=-collector
|
|
||||||
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
|
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
|
||||||
|
|
||||||
# Build and push Docker image with Buildx (don't push on PR)
|
# Build and push Docker image with Buildx
|
||||||
# https://github.com/docker/build-push-action
|
# https://github.com/docker/build-push-action
|
||||||
- name: Build and push Docker image
|
- name: Build and push Docker image
|
||||||
uses: docker/build-push-action@v3
|
uses: docker/build-push-action@v6
|
||||||
with:
|
with:
|
||||||
platforms: linux/amd64,linux/arm64,linux/arm/v7
|
platforms: linux/amd64,linux/arm64,linux/arm/v7
|
||||||
context: .
|
context: .
|
||||||
file: docker/Dockerfile.collector
|
file: docker/Dockerfile.collector
|
||||||
push: ${{ github.event_name != 'pull_request' }}
|
push: true
|
||||||
tags: ${{ steps.meta.outputs.tags }}
|
tags: ${{ steps.meta.outputs.tags }}
|
||||||
labels: ${{ steps.meta.outputs.labels }}
|
labels: ${{ steps.meta.outputs.labels }}
|
||||||
# cache-from: type=gha
|
cache-from: type=gha
|
||||||
# cache-to: type=gha,mode=max
|
cache-to: type=gha,mode=max
|
||||||
|
|
||||||
web:
|
web:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
@@ -73,20 +69,19 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
uses: actions/checkout@v2
|
uses: actions/checkout@v6
|
||||||
- name: "Populate frontend version information"
|
- name: "Populate frontend version information"
|
||||||
run: "cd webapp/frontend && ./git.version.sh"
|
run: "cd webapp/frontend && ./git.version.sh"
|
||||||
- name: Set up QEMU
|
- name: Set up QEMU
|
||||||
uses: docker/setup-qemu-action@v2
|
uses: docker/setup-qemu-action@v3
|
||||||
with:
|
with:
|
||||||
platforms: 'arm64,arm'
|
platforms: 'arm64,arm'
|
||||||
- name: Set up Docker Buildx
|
- name: Set up Docker Buildx
|
||||||
uses: docker/setup-buildx-action@v2
|
uses: docker/setup-buildx-action@v3
|
||||||
# Login against a Docker registry except on PR
|
# Login against a Docker registry except on PR
|
||||||
# https://github.com/docker/login-action
|
# https://github.com/docker/login-action
|
||||||
- name: Log into registry ${{ env.REGISTRY }}
|
- name: Log into registry ${{ env.REGISTRY }}
|
||||||
if: github.event_name != 'pull_request'
|
uses: docker/login-action@v3
|
||||||
uses: docker/login-action@v2
|
|
||||||
with:
|
with:
|
||||||
registry: ${{ env.REGISTRY }}
|
registry: ${{ env.REGISTRY }}
|
||||||
username: ${{ github.actor }}
|
username: ${{ github.actor }}
|
||||||
@@ -95,29 +90,31 @@ jobs:
|
|||||||
# https://github.com/docker/metadata-action
|
# https://github.com/docker/metadata-action
|
||||||
- name: Extract Docker metadata
|
- name: Extract Docker metadata
|
||||||
id: meta
|
id: meta
|
||||||
uses: docker/metadata-action@v4
|
uses: docker/metadata-action@v5
|
||||||
with:
|
with:
|
||||||
flavor: |
|
flavor: |
|
||||||
latest=false
|
latest=true
|
||||||
|
suffix=-web,onlatest=true
|
||||||
tags: |
|
tags: |
|
||||||
type=ref,enable=true,event=branch,suffix=-web
|
type=semver,pattern=v{{major}}.{{minor}}.{{patch}}
|
||||||
type=semver,pattern=v{{major}}.{{minor}}.{{patch}},suffix=-web
|
type=semver,pattern=v{{major}}.{{minor}}
|
||||||
type=semver,pattern=v{{major}}.{{minor}},suffix=-web
|
type=semver,pattern=v{{major}}
|
||||||
type=semver,pattern=v{{major}},suffix=-web
|
|
||||||
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
|
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
|
||||||
# Build and push Docker image with Buildx (don't push on PR)
|
|
||||||
|
# Build and push Docker image with Buildx
|
||||||
# https://github.com/docker/build-push-action
|
# https://github.com/docker/build-push-action
|
||||||
- name: Build and push Docker image
|
- name: Build and push Docker image
|
||||||
uses: docker/build-push-action@v3
|
uses: docker/build-push-action@v6
|
||||||
with:
|
with:
|
||||||
platforms: linux/amd64,linux/arm64,linux/arm/v7
|
platforms: linux/amd64,linux/arm64,linux/arm/v7
|
||||||
context: .
|
context: .
|
||||||
file: docker/Dockerfile.web
|
file: docker/Dockerfile.collector
|
||||||
push: ${{ github.event_name != 'pull_request' }}
|
push: true
|
||||||
tags: ${{ steps.meta.outputs.tags }}
|
tags: ${{ steps.meta.outputs.tags }}
|
||||||
labels: ${{ steps.meta.outputs.labels }}
|
labels: ${{ steps.meta.outputs.labels }}
|
||||||
# cache-from: type=gha
|
cache-from: type=gha
|
||||||
# cache-to: type=gha,mode=max
|
cache-to: type=gha,mode=max
|
||||||
|
|
||||||
omnibus:
|
omnibus:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
permissions:
|
permissions:
|
||||||
@@ -126,20 +123,19 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
uses: actions/checkout@v2
|
uses: actions/checkout@v6
|
||||||
- name: "Populate frontend version information"
|
- name: "Populate frontend version information"
|
||||||
run: "cd webapp/frontend && ./git.version.sh"
|
run: "cd webapp/frontend && ./git.version.sh"
|
||||||
- name: Set up QEMU
|
- name: Set up QEMU
|
||||||
uses: docker/setup-qemu-action@v2
|
uses: docker/setup-qemu-action@v3
|
||||||
with:
|
with:
|
||||||
platforms: 'arm64,arm'
|
platforms: 'arm64,arm'
|
||||||
- name: Set up Docker Buildx
|
- name: Set up Docker Buildx
|
||||||
uses: docker/setup-buildx-action@v2
|
uses: docker/setup-buildx-action@v3
|
||||||
# Login against a Docker registry except on PR
|
# Login against a Docker registry except on PR
|
||||||
# https://github.com/docker/login-action
|
# https://github.com/docker/login-action
|
||||||
- name: Log into registry ${{ env.REGISTRY }}
|
- name: Log into registry ${{ env.REGISTRY }}
|
||||||
if: github.event_name != 'pull_request'
|
uses: docker/login-action@v3
|
||||||
uses: docker/login-action@v2
|
|
||||||
with:
|
with:
|
||||||
registry: ${{ env.REGISTRY }}
|
registry: ${{ env.REGISTRY }}
|
||||||
username: ${{ github.actor }}
|
username: ${{ github.actor }}
|
||||||
@@ -148,24 +144,29 @@ jobs:
|
|||||||
# https://github.com/docker/metadata-action
|
# https://github.com/docker/metadata-action
|
||||||
- name: Extract Docker metadata
|
- name: Extract Docker metadata
|
||||||
id: meta
|
id: meta
|
||||||
uses: docker/metadata-action@v4
|
uses: docker/metadata-action@v5
|
||||||
with:
|
with:
|
||||||
|
flavor: |
|
||||||
|
latest=true
|
||||||
|
# tag latest and latest-omnibus
|
||||||
|
suffix=-omnibus,onlatest=false
|
||||||
tags: |
|
tags: |
|
||||||
type=ref,enable=true,event=branch,suffix=-omnibus
|
type=raw,value=latest
|
||||||
type=semver,pattern=v{{major}}.{{minor}}.{{patch}},suffix=-omnibus
|
type=semver,pattern=v{{major}}.{{minor}}.{{patch}}
|
||||||
type=semver,pattern=v{{major}}.{{minor}},suffix=-omnibus
|
type=semver,pattern=v{{major}}.{{minor}}
|
||||||
type=semver,pattern=v{{major}},suffix=-omnibus
|
type=semver,pattern=v{{major}}
|
||||||
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
|
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
|
||||||
# Build and push Docker image with Buildx (don't push on PR)
|
|
||||||
|
# Build and push Docker image with Buildx
|
||||||
# https://github.com/docker/build-push-action
|
# https://github.com/docker/build-push-action
|
||||||
- name: Build and push Docker image
|
- name: Build and push Docker image
|
||||||
uses: docker/build-push-action@v3
|
uses: docker/build-push-action@v6
|
||||||
with:
|
with:
|
||||||
platforms: linux/amd64,linux/arm64
|
platforms: linux/amd64,linux/arm64,linux/arm/v7
|
||||||
context: .
|
context: .
|
||||||
file: docker/Dockerfile
|
file: docker/Dockerfile.collector
|
||||||
push: ${{ github.event_name != 'pull_request' }}
|
push: true
|
||||||
tags: ${{ steps.meta.outputs.tags }}
|
tags: ${{ steps.meta.outputs.tags }}
|
||||||
labels: ${{ steps.meta.outputs.labels }}
|
labels: ${{ steps.meta.outputs.labels }}
|
||||||
# cache-from: type=gha
|
cache-from: type=gha
|
||||||
# cache-to: type=gha,mode=max
|
cache-to: type=gha,mode=max
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
name: Docker - Nightly
|
name: Docker - Nightly
|
||||||
on:
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
|
# Note: this only runs on the default branch
|
||||||
schedule:
|
schedule:
|
||||||
- cron: '36 12 * * *'
|
- cron: '36 12 * * *'
|
||||||
|
|
||||||
@@ -8,7 +10,7 @@ env:
|
|||||||
IMAGE_NAME: ${{ github.repository }}
|
IMAGE_NAME: ${{ github.repository }}
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
omnibus:
|
build_nightlies:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
permissions:
|
permissions:
|
||||||
contents: read
|
contents: read
|
||||||
@@ -16,44 +18,86 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
uses: actions/checkout@v2
|
uses: actions/checkout@v6
|
||||||
- name: "Populate frontend version information"
|
- name: "Populate frontend version information"
|
||||||
run: "cd webapp/frontend && ./git.version.sh"
|
run: "cd webapp/frontend && ./git.version.sh"
|
||||||
- name: Set up QEMU
|
- name: Set up QEMU
|
||||||
uses: docker/setup-qemu-action@v2
|
uses: docker/setup-qemu-action@v3
|
||||||
with:
|
with:
|
||||||
platforms: 'arm64,arm'
|
platforms: 'arm64'
|
||||||
- name: Set up Docker Buildx
|
- name: Set up Docker Buildx
|
||||||
uses: docker/setup-buildx-action@v2
|
uses: docker/setup-buildx-action@v3
|
||||||
# Login against a Docker registry except on PR
|
# Login against a Docker registry except on PR
|
||||||
# https://github.com/docker/login-action
|
# https://github.com/docker/login-action
|
||||||
- name: Log into registry ${{ env.REGISTRY }}
|
- name: Log into registry ${{ env.REGISTRY }}
|
||||||
if: github.event_name != 'pull_request'
|
uses: docker/login-action@v3
|
||||||
uses: docker/login-action@v2
|
|
||||||
with:
|
with:
|
||||||
registry: ${{ env.REGISTRY }}
|
registry: ${{ env.REGISTRY }}
|
||||||
username: ${{ github.actor }}
|
username: ${{ github.actor }}
|
||||||
password: ${{ secrets.GITHUB_TOKEN }}
|
password: ${{ secrets.GITHUB_TOKEN }}
|
||||||
# Extract metadata (tags, labels) for Docker
|
# Extract metadata (tags, labels) for Docker
|
||||||
# https://github.com/docker/metadata-action
|
# https://github.com/docker/metadata-action
|
||||||
- name: Extract Docker metadata
|
- name: Extract Docker metadata for omnibus
|
||||||
id: meta
|
id: meta_omnibus
|
||||||
uses: docker/metadata-action@v4
|
uses: docker/metadata-action@v5
|
||||||
with:
|
with:
|
||||||
tags: |
|
tags: |
|
||||||
type=ref,enable=true,event=branch,suffix=-omnibus-nightly
|
type=raw,enable=true,value=nightly,suffix=-omnibus
|
||||||
type=ref,enable=true,event=tag,suffix=-omnibus-nightly
|
|
||||||
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
|
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
|
||||||
# Build and push Docker image with Buildx (don't push on PR)
|
# Build and push Docker image with Buildx (don't push on PR)
|
||||||
# https://github.com/docker/build-push-action
|
# https://github.com/docker/build-push-action
|
||||||
- name: Build and push Docker image
|
- name: Build and push omnibus Docker image
|
||||||
uses: docker/build-push-action@v3
|
uses: docker/build-push-action@v6
|
||||||
with:
|
with:
|
||||||
platforms: linux/amd64,linux/arm64
|
platforms: linux/amd64,linux/arm64
|
||||||
context: .
|
context: .
|
||||||
file: docker/Dockerfile
|
file: docker/Dockerfile
|
||||||
push: false
|
push: true
|
||||||
tags: ${{ steps.meta.outputs.tags }}
|
tags: ${{ steps.meta_omnibus.outputs.tags }}
|
||||||
labels: ${{ steps.meta.outputs.labels }}
|
labels: ${{ steps.meta_omnibus.outputs.labels }}
|
||||||
# cache-from: type=gha
|
cache-from: type=gha
|
||||||
# cache-to: type=gha,mode=max
|
cache-to: type=gha,mode=max
|
||||||
|
# Extract metadata (tags, labels) for Docker
|
||||||
|
# https://github.com/docker/metadata-action
|
||||||
|
- name: Extract Docker metadata for collector
|
||||||
|
id: meta_collector
|
||||||
|
uses: docker/metadata-action@v5
|
||||||
|
with:
|
||||||
|
tags: |
|
||||||
|
type=raw,enable=true,value=nightly,suffix=-collector
|
||||||
|
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
|
||||||
|
# Build and push Docker image with Buildx (don't push on PR)
|
||||||
|
# https://github.com/docker/build-push-action
|
||||||
|
- name: Build and push collector Docker image
|
||||||
|
uses: docker/build-push-action@v6
|
||||||
|
with:
|
||||||
|
platforms: linux/amd64,linux/arm64
|
||||||
|
context: .
|
||||||
|
file: docker/Dockerfile.collector
|
||||||
|
push: true
|
||||||
|
tags: ${{ steps.meta_collector.outputs.tags }}
|
||||||
|
labels: ${{ steps.meta_collector.outputs.labels }}
|
||||||
|
cache-from: type=gha
|
||||||
|
cache-to: type=gha,mode=max
|
||||||
|
# Extract metadata (tags, labels) for Docker
|
||||||
|
# https://github.com/docker/metadata-action
|
||||||
|
- name: Extract Docker metadata for web
|
||||||
|
id: meta_web
|
||||||
|
uses: docker/metadata-action@v5
|
||||||
|
with:
|
||||||
|
tags: |
|
||||||
|
type=raw,enable=true,value=nightly,suffix=-web
|
||||||
|
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
|
||||||
|
# Build and push Docker image with Buildx (don't push on PR)
|
||||||
|
# https://github.com/docker/build-push-action
|
||||||
|
- name: Build and push web Docker image
|
||||||
|
uses: docker/build-push-action@v6
|
||||||
|
with:
|
||||||
|
platforms: linux/amd64,linux/arm64
|
||||||
|
context: .
|
||||||
|
file: docker/Dockerfile.web
|
||||||
|
push: true
|
||||||
|
tags: ${{ steps.meta_web.outputs.tags }}
|
||||||
|
labels: ${{ steps.meta_web.outputs.labels }}
|
||||||
|
cache-from: type=gha
|
||||||
|
cache-to: type=gha,mode=max
|
||||||
|
|||||||
+140
-2
@@ -1,6 +1,144 @@
|
|||||||
# Contributing
|
# Contributing to scrutiny
|
||||||
|
|
||||||
**Please see our [AI policy](./AI_POLICY.md).**
|
This document describes the process of contributing to scrutiny. It is intended
|
||||||
|
for anyone considering opening an **issue**, **discussion** or **pull request**.
|
||||||
|
|
||||||
|
> [!NOTE]
|
||||||
|
>
|
||||||
|
> The intention of these policies is not to be difficult, and
|
||||||
|
> contributions are greatly appreciated. The goal is to streamline
|
||||||
|
> and simplify the efforts of both contributers and maintainers.
|
||||||
|
|
||||||
|
## AI Usage
|
||||||
|
|
||||||
|
scrutiny has strict rules for AI usage. Please see
|
||||||
|
the [AI Usage Policy](AI_POLICY.md). **This is very important.**
|
||||||
|
|
||||||
|
## Quick Guide
|
||||||
|
|
||||||
|
### I'd like to contribute
|
||||||
|
|
||||||
|
[All issues are actionable](#issues-are-actionable). Pick one and start
|
||||||
|
working on it. Thank you. If you need help or guidance, comment on the issue.
|
||||||
|
Issues that are extra friendly to new contributors are tagged with
|
||||||
|
["contributor friendly"].
|
||||||
|
|
||||||
|
["contributor friendly"]: https://github.com/AnalogJ/scrutiny/issues?q=is%3Aissue%20is%3Aopen%20label%3A%22contributor%20friendly%22
|
||||||
|
|
||||||
|
### I have a bug! / Something isn't working
|
||||||
|
|
||||||
|
First, search the issue tracker and discussions for similar issues. Tip: also
|
||||||
|
search for [closed issues] and [discussions] — your issue might have already
|
||||||
|
been fixed!
|
||||||
|
|
||||||
|
> [!NOTE]
|
||||||
|
>
|
||||||
|
> If there is an _open_ issue or discussion that matches your problem,
|
||||||
|
> **please do not comment on it unless you have valuable insight to add**.
|
||||||
|
>
|
||||||
|
> GitHub has a very _noisy_ set of default notification settings which
|
||||||
|
> sends an email to _every participant_ in an issue/discussion every time
|
||||||
|
> someone adds a comment. Instead, use the handy upvote button for discussions,
|
||||||
|
> and/or emoji reactions on both discussions and issues, which are a visible
|
||||||
|
> yet non-disruptive way to show your support.
|
||||||
|
|
||||||
|
If your issue hasn't been reported already, open an ["Issue Triage"] discussion
|
||||||
|
and make sure to fill in the template **completely**. They are vital for
|
||||||
|
maintainers to figure out important details about your setup.
|
||||||
|
|
||||||
|
> [!WARNING]
|
||||||
|
>
|
||||||
|
> A _very_ common mistake is to file a bug report either as a Q&A or a Feature
|
||||||
|
> Request. **Please don't do this.** Otherwise, maintainers would have to ask
|
||||||
|
> for your system information again manually, and sometimes they will even ask
|
||||||
|
> you to create a new discussion because of how few detailed information is
|
||||||
|
> required for other discussion types compared to Issue Triage.
|
||||||
|
>
|
||||||
|
> Because of this, please make sure that you _only_ use the "Issue Triage"
|
||||||
|
> category for reporting bugs — thank you!
|
||||||
|
|
||||||
|
[closed issues]: https://github.com/AnalogJ/scrutiny/issues?q=is%3Aissue%20state%3Aclosed
|
||||||
|
[discussions]: https://github.com/AnalogJ/scrutiny/discussions?discussions_q=is%3Aclosed
|
||||||
|
["Issue Triage"]: https://github.com/AnalogJ/scrutiny/discussions/new?category=issue-triage
|
||||||
|
|
||||||
|
### I have an idea for a feature
|
||||||
|
|
||||||
|
Like bug reports, first search through both issues and discussions and try to
|
||||||
|
find if your feature has already been requested. Otherwise, open a discussion
|
||||||
|
in the ["Feature Requests, Ideas"] category.
|
||||||
|
|
||||||
|
["Feature Requests, Ideas"]: https://github.com/AnalogJ/scrutiny/discussions/new?category=feature-requests-ideas
|
||||||
|
|
||||||
|
### I've implemented a feature
|
||||||
|
|
||||||
|
1. If there is an issue for the feature, open a pull request straight away.
|
||||||
|
2. If there is no issue, open a discussion and link to your branch.
|
||||||
|
3. If you want to live dangerously, open a pull request and
|
||||||
|
[hope for the best](#pull-requests-implement-an-issue).
|
||||||
|
|
||||||
|
### I have a question which is neither a bug report nor a feature request
|
||||||
|
|
||||||
|
Open a [Q&A discussion].
|
||||||
|
|
||||||
|
> [!NOTE]
|
||||||
|
> If your question is about a missing feature, please open a discussion under
|
||||||
|
> the ["Feature Requests, Ideas"] category. If scrutiny is behaving
|
||||||
|
> unexpectedly, use the ["Issue Triage"] category.
|
||||||
|
>
|
||||||
|
> The "Q&A" category is strictly for other kinds of discussions and do not
|
||||||
|
> require detailed information unlike the two other categories, meaning that
|
||||||
|
> maintainers would have to spend the extra effort to ask for basic information
|
||||||
|
> if you submit a bug report under this category.
|
||||||
|
>
|
||||||
|
> Therefore, please **pay attention to the category** before opening
|
||||||
|
> discussions to save us all some time and energy. Thank you!
|
||||||
|
|
||||||
|
[Q&A discussion]: https://github.com/AnalogJ/scrutiny/discussions/new?category=q-a
|
||||||
|
|
||||||
|
## General Patterns
|
||||||
|
|
||||||
|
### Issues are Actionable
|
||||||
|
|
||||||
|
The scrutiny [issue tracker](https://github.com/AnalogJ/scrutiny/issues)
|
||||||
|
is for _actionable items_.
|
||||||
|
|
||||||
|
Unlike some other projects, scrutiny **does not use the issue tracker for
|
||||||
|
discussion or feature requests**. Instead, we use GitHub
|
||||||
|
[discussions](https://github.com/AnalogJ/scrutiny/discussions) for that.
|
||||||
|
Once a discussion reaches a point where a well-understood, actionable
|
||||||
|
item is identified, it is moved to the issue tracker. **This pattern
|
||||||
|
makes it easier for maintainers or contributors to find issues to work on
|
||||||
|
since _every issue_ is ready to be worked on.**
|
||||||
|
|
||||||
|
If you are experiencing a bug and have clear steps to reproduce it, please
|
||||||
|
open an issue. If you are experiencing a bug but you are not sure how to
|
||||||
|
reproduce it or aren't sure if it's a bug, please open a discussion.
|
||||||
|
If you have an idea for a feature, please open a discussion.
|
||||||
|
|
||||||
|
### Pull Requests Implement an Issue
|
||||||
|
|
||||||
|
Pull requests should be associated with a previously accepted issue.
|
||||||
|
**If you open a pull request for something that wasn't previously discussed,**
|
||||||
|
it may be closed or remain stale for an indefinite period of time. I'm not
|
||||||
|
saying it will never be accepted, but the odds are stacked against you.
|
||||||
|
|
||||||
|
Issues tagged with "feature" represent accepted, well-scoped feature requests.
|
||||||
|
If you implement an issue tagged with feature as described in the issue, your
|
||||||
|
pull request will be accepted with a high degree of certainty.
|
||||||
|
|
||||||
|
> [!NOTE]
|
||||||
|
>
|
||||||
|
> **Pull requests are NOT a place to discuss feature design.** Please do
|
||||||
|
> not open a WIP pull request to discuss a feature. Instead, use a discussion
|
||||||
|
> and link to your branch.
|
||||||
|
|
||||||
|
# Developer Guide
|
||||||
|
|
||||||
|
> [!NOTE]
|
||||||
|
>
|
||||||
|
> **The remainder of this file is dedicated to developers actively
|
||||||
|
> working on scrutiny.** If you're a user reporting an issue, you can
|
||||||
|
> ignore the rest of this document.
|
||||||
|
|
||||||
The Scrutiny repository is a [monorepo](https://en.wikipedia.org/wiki/Monorepo) containing source code for:
|
The Scrutiny repository is a [monorepo](https://en.wikipedia.org/wiki/Monorepo) containing source code for:
|
||||||
- Scrutiny Backend Server (API)
|
- Scrutiny Backend Server (API)
|
||||||
|
|||||||
@@ -67,6 +67,11 @@ See [docs/TROUBLESHOOTING_DEVICE_COLLECTOR.md](./docs/TROUBLESHOOTING_DEVICE_COL
|
|||||||
|
|
||||||
## Docker
|
## Docker
|
||||||
|
|
||||||
|
> [!IMPORTANT]
|
||||||
|
> Using `latest-` tags is dangerous as it can update your image without warning. It is a best practice to pin a specific version. scrutiny pushes releases with semver tags,
|
||||||
|
> so you can use tags like `v0.8.2-omnibus`, `v0.8-web`, `v0-collector`, etc. For a list of all image tags see
|
||||||
|
> [scrutiny package versions](https://github.com/AnalogJ/scrutiny/pkgs/container/scrutiny/versions?filters%5Bversion_type%5D=tagged)
|
||||||
|
|
||||||
If you're using Docker, getting started is as simple as running the following command:
|
If you're using Docker, getting started is as simple as running the following command:
|
||||||
|
|
||||||
> See [docker/example.omnibus.docker-compose.yml](https://github.com/AnalogJ/scrutiny/blob/master/docker/example.omnibus.docker-compose.yml) for a docker-compose file.
|
> See [docker/example.omnibus.docker-compose.yml](https://github.com/AnalogJ/scrutiny/blob/master/docker/example.omnibus.docker-compose.yml) for a docker-compose file.
|
||||||
@@ -80,23 +85,23 @@ docker run -p 8080:8080 -p 8086:8086 --restart unless-stopped \
|
|||||||
--device=/dev/sda \
|
--device=/dev/sda \
|
||||||
--device=/dev/sdb \
|
--device=/dev/sdb \
|
||||||
--name scrutiny \
|
--name scrutiny \
|
||||||
ghcr.io/analogj/scrutiny:master-omnibus
|
ghcr.io/analogj/scrutiny:latest-omnibus
|
||||||
```
|
```
|
||||||
|
|
||||||
- `/run/udev` is necessary to provide the Scrutiny collector with access to your device metadata
|
- `/run/udev` is necessary to provide the Scrutiny collector with access to your device metadata
|
||||||
- `--cap-add SYS_RAWIO` is necessary to allow `smartctl` permission to query your device SMART data
|
- `--cap-add SYS_RAWIO` is necessary to allow `smartctl` permission to query your device SMART data
|
||||||
- NOTE: If you have **NVMe** drives, you must add `--cap-add SYS_ADMIN` as well. See issue [#26](https://github.com/AnalogJ/scrutiny/issues/26#issuecomment-696817130)
|
- NOTE: If you have **NVMe** drives, you must add `--cap-add SYS_ADMIN` as well. See issue [#26](https://github.com/AnalogJ/scrutiny/issues/26#issuecomment-696817130)
|
||||||
- `--device` entries are required to ensure that your hard disk devices are accessible within the container.
|
- `--device` entries are required to ensure that your hard disk devices are accessible within the container.
|
||||||
- `ghcr.io/analogj/scrutiny:master-omnibus` is a omnibus image, containing both the webapp server (frontend & api) as well as the S.M.A.R.T metric collector. (see below)
|
- `ghcr.io/analogj/scrutiny:latest-omnibus` is a omnibus image, containing both the webapp server (frontend & api) as well as the S.M.A.R.T metric collector. (see below)
|
||||||
|
|
||||||
### Hub/Spoke Deployment
|
### Hub/Spoke Deployment
|
||||||
|
|
||||||
In addition to the Omnibus image (available under the `latest` tag) you can deploy in Hub/Spoke mode, which requires 3
|
In addition to the Omnibus image (available under the `latest` tag) you can deploy in Hub/Spoke mode, which requires 3
|
||||||
other Docker images:
|
other Docker images:
|
||||||
|
|
||||||
- `ghcr.io/analogj/scrutiny:master-collector` - Contains the Scrutiny data collector, `smartctl` binary and cron-like
|
- `ghcr.io/analogj/scrutiny:latest-collector` - Contains the Scrutiny data collector, `smartctl` binary and cron-like
|
||||||
scheduler. You can run one collector on each server.
|
scheduler. You can run one collector on each server.
|
||||||
- `ghcr.io/analogj/scrutiny:master-web` - Contains the Web UI and API. Only one container necessary
|
- `ghcr.io/analogj/scrutiny:latest-web` - Contains the Web UI and API. Only one container necessary
|
||||||
- `influxdb:2.2` - InfluxDB image, used by the Web container to persist SMART data. Only one container necessary
|
- `influxdb:2.2` - InfluxDB image, used by the Web container to persist SMART data. Only one container necessary
|
||||||
See [docs/TROUBLESHOOTING_INFLUXDB.md](./docs/TROUBLESHOOTING_INFLUXDB.md)
|
See [docs/TROUBLESHOOTING_INFLUXDB.md](./docs/TROUBLESHOOTING_INFLUXDB.md)
|
||||||
|
|
||||||
@@ -111,7 +116,7 @@ docker run -p 8086:8086 --restart unless-stopped \
|
|||||||
docker run -p 8080:8080 --restart unless-stopped \
|
docker run -p 8080:8080 --restart unless-stopped \
|
||||||
-v `pwd`/scrutiny:/opt/scrutiny/config \
|
-v `pwd`/scrutiny:/opt/scrutiny/config \
|
||||||
--name scrutiny-web \
|
--name scrutiny-web \
|
||||||
ghcr.io/analogj/scrutiny:master-web
|
ghcr.io/analogj/scrutiny:latest-web
|
||||||
|
|
||||||
docker run --restart unless-stopped \
|
docker run --restart unless-stopped \
|
||||||
-v /run/udev:/run/udev:ro \
|
-v /run/udev:/run/udev:ro \
|
||||||
@@ -120,7 +125,7 @@ docker run --restart unless-stopped \
|
|||||||
--device=/dev/sdb \
|
--device=/dev/sdb \
|
||||||
-e COLLECTOR_API_ENDPOINT=http://SCRUTINY_WEB_IPADDRESS:8080 \
|
-e COLLECTOR_API_ENDPOINT=http://SCRUTINY_WEB_IPADDRESS:8080 \
|
||||||
--name scrutiny-collector \
|
--name scrutiny-collector \
|
||||||
ghcr.io/analogj/scrutiny:master-collector
|
ghcr.io/analogj/scrutiny:latest-collector
|
||||||
```
|
```
|
||||||
|
|
||||||
## Manual Installation (without-Docker)
|
## Manual Installation (without-Docker)
|
||||||
@@ -157,7 +162,7 @@ Neither file is required, however if provided, it allows you to configure how Sc
|
|||||||
|
|
||||||
## Cron Schedule
|
## Cron Schedule
|
||||||
Unfortunately the Cron schedule cannot be configured via the `collector.yaml` (as the collector binary needs to be trigged by a scheduler/cron).
|
Unfortunately the Cron schedule cannot be configured via the `collector.yaml` (as the collector binary needs to be trigged by a scheduler/cron).
|
||||||
However, if you are using the official `ghcr.io/analogj/scrutiny:master-collector` or `ghcr.io/analogj/scrutiny:master-omnibus` docker images,
|
However, if you are using the official `ghcr.io/analogj/scrutiny:latest-collector` or `ghcr.io/analogj/scrutiny:latest-omnibus` docker images,
|
||||||
you can use the `COLLECTOR_CRON_SCHEDULE` environmental variable to override the default cron schedule (daily @ midnight - `0 0 * * *`).
|
you can use the `COLLECTOR_CRON_SCHEDULE` environmental variable to override the default cron schedule (daily @ midnight - `0 0 * * *`).
|
||||||
|
|
||||||
`docker run -e COLLECTOR_CRON_SCHEDULE="0 0 * * *" ...`
|
`docker run -e COLLECTOR_CRON_SCHEDULE="0 0 * * *" ...`
|
||||||
|
|||||||
@@ -80,7 +80,8 @@ services:
|
|||||||
scrutiny:
|
scrutiny:
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
container_name: scrutiny
|
container_name: scrutiny
|
||||||
image: ghcr.io/analogj/scrutiny:master-web
|
# best practice: pin to a specific release instead of latest
|
||||||
|
image: ghcr.io/analogj/scrutiny:latest-web
|
||||||
ports:
|
ports:
|
||||||
- 8080:8080
|
- 8080:8080
|
||||||
volumes:
|
volumes:
|
||||||
@@ -169,7 +170,8 @@ services:
|
|||||||
|
|
||||||
collector:
|
collector:
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
image: 'ghcr.io/analogj/scrutiny:master-collector'
|
# best practice: pin to a specific release instead of latest
|
||||||
|
image: 'ghcr.io/analogj/scrutiny:latest-collector'
|
||||||
cap_add:
|
cap_add:
|
||||||
- SYS_RAWIO
|
- SYS_RAWIO
|
||||||
volumes:
|
volumes:
|
||||||
|
|||||||
@@ -1,22 +1,18 @@
|
|||||||
# Docker Images `master-omnibus` vs `latest`
|
# Docker Images `latest` vs `nightly`
|
||||||
|
|
||||||
> TL;DR; The `master-omnibus` and `latest` tags are almost semantically identical, as I follow a `golden master`
|
> TL;DR; The `latest-omnibus`, `latest-collector`, and `latest-web` tags point to the most recent release. (`latest` points to `latest-omnibus`)
|
||||||
development process. However if you want to ensure you're only using the latest release, you can change to `latest`
|
> The `nightly-omnibus`, `nightly-collector`, and `nightly-web` tags point to builds that are generated every night from the latest commit on the `master` branch.
|
||||||
|
|
||||||
The CI script used to orchestrate the docker image builds can be found here: https://github.com/AnalogJ/scrutiny/blob/master/.github/workflows/docker-build.yaml#L166-L184
|
The CD scripts used to orchestrate the docker image builds can be found here:
|
||||||
|
* https://github.com/AnalogJ/scrutiny/blob/master/.github/workflows/docker-build.yaml
|
||||||
|
* https://github.com/AnalogJ/scrutiny/blob/master/.github/workflows/docker-nightly.yaml
|
||||||
|
|
||||||
In general Scrutiny follows a `golden master` development process, which means that the `master` branch is not directly updated (unless its for documentation changes),
|
In general scrutiny follows a feature branch development process, which means that the `master` branch should ideally always be free of bugs
|
||||||
instead development is done in a feature branch, or committed to the `beta` branch.
|
This is driven by the requirement that every PR be reviewed and pass all tests. Unfortunately, bugs do make it through, especially because of the
|
||||||
|
enormous number of hard drives that scrutiny must support..
|
||||||
|
|
||||||
As development progresses, and we're satisfied that a feature is complete, and the quality is acceptable,
|
This means that while the nightly builds should have the latest features and bug fixes, there may be things that sneak through. Unless you need a particular
|
||||||
I merge the changes to `master` and trigger the creation of a new release -- ie, when master is updated, a new release
|
feature or bug fix, we recommend sticking to releases. Also note that using `latest` tags is generally considered a bad practice; pin a specific version instead.
|
||||||
is almost immediately created (and tagged with `latest`)
|
|
||||||
|
|
||||||
So changing from `master-omnibus -> latest` will be the same thing for all intents and purposes.
|
|
||||||
|
|
||||||
> NOTE: Previously, there was a `automated cron build` that ran on the `master` and `beta` branches.
|
|
||||||
They used to trigger a `nightly` build, even if nothing has changed on the branch. This has a couple of benefits, but one is to
|
|
||||||
ensure that there's no broken external dependencies in our (unchanged) code. This `nightly` build no longer updates the `master-omnibus` tag.
|
|
||||||
|
|
||||||
# Running Docker `rootless`
|
# Running Docker `rootless`
|
||||||
|
|
||||||
|
|||||||
@@ -2,4 +2,4 @@ package version
|
|||||||
|
|
||||||
// VERSION is the app-global version string, which will be replaced with a
|
// VERSION is the app-global version string, which will be replaced with a
|
||||||
// new value during packaging
|
// new value during packaging
|
||||||
const VERSION = "0.8.2"
|
const VERSION = "0.8.3"
|
||||||
|
|||||||
@@ -229,7 +229,10 @@ export class DashboardComponent implements OnInit, AfterViewInit, OnDestroy
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
xaxis: {
|
xaxis: {
|
||||||
type: 'datetime'
|
type: 'datetime',
|
||||||
|
labels: {
|
||||||
|
datetimeUTC: false
|
||||||
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ export class TemperaturePipe implements PipeTransform {
|
|||||||
temperature = TemperaturePipe.celsiusToFahrenheit(celsiusTemp)
|
temperature = TemperaturePipe.celsiusToFahrenheit(celsiusTemp)
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
return TemperaturePipe.formatTemperature(celsiusTemp, unit, includeUnits)
|
return TemperaturePipe.formatTemperature(temperature, unit, includeUnits)
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user