/ Paris,France
/

Thèmes par défaut

    Thèmes spéciaux

      Selenite: Lost Contact - My contribution to the game development

      Selenite: Lost Contact is an ambitious game project that required a solid development infrastructure. My role in this project focused on setting up and managing the GitHub repository, implementing CI/CD pipelines, and ensuring smooth release management.

      Setting Up the GitHub Repository

      To facilitate collaboration, I created the main repository for the game on the Selenite GitHub organization . This repository serves as the central hub for contributions, issue tracking, and project organization.

      Selenite GitHub Organization Selenite Game Repository

      Implementing CI/CD for Automated Builds & Releases

      One of the most critical aspects of the development workflow was automating the build and release process. I implemented a CI/CD pipeline using GitHub Actions to build the game for both Windows and macOS. This setup ensures that every new release is built, packaged, and published automatically.

      CI/CD Pipeline

      Below is the GitHub Actions script used for building and releasing the game:

      name: Build the game Windows & MacOS 🎮
      
      on:
        push:
          branches:
            - release
        workflow_dispatch:
      
      permissions:
        actions: write
        contents: write
        packages: write
        releases: write
      
      jobs:
        init-data:
          name: Set the workflow data 📊
          runs-on: ubuntu-latest
          outputs:
            builder_number: ${{ steps.builder_number.outputs.build_number }}
            date: ${{ steps.set_date.outputs.date }}
          steps:
            - name: Get the number of the current build
              id: builder_number
              uses: einaregilsson/build-number@v3
              with:
                token: ${{ secrets.GITHUB_TOKEN }}
            - name: Get the current date for the build name
              id: set_date
              run: echo "::set-output name=date::$(date +'%Y-%m-%d')"
      
        buildWindows:
          name: Build the game for Windows 🪟
          runs-on: ubuntu-latest
          needs: init-data
          steps:
            - name: Checkout the code 🛎️
              uses: actions/checkout@v4
              with:
                fetch-depth: 0
                lfs: true
            - name: Build Unity Project for Windows
              uses: game-ci/unity-builder@v4
              env:
                UNITY_LICENSE: ${{ secrets.UNITY_LICENSE }}
                UNITY_EMAIL: ${{ secrets.UNITY_EMAIL }}
                UNITY_PASSWORD: ${{ secrets.UNITY_PASSWORD }}
              with:
                targetPlatform: StandaloneWindows64
                unityVersion: 2022.3.42f1
            - name: Upload the build
              uses: actions/upload-artifact@v4
              with:
                name: build-StandaloneWindows64
                path: build/StandaloneWindows64
      
        buildMacOs:
          name: Build the game for MacOS 🍏
          runs-on: ubuntu-latest
          needs: init-data
          steps:
            - name: Checkout the code 🛎️
              uses: actions/checkout@v4
              with:
                fetch-depth: 0
                lfs: true
            - name: Build Unity Project for MacOS
              uses: game-ci/unity-builder@v4
              env:
                UNITY_LICENSE: ${{ secrets.UNITY_LICENSE }}
                UNITY_EMAIL: ${{ secrets.UNITY_EMAIL }}
                UNITY_PASSWORD: ${{ secrets.UNITY_PASSWORD }}
              with:
                targetPlatform: StandaloneOSX
                unityVersion: 2022.3.42f1
            - name: Upload the build
              uses: actions/upload-artifact@v4
              with:
                name: build-StandaloneOSX
                path: build/StandaloneOSX
      
        publishAsRelease:
          name: Publish the build as a release 🚀
          runs-on: ubuntu-latest
          needs:
            - buildWindows
            - buildMacOs
            - init-data
          steps:
            - name: Create a release
              id: create_release
              uses: actions/create-release@v1
              env:
                GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
              with:
                tag_name: build-0.0.${{ needs.init-data.outputs.builder_number }}
                release_name: "v0.0.${{ needs.init-data.outputs.builder_number }}"
                body: |
                  Selenite : Lost Contact
                  > Release v0.0.${{ needs.init-data.outputs.builder_number }} / ${{ needs.init-data.outputs.date }} 🚀
                draft: false
                prerelease: false
      

      [Insert Diagram: CI/CD Workflow Overview]

      Managing Releases

      With the CI/CD pipeline in place, every build is automatically packaged and published as a new release on GitHub. This ensures that developers and testers always have access to the latest stable version of the game.

      The release workflow:

      1. Detects new changes pushed to the release branch
      2. Builds the game for both Windows and macOS
      3. Uploads the build artifacts
      4. Publishes a new GitHub release with versioning

      You can check out the latest releases here: Selenite: Lost Contact Releases

      Example Release

      Conclusion

      By setting up a structured GitHub repository, implementing a robust CI/CD pipeline, and managing automated releases, we ensured a streamlined development workflow for Selenite: Lost Contact. These technical foundations allow developers to focus on improving the game while maintaining an efficient and reliable release process.

      This project highlights my expertise in DevOps, CI/CD pipelines, and GitHub repository management. If you’re interested in learning more or collaborating, feel free to reach out!

      Check out the link below to visit the official website of Selenite, or explore the GitHub repository for the game.