Skip to content

Pre-release

Pre-release #205

Workflow file for this run

name: Pre-release
on:
workflow_dispatch:
inputs:
core:
description: "Version of the Core. Must be prefixed with v (e.g v0.2.47)"
required: true
dappmanager:
description: "Version of the Dappmanager. Only numbers"
required: true
wifi:
description: "Version of the WiFi Package. Only numbers"
required: true
bind:
description: "Version of the Bind Package. Only numbers"
required: true
ipfs:
description: "Version of the IPFS Package. Only numbers"
required: true
https:
description: "Version of the HTTPS Package. Only numbers"
required: true
wireguard:
description: "Version of the Wireguard Package. Only numbers"
required: true
vpn:
description: "Version of the OpenVPN Package. Only numbers"
required: true
notifications:
description: "IPFS hash of the Notifications Package. Must start with /ipfs/"
required: true
premium:
description: "IPFS hash of the Premium Package. Must start with /ipfs/"
required: true
jobs:
set-versions:
name: Set versions and check regex
runs-on: ubuntu-latest
outputs:
bind: ${{ steps.set_outputs.outputs.bind }}
ipfs: ${{ steps.set_outputs.outputs.ipfs }}
dappmanager: ${{ steps.set_outputs.outputs.dappmanager }}
wifi: ${{ steps.set_outputs.outputs.wifi }}
wireguard: ${{ steps.set_outputs.outputs.wireguard }}
https: ${{ steps.set_outputs.outputs.https }}
vpn: ${{ steps.set_outputs.outputs.vpn }}
notifications: ${{ steps.set_outputs.outputs.notifications }}
premium: ${{ steps.set_outputs.outputs.premium }}
core: ${{ steps.set_outputs.outputs.core }}
steps:
- name: Check versions regex
run: |
[[ "${{ github.event.inputs.bind }}" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]] && [[ "${{ github.event.inputs.ipfs }}" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]] && [[ "${{ github.event.inputs.dappmanager }}" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]] && \
[[ "${{ github.event.inputs.wifi }}" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]] && [[ "${{ github.event.inputs.wireguard }}" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]] && [[ "${{ github.event.inputs.https }}" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]] && \
[[ "${{ github.event.inputs.vpn }}" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]] && [[ "${{ github.event.inputs.core }}" =~ ^v[0-9]+\.[0-9]+\.[0-9]+$ ]] && \
[[ "${{ github.event.inputs.notifications }}" =~ ^/ipfs/.+$ ]] && [[ "${{ github.event.inputs.premium }}" =~ ^/ipfs/.+$ ]] || { echo "versions introduced in wrong format"; exit 1; }
- name: Checkout
uses: actions/checkout@v4
- name: Set new versions
run: |
sed -i -e "/BIND_VERSION/s/[0-9]*\.[0-9]*\.[0-9]*/"${{ github.event.inputs.bind }}"/" .dappnode_profile
sed -i -e "/IPFS_VERSION/s/[0-9]*\.[0-9]*\.[0-9]*/"${{ github.event.inputs.ipfs }}"/" .dappnode_profile
sed -i -e "/VPN_VERSION/s/[0-9]*\.[0-9]*\.[0-9]*/"${{ github.event.inputs.vpn }}"/" .dappnode_profile
sed -i -e "/DAPPMANAGER_VERSION/s/[0-9]*\.[0-9]*\.[0-9]*/"${{ github.event.inputs.dappmanager }}"/" .dappnode_profile
sed -i -e "/WIFI_VERSION/s/[0-9]*\.[0-9]*\.[0-9]*/"${{ github.event.inputs.wifi }}"/" .dappnode_profile
sed -i -e "/WIREGUARD_VERSION/s/[0-9]*\.[0-9]*\.[0-9]*/"${{ github.event.inputs.wireguard }}"/" .dappnode_profile
sed -i -e "/HTTPS_VERSION/s/[0-9]*\.[0-9]*\.[0-9]*/${{ github.event.inputs.https }}/" .dappnode_profile
sed -i -e "s|^export NOTIFICATIONS_VERSION=.*|export NOTIFICATIONS_VERSION=\"${{ github.event.inputs.notifications }}\"|" .dappnode_profile
sed -i -e "s|^export PREMIUM_VERSION=.*|export PREMIUM_VERSION=\"${{ github.event.inputs.premium }}\"|" .dappnode_profile
cat .dappnode_profile
- name: Create dappnode_profile.sh
run: cp .dappnode_profile dappnode_profile.sh
- name: Upload dappnode_profile.sh
uses: actions/upload-artifact@v4
with:
name: dappnode_profile
path: dappnode_profile.sh
- name: Set outputs
id: set_outputs
run: |
echo "core=${{ github.event.inputs.core }}" >> $GITHUB_OUTPUT
echo "bind=${{ github.event.inputs.bind }}" >> $GITHUB_OUTPUT
echo "ipfs=${{ github.event.inputs.ipfs }}" >> $GITHUB_OUTPUT
echo "dappmanager=${{ github.event.inputs.dappmanager }}" >> $GITHUB_OUTPUT
echo "wifi=${{ github.event.inputs.wifi }}" >> $GITHUB_OUTPUT
echo "wireguard=${{ github.event.inputs.wireguard }}" >> $GITHUB_OUTPUT
echo "https=${{ github.event.inputs.https }}" >> $GITHUB_OUTPUT
echo "vpn=${{ github.event.inputs.vpn }}" >> $GITHUB_OUTPUT
echo "notifications=${{ github.event.inputs.notifications }}" >> $GITHUB_OUTPUT
echo "premium=${{ github.event.inputs.premium }}" >> $GITHUB_OUTPUT
build-debian-attended:
name: Build Debian attended ISO
runs-on: ubuntu-latest
needs: set-versions
steps:
- uses: actions/checkout@v4
- name: Download dappnode_profile
uses: actions/download-artifact@v4
with:
name: dappnode_profile
- name: Rename dappnode_profile.sh to .dappnode_profile
run: mv dappnode_profile.sh .dappnode_profile
- name: Build Debian attended
run: |
export BASE_OS=debian
export UNATTENDED=false
docker compose up --build
- name: Set Debian Dappnode attended ISO name
run: |
file=$(ls images/Dappnode-debian-*.iso)
filename=$(basename "$file")
core_filename="Dappnode-${{ needs.set-versions.outputs.core }}-debian-${filename#Dappnode-debian-}"
attended_filename="${core_filename/%.iso/-attended.iso}"
sudo cp "$file" "images/$attended_filename"
- name: Upload Debian attended ISO
uses: actions/upload-artifact@v4
with:
name: debian-attended-iso
path: images/*-attended.iso
- name: Get SHA-256 Debian attended
run: |
file=$(find images/ -type f -name '*-attended.iso')
shasum -a 256 $file > SHASUM_DEBIAN_ATTENDED.txt
- name: Upload Debian attended SHA256
uses: actions/upload-artifact@v4
with:
name: debian-attended-sha
path: SHASUM_DEBIAN_ATTENDED.txt
build-debian-unattended:
name: Build Debian unattended ISO
runs-on: ubuntu-latest
needs: set-versions
steps:
- uses: actions/checkout@v4
- name: Download dappnode_profile
uses: actions/download-artifact@v4
with:
name: dappnode_profile
- name: Rename dappnode_profile.sh to .dappnode_profile
run: mv dappnode_profile.sh .dappnode_profile
- name: Build Debian unattended
run: |
export BASE_OS=debian
export UNATTENDED=true
docker compose build
docker compose up
- name: Set Debian Dappnode unattended ISO name
run: |
file=$(ls images/Dappnode-debian-*.iso)
filename=$(basename "$file")
core_filename="Dappnode-${{ needs.set-versions.outputs.core }}-debian-${filename#Dappnode-debian-}"
unattended_filename="${core_filename/%.iso/-unattended.iso}"
sudo cp "$file" "images/$unattended_filename"
- name: Upload Debian unattended ISO
uses: actions/upload-artifact@v4
with:
name: debian-unattended-iso
path: images/*-unattended.iso
- name: Get SHA-256 Debian unattended
run: |
file=$(find images/ -type f -name '*-unattended.iso')
shasum -a 256 $file > SHASUM_DEBIAN_UNATTENDED.txt
- name: Upload Debian unattended SHA256
uses: actions/upload-artifact@v4
with:
name: debian-unattended-sha
path: SHASUM_DEBIAN_UNATTENDED.txt
build-ubuntu-unattended:
name: Build Ubuntu unattended ISO
runs-on: ubuntu-latest
needs: set-versions
steps:
- uses: actions/checkout@v4
- name: Download dappnode_profile
uses: actions/download-artifact@v4
with:
name: dappnode_profile
- name: Rename dappnode_profile.sh to .dappnode_profile
run: mv dappnode_profile.sh .dappnode_profile
- name: Build Ubuntu unattended
run: |
export BASE_OS=ubuntu
export UNATTENDED=true
docker compose up --build
- name: Set Ubuntu Dappnode unattended ISO name
run: |
file=$(ls images/Dappnode-ubuntu-*.iso)
filename=$(basename "$file")
core_filename="Dappnode-${{ needs.set-versions.outputs.core }}-ubuntu-${filename#Dappnode-ubuntu-}"
unattended_filename="${core_filename/%.iso/-unattended.iso}"
sudo cp "$file" "images/$unattended_filename"
- name: Get SHA-256 Ubuntu unattended
run: |
file=$(find images/ -type f -name '*-ubuntu-*-unattended.iso')
shasum -a 256 $file > SHASUM_UBUNTU_UNATTENDED.txt
- name: Upload Ubuntu unattended ISO and SHA256 to SSH
uses: appleboy/scp-action@v0.1.7
with:
host: ${{ secrets.ISO_SSH_HOST }}
username: ${{ secrets.ISO_SSH_USER }}
key: ${{ secrets.ISO_SSH_PRIVATE_KEY }}
port: ${{ secrets.SSH_PORT }}
source: SHASUM_UBUNTU_UNATTENDED.txt,images/*-ubuntu-*-unattended.iso
target: ${{ secrets.ISO_SSH_PATH }}
overwrite: true
- name: Upload Ubuntu unattended SHA256 as artifact
uses: actions/upload-artifact@v4
with:
name: ubuntu-unattended-sha
path: SHASUM_UBUNTU_UNATTENDED.txt
release:
name: Combine, release, and upload
runs-on: ubuntu-latest
needs:
- set-versions
- build-debian-attended
- build-debian-unattended
- build-ubuntu-unattended
steps:
- uses: actions/checkout@v4
- name: Download all artifacts
uses: actions/download-artifact@v4
with:
path: ./artifacts
- name: Move ISOs and SHAs
run: |
mkdir -p images
mv artifacts/debian-attended-iso/* images/
mv artifacts/debian-unattended-iso/* images/
mv artifacts/debian-attended-sha/* .
mv artifacts/debian-unattended-sha/* .
mv artifacts/ubuntu-unattended-sha/* .
mv artifacts/dappnode_profile/* .
- name: Write release content
run: |
DEBIAN_ATTENDED_ISO=$(basename "$(find images/ -type f -name '*-debian-*-attended.iso' -print -quit)")
DEBIAN_UNATTENDED_ISO=$(basename "$(find images/ -type f -name '*-debian-*-unattended.iso' -print -quit)")
UBUNTU_UNATTENDED_ISO=$(basename "$(awk '{print $2}' SHASUM_UBUNTU_UNATTENDED.txt)")
SHASUM_DEBIAN_ATTENDED=$(sed "s#images/##g" SHASUM_DEBIAN_ATTENDED.txt)
SHASUM_DEBIAN_UNATTENDED=$(sed "s#images/##g" SHASUM_DEBIAN_UNATTENDED.txt)
SHASUM_UBUNTU_UNATTENDED=$(sed "s#images/##g" SHASUM_UBUNTU_UNATTENDED.txt)
cat > CHANGELOG.md <<EOF
# Versions
| Package | Version |
|---|---|
bind.dnp.dappnode.eth|${{ needs.set-versions.outputs.bind }}|
|ipfs.dnp.dappnode.eth|${{ needs.set-versions.outputs.ipfs }}|
|vpn.dnp.dappnode.eth |${{ needs.set-versions.outputs.vpn }}|
|dappmanager.dnp.dappnode.eth|${{ needs.set-versions.outputs.dappmanager }}|
|wifi.dnp.dappnode.eth|${{ needs.set-versions.outputs.wifi }}|
|https.dnp.dappnode.eth|${{ needs.set-versions.outputs.https }}|
|wireguard.dnp.dappnode.eth|${{ needs.set-versions.outputs.wireguard }}|
|notifications.dnp.dappnode.eth|${{ needs.set-versions.outputs.notifications }}|
|premium.dnp.dappnode.eth|${{ needs.set-versions.outputs.premium }}|
# Changes
Changes implemented in release ${{ needs.set-versions.outputs.core }}
# Debian Attended version
Install and customize DAppNode using the attended ISO: **$DEBIAN_ATTENDED_ISO**
## ISO SHA-256 Checksum
shasum -a 256 $DEBIAN_ATTENDED_ISO
$SHASUM_DEBIAN_ATTENDED
# Debian Unattended version
Install DAppNode easily using the unattended ISO: **$DEBIAN_UNATTENDED_ISO**
Do a reboot right after the installation
:warning: **Warning**: This ISO will install Dappnode automatically, deleting all existing partitions on the disk
## ISO SHA-256 Checksum
shasum -a 256 $DEBIAN_UNATTENDED_ISO
$SHASUM_DEBIAN_UNATTENDED
# Ubuntu Unattended version
Install DAppNode easily using the unattended ISO: **$UBUNTU_UNATTENDED_ISO**
## ISO SHA-256 Checksum
shasum -a 256 $UBUNTU_UNATTENDED_ISO
$SHASUM_UBUNTU_UNATTENDED
Uploaded at https://ubuntu.iso.dappnode.io
# DAppNode for Raspberry Pi 4 64bit
[Instructions](https://github.com/dappnode/DAppNode/wiki/DAppNodeARM-Installation-Guide)
default login data:
- **__user__**: dappnode
- **__password__**: dappnodepi
EOF
cat CHANGELOG.md
- name: Print images directory
run: |
echo "Images directory content:"
ls -lrt images/
- name: Create pre-release
uses: softprops/action-gh-release@v2
with:
tag_name: ${{ needs.set-versions.outputs.core }}
prerelease: true
files: |
./images/Dappnode-*-debian-*-attended.iso
./images/Dappnode-*-debian-*-unattended.iso
./scripts/dappnode_install*.sh
./scripts/dappnode_uninstall*.sh
./scripts/dappnode_access_credentials*.sh
dappnode_profile.sh
body_path: CHANGELOG.md
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}