generated from Start9Labs/hello-world-startos
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
0 parents
commit f42759a
Showing
20 changed files
with
558 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,37 @@ | ||
name: Build Service | ||
|
||
on: | ||
workflow_dispatch: | ||
pull_request: | ||
paths-ignore: ['*.md'] | ||
branches: ['main', 'master'] | ||
push: | ||
paths-ignore: ['*.md'] | ||
branches: ['main', 'master'] | ||
|
||
jobs: | ||
BuildPackage: | ||
runs-on: ubuntu-latest | ||
steps: | ||
- name: Prepare StartOS SDK | ||
uses: Start9Labs/sdk@v1 | ||
|
||
- name: Checkout services repository | ||
uses: actions/checkout@v4 | ||
|
||
- name: Build the service package | ||
id: build | ||
run: | | ||
git submodule update --init --recursive | ||
start-sdk init | ||
make | ||
PACKAGE_ID=$(yq -oy ".id" manifest.*) | ||
echo "package_id=$PACKAGE_ID" >> $GITHUB_ENV | ||
printf "\n SHA256SUM: $(sha256sum ${PACKAGE_ID}.s9pk) \n" | ||
shell: bash | ||
|
||
- name: Upload .s9pk | ||
uses: actions/upload-artifact@v4 | ||
with: | ||
name: ${{ env.package_id }}.s9pk | ||
path: ./${{ env.package_id }}.s9pk |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,72 @@ | ||
name: Release Service | ||
|
||
on: | ||
push: | ||
tags: | ||
- 'v*.*' | ||
|
||
jobs: | ||
ReleasePackage: | ||
runs-on: ubuntu-latest | ||
permissions: | ||
contents: write | ||
steps: | ||
- name: Prepare StartOS SDK | ||
uses: Start9Labs/sdk@v1 | ||
|
||
- name: Checkout services repository | ||
uses: actions/checkout@v4 | ||
|
||
- name: Build the service package | ||
run: | | ||
git submodule update --init --recursive | ||
start-sdk init | ||
make | ||
- name: Setting package ID and title from the manifest | ||
id: package | ||
run: | | ||
echo "package_id=$(yq -oy ".id" manifest.*)" >> $GITHUB_ENV | ||
echo "package_title=$(yq -oy ".title" manifest.*)" >> $GITHUB_ENV | ||
shell: bash | ||
|
||
- name: Generate sha256 checksum | ||
run: | | ||
PACKAGE_ID=${{ env.package_id }} | ||
printf "\n SHA256SUM: $(sha256sum ${PACKAGE_ID}.s9pk) \n" | ||
sha256sum ${PACKAGE_ID}.s9pk > ${PACKAGE_ID}.s9pk.sha256 | ||
shell: bash | ||
|
||
- name: Generate changelog | ||
run: | | ||
PACKAGE_ID=${{ env.package_id }} | ||
echo "## What's Changed" > change-log.txt | ||
yq -oy '.release-notes' manifest.* >> change-log.txt | ||
echo "## SHA256 Hash" >> change-log.txt | ||
echo '```' >> change-log.txt | ||
sha256sum ${PACKAGE_ID}.s9pk >> change-log.txt | ||
echo '```' >> change-log.txt | ||
shell: bash | ||
|
||
- name: Create GitHub Release | ||
uses: softprops/action-gh-release@v2 | ||
with: | ||
tag_name: ${{ github.ref_name }} | ||
name: ${{ env.package_title }} ${{ github.ref_name }} | ||
prerelease: true | ||
body_path: change-log.txt | ||
files: | | ||
./${{ env.package_id }}.s9pk | ||
./${{ env.package_id }}.s9pk.sha256 | ||
- name: Publish to Registry | ||
env: | ||
S9USER: ${{ secrets.S9USER }} | ||
S9PASS: ${{ secrets.S9PASS }} | ||
S9REGISTRY: ${{ secrets.S9REGISTRY }} | ||
run: | | ||
if [[ -z "$S9USER" || -z "$S9PASS" || -z "$S9REGISTRY" ]]; then | ||
echo "Publish skipped: missing registry credentials." | ||
else | ||
start-sdk publish https://$S9USER:$S9PASS@$S9REGISTRY ${{ env.package_id }}.s9pk | ||
fi |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
*.s9pk | ||
scripts/*.js | ||
.DS_Store | ||
.vscode/ | ||
docker-images |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
[submodule "hello-world"] | ||
path = hello-world | ||
url = https://github.com/Start9Labs/hello-world |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
FROM alpine:3.20 | ||
|
||
RUN apk update | ||
RUN apk add --no-cache tini && \ | ||
rm -f /var/cache/apk/* | ||
|
||
ARG ARCH | ||
ADD ./hello-world/target/${ARCH}-unknown-linux-musl/release/hello-world /usr/local/bin/hello-world | ||
RUN chmod +x /usr/local/bin/hello-world | ||
ADD ./docker_entrypoint.sh /usr/local/bin/docker_entrypoint.sh | ||
RUN chmod a+x /usr/local/bin/docker_entrypoint.sh |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
MIT License | ||
|
||
Copyright (c) 2024 Start9 Labs | ||
|
||
Permission is hereby granted, free of charge, to any person obtaining a copy | ||
of this software and associated documentation files (the "Software"), to deal | ||
in the Software without restriction, including without limitation the rights | ||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | ||
copies of the Software, and to permit persons to whom the Software is | ||
furnished to do so, subject to the following conditions: | ||
|
||
The above copyright notice and this permission notice shall be included in all | ||
copies or substantial portions of the Software. | ||
|
||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | ||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | ||
SOFTWARE. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,81 @@ | ||
PKG_ID := $(shell yq e ".id" manifest.yaml) | ||
PKG_VERSION := $(shell yq e ".version" manifest.yaml) | ||
TS_FILES := $(shell find ./ -name \*.ts) | ||
HELLO_WORLD_SRC := $(shell find ./hello-world/src) hello-world/Cargo.toml hello-world/Cargo.lock | ||
|
||
# delete the target of a rule if it has changed and its recipe exits with a nonzero exit status | ||
.DELETE_ON_ERROR: | ||
|
||
all: verify | ||
|
||
verify: $(PKG_ID).s9pk | ||
@start-sdk verify s9pk $(PKG_ID).s9pk | ||
@echo " Done!" | ||
@echo " Filesize: $(shell du -h $(PKG_ID).s9pk) is ready" | ||
|
||
install: | ||
@if [ ! -f ~/.embassy/config.yaml ]; then echo "You must define \"host: http://server-name.local\" in ~/.embassy/config.yaml config file first."; exit 1; fi | ||
@echo "\nInstalling to $$(grep -v '^#' ~/.embassy/config.yaml | cut -d'/' -f3) ...\n" | ||
@[ -f $(PKG_ID).s9pk ] || ( $(MAKE) && echo "\nInstalling to $$(grep -v '^#' ~/.embassy/config.yaml | cut -d'/' -f3) ...\n" ) | ||
@start-cli package install $(PKG_ID).s9pk | ||
|
||
clean: | ||
rm -rf docker-images | ||
rm -f $(PKG_ID).s9pk | ||
rm -f scripts/*.js | ||
|
||
clean-manifest: | ||
@sed -i '' '/^[[:blank:]]*#/d' manifest.yaml | ||
@echo; echo "Comments successfully removed from manifest.yaml file."; echo | ||
|
||
# BEGIN REBRANDING | ||
rebranding: | ||
@read -p "Enter new package ID name (must be a single word): " NEW_PKG_ID; \ | ||
read -p "Enter new package title: " NEW_PKG_TITLE; \ | ||
find . \( -name "*.md" -o -name ".gitignore" -o -name "manifest.yaml" -o -name "*Service.yml" \) -type f -not -path "./hello-world/*" -exec sed -i '' -e "s/hello-world/$$NEW_PKG_ID/g; s/Hello World/$$NEW_PKG_TITLE/g" {} +; \ | ||
echo; echo "Rebranding complete."; echo " New package ID name is: $$NEW_PKG_ID"; \ | ||
echo " New package title is: $$NEW_PKG_TITLE"; \ | ||
sed -i '' -e '/^# BEGIN REBRANDING/,/^# END REBRANDING/ s/^#*/#/' Makefile | ||
@echo; echo "Note: Rebranding code has been commented out in Makefile"; echo | ||
# END REBRANDING | ||
|
||
scripts/embassy.js: $(TS_FILES) | ||
deno bundle scripts/embassy.ts scripts/embassy.js | ||
|
||
arm: | ||
@rm -f docker-images/x86_64.tar | ||
ARCH=aarch64 $(MAKE) | ||
|
||
x86: | ||
@rm -f docker-images/aarch64.tar | ||
ARCH=x86_64 $(MAKE) | ||
|
||
docker-images/aarch64.tar: Dockerfile docker_entrypoint.sh hello-world/target/aarch64-unknown-linux-musl/release/hello-world | ||
ifeq ($(ARCH),x86_64) | ||
else | ||
mkdir -p docker-images | ||
docker buildx build --tag start9/$(PKG_ID)/main:$(PKG_VERSION) --build-arg ARCH=aarch64 --platform=linux/arm64 -o type=docker,dest=docker-images/aarch64.tar . | ||
endif | ||
|
||
docker-images/x86_64.tar: Dockerfile docker_entrypoint.sh hello-world/target/x86_64-unknown-linux-musl/release/hello-world | ||
ifeq ($(ARCH),aarch64) | ||
else | ||
mkdir -p docker-images | ||
docker buildx build --tag start9/$(PKG_ID)/main:$(PKG_VERSION) --build-arg ARCH=x86_64 --platform=linux/amd64 -o type=docker,dest=docker-images/x86_64.tar . | ||
endif | ||
|
||
$(PKG_ID).s9pk: manifest.yaml instructions.md icon.png LICENSE scripts/embassy.js docker-images/aarch64.tar docker-images/x86_64.tar | ||
ifeq ($(ARCH),aarch64) | ||
@echo "start-sdk: Preparing aarch64 package ..." | ||
else ifeq ($(ARCH),x86_64) | ||
@echo "start-sdk: Preparing x86_64 package ..." | ||
else | ||
@echo "start-sdk: Preparing Universal Package ..." | ||
endif | ||
@start-sdk pack | ||
|
||
hello-world/target/aarch64-unknown-linux-musl/release/hello-world: $(HELLO_WORLD_SRC) | ||
docker run --rm -v ~/.cargo/registry:/root/.cargo/registry -v "$(shell pwd)"/hello-world:/home/rust/src messense/rust-musl-cross:aarch64-musl cargo build --release | ||
|
||
hello-world/target/x86_64-unknown-linux-musl/release/hello-world: $(HELLO_WORLD_SRC) | ||
docker run --rm -v ~/.cargo/registry:/root/.cargo/registry -v "$(shell pwd)"/hello-world:/home/rust/src messense/rust-musl-cross:x86_64-musl cargo build --release |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,121 @@ | ||
<p align="center"> | ||
<img src="icon.png" alt="Project Logo" width="21%"> | ||
</p> | ||
|
||
# Hello World for StartOS | ||
|
||
Hello World is a simple, minimal project that serves as a template for creating a service that runs on StartOS. This repository creates the `s9pk` package that is installed to run `hello-world` on [StartOS](https://github.com/Start9Labs/start-os/). Learn more about service packaging in the [Developer Docs](https://start9.com/latest/developer-docs/). | ||
|
||
## Dependencies | ||
|
||
Install the system dependencies below to build this project by following the instructions in the provided links. You can find instructions on how to set up the appropriate build environment in the [Developer Docs](https://docs.start9.com/latest/developer-docs/packaging). | ||
|
||
- [docker](https://docs.docker.com/get-docker) | ||
- [docker-buildx](https://docs.docker.com/buildx/working-with-buildx/) | ||
- [yq](https://mikefarah.gitbook.io/yq) | ||
- [deno](https://deno.land/) | ||
- [make](https://www.gnu.org/software/make/) | ||
- [start-sdk](https://github.com/Start9Labs/start-os/tree/sdk/) | ||
|
||
## Build environment | ||
Prepare your StartOS build environment. In this example we are using Ubuntu 20.04. | ||
1. Install docker | ||
``` | ||
curl -fsSL https://get.docker.com | bash | ||
sudo usermod -aG docker "$USER" | ||
exec sudo su -l $USER | ||
``` | ||
2. Set buildx as the default builder | ||
``` | ||
docker buildx install | ||
docker buildx create --use | ||
``` | ||
3. Enable cross-arch emulated builds in docker | ||
``` | ||
docker run --privileged --rm linuxkit/binfmt:v0.8 | ||
``` | ||
4. Install yq | ||
``` | ||
sudo snap install yq | ||
``` | ||
5. Install deno | ||
``` | ||
sudo snap install deno | ||
``` | ||
6. Install essentials build packages | ||
``` | ||
sudo apt-get install -y build-essential openssl libssl-dev libc6-dev clang libclang-dev ca-certificates | ||
``` | ||
7. Install Rust | ||
``` | ||
curl https://sh.rustup.rs -sSf | sh | ||
# Choose nr 1 (default install) | ||
source $HOME/.cargo/env | ||
``` | ||
8. Build and install start-sdk | ||
``` | ||
git clone https://github.com/Start9Labs/start-os.git && \ | ||
cd start-os && git submodule update --init --recursive && \ | ||
make sdk | ||
``` | ||
Initialize sdk & verify install | ||
``` | ||
start-sdk init | ||
start-sdk --version | ||
``` | ||
Now you are ready to build the `hello-world` package! | ||
|
||
## Cloning | ||
|
||
Clone the project locally: | ||
|
||
``` | ||
git clone https://github.com/Start9Labs/hello-world-startos.git | ||
cd hello-world-startos | ||
git submodule update --init --recursive | ||
``` | ||
|
||
## Building | ||
|
||
To build the `hello-world` package for all platforms using start-sdk, run the following command: | ||
|
||
``` | ||
make | ||
``` | ||
|
||
To build the `hello-world` package for a single platform using start-sdk, run: | ||
|
||
``` | ||
# for amd64 | ||
make x86 | ||
``` | ||
or | ||
``` | ||
# for arm64 | ||
make arm | ||
``` | ||
|
||
## Installing (on StartOS) | ||
|
||
Run the following commands to determine successful install: | ||
> :information_source: Change server-name.local to your Start9 server address | ||
``` | ||
start-cli auth login | ||
# Enter your StartOS password | ||
start-cli --host https://server-name.local package install hello-world.s9pk | ||
``` | ||
|
||
If you already have your `start-cli` config file setup with a default `host`, you can install simply by running: | ||
|
||
``` | ||
make install | ||
``` | ||
|
||
> **Tip:** You can also install the hello-world.s9pk using **Sideload Service** under the **System > Manage** section. | ||
### Verify Install | ||
|
||
Go to your StartOS Services page, select **Hello World**, configure and start the service. Then, verify its interfaces are accessible. | ||
|
||
**Done!** |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
#!/bin/sh | ||
|
||
printf "\n\n [i] Starting Hello World ...\n\n" | ||
exec tini hello-world |
Submodule hello-world
added at
48ce8a
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
# Instructions for Hello World | ||
|
||
Instructions go here. These appear to the user in the UI on the Service page under **Instructions**. | ||
|
||
You are allowed to include basic [Markdown formatting](https://www.markdownguide.org/basic-syntax). |
Oops, something went wrong.