Add Dockerfile and targets for building in Docker
This commit is contained in:
parent
6a187192a5
commit
483dfd8653
|
@ -0,0 +1,65 @@
|
|||
FROM ubuntu:22.04 as build
|
||||
|
||||
# Install dependencies
|
||||
RUN DEBIAN_FRONTEND=noninteractive \
|
||||
apt-get update \
|
||||
&& DEBIAN_FRONTEND=noninteractive apt-get install -y git libffi-dev python3-dev python3-virtualenv libssl-dev autoconf openjdk-17-jdk cmake libtool libssl-dev libncurses5-dev libsqlite3-dev libreadline-dev libtk8.6 libgdm-dev libdb4o-cil-dev libpcap-dev unzip zip wget apksigner \
|
||||
&& apt-get install --reinstall python3
|
||||
|
||||
WORKDIR "/root"
|
||||
|
||||
# Copy Sideband
|
||||
COPY ./ Sideband/
|
||||
|
||||
# Copy gradle init file
|
||||
COPY docker/init.gradle .gradle/
|
||||
|
||||
# Clone required repos
|
||||
RUN git clone https://github.com/markqvist/Reticulum \
|
||||
&& git clone https://github.com/markqvist/LXMF
|
||||
|
||||
# Fetch files required for sideband local repository
|
||||
|
||||
RUN mkdir dist_archive
|
||||
|
||||
WORKDIR "dist_archive"
|
||||
|
||||
# Get latest version of whl packages from PyPI
|
||||
COPY docker/dist_env .
|
||||
|
||||
RUN export PACKAGENAME=rns; . ./dist_env; wget --content-disposition -q ${DL_URL}; \
|
||||
export PACKAGENAME=rnspure; . ./dist_env; wget --content-disposition -q ${DL_URL}; \
|
||||
export PACKAGENAME=lxmf; . ./dist_env; wget --content-disposition -q ${DL_URL}; \
|
||||
export PACKAGENAME=nomadnet; . ./dist_env; wget --content-disposition -q ${DL_URL}; \
|
||||
export PACKAGENAME=rnsh; . ./dist_env; wget --content-disposition -q ${DL_URL}; \
|
||||
export PACKAGENAME=sbapp; . ./dist_env; wget --content-disposition -q ${DL_URL};
|
||||
|
||||
# Get latest RNode Firmware release
|
||||
RUN export VERSION=$(wget -qO - https://api.github.com/repos/markqvist/RNode_Firmware/releases/latest | grep "zipball_url" | grep -oP "\d+\.\d+"); \
|
||||
wget -qO - https://api.github.com/repos/markqvist/RNode_Firmware/releases/latest \
|
||||
| grep "zipball_url" | cut -d : -f 2,3 \
|
||||
| tr -d \", | wget -qi - -O RNode_Firmware_${VERSION}_Source.zip
|
||||
|
||||
# Get source for reticulum.network and unsigned.io sites
|
||||
RUN git clone https://github.com/markqvist/reticulum_website reticulum.network \
|
||||
&& cp reticulum.network/docs/manual/Reticulum\ Manual.pdf . \
|
||||
&& cp reticulum.network/docs/manual/Reticulum\ Manual.epub .
|
||||
|
||||
# A mirror can also be accessed at https://liberatedsystems.co.uk/unsigned_io_archive.zip if unsigned.io is down!
|
||||
RUN wget -q https://unsigned.io/unsigned_io_archive.zip \
|
||||
&& unzip -q unsigned_io_archive.zip -d unsigned.io && rm unsigned_io_archive.zip
|
||||
|
||||
|
||||
WORKDIR "../Sideband/sbapp"
|
||||
|
||||
# Set up virtual environment
|
||||
RUN virtualenv venv
|
||||
|
||||
RUN bash -c "source venv/bin/activate && pip install -U pip && pip install setuptools==60.5 wheel==0.30 buildozer cython"
|
||||
|
||||
WORKDIR "../"
|
||||
|
||||
RUN bash -c "make release"
|
||||
|
||||
FROM scratch as artifact
|
||||
COPY --from=build /root/Sideband/dist/* /
|
20
Makefile
20
Makefile
|
@ -33,8 +33,26 @@ build_wheel:
|
|||
|
||||
release: build_wheel apk fetchapk
|
||||
|
||||
release_docker:
|
||||
-mkdir -p ./dist
|
||||
@echo If you experience errors, please ensure you have docker-buildx installed on your system.
|
||||
sudo docker build --target=artifact --output type=local,dest=./dist/ .
|
||||
@echo Build successful. APK copied to ./dist directory.
|
||||
$(MAKE) sign_release
|
||||
|
||||
sign_release:
|
||||
@echo This stage generates a keystore in the root directory of the repo and signs the APK with it.
|
||||
@echo If a keystore already exists, it is reused.
|
||||
@echo Please make sure you have apksigner and zipalign installed on your system before proceeding.
|
||||
@echo Press enter to continue.
|
||||
@read VOID
|
||||
if [ ! -f "./key.keystore" ]; then keytool -genkey -v -keystore key.keystore -keyalg RSA -keysize 4096 -validity 10000 -alias app; fi
|
||||
VERSION=$(shell ls ./dist/*.apk | cut -d\- -f 2 | head -n 1); \
|
||||
zipalign -p 4 ./dist/sideband-*-release-unsigned.apk ./dist/sideband-$$VERSION-release.apk; \
|
||||
apksigner sign --ks-key-alias app --ks key.keystore ./dist/sideband-$$VERSION-release.apk; \
|
||||
|
||||
upload:
|
||||
@echo Ready to publish release, hit enter to continue
|
||||
@read VOID
|
||||
@echo Uploading to PyPi...
|
||||
twine upload dist/sbapp-*
|
||||
twine upload dist/sbapp-*
|
||||
|
|
|
@ -0,0 +1,2 @@
|
|||
export VERSION=$(wget -q https://pypi.org/pypi/${PACKAGENAME}/json -O - | grep -oP "\"version\":\"\d+\.\d+\.+\d+\"" -o | cut -d \" -f 4)
|
||||
export DL_URL=$(wget -q https://pypi.org/pypi/${PACKAGENAME}/json -O - | grep -oP "\"url\":\".{1,150}${VERSION}-py\d-none-any.whl\"" | cut -d \" -f 4 | head -n -1)
|
|
@ -0,0 +1,21 @@
|
|||
// This is necessary to ensure that Sideband can be built on the
|
||||
// correct API version. Else, the build will fail, with the build tools
|
||||
// nagging us to upgrade the targetSdkVersion (doing so breaks the
|
||||
// program currently). Yet another case of G**gle foolishness. This
|
||||
// just bypasses the error and continues compiling regardless.
|
||||
|
||||
apply plugin: DisableAbortOnError
|
||||
|
||||
class DisableAbortOnError implements Plugin<Gradle> {
|
||||
void apply (Gradle gradle) {
|
||||
gradle.allprojects { project ->
|
||||
afterEvaluate {
|
||||
android {
|
||||
lintOptions {
|
||||
abortOnError = false
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue