diff --git a/.github/workflows/openimci.yml b/.github/workflows/openimci.yml index 7611dd612..54c30e4d8 100644 --- a/.github/workflows/openimci.yml +++ b/.github/workflows/openimci.yml @@ -36,12 +36,12 @@ env: GO_VERSION: "1.19" GOLANGCI_VERSION: "v1.50.1" + jobs: openim: name: Test with go ${{ matrix.go_version }} on ${{ matrix.os }} runs-on: ${{ matrix.os }} permissions: - # Give the default GITHUB_TOKEN write permission to commit and push the changed files back to the repository. contents: write environment: name: openim @@ -52,83 +52,63 @@ jobs: os: [ubuntu-latest] steps: - - name: Set up Go ${{ matrix.go_version }} - uses: actions/setup-go@v4 - with: - go-version: ${{ matrix.go_version }} - id: go - - - name: Check out code into the Go module directory - uses: actions/checkout@v3 - - - name: Install Task - uses: arduino/setup-task@v1 - with: - version: 2.x - - - name: Run go modules tidy - run: | - sudo make tidy - sudo make tools.verify.go-gitlint - echo "Run go modules tidy successfully" - - - name: Run go format - run: | - sudo make format - echo "Run go format successfully" - continue-on-error: true - - - name: Generate all necessary files, such as error code files - run: | - make gen - echo "Generate all necessary files successfully" - continue-on-error: true - - - name: Build source code for host platform - run: | - sudo make build - echo "Build source code for host platform successfully" - - - name: Clean all build - run: | - sudo make clean - echo "Clean all build successfully" - - - name: push OpenIM - uses: stefanzweifel/git-auto-commit-action@v4 - with: - commit_message: "cicd: robot automated Change" - # commit_options: '--no-verify --signoff' - branch: main - # create_branch: true - # # Optional commit user and author settings - # commit_user_name: kubbot # defaults to "github-actions[bot]" - # commit_user_email: 3293172751ysy@gmail.com # defaults to "41898282+github-actions[bot]@users.noreply.github.com" - # commit_author: Kubbot # defaults to author of the commit that triggered the run - continue-on-error: true - - - name: Set Current Directory - id: set_directory - run: | - echo "::set-output name=directory::$(pwd)" - continue-on-error: true - - - name: Collect Test Coverage File - id: collect_coverage - run: | - cd ${{ steps.set_directory.outputs.directory }} - make cover - echo "::set-output name=coverage_file::./_output/tmp/coverage.out" - continue-on-error: true - - - name: Display Test Coverage - run: | - echo "Test Coverage:" - cat ${{ steps.collect_coverage.outputs.coverage_file }} - continue-on-error: true + - name: Setup + uses: actions/checkout@v3 + + - name: Set up Go ${{ matrix.go_version }} + uses: actions/setup-go@v4 + with: + go-version: ${{ matrix.go_version }} + id: go + + - name: Install Task + uses: arduino/setup-task@v1 + with: + version: 2.x + + - name: Module Operations + run: | + sudo make tidy + sudo make tools.verify.go-gitlint + + - name: Format Code + run: sudo make format + continue-on-error: true + + - name: Generate Files + run: make gen + continue-on-error: true + + - name: Build Source + run: sudo make build + + - name: Cleanup Build + run: sudo make clean + + - name: Push Changes to Main + uses: stefanzweifel/git-auto-commit-action@v4 + with: + commit_message: "cicd: robot automated Change" + branch: main + continue-on-error: true + + - name: Set Current Directory + id: set_directory + run: echo "::set-output name=directory::$(pwd)" + continue-on-error: true + + - name: Collect and Display Test Coverage + id: collect_coverage + run: | + cd ${{ steps.set_directory.outputs.directory }} + make cover + echo "::set-output name=coverage_file::./_output/tmp/coverage.out" + echo "Test Coverage:" + cat ${{ steps.collect_coverage.outputs.coverage_file }} + continue-on-error: true openim-start: - name: Teat OpenIM make install start on ${{ matrix.os }} + name: Test OpenIM install/start on ${{ matrix.os }} runs-on: ${{ matrix.os }} environment: name: openim @@ -137,15 +117,55 @@ jobs: go_version: ["1.21"] os: ["ubuntu-latest"] steps: - - name: Set up Go ${{ matrix.go_version }} - uses: actions/setup-go@v4 - with: - go-version: ${{ matrix.go_version }} - id: go - - - name: Check out code into the Go module directory - uses: actions/checkout@v3 - - - name: Run OpenIM make install start - run: | - sudo make install \ No newline at end of file + - name: Checkout and Install OpenIM + uses: actions/checkout@v3 + - name: Install Task + uses: arduino/setup-task@v1 + with: + version: 2.x + - name: Run OpenIM make install start + run: | + sudo make install + + execute-scripts: + name: Execute OpenIM script on ${{ matrix.os }} + runs-on: ${{ matrix.os }} + environment: + name: openim + strategy: + matrix: + go_version: ["1.20"] + os: ["ubuntu-latest"] + steps: + - name: Checkout code + uses: actions/checkout@v3 + + - name: Set up Go ${{ matrix.go_version }} + uses: actions/setup-go@v4 + with: + go-version: ${{ matrix.go_version }} + id: go + - name: Install Task + uses: arduino/setup-task@v1 + with: + version: 2.x + - name: Docker Operations + run: | + curl -o docker-compose.yaml https://gist.githubusercontent.com/cubxxw/b1d5cbd2edfa23fee911118aa3e8249e/raw/openim-server.sh + sudo docker compose up -d + sudo sleep 60 + + - name: Module Operations + run: | + sudo make tidy + sudo make tools.verify.go-gitlint + + - name: Build, Start and Check Services + run: | + make build + make start + make check + + - name: Print OpenIM Logs + run: sudo cat ./_output/logs/* 2>/dev/null + continue-on-error: true diff --git a/.github/workflows/scriptsci.yml b/.github/workflows/scriptsci.yml deleted file mode 100644 index 5fb1053ea..000000000 --- a/.github/workflows/scriptsci.yml +++ /dev/null @@ -1,70 +0,0 @@ -# Copyright © 2023 OpenIM. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -name: OpenIM Scripts Execute CI - -on: - push: - branches: - - main - paths-ignore: - - "docs/**" - - "README.md" - - "README_zh-CN.md" - - "CONTRIBUTING.md" - pull_request: - branches: - - main - paths-ignore: - - "README.md" - - "README_zh-CN.md" - - "CONTRIBUTING.md" - - "docs/**" - -jobs: - execute-scripts: - runs-on: ubuntu-latest - - steps: - - name: Checkout code - uses: actions/checkout@v3 - - - name: Download Docker Compose - run: | - curl -o docker-compose.yaml https://gist.githubusercontent.com/cubxxw/b1d5cbd2edfa23fee911118aa3e8249e/raw/openim-server.sh - shell: bash - - - name: Start Docker Compose - run: | - sudo docker compose up -d - sudo sleep 60 - continue-on-error: true - - - name: Build all services - run: | - sudo ./scripts/build-all-service.sh - - - name: Start all services - run: | - sudo ./scripts/start-all.sh - - - name: Check all services - run: | - sudo ./scripts/check-all.sh - - - name: Print openIM.log - run: | - sudo cat ./_output/logs/* 2>/dev/null - sudo cat ./_output/logs/* 2>/dev/null >> "$GITHUB_OUTPUT" - continue-on-error: true diff --git a/Dockerfile b/Dockerfile index 0c26a0a65..b2197b2f6 100644 --- a/Dockerfile +++ b/Dockerfile @@ -25,5 +25,7 @@ WORKDIR ${SERVER_WORKDIR} # Copy scripts and binary files to the production image COPY --from=builder ${OPENIM_SERVER_BINDIR} /openim/openim-server/_output/bin +COPY --from=builder ${OPENIM_SERVER_CMDDIR} /openim/openim-server/scripts +COPY --from=builder ${SERVER_WORKDIR}/config /openim/openim-server/config CMD ["/openim/openim-server/scripts/docker-start-all.sh"] diff --git a/scripts/install-im-server.sh b/scripts/install-im-server.sh new file mode 100755 index 000000000..3e8061151 --- /dev/null +++ b/scripts/install-im-server.sh @@ -0,0 +1,47 @@ +#!/usr/bin/env bash +# Copyright © 2023 OpenIM. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + + +# Common utilities, variables and checks for all build scripts. +set -o errexit +set -o nounset +set -o pipefail + +OPENIM_ROOT=$(dirname "${BASH_SOURCE[0]}")/.. +source "${OPENIM_ROOT}/scripts/lib/init.sh" + +trap 'openim::util::onCtrlC' INT + +chmod +x ${OPENIM_ROOT}/scripts/*.sh +${OPENIM_ROOT}/scripts/init-config.sh + +openim::util::ensure_docker_daemon_connectivity + +DOCKER_COMPOSE_COMMAND= +# Check if docker-compose command is available +if command -v docker-compose &> /dev/null +then + openim::log::info "docker-compose command is available" + DOCKER_COMPOSE_COMMAND="docker-compose" +else + DOCKER_COMPOSE_COMMAND="docker compose" +fi + +pushd "${OPENIM_ROOT}" >/dev/null + ${DOCKER_COMPOSE_COMMAND} up -d + sleep 60 + ${DOCKER_COMPOSE_COMMAND} ps + ${DOCKER_COMPOSE_COMMAND} logs +popd >/dev/null diff --git a/scripts/install/dependency.sh b/scripts/install/dependency.sh index e5ebdffd6..5500df092 100755 --- a/scripts/install/dependency.sh +++ b/scripts/install/dependency.sh @@ -97,4 +97,4 @@ docker run -d \ -e MINIO_ROOT_USER=${USER} \ -e MINIO_ROOT_PASSWORD=${PASSWORD} \ --restart always \ - minio/minio server /data --console-address ':9090' \ No newline at end of file + minio/minio server /data --console-address ':9090' diff --git a/scripts/lib/util.sh b/scripts/lib/util.sh index 320c63095..5252f8599 100755 --- a/scripts/lib/util.sh +++ b/scripts/lib/util.sh @@ -973,9 +973,6 @@ function openim::util::ensure-cfssl { popd > /dev/null || return 1 } -# openim::util::ensure-docker-buildx -# Check if we have "docker buildx" commands available -# function openim::util::ensure-docker-buildx { # podman returns 0 on `docker buildx version`, docker on `docker buildx`. One of them must succeed. if docker buildx version >/dev/null 2>&1 || docker buildx >/dev/null 2>&1; then