name: Deploy to Production Server on: push: branches: [ main ] workflow_dispatch: permissions: write-all jobs: build: name: Build Project and Upload to Server runs-on: self-hosted steps: - name: Cleanup run: rm -rf ProjectMakoto/ - name: Install SSH Key if: ${{ !github.event.act }} # skip during local actions testing uses: shimataro/ssh-key-action@v2 with: key: ${{ secrets.SSH_TOKEN }} known_hosts: ${{ secrets.SSH_KNOWN_HOST }} - name: Setup .NET Core SDK 9.x uses: actions/setup-dotnet@v4 with: dotnet-version: '9.x' - name: "Clone Repository" uses: actions/checkout@v4 with: ref: main submodules: recursive path: ProjectMakoto token: ${{ secrets.Access_token }} - name: Install Dependencies run: dotnet restore working-directory: ProjectMakoto/ProjectMakoto/ - name: Mark .sh files as executable run: find . -type f -name "*.sh" -exec chmod +x {} + working-directory: ProjectMakoto/OfficialPlugins/ - name: Prepare Makoto Plugin Build run: sh update_deps.sh working-directory: ProjectMakoto/OfficialPlugins/ - name: Build Makoto run: dotnet publish --configuration RELEASE --runtime linux-x64 --no-self-contained --output "build" --property:PublishDir="build" --framework net9.0 working-directory: ProjectMakoto/ProjectMakoto/ timeout-minutes: 5 - name: Create Version File run: git rev-parse --short HEAD > "ProjectMakoto/build/LatestGitPush.cfg" && git branch --show-current >> ProjectMakoto/build/LatestGitPush.cfg && echo $(date +%d.%m.%y) >> ProjectMakoto/build/LatestGitPush.cfg && echo $(date +%H:%M:%S,00) >> ProjectMakoto/build/LatestGitPush.cfg working-directory: ProjectMakoto/ - name: Build Makoto Plugins run: sh build_all.sh working-directory: ProjectMakoto/OfficialPlugins/ - name: Create plugins directory run: mkdir Plugins working-directory: ProjectMakoto/ProjectMakoto/build - name: Move plugins into directory run: mv ../OfficialPlugins/*.pmpl build/Plugins/ working-directory: ProjectMakoto/ProjectMakoto/ - name: Commit new trusted hashes working-directory: ProjectMakoto/ run: | git clone https://github.com/Fortunevale/ProjectMakoto.TrustedPlugins cd ProjectMakoto.TrustedPlugins mv ../OfficialPlugins/trusted_manifests/*.json hashes/ git config --global user.name 'Project Makoto' git config --global user.email 'ichigo@aitsys.dev' git remote set-url origin https://x-access-token:${{ secrets.PROJECT_MAKOTO_ACCESS_TOKEN }}@github.com/Fortunevale/ProjectMakoto.TrustedPlugins git add -A git commit -am "Add new hashes" git push - name: Sleep for 10 seconds run: sleep 10 shell: bash - name: Deploy to Production Server if: ${{ !github.event.act }} # skip during local actions testing run: rsync -avz --delete --force -e "ssh -p ${{ secrets.SSH_PORT }}" . ${{ secrets.SSH_USERNAME }}@${{ secrets.SSH_SERVER }}:/home/${{ secrets.SSH_USERNAME }}/Bots/latestProjectIchigo/ working-directory: ProjectMakoto/ProjectMakoto/build/ - name: Send Update Signal to Production Client if: ${{ !github.event.act }} # skip during local actions testing run: ssh ${{ secrets.SSH_USERNAME }}@${{ secrets.SSH_SERVER }} -p ${{ secrets.SSH_PORT }} touch /home/${{ secrets.SSH_USERNAME }}/Bots/ProjectIchigo/updated - name: Create Zip File from Build run: zip -r Release.zip build working-directory: ProjectMakoto/ProjectMakoto/ - name: Truncate String uses: 2428392/gh-truncate-string-action@v1.3.0 id: truncatedString with: stringToTruncate: ${{ github.sha }} maxLength: 10 - name: Create Release if: ${{ !github.event.act }} # skip during local actions testing uses: ncipollo/release-action@v1.14.0 with: artifacts: "ProjectMakoto/ProjectMakoto/Release.zip" generateReleaseNotes: true prerelease: false tag: ${{ steps.truncatedString.outputs.string }} commit: ${{ github.sha }} - name: Cleanup run: rm -rf ProjectMakoto/ if: always()