From 2939afa729900bb73bf17f8b524934b0b084d93b Mon Sep 17 00:00:00 2001 From: Jinux Date: Tue, 6 Jul 2021 19:18:23 +0000 Subject: [PATCH] 3 time the charm --- .gitlab-ci.yml | 82 +++++++++++---------------------- Dockerfile | 22 +++++---- compile.sh | 57 +++++++++-------------- compile_checksum.sh | 2 +- compile_docs.sh | 5 +-- compile_finish.sh | 4 +- compile_isogen.sh | 2 +- compile_link.sh | 2 +- compile_sourcelist.sh | 2 +- compile_sources.sh | 2 +- compile_stub.sh | 3 +- compile_sumgen.sh | 2 +- compile_vergen.sh | 102 +++++++++++++++++++++++------------------- 13 files changed, 126 insertions(+), 161 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index e3feb40e..a47b6d0c 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,25 +1,23 @@ stages: - - Generate Stub and Versions - - Generate Version Files + - Compile Versions - Compile Sources - Link - - Generate ISO - - Generate Sources List - Generate Documentation + - Deploy -compile_stub: - stage: Generate Stub and Versions - script: - - chmod +x ./compile_stub.sh - - ./compile_stub.sh - artifacts: +cache: + - key: ${CI_COMMIT_REF_SLUG} paths: - - lib/stub.o + - lib/*.o + - bin/kernel.bin + - doc -vergen: - stage: Generate Stub and Versions - script: - - chmod +x ./compile_vergen.sh +before_script: + - chmod +x *.sh + +versions: + stage: Compile Versions + script: - ./compile_vergen.sh artifacts: paths: @@ -29,71 +27,45 @@ vergen: compile_sources: stage: Compile Sources script: - - chmod +x ./compile_sources.sh + - rm -f lib/*.so - ./compile_sources.sh - artifacts: - paths: - - lib/*.o - dependencies: - - compile_stub - - vergen needs: - - vergen - - compile_stub + - versions link: stage: Link script: - - chmod +x ./compile_link.sh + - ./compile_stub.sh - ./compile_link.sh - artifacts: - paths: - - bin/kernel.bin - dependencies: - - compile_sources needs: + - versions - compile_sources isogen: - stage: Generate ISO + stage: Deploy script: - - chmod +x ./compile_isogen.sh - ./compile_isogen.sh - - chmod +x ./compile_sumgen.sh - ./compile_sumgen.sh artifacts: paths: - ./Asuro.iso - ./release/checksum.svg - dependencies: - - link needs: - link -sourcelist: - stage: Generate Sources List - script: - - chmod +x ./compile_sourcelist.sh - - ./compile_sourcelist.sh - artifacts: - paths: - - ./sources.list - dependencies: - - vergen - needs: - - vergen - docgen: stage: Generate Documentation + only: + - master + - develop script: - - chmod +x ./compile_docs.sh + - ./compile_sourcelist.sh - ./compile_docs.sh + - ln -s doc public + allow_failure: true artifacts: paths: - - ./doc/* - dependencies: - - vergen - - sourcelist + - public + - ./sources.list needs: - - vergen - - sourcelist \ No newline at end of file + - versions diff --git a/Dockerfile b/Dockerfile index 6b345c26..a366a1a9 100644 --- a/Dockerfile +++ b/Dockerfile @@ -2,18 +2,22 @@ FROM ubuntu:latest VOLUME ["/code"] +ENV DEBIAN_FRONTEND=noninteractive RUN dpkg --add-architecture i386 -RUN apt-get update -RUN apt-get install nasm curl make:i386 binutils:i386 xorriso grub-pc-bin dos2unix -y -RUN apt-get clean -RUN curl https://sourceforge.net/projects/freepascal/files/Linux/2.6.4/fpc-2.6.4.i386-linux.tar/download --output fpc.tar -L && \ - tar -xf fpc.tar +RUN apt-get update && apt-get install -y \ + curl dos2unix wget git make nasm binutils:i386 xorriso grub-pc-bin && \ + apt-get clean my room -WORKDIR ./fpc-2.6.4.i386-linux -RUN ./install.sh +SHELL ["/bin/bash", "-c"] +ARG FPC_VERSION=2.6.4 +RUN curl -sL https://sourceforge.net/projects/freepascal/files/Linux/$FPC_VERSION/fpc-$FPC_VERSION.i386-linux.tar/download | tar -xf - && \ + pushd fpc-$FPC_VERSION.i386-linux && ./install.sh && popd && \ + rm -rf fpc-$FPC_VERSION.i386-linux COPY compile.sh /compile.sh -RUN mkdir /code +ADD https://raw.githubusercontent.com/fsaintjacques/semver-tool/master/src/semver /usr/bin/semver +RUN mkdir /code && chmod +x /usr/bin/semver WORKDIR /code RUN find . -type f -print0 | xargs -0 dos2unix -ENTRYPOINT ["/bin/bash", "/compile.sh"] \ No newline at end of file +ENTRYPOINT ["/bin/bash", "-c"] +CMD ["/compile.sh"] \ No newline at end of file diff --git a/compile.sh b/compile.sh index 20a282a2..c55accb7 100755 --- a/compile.sh +++ b/compile.sh @@ -1,4 +1,4 @@ -#!/bin/sh +#!/usr/bin/env bash ERRCOUNT=0 echo " " echo "=======================" @@ -7,49 +7,32 @@ echo "Asuro Compilation" echo " " #Compile Stub.asm -./compile_stub.sh -if [ $? -ne 0 ] -then - echo "Failed to compile stub!" - ERRCOUNT=$((ERRCOUNT+1)) -else - echo "Success." -fi +rm lib/* + +runOrFail() { + local binary=$1 + local errorText=$2 + if $binary; then + echo "Success." + else + echo "$errorText" + ERRCOUNT=$((ERRCOUNT+1)) + fi +} + +runOrFail $(pwd)/compile_stub.sh "Failed to compile stub!" #Generate .pas with versioning headers. -./compile_vergen.sh +runOrFail $(pwd)/compile_vergen.sh "Versions failed to compile" #Compile all .pas sources -./compile_sources.sh -if [ $? -ne 0 ] -then - echo " " - echo "Failed to compile FPC Sources!" - ERRCOUNT=$((ERRCOUNT+1)) -else - echo " " - echo "Success." -fi +runOrFail $(pwd)/compile_sources.sh "Failed to compile FPC Sources!" #Link into a binary. -./compile_link.sh -if [ $? -ne 0 ] -then - echo "Failed linking!" - ERRCOUNT=$((ERRCOUNT+1)) -else - echo "Success." -fi +runOrFail $(pwd)/compile_link.sh "Failed linking!" #Generate an ISO with GRUB as the Bootloader. -./compile_isogen.sh -if [ $? -ne 0 ] -then - echo "Failed to create ISO!" - ERRCOUNT=$((ERRCOUNT+1)) -else - echo "Success." -fi +runOrFail ./compile_isogen.sh "Failed to create ISO!" #Call generate final artifacts based on failure or success of the above. if [ "$ERRCOUNT" -ne "0" ] @@ -59,4 +42,4 @@ else ./compile_finish.sh "success" fi -cd .. +cd .. \ No newline at end of file diff --git a/compile_checksum.sh b/compile_checksum.sh index c0594d70..8ace0722 100644 --- a/compile_checksum.sh +++ b/compile_checksum.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash echo > checksums.md5 for directory in $(find src/ -maxdepth 10 -type d); do for filename in $directory/*.pas; do diff --git a/compile_docs.sh b/compile_docs.sh index 4edbc951..5a7910a0 100644 --- a/compile_docs.sh +++ b/compile_docs.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash echo " " echo "=======================" echo " " @@ -14,5 +14,4 @@ echo "Removing old docs" rm -rf ./doc/* echo "Generating Docs..." ./pasdoc/bin/pasdoc -N "Asuro" -T "Asuro OS Documentation" -O "html" -E ./doc/ -S sources.list --use-tipue-search -echo "Docgen finished." -exit 0 \ No newline at end of file +echo "Docgen finished." \ No newline at end of file diff --git a/compile_finish.sh b/compile_finish.sh index 206895fb..0e9f3c09 100644 --- a/compile_finish.sh +++ b/compile_finish.sh @@ -1,8 +1,8 @@ -#/bin/sh +#!/usr/bin/env bash echo " " echo "=======================" echo " " -if [ "$1" == "failed" ] +if [[ "$1" == "failed" ]] then echo "Errors Occurred, please review." wget -q https://img.shields.io/badge/build-failed-red.svg -O release/build.svg 2>/dev/null diff --git a/compile_isogen.sh b/compile_isogen.sh index efec801d..4af8522b 100644 --- a/compile_isogen.sh +++ b/compile_isogen.sh @@ -1,4 +1,4 @@ -#!/bin/sh +#!/usr/bin/env bash echo " " echo "=======================" echo " " diff --git a/compile_link.sh b/compile_link.sh index f8611920..cc9998c2 100644 --- a/compile_link.sh +++ b/compile_link.sh @@ -1,4 +1,4 @@ -#!/bin/sh +#!/usr/bin/env bash echo " " echo "=======================" echo " " diff --git a/compile_sourcelist.sh b/compile_sourcelist.sh index 9d6b9539..7001cb77 100644 --- a/compile_sourcelist.sh +++ b/compile_sourcelist.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash echo " " echo "=======================" echo " " diff --git a/compile_sources.sh b/compile_sources.sh index aedefff5..c8f6db32 100644 --- a/compile_sources.sh +++ b/compile_sources.sh @@ -1,4 +1,4 @@ -#!/bin/sh +#!/usr/bin/env bash echo " " echo "=======================" echo " " diff --git a/compile_stub.sh b/compile_stub.sh index 3f834379..72c829a7 100644 --- a/compile_stub.sh +++ b/compile_stub.sh @@ -1,8 +1,7 @@ -#!/bin/sh +#!/usr/bin/env bash echo " " echo "=======================" echo " " echo "Compiling Stub..." echo " " -rm lib/* nasm -f elf src/stub/stub.asm -o lib/stub.o \ No newline at end of file diff --git a/compile_sumgen.sh b/compile_sumgen.sh index f0f961d1..42d4d228 100644 --- a/compile_sumgen.sh +++ b/compile_sumgen.sh @@ -1,4 +1,4 @@ -#/bin/sh +#!/usr/bin/env bash echo " " echo "=======================" echo " " diff --git a/compile_vergen.sh b/compile_vergen.sh index b12cbe7d..cb9ae513 100644 --- a/compile_vergen.sh +++ b/compile_vergen.sh @@ -1,4 +1,5 @@ -#!/bin/bash +#!/usr/bin/env bash +set -e echo " " echo "=======================" echo " " @@ -8,60 +9,67 @@ chmod +x ./compile_checksum.sh ./compile_checksum.sh outfile="src/include/asuro.pas" file="version" -while IFS=: read -r line;do - major=$(echo $line | awk '{print $1}') - minor=$(echo $line | awk '{print $2}') - sub=$(echo $line | awk '{print $3}') - release=$(echo $line | awk '{print $4}') -done <"$file" +{ + # this script requires semver tool + wget -q https://raw.githubusercontent.com/fsaintjacques/semver-tool/master/src/semver -O bin/semver && chmod +x bin/semver + export PATH="$(pwd)/bin:$PATH" +} +tagref=$(git describe --tags) +revision=$(git rev-parse --short=8 HEAD) +major=$(semver get major $tagref) +minor=$(semver get minor $tagref) +sub=$(semver get patch $tagref) +version=$(semver get release $tagref) +release=$(semver get prerel $tagref) +build=$(semver get build $tagref) linecount=$(./loc.sh | awk '{print $1}') sourcecount=$(find src -type f | wc -l) drivercount=$(find src/driver -type f | wc -l) -revision=$(git rev-list --all --count) fpcversion=$(fpc -h | grep -m 1 version | awk '{print $5}') makeversion=$(make -v | grep GNU | awk '{print $3}' | grep -v GNU) nasmversion=$(nasm -v | awk '{print $3'}) compiledate=$(date +"%d/%m/%y") compiletime=$(date +"%T") checksum=$(md5sum checksums.md5 | awk '{print $1}') -echo "{" > $outfile -echo " Include->Asuro - Constants generated during pipeline/compilation for use at runtime." >> $outfile -echo " @author(Autogenerated)" >> $outfile -echo "}" >> $outfile -echo "unit asuro;" >> $outfile -echo " " >> $outfile -echo "interface" >> $outfile -echo " " >> $outfile -echo "const" >> $outfile -echo " VERSION = '$major.$minor.$sub-$revision$release'; //The current full version as a string." >> $outfile -echo " VERSION_MAJOR = '$major'; // Current major version as a string." >> $outfile -echo " VERSION_MINOR = '$minor'; // Current minor version as a string." >> $outfile -echo " VERSION_SUB = '$sub'; // Current sub version as a string." >> $outfile -echo " REVISION = '$revision'; // Current revision as a string." >> $outfile -echo " RELEASE = '$release'; // Current release as a string." >> $outfile -echo " LINE_COUNT = $linecount; // Project line count as compiled as a string." >> $outfile -echo " FILE_COUNT = $sourcecount; // Project line count as compiled as a string." >> $outfile -echo " DRIVER_COUNT = $drivercount; // Number of baked drivers in the current binary." >> $outfile -echo " FPC_VERSION = '$fpcversion'; // Version of the FreePascal Compiler used to compile the current binary." >> $outfile -echo " NASM_VERSION = '$nasmversion'; // Version of the Netwide Assembler used to compile the multiboot stub." >> $outfile -echo " MAKE_VERSION = '$makeversion'; // Version of MAKE used to link the current binary." >> $outfile -echo " COMPILE_DATE = '$compiledate'; // Date in which the current binary was compiled." >> $outfile -echo " COMPILE_TIME = '$compiletime'; // Time in which the current binary was compiled." >> $outfile -echo " CHECKSUM = '$checksum'; // MD5 pseduo-checksum of all of the sourcefiles together." >> $outfile -echo " " >> $outfile -echo "implementation" >> $outfile -echo " " >> $outfile -echo "end." >> $outfile + +[[ -n "$release" ]] && version="$version-$release" +cat > $outfile </dev/null -wget -q https://img.shields.io/badge/revision-$revision-blue.svg -O release/revision.svg 2>/dev/null -wget -q https://img.shields.io/badge/release-$release-blue.svg -O release/release.svg 2>/dev/null -wget -q https://img.shields.io/badge/lines-$linecount-blueviolet.svg -O release/lines.svg 2>/dev/null -wget -q https://img.shields.io/badge/files-$sourcecount-blueviolet.svg -O release/files.svg 2>/dev/null -wget -q https://img.shields.io/badge/drivers-$drivercount-blueviolet.svg -O release/drivers.svg 2>/dev/null -wget -q https://img.shields.io/badge/FPC_version-$fpcversion-lightgrey.svg -O release/fpcversion.svg 2>/dev/null -wget -q https://img.shields.io/badge/NASM_version-$nasmversion-lightgrey.svg -O release/nasmversion.svg 2>/dev/null -wget -q https://img.shields.io/badge/MAKE_version-$makeversion-lightgrey.svg -O release/makeversion.svg 2>/dev/null -wget -q https://img.shields.io/badge/release_date-$compiledate-lightgrey.svg -O release/date.svg 2>/dev/null -wget -q https://img.shields.io/badge/fingerprint-$checksum-important.svg -O release/fingerprint.svg 2>/dev/null +set +e # These can fail on branches and such, for now +wget -q https://img.shields.io/badge/version-$major.$minor.$sub--$revision$release-blue.svg -O release/version.svg +wget -q https://img.shields.io/badge/revision-$revision-blue.svg -O release/revision.svg +wget -q https://img.shields.io/badge/release-$release-blue.svg -O release/release.svg +wget -q https://img.shields.io/badge/lines-$linecount-blueviolet.svg -O release/lines.svg +wget -q https://img.shields.io/badge/files-$sourcecount-blueviolet.svg -O release/files.svg +wget -q https://img.shields.io/badge/drivers-$drivercount-blueviolet.svg -O release/drivers.svg +wget -q https://img.shields.io/badge/FPC_version-$fpcversion-lightgrey.svg -O release/fpcversion.svg +wget -q https://img.shields.io/badge/NASM_version-$nasmversion-lightgrey.svg -O release/nasmversion.svg +wget -q https://img.shields.io/badge/MAKE_version-$makeversion-lightgrey.svg -O release/makeversion.svg +wget -q https://img.shields.io/badge/release_date-$compiledate-lightgrey.svg -O release/date.svg +wget -q https://img.shields.io/badge/fingerprint-$checksum-important.svg -O release/fingerprint.svg echo "Done versioning."