Compare commits
	
		
			2 Commits
		
	
	
		
			1db74f791a
			...
			feature/do
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 33cb042b8c | |||
| 439d4ef8ac | 
| @@ -1,23 +1,25 @@ | |||||||
| stages: | stages: | ||||||
|   - Compile Versions |   - Generate Stub and Versions | ||||||
|  |   - Generate Version Files | ||||||
|   - Compile Sources |   - Compile Sources | ||||||
|   - Link |   - Link | ||||||
|  |   - Generate ISO | ||||||
|  |   - Generate Sources List | ||||||
|   - Generate Documentation |   - Generate Documentation | ||||||
|   - Deploy |  | ||||||
|  |  | ||||||
| cache: | compile_stub: | ||||||
|   - key: ${CI_COMMIT_REF_SLUG} |   stage: Generate Stub and Versions | ||||||
|  |   script:  | ||||||
|  |     - chmod +x ./compile_stub.sh | ||||||
|  |     - ./compile_stub.sh | ||||||
|  |   artifacts: | ||||||
|     paths: |     paths: | ||||||
|       - lib/*.o |       - lib/stub.o | ||||||
|       - bin/kernel.bin |  | ||||||
|       - doc |  | ||||||
|  |  | ||||||
| before_script: | vergen: | ||||||
|   - chmod +x *.sh |   stage: Generate Stub and Versions | ||||||
|  |   script:  | ||||||
| versions: |     - chmod +x ./compile_vergen.sh | ||||||
|   stage: Compile Versions |  | ||||||
|   script: |  | ||||||
|     - ./compile_vergen.sh |     - ./compile_vergen.sh | ||||||
|   artifacts: |   artifacts: | ||||||
|     paths: |     paths: | ||||||
| @@ -27,47 +29,71 @@ versions: | |||||||
| compile_sources: | compile_sources: | ||||||
|   stage: Compile Sources |   stage: Compile Sources | ||||||
|   script: |   script: | ||||||
|     - rm -f lib/*.so |     - chmod +x ./compile_sources.sh | ||||||
|     - ./compile_sources.sh |     - ./compile_sources.sh | ||||||
|  |   artifacts: | ||||||
|  |     paths: | ||||||
|  |       - lib/*.o | ||||||
|  |   dependencies: | ||||||
|  |     - compile_stub | ||||||
|  |     - vergen | ||||||
|   needs: |   needs: | ||||||
|     - versions |     - vergen | ||||||
|  |     - compile_stub | ||||||
|  |  | ||||||
| link: | link: | ||||||
|   stage: Link |   stage: Link | ||||||
|   script: |   script: | ||||||
|     - ./compile_stub.sh |     - chmod +x ./compile_link.sh | ||||||
|     - ./compile_link.sh |     - ./compile_link.sh | ||||||
|  |   artifacts: | ||||||
|  |     paths: | ||||||
|  |       - bin/kernel.bin | ||||||
|  |   dependencies: | ||||||
|  |     - compile_sources | ||||||
|   needs: |   needs: | ||||||
|     - versions |  | ||||||
|     - compile_sources |     - compile_sources | ||||||
|  |  | ||||||
| isogen: | isogen: | ||||||
|   stage: Deploy |   stage: Generate ISO | ||||||
|   script: |   script: | ||||||
|  |     - chmod +x ./compile_isogen.sh | ||||||
|     - ./compile_isogen.sh |     - ./compile_isogen.sh | ||||||
|  |     - chmod +x ./compile_sumgen.sh | ||||||
|     - ./compile_sumgen.sh |     - ./compile_sumgen.sh | ||||||
|   artifacts: |   artifacts: | ||||||
|     paths: |     paths: | ||||||
|       - ./Asuro.iso |       - ./Asuro.iso | ||||||
|       - ./release/checksum.svg |       - ./release/checksum.svg | ||||||
|  |   dependencies: | ||||||
|  |     - link | ||||||
|   needs: |   needs: | ||||||
|     - link |     - link | ||||||
|  |  | ||||||
| docgen: | sourcelist: | ||||||
|   stage: Generate Documentation |   stage: Generate Sources List | ||||||
|   only: |  | ||||||
|     - master |  | ||||||
|     - develop |  | ||||||
|   script: |   script: | ||||||
|  |     - chmod +x ./compile_sourcelist.sh | ||||||
|     - ./compile_sourcelist.sh |     - ./compile_sourcelist.sh | ||||||
|     - ./compile_docs.sh |  | ||||||
|     # Remove comments when we want to use gitlab pages. |  | ||||||
|     #- cp doc public |  | ||||||
|   allow_failure: true |  | ||||||
|   artifacts: |   artifacts: | ||||||
|     paths: |     paths: | ||||||
|       - doc |       - ./sources.list | ||||||
|       #- public/* |   dependencies: | ||||||
|       #- ./sources.list |     - vergen | ||||||
|   needs: |   needs: | ||||||
|     - versions |     - vergen | ||||||
|  |  | ||||||
|  | docgen: | ||||||
|  |   stage: Generate Documentation | ||||||
|  |   script: | ||||||
|  |     - chmod +x ./compile_docs.sh | ||||||
|  |     - ./compile_docs.sh | ||||||
|  |   artifacts: | ||||||
|  |     paths: | ||||||
|  |       - ./doc/* | ||||||
|  |   dependencies: | ||||||
|  |     - vergen | ||||||
|  |     - sourcelist | ||||||
|  |   needs: | ||||||
|  |     - vergen | ||||||
|  |     - sourcelist | ||||||
							
								
								
									
										22
									
								
								Dockerfile
									
									
									
									
									
								
							
							
						
						
									
										22
									
								
								Dockerfile
									
									
									
									
									
								
							| @@ -2,22 +2,18 @@ FROM ubuntu:latest | |||||||
|  |  | ||||||
| VOLUME ["/code"] | VOLUME ["/code"] | ||||||
|  |  | ||||||
| ENV DEBIAN_FRONTEND=noninteractive |  | ||||||
| RUN dpkg --add-architecture i386 | RUN dpkg --add-architecture i386 | ||||||
| RUN apt-get update && apt-get install -y \ | RUN apt-get update | ||||||
| 	curl dos2unix wget git make nasm binutils:i386 xorriso grub-pc-bin && \ | RUN apt-get install nasm curl make:i386 binutils:i386 xorriso grub-pc-bin dos2unix -y | ||||||
| 	apt-get clean my room | 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 | ||||||
|  |  | ||||||
| SHELL ["/bin/bash", "-c"] | WORKDIR ./fpc-2.6.4.i386-linux | ||||||
| ARG FPC_VERSION=2.6.4 | RUN ./install.sh | ||||||
| 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 | COPY compile.sh /compile.sh | ||||||
| ADD https://raw.githubusercontent.com/fsaintjacques/semver-tool/master/src/semver /usr/bin/semver | RUN mkdir /code | ||||||
| RUN mkdir /code && chmod +x /usr/bin/semver |  | ||||||
| WORKDIR /code | WORKDIR /code | ||||||
| RUN find . -type f -print0 | xargs -0 dos2unix | RUN find . -type f -print0 | xargs -0 dos2unix | ||||||
| ENTRYPOINT ["/bin/bash", "-c"] | ENTRYPOINT ["/bin/bash", "/compile.sh"] | ||||||
| CMD ["/compile.sh"] |  | ||||||
							
								
								
									
										57
									
								
								compile.sh
									
									
									
									
									
								
							
							
						
						
									
										57
									
								
								compile.sh
									
									
									
									
									
								
							| @@ -1,4 +1,4 @@ | |||||||
| #!/usr/bin/env bash | #!/bin/sh | ||||||
| ERRCOUNT=0 | ERRCOUNT=0 | ||||||
| echo " " | echo " " | ||||||
| echo "=======================" | echo "=======================" | ||||||
| @@ -7,32 +7,49 @@ echo "Asuro Compilation" | |||||||
| echo " " | echo " " | ||||||
|  |  | ||||||
| #Compile Stub.asm | #Compile Stub.asm | ||||||
| rm lib/* | ./compile_stub.sh | ||||||
|  | if [ $? -ne 0 ] | ||||||
| runOrFail() { | then | ||||||
| 	local binary=$1 | 	echo "Failed to compile stub!" | ||||||
| 	local errorText=$2 | 	ERRCOUNT=$((ERRCOUNT+1))	 | ||||||
| 	if $binary; then | else | ||||||
| 		echo "Success." | 	echo "Success." | ||||||
| 	else | fi | ||||||
| 		echo "$errorText" |  | ||||||
| 		ERRCOUNT=$((ERRCOUNT+1)) |  | ||||||
| 	fi |  | ||||||
| } |  | ||||||
|  |  | ||||||
| runOrFail $(pwd)/compile_stub.sh "Failed to compile stub!" |  | ||||||
|  |  | ||||||
| #Generate .pas with versioning headers. | #Generate .pas with versioning headers. | ||||||
| runOrFail $(pwd)/compile_vergen.sh "Versions failed to compile" | ./compile_vergen.sh | ||||||
|  |  | ||||||
| #Compile all .pas sources | #Compile all .pas sources | ||||||
| runOrFail $(pwd)/compile_sources.sh "Failed to compile FPC Sources!" | ./compile_sources.sh | ||||||
|  | if [ $? -ne 0 ] | ||||||
|  | then | ||||||
|  | 	echo " " | ||||||
|  | 	echo "Failed to compile FPC Sources!" | ||||||
|  | 	ERRCOUNT=$((ERRCOUNT+1))	 | ||||||
|  | else | ||||||
|  | 	echo " " | ||||||
|  | 	echo "Success." | ||||||
|  | fi | ||||||
|  |  | ||||||
| #Link into a binary. | #Link into a binary. | ||||||
| runOrFail $(pwd)/compile_link.sh "Failed linking!" | ./compile_link.sh | ||||||
|  | if [ $? -ne 0 ] | ||||||
|  | then | ||||||
|  | 	echo "Failed linking!" | ||||||
|  | 	ERRCOUNT=$((ERRCOUNT+1)) | ||||||
|  | else | ||||||
|  | 	echo "Success." | ||||||
|  | fi | ||||||
|  |  | ||||||
| #Generate an ISO with GRUB as the Bootloader. | #Generate an ISO with GRUB as the Bootloader. | ||||||
| runOrFail ./compile_isogen.sh "Failed to create ISO!" | ./compile_isogen.sh | ||||||
|  | if [ $? -ne 0 ] | ||||||
|  | then | ||||||
|  | 	echo "Failed to create ISO!" | ||||||
|  | 	ERRCOUNT=$((ERRCOUNT+1)) | ||||||
|  | else | ||||||
|  | 	echo "Success." | ||||||
|  | fi | ||||||
|  |  | ||||||
| #Call generate final artifacts based on failure or success of the above. | #Call generate final artifacts based on failure or success of the above. | ||||||
| if [ "$ERRCOUNT" -ne "0" ] | if [ "$ERRCOUNT" -ne "0" ] | ||||||
| @@ -42,4 +59,4 @@ else | |||||||
| 	./compile_finish.sh "success" | 	./compile_finish.sh "success" | ||||||
| fi | fi | ||||||
|  |  | ||||||
| cd .. | cd .. | ||||||
|   | |||||||
| @@ -1,4 +1,4 @@ | |||||||
| #!/usr/bin/env bash | #!/bin/bash | ||||||
| echo > checksums.md5 | echo > checksums.md5 | ||||||
| for directory in $(find src/ -maxdepth 10 -type d); do | for directory in $(find src/ -maxdepth 10 -type d); do | ||||||
| 	for filename in $directory/*.pas; do | 	for filename in $directory/*.pas; do | ||||||
|   | |||||||
| @@ -1,4 +1,4 @@ | |||||||
| #!/usr/bin/env bash | #!/bin/bash | ||||||
| echo " " | echo " " | ||||||
| echo "=======================" | echo "=======================" | ||||||
| echo " " | echo " " | ||||||
| @@ -14,4 +14,5 @@ echo "Removing old docs" | |||||||
| rm -rf ./doc/* | rm -rf ./doc/* | ||||||
| echo "Generating Docs..." | echo "Generating Docs..." | ||||||
| ./pasdoc/bin/pasdoc -N "Asuro" -T "Asuro OS Documentation" -O "html" -E ./doc/ -S sources.list --use-tipue-search | ./pasdoc/bin/pasdoc -N "Asuro" -T "Asuro OS Documentation" -O "html" -E ./doc/ -S sources.list --use-tipue-search | ||||||
| echo "Docgen finished." | echo "Docgen finished." | ||||||
|  | exit 0 | ||||||
| @@ -1,8 +1,8 @@ | |||||||
| #!/usr/bin/env bash | #/bin/sh | ||||||
| echo " " | echo " " | ||||||
| echo "=======================" | echo "=======================" | ||||||
| echo " " | echo " " | ||||||
| if [[ "$1" == "failed" ]] | if [ "$1" == "failed" ] | ||||||
| then | then | ||||||
| 	echo "Errors Occurred, please review." | 	echo "Errors Occurred, please review." | ||||||
| 	wget -q https://img.shields.io/badge/build-failed-red.svg -O release/build.svg 2>/dev/null | 	wget -q https://img.shields.io/badge/build-failed-red.svg -O release/build.svg 2>/dev/null | ||||||
|   | |||||||
| @@ -1,4 +1,4 @@ | |||||||
| #!/usr/bin/env bash | #!/bin/sh | ||||||
| echo " " | echo " " | ||||||
| echo "=======================" | echo "=======================" | ||||||
| echo " " | echo " " | ||||||
|   | |||||||
| @@ -1,4 +1,4 @@ | |||||||
| #!/usr/bin/env bash | #!/bin/sh | ||||||
| echo " " | echo " " | ||||||
| echo "=======================" | echo "=======================" | ||||||
| echo " " | echo " " | ||||||
|   | |||||||
| @@ -1,4 +1,4 @@ | |||||||
| #!/usr/bin/env bash | #!/bin/bash | ||||||
| echo " " | echo " " | ||||||
| echo "=======================" | echo "=======================" | ||||||
| echo " " | echo " " | ||||||
|   | |||||||
| @@ -1,4 +1,4 @@ | |||||||
| #!/usr/bin/env bash | #!/bin/sh | ||||||
| echo " " | echo " " | ||||||
| echo "=======================" | echo "=======================" | ||||||
| echo " " | echo " " | ||||||
|   | |||||||
| @@ -1,7 +1,8 @@ | |||||||
| #!/usr/bin/env bash | #!/bin/sh | ||||||
| echo " " | echo " " | ||||||
| echo "=======================" | echo "=======================" | ||||||
| echo " " | echo " " | ||||||
| echo "Compiling Stub..." | echo "Compiling Stub..." | ||||||
| echo " " | echo " " | ||||||
|  | rm lib/* | ||||||
| nasm -f elf src/stub/stub.asm -o lib/stub.o | nasm -f elf src/stub/stub.asm -o lib/stub.o | ||||||
| @@ -1,4 +1,4 @@ | |||||||
| #!/usr/bin/env bash | #/bin/sh | ||||||
| echo " " | echo " " | ||||||
| echo "=======================" | echo "=======================" | ||||||
| echo " " | echo " " | ||||||
|   | |||||||
| @@ -1,5 +1,4 @@ | |||||||
| #!/usr/bin/env bash | #!/bin/bash | ||||||
| set -e |  | ||||||
| echo " " | echo " " | ||||||
| echo "=======================" | echo "=======================" | ||||||
| echo " " | echo " " | ||||||
| @@ -9,67 +8,60 @@ chmod +x ./compile_checksum.sh | |||||||
| ./compile_checksum.sh | ./compile_checksum.sh | ||||||
| outfile="src/include/asuro.pas" | outfile="src/include/asuro.pas" | ||||||
| file="version" | file="version" | ||||||
| { | while IFS=: read -r line;do | ||||||
| 	# this script requires semver tool | 	major=$(echo $line | awk '{print $1}') | ||||||
| 	wget -q https://raw.githubusercontent.com/fsaintjacques/semver-tool/master/src/semver -O bin/semver && chmod +x bin/semver | 	minor=$(echo $line | awk '{print $2}') | ||||||
| 	export PATH="$(pwd)/bin:$PATH" | 	sub=$(echo $line | awk '{print $3}') | ||||||
| } | 	release=$(echo $line | awk '{print $4}') | ||||||
| tagref=$(git describe --tags) | done <"$file" | ||||||
| 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}') | linecount=$(./loc.sh | awk '{print $1}') | ||||||
| sourcecount=$(find src -type f | wc -l) | sourcecount=$(find src -type f | wc -l) | ||||||
| drivercount=$(find src/driver -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}') | fpcversion=$(fpc -h | grep -m 1 version | awk '{print $5}') | ||||||
| makeversion=$(make -v | grep GNU | awk '{print $3}' | grep -v GNU) | makeversion=$(make -v | grep GNU | awk '{print $3}' | grep -v GNU) | ||||||
| nasmversion=$(nasm -v | awk '{print $3'}) | nasmversion=$(nasm -v | awk '{print $3'}) | ||||||
| compiledate=$(date +"%d/%m/%y") | compiledate=$(date +"%d/%m/%y") | ||||||
| compiletime=$(date +"%T") | compiletime=$(date +"%T") | ||||||
| checksum=$(md5sum checksums.md5 | awk '{print $1}') | checksum=$(md5sum checksums.md5 | awk '{print $1}') | ||||||
|  | echo "{" > $outfile | ||||||
| [[ -n "$release" ]] && version="$version-$release" | echo "   Include->Asuro - Constants generated during pipeline/compilation for use at runtime." >> $outfile | ||||||
| cat > $outfile <<EOF | echo "   @author(Autogenerated)" >> $outfile | ||||||
| unit asuro; | echo "}" >> $outfile | ||||||
|   | echo "unit asuro;" >> $outfile | ||||||
| interface | echo " " >> $outfile | ||||||
|   | echo "interface" >> $outfile | ||||||
| const | echo " " >> $outfile | ||||||
|      VERSION       = '$version'; | echo "const" >> $outfile | ||||||
|      VERSION_MAJOR = '$major'; | echo "     VERSION       = '$major.$minor.$sub-$revision$release'; //The current full version as a string." >> $outfile | ||||||
|      VERSION_MINOR = '$minor'; | echo "     VERSION_MAJOR = '$major'; // Current major version as a string." >> $outfile | ||||||
|      VERSION_SUB   = '$sub'; | echo "     VERSION_MINOR = '$minor'; // Current minor version as a string." >> $outfile | ||||||
|      REVISION      = '$revision'; | echo "     VERSION_SUB   = '$sub'; // Current sub version as a string." >> $outfile | ||||||
|      RELEASE       = '$release'; | echo "     REVISION      = '$revision'; // Current revision as a string." >> $outfile | ||||||
|      LINE_COUNT    = $linecount; | echo "     RELEASE       = '$release'; // Current release as a string." >> $outfile | ||||||
|      FILE_COUNT    = $sourcecount; | echo "     LINE_COUNT    = $linecount; // Project line count as compiled as a string." >> $outfile | ||||||
|      DRIVER_COUNT  = $drivercount; | echo "     FILE_COUNT    = $sourcecount; // Project line count as compiled as a string." >> $outfile | ||||||
|      FPC_VERSION   = '$fpcversion'; | echo "     DRIVER_COUNT  = $drivercount; // Number of baked drivers in the current binary." >> $outfile | ||||||
|      NASM_VERSION  = '$nasmversion'; | echo "     FPC_VERSION   = '$fpcversion'; // Version of the FreePascal Compiler used to compile the current binary." >> $outfile | ||||||
|      MAKE_VERSION  = '$makeversion'; | echo "     NASM_VERSION  = '$nasmversion'; // Version of the Netwide Assembler used to compile the multiboot stub." >> $outfile | ||||||
|      COMPILE_DATE  = '$compiledate'; | echo "     MAKE_VERSION  = '$makeversion'; // Version of MAKE used to link the current binary." >> $outfile | ||||||
|      COMPILE_TIME  = '$compiletime'; | echo "     COMPILE_DATE  = '$compiledate'; // Date in which the current binary was compiled." >> $outfile | ||||||
|      CHECKSUM      = '$checksum'; | 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 | ||||||
| implementation | echo " " >> $outfile | ||||||
|   | echo "implementation" >> $outfile | ||||||
| end. | echo " " >> $outfile | ||||||
| EOF | echo "end." >> $outfile | ||||||
| echo "Generating release info..." | echo "Generating release info..." | ||||||
| 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 2>/dev/null | ||||||
| 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 2>/dev/null | ||||||
| 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 2>/dev/null | ||||||
| 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 2>/dev/null | ||||||
| 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 2>/dev/null | ||||||
| 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 2>/dev/null | ||||||
| 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 2>/dev/null | ||||||
| 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 2>/dev/null | ||||||
| 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 2>/dev/null | ||||||
| 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 2>/dev/null | ||||||
| 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 2>/dev/null | ||||||
| wget -q https://img.shields.io/badge/fingerprint-$checksum-important.svg -O release/fingerprint.svg |  | ||||||
| echo "Done versioning." | echo "Done versioning." | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user