Skip to content

Commit

Permalink
Merge branch 'upstream/master' into pynest
Browse files Browse the repository at this point in the history
  • Loading branch information
mryel00 committed Feb 24, 2024
2 parents 2d128db + ba0ac8f commit d7c352a
Show file tree
Hide file tree
Showing 27 changed files with 1,001 additions and 72 deletions.
10 changes: 6 additions & 4 deletions .github/label-actions.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Configuration for Label Actions - https://github.com/dessant/label-actions

not on Github:
not an Issue:
issues:
comment: |
Ahoi!
Expand All @@ -9,10 +9,12 @@ not on Github:
Many helpful people will not see your message here and you are
unlikely to get a useful response.
We use github to handle bugreports, feature requests and
planning new releases.
We use the Github Issue-Tracker only for development related
topics, like feature requests, bug reports etc. To get help,
please join our Discord-Server or ask in Github Discussions:
Please use our Discord-Server for help: [discord.gg/mainsail](https://discord.gg/mainsail)
- [discord.gg/mainsail](https://discord.gg/mainsail)
- [GitHub Discussions](https://github.com/orgs/mainsail-crew/discussions)
This ticket will be automatically closed.
Expand Down
91 changes: 91 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
name: Release

on:
workflow_dispatch:
inputs:
version:
type: string
description: New version number in X.Y.Z
required: true

jobs:
update-master-branch:
runs-on: ubuntu-latest
steps:
- uses: everlytic/[email protected]
with:
github_token: ${{ secrets.PAT }}
source_ref: 'develop'
target_branch: 'master'
commit_message_template: '[Automated] Merged {source_ref} into target {target_branch}'

release:
needs: [ 'update-master-branch' ]
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- name: Fetch repo
uses: actions/checkout@v4
with:
ref: 'master'
fetch-depth: 0

- name: Get latest tag
id: latest_tag
shell: bash
run: |
echo "TAG_NAME=$(git describe --tags $(git rev-list --tags --max-count=1))" >> $GITHUB_OUTPUT
- name: Generate a changelog
uses: orhun/git-cliff-action@v2
id: generate-changelog
with:
config: ./cliff-release.toml
args: ${{ steps.latest_tag.outputs.TAG_NAME }}..HEAD

- name: Create release and upload build
uses: softprops/action-gh-release@v1
id: create-release
with:
name: v${{ github.event.inputs.version }}
tag_name: v${{ github.event.inputs.version }}
token: ${{ secrets.GITHUB_TOKEN }}
body: ${{ steps.generate-changelog.outputs.content }}

update-changelog:
needs: [ 'release' ]
name: Generate changelog
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
with:
ref: 'master'
token: ${{ secrets.PAT }}
fetch-depth: 0

- name: Get latest tag
id: latest_tag
shell: bash
run: |
echo "TAG_NAME=$(git describe --tags $(git rev-list --tags --max-count=1))" >> $GITHUB_OUTPUT
- name: Generate a changelog
uses: orhun/git-cliff-action@v2
id: git-cliff
with:
config: cliff.toml
args: v0.0.0..${{ steps.latest_tag.outputs.TAG_NAME }}
env:
OUTPUT: ${{ github.workspace }}/CHANGELOG.md

- uses: stefanzweifel/git-auto-commit-action@v4
with:
commit_message: 'docs(changelog): update changelog'
file_pattern: CHANGELOG.md

- uses: everlytic/[email protected]
with:
github_token: ${{ secrets.PAT }}
source_ref: 'master'
target_branch: 'develop'
commit_message_template: '[Automated] Merged {source_ref} into target {target_branch}'
1 change: 1 addition & 0 deletions .github/workflows/shellcheck.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ on:
pull_request:
branches:
- 'master'
- 'develop'
paths:
- '**.sh'
- 'webcamd'
Expand Down
353 changes: 353 additions & 0 deletions CHANGELOG.md

Large diffs are not rendered by default.

9 changes: 8 additions & 1 deletion Makefile
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
#### crowsnest - A webcam Service for multiple Cams and Stream Services.
####
#### Written by Stephan Wendel aka KwadFan <[email protected]>
#### Copyright 2021 - till today
#### Copyright 2021 - 2023
#### Co-authored by Patrick Gehrsitz aka mryel00 <[email protected]>
#### Copyright 2023 - till today
#### https://github.com/mainsail-crew/crowsnest
####
#### This File is distributed under GPLv3
Expand Down Expand Up @@ -39,8 +41,13 @@ help: ## Shows this help

update: ## Update crowsnest (fetches and pulls repository changes)
@git fetch && git pull
@bash -c 'bin/build.sh --reclone'
${MAKE} build

report: ## Generate report.txt
@if [ -f ~/report.txt ]; then rm -f ~/report.txt; fi
@bash -c 'tools/dev-helper.sh -a >> ~/report.txt'
@sed -ri 's/\x1B\[([0-9]{1,3}(;[0-9]{1,2})?)?[mGK]//g' ~/report.txt

fixworkingdirectory: ## Fix service file WorkingDirectory path
@sudo sed -i "s~\(WorkingDirectory=\).*~\1$$PWD~" /etc/systemd/system/crowsnest.service
34 changes: 21 additions & 13 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -62,28 +62,36 @@ Tested and/or did not work: :x: \
Should work but not tested: :question: \
Not available: :heavy_minus_sign:

| Operating System | X86 Architecture | ARM Architecture |
| :-------------------------------: | :----------------: | :----------------------: |
| Raspberry Pi OS (buster) | :heavy_minus_sign: | :x: ([Hint](#hint)) |
| Raspberry Pi OS (bullseye) | :heavy_minus_sign: | :heavy_check_mark: |
| MainsailOS (<0.7.1) | :heavy_minus_sign: | :x: ([Hint](#hint)) |
| MainsailOS (>1.0.0) | :heavy_minus_sign: | :heavy_check_mark: (rpi) |
| Armbian | :question: | :heavy_check_mark: |
| Ubuntu Server 20.04 | :heavy_check_mark: | :question: |
| Ubuntu Server 22.04 LTS | :heavy_check_mark: | :heavy_check_mark: (rpi) |
| Linux Mint 21 (codename: vanessa) | :heavy_check_mark: | :question: |
| Archlinux (and derivatives) | :x: | :x: |
| Alpine Linux | :x: | :x: |
| Operating System | X86 Architecture | ARM Architecture |
| :-------------------------------: | :----------------: | :-----------------------------------------: |
| Raspberry Pi OS (buster) | :heavy_minus_sign: | :x: ([Hint](#hint-buster)) |
| Raspberry Pi OS (bullseye) | :heavy_minus_sign: | :heavy_check_mark: |
| Raspberry Pi OS (bookworm) | :heavy_minus_sign: | :heavy_check_mark: ([Hint](#hint-bookworm)) |
| MainsailOS (<0.7.1) | :heavy_minus_sign: | :x: ([Hint](#hint-buster)) |
| MainsailOS (>1.0.0) | :heavy_minus_sign: | :heavy_check_mark: (rpi) |
| Armbian | :question: | :heavy_check_mark: |
| DietPi | :question: | :heavy_check_mark: (rpi) |
| Ubuntu Server 20.04 | :heavy_check_mark: | :question: |
| Ubuntu Server 22.04 LTS | :heavy_check_mark: | :heavy_check_mark: (rpi) |
| Ubuntu Server 23.10 | :question: | :heavy_check_mark: (rpi) |
| Linux Mint 21 (codename: vanessa) | :heavy_check_mark: | :question: |
| Archlinux (and derivatives) | :x: | :x: |
| Alpine Linux | :x: | :x: |

_If you test that on other distributions, feel free to open a Pull Request to enhance documentation._

#### Hint
#### Hint Buster

OS images that are based on Debian 10 (codename 'buster') are no longer supported with Crowsnest version 4 (current `master` branch)!

Please use the `legacy/v3` branch for these OS types.\
See the [README.md](https://github.com/mainsail-crew/crowsnest/tree/legacy/v3) of this branch for usage instructions.

#### Hint Bookworm

Raspberry Pi OS images that are based on Debian 12 (codename 'bookworm') currently use a different branch of [camera-streamer](https://github.com/ayufan/camera-streamer)!
The Raspberry Pi 5 has only [ustreamer](https://github.com/pikvm/ustreamer) support! This is due to the missing JPEG and H264 Hardware encoders.

---

## Contribute
Expand Down
60 changes: 49 additions & 11 deletions bin/build.sh
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,9 @@
#### crowsnest - A webcam Service for multiple Cams and Stream Services.
####
#### Written by Stephan Wendel aka KwadFan <[email protected]>
#### Copyright 2021 - till today
#### Copyright 2021 - 2024
#### Co-authored by Patrick Gehrsitz aka mryel00 <[email protected]>
#### Copyright 2024 - till today
#### https://github.com/mainsail-crew/crowsnest
####
#### This File is distributed under GPLv3
Expand Down Expand Up @@ -39,7 +41,7 @@ fi
# Camera-streamer repo
CSTREAMER_PATH="camera-streamer"
if [[ -z "${CROWSNEST_CAMERA_STREAMER_REPO_SHIP}" ]]; then
CROWSNEST_CAMERA_STREAMER_REPO_SHIP="https://github.com/ayufan-research/camera-streamer.git"
CROWSNEST_CAMERA_STREAMER_REPO_SHIP="https://github.com/ayufan/camera-streamer.git"
fi
if [[ -z "${CROWSNEST_CAMERA_STREAMER_REPO_BRANCH}" ]]; then
CROWSNEST_CAMERA_STREAMER_REPO_BRANCH="master"
Expand Down Expand Up @@ -73,6 +75,30 @@ is_raspberry_pi() {
fi
}

is_bookworm() {
if [[ -f /etc/os-release ]]; then
grep -cq "bookworm" /etc/os-release &> /dev/null && echo "1" || echo "0"
fi
}

is_pi5() {
if [[ -f /proc/device-tree/model ]] &&
grep -q "Raspberry Pi 5" /proc/device-tree/model; then
echo "1"
else
echo "0"
fi
}

is_ubuntu_arm() {
if [[ "$(is_raspberry_pi)" = "1" ]] &&
grep -q "ubuntu" /etc/os-release; then
echo "1"
else
echo "0"
fi
}

### Get avail mem
get_avail_mem() {
grep "MemTotal" /proc/meminfo | awk '{print $2}'
Expand All @@ -83,10 +109,10 @@ get_avail_mem() {
delete_apps() {
for path in "${ALL_PATHS[@]}"; do
if [[ ! -d "${path}" ]]; then
printf "'%s' does not exist! Delete skipped ...\n" "${path}"
printf "'%s' does not exist! Delete ... [SKIPPED]\n" "${path}"
fi
if [[ -d "${path}" ]]; then
printf "Deleting '%s' ... \n" "${path}"
printf "Deleting '%s' ... [DONE]\n" "${path}"
rm -rf "${path}"
fi
done
Expand All @@ -108,18 +134,26 @@ clone_ustreamer() {
clone_cstreamer() {
## Special handling because only supported on Raspberry Pi
[[ -n "${CROWSNEST_UNATTENDED}" ]] || CROWSNEST_UNATTENDED="0"
if [[ "$(is_raspberry_pi)" = "0" ]] && [[ "${CROWSNEST_UNATTENDED}" = "0" ]]; then
printf "WARN: Cloning camera-streamer skipped! Device is not supported!"
if { [[ "$(is_raspberry_pi)" = "0" ]] ||
[[ "$(is_pi5)" = "1" ]] ||
[[ "$(is_ubuntu_arm)" = "1" ]]; } &&
[[ "${CROWSNEST_UNATTENDED}" = "0" ]]; then
printf "Device is not supported! Cloning camera-streamer ... [SKIPPED]\n"
return
fi
if [[ -d "${BASE_CN_BIN_PATH}"/"${CSTREAMER_PATH}" ]]; then
printf "%s already exist ... [SKIPPED]\n" "${CSTREAMER_PATH}"
return
fi
if [[ "$(is_bookworm)" = "1" ]]; then
printf "\nBookworm detected!\n"
printf "Using main branch of camera-streamer for Bookworm ...\n\n"
CROWSNEST_CAMERA_STREAMER_REPO_BRANCH="main"
fi
git clone "${CROWSNEST_CAMERA_STREAMER_REPO_SHIP}" \
-b "${CROWSNEST_CAMERA_STREAMER_REPO_BRANCH}" \
"${BASE_CN_BIN_PATH}"/"${CSTREAMER_PATH}" \
"${CLONE_FLAGS[@]}" --recursive
"${CLONE_FLAGS[@]}" --recurse-submodules --shallow-submodules
}

### Clone Apps
Expand All @@ -134,10 +168,14 @@ clone_apps() {
### Run 'make clean' in cloned folders
clean_apps() {
for app in "${ALL_PATHS[@]}"; do
printf "\nRunning 'make clean' in %s ... \n" "${app}"
pushd "${app}" &> /dev/null || exit 1
make clean
popd &> /dev/null || exit 1
if [[ ! -d "${app}" ]]; then
printf "'%s' does not exist! Clean ... [SKIPPED]\n" "${app}"
else
printf "\nRunning 'make clean' in %s ... \n" "${app}"
pushd "${app}" &> /dev/null || exit 1
make clean
popd &> /dev/null || exit 1
fi
done
printf "\nRunning 'make clean' ... [DONE]\n"
}
Expand Down
80 changes: 80 additions & 0 deletions cliff-release.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
# configuration file for git-cliff (0.1.0)

[changelog]
# changelog header
header = """
# What's Changed
"""
# template for the changelog body
# https://tera.netlify.app/docs/#introduction
body = """
{% for group, commits in commits | group_by(attribute="group") %}\
### {{ group | striptags | trim | upper_first }}
{% for commit in commits
| filter(attribute="scope")
| sort(attribute="scope") %}
- **{{commit.scope}}**: {{ commit.message | upper_first | trim }} | [{{ commit.id | truncate(length=7, end="") }}](<REPO>/commit/{{ commit.id }})\
{%- if commit.breaking %}
{% raw %} {% endraw %}- **BREAKING**: {{commit.breaking_description}}
{%- endif -%}
{%- endfor -%}
{%- for commit in commits %}
{%- if commit.scope -%}
{% else -%}
{% raw %}\n{% endraw %}\
- {{ commit.message | upper_first | trim }} | [{{ commit.id | truncate(length=7, end="") }}](<REPO>/commit/{{ commit.id }})\
{%- if commit.breaking %}
{% raw %} {% endraw %}- **BREAKING**: {{commit.breaking_description}}
{%- endif -%}
{% endif -%}
{% endfor -%}
{% raw %}\n{% endraw %}
{% endfor %}\n\
"""
# remove the leading and trailing whitespaces from the template
trim = true
# changelog footer
footer = """
"""

# postprocessors
postprocessors = [
{ pattern = '(\(<REPO>/pull/[0-9]+\)\)) \| .+', replace = "${1}" },
{ pattern = '<REPO>', replace = "https://github.com/mainsail-crew/crowsnest" }, # replace repository URL
]

[git]
# allow only conventional commits
# https://www.conventionalcommits.org
conventional_commits = true
filter_unconventional = true
# regex for parsing and grouping commits
commit_parsers = [
# Commits to skip
{ message = "^docs\\(changelog\\):", group = "Changelog", skip = true}, # Old redundant commits
{ message = "^chore: push version number to", group = "9$Other", skip = true}, # Old redundant commits
{ message = "^chore\\(changelog\\): update changelog", group = "Changelog", skip = true}, # Old redundant commits

# Commits to parse
{ message = "^feat(\\(.*\\))?:", group = "<!-- 1 -->Features"},
{ message = "^feature(\\(.*\\))?:", group = "<!-- 1 -->Features"},
{ message = "^fix(\\(.*\\))?:", group = "<!-- 2 -->Bug Fixes and Improvements"},
{ message = "^perf(\\(.*\\))?:", group = "<!-- 3 -->Performance"},
{ message = "^refactor(\\(.*\\))?:", group = "<!-- 4 -->Refactor"},
{ message = "^style(\\(.*\\))?:", group = "<!-- 5 -->Styling"},
{ message = "^locale(\\(.*\\))?:", group = "<!-- 6 -->Localization"},
{ message = "^docs(\\(.*\\))?:", group = "<!-- 7 -->Documentation"},
{ message = "^test(\\(.*\\))?:", group = "<!-- 8 -->Other"},
{ message = "^chore(\\(.*\\))?:", group = "<!-- 8 -->Other"},
{ body = ".*security", group = "Security"},
]
commit_preprocessors = [
{ pattern = '\((\w+\s)?#([0-9]+)\)', replace = "([#${2}](<REPO>/pull/${2}))" },
]
# filter out the commits that are not matched by commit parsers
filter_commits = true
ignore_tags="v*-(beta|rc)*"
# glob pattern for matching git tags
tag_pattern = "v[0-9]*"
Loading

0 comments on commit d7c352a

Please sign in to comment.