diff options
| author | ivarlovlie <git@ivarlovlie.no> | 2022-11-15 07:05:48 +0100 |
|---|---|---|
| committer | ivarlovlie <git@ivarlovlie.no> | 2022-11-15 07:05:48 +0100 |
| commit | 4d33867dfd00a2a84f15940cd28cb9c783337350 (patch) | |
| tree | a450dbeb5c64edd8a06c9c01223df8daecdebd20 | |
| parent | 3b1c64a9e658ea2cf213b33027f3abb547a9aaea (diff) | |
| download | lettnytt-4d33867dfd00a2a84f15940cd28cb9c783337350.tar.xz lettnytt-4d33867dfd00a2a84f15940cd28cb9c783337350.zip | |
feat: add build things
| -rw-r--r-- | .version-dev | 1 | ||||
| -rw-r--r-- | Dockerfile | 16 | ||||
| -rwxr-xr-x | build_and_push.sh | 93 |
3 files changed, 110 insertions, 0 deletions
diff --git a/.version-dev b/.version-dev new file mode 100644 index 0000000..573541a --- /dev/null +++ b/.version-dev @@ -0,0 +1 @@ +0 diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..f92f915 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,16 @@ +FROM mcr.microsoft.com/dotnet/sdk:7.0 AS build-env +WORKDIR /source + +# Copy csproj and restore as distinct layers +COPY src/*.csproj ./ +RUN dotnet restore + +# Copy everything else and build +COPY src/ ./ +RUN dotnet publish -c Release -o out + +# Build runtime image +FROM mcr.microsoft.com/dotnet/aspnet:7.0 +WORKDIR /app +COPY --from=build-env /source/out . +ENTRYPOINT ["dotnet", "I2R.LightNews.dll"] diff --git a/build_and_push.sh b/build_and_push.sh new file mode 100755 index 0000000..987b791 --- /dev/null +++ b/build_and_push.sh @@ -0,0 +1,93 @@ +#!/usr/bin/env bash + +set -Eueo pipefail + +CURRENT_DEV_VERSION=$(cat .version-dev) +CURRENT_DEV_VERSION_INT=${CURRENT_DEV_VERSION//[!0-9]/} +CURRENT_VERSION=$(cat .version) +CURRENT_VERSION_INT=${CURRENT_VERSION//[!0-9]/} +if [ ${1-prod} == "dev" ]; then + NEW_VERSION="v$((CURRENT_DEV_VERSION_INT+1))-dev" + OLD_VERSION=$CURRENT_DEV_VERSION +else + NEW_VERSION="v$((CURRENT_VERSION_INT+1))" + OLD_VERSION=$CURRENT_VERSION +fi +IMAGE_NAME="lettnytt" +HUB_NAME="dr.ivar.systems/lettnytt" + +# Check for uncommited changes and optionally commit them +if [ "$(git status --untracked-files=no --porcelain)" ]; then + echo "Unclean git tree! press CTRL+C to exit or press ENTER to commit and push to the default branch" + read -n 1 + + read -p "Enter commit message: " COMMIT_MESSAGE + git add .. + git commit --quiet -m "$COMMIT_MESSAGE" +fi + +if [ ${1-prod} == "dev" ]; then + echo $NEW_VERSION >| .version-dev + git add .version-dev +else + echo $NEW_VERSION >| .version + git add .version +fi + +echo "Starting build of $HUB_NAME:$NEW_VERSION at $(date -u)..." +echo + +# Put version.txt inside of server +pushd src/wwwroot +echo "$NEW_VERSION" >version.txt +git add version.txt +popd + +git commit --quiet -m "chore(release): Bump version"; + + +read -p "Do you want to tag this build? (y/n) " -n 1 -r +echo +if [[ $REPLY =~ ^[Yy]$ ]] +then + read -p "Enter tag message (can be empty): " TAG_MESSAGE + git tag -am "$TAG_MESSAGE" $NEW_VERSION +fi + +read -p "Do you want to push the latest commits and tags to origin? (y/n) " -n 1 -r +echo +if [[ $REPLY =~ ^[Yy]$ ]] +then + echo "Pushing latest changes to remotes..." + echo + git push --quiet --follow-tags +fi + + +# Build docker image +echo "Building docker image" +echo + +docker buildx build --platform linux/amd64 -t $IMAGE_NAME:$NEW_VERSION . + +docker tag $IMAGE_NAME:$NEW_VERSION $HUB_NAME:$NEW_VERSION + +if [ ${1-prod} == "dev" ]; then + docker tag $IMAGE_NAME:$NEW_VERSION $HUB_NAME:latest-dev +fi +if [ ${1-prod} == "prod" ]; then + docker tag $IMAGE_NAME:$NEW_VERSION $HUB_NAME:latest +fi + +# Optionally push images to docker registry +echo "Press CTRL+C to exit or press ENTER to push docker image to registry" +read -n 1 +docker push $HUB_NAME:$NEW_VERSION + +if [ ${1-prod} == "dev" ]; then + docker push $HUB_NAME:latest-dev +fi + +if [ ${1-prod} == "prod" ]; then + docker push $HUB_NAME:latest +fi |
