Files
deepdrft/dch5-publish-deploy.sh

74 lines
2.7 KiB
Bash

# start SSH agent and add key
eval $(ssh-agent -s)
ssh-add /c/.ssh/deepdrft_dch6_ed25519
CONTENT_PROJ="DeepDrftContent"
WEB_PROJ="DeepDrftPublic"
WEB_SERVICES_PROJ="DeepDrftData"
CONTENT_APP="deepdrft-content.tar.gz"
WEB_APP="deepdrft-web.tar.gz"
# Restore and Publish
dotnet publish $CONTENT_PROJ -c Release -f net10.0 -o $CONTENT_PROJ/publish -r linux-x64 -p:Platform="Any CPU" --verbosity normal
dotnet publish $WEB_PROJ -c Release -f net10.0 -o $WEB_PROJ/publish -r linux-x64 -p:Platform="Any CPU" --verbosity normal
# Check if migrations are needed
WEB_MIG="deepdrft-migrations.sql"
REMOTE="deepdrft@dch6.snailbird.net"
WEB_APPROOT="/deepdrft/web"
LATEST_MIGRATION=$(dotnet ef migrations list --project $WEB_SERVICES_PROJ --context DeepDrftContext | tail -1)
REMOTE_MIGRATION=$(ssh $REMOTE "sqlite3 $WEB_APPROOT/Database/deepdrft.db 'SELECT MigrationId FROM __EFMigrationsHistory ORDER BY MigrationId DESC LIMIT 1;'" 2>/dev/null || echo "")
if [ "$LATEST_MIGRATION" != "$REMOTE_MIGRATION" ]; then
echo "Generating migration script from $REMOTE_MIGRATION to $LATEST_MIGRATION..."
if [ -z "$REMOTE_MIGRATION" ]; then
dotnet ef migrations script --project $WEB_SERVICES_PROJ --context DeepDrftContext --output $WEB_MIG --verbose
else
dotnet ef migrations script $REMOTE_MIGRATION --project $WEB_SERVICES_PROJ --context DeepDrftContext --output $WEB_MIG --verbose
fi
APPLY_MIGRATIONS=true
else
echo "Database is up to date."
APPLY_MIGRATIONS=false
fi
# Compress published files
tar -czf $CONTENT_APP -C $CONTENT_PROJ/publish .
tar -czf $WEB_APP -C $WEB_PROJ/publish .
# Deploy
CONTENT_APPROOT="/deepdrft/api/content"
ssh $REMOTE "rm -rf $CONTENT_APPROOT/bin/*"
ssh $REMOTE "rm -rf $WEB_APPROOT/bin/*"
scp $CONTENT_APP $REMOTE:$CONTENT_APPROOT/$CONTENT_APP
if [ "$APPLY_MIGRATIONS" = true ]; then
scp $WEB_MIG $REMOTE:$WEB_APPROOT/$WEB_MIG
fi
scp $WEB_APP $REMOTE:$WEB_APPROOT/$WEB_APP
ssh $REMOTE "tar -xzf $CONTENT_APPROOT/$CONTENT_APP -C $CONTENT_APPROOT/bin && rm $CONTENT_APPROOT/$CONTENT_APP"
ssh $REMOTE "tar -xzf $WEB_APPROOT/$WEB_APP -C $WEB_APPROOT/bin && rm $WEB_APPROOT/$WEB_APP"
# Apply Local Environment
ssh $REMOTE "cp $CONTENT_APPROOT/environment/* $CONTENT_APPROOT/bin/environment"
# Apply database migrations on server
if [ "$APPLY_MIGRATIONS" = true ]; then
ssh $REMOTE "sqlite3 $WEB_APPROOT/Database/deepdrft.db < $WEB_APPROOT/$WEB_MIG && rm $WEB_APPROOT/$WEB_MIG"
fi
# Restart the service
ssh $REMOTE "$CONTENT_APPROOT/restart.sh"
ssh $REMOTE "$WEB_APPROOT/restart.sh"
# Clean up
rm -rf ./$CONTENT_PROJ/publish
rm -f ./$CONTENT_APP
rm -rf ./$WEB_PROJ/publish
rm -f ./$WEB_APP
if [ "$APPLY_MIGRATIONS" = true ]; then
rm -f ./$WEB_MIG
fi
ssh-agent -k