mirror of
https://github.com/openimsdk/open-im-server.git
synced 2025-10-26 21:22:16 +08:00
Compare commits
No commits in common. "main" and "v3.8.0" have entirely different histories.
21
.env
21
.env
@ -1,24 +1,19 @@
|
|||||||
MONGO_IMAGE=mongo:7.0
|
MONGO_IMAGE=mongo:6.0.2
|
||||||
REDIS_IMAGE=redis:7.0.0
|
REDIS_IMAGE=redis:7.0.0
|
||||||
KAFKA_IMAGE=bitnamilegacy/kafka:3.5.1
|
ZOOKEEPER_IMAGE=bitnami/zookeeper:3.8
|
||||||
|
KAFKA_IMAGE=bitnami/kafka:3.5.1
|
||||||
MINIO_IMAGE=minio/minio:RELEASE.2024-01-11T07-46-16Z
|
MINIO_IMAGE=minio/minio:RELEASE.2024-01-11T07-46-16Z
|
||||||
ETCD_IMAGE=bitnamilegacy/etcd:3.5.13
|
ETCD_IMAGE=quay.io/coreos/etcd:v3.5.13
|
||||||
PROMETHEUS_IMAGE=prom/prometheus:v2.45.6
|
PROMETHEUS_IMAGE=prom/prometheus:v2.45.6
|
||||||
ALERTMANAGER_IMAGE=prom/alertmanager:v0.27.0
|
ALERTMANAGER_IMAGE=prom/alertmanager:v0.27.0
|
||||||
GRAFANA_IMAGE=grafana/grafana:11.0.1
|
GRAFANA_IMAGE=grafana/grafana:11.0.1
|
||||||
NODE_EXPORTER_IMAGE=prom/node-exporter:v1.7.0
|
|
||||||
|
|
||||||
OPENIM_WEB_FRONT_IMAGE=openim/openim-web-front:release-v3.8.3
|
OPENIM_WEB_FRONT_IMAGE=openim/openim-web-front:release-v3.5.1
|
||||||
OPENIM_ADMIN_FRONT_IMAGE=openim/openim-admin-front:release-v1.8.4
|
OPENIM_ADMIN_FRONT_IMAGE=openim/openim-admin-front:release-v1.7
|
||||||
|
|
||||||
#FRONT_IMAGE: use aliyun images
|
#FRONT_IMAGE: use aliyun images
|
||||||
#OPENIM_WEB_FRONT_IMAGE=registry.cn-hangzhou.aliyuncs.com/openimsdk/openim-web-front:release-v3.8.3
|
#OPENIM_WEB_FRONT_IMAGE=registry.cn-hangzhou.aliyuncs.com/openimsdk/openim-web-front:release-v3.5.1
|
||||||
#OPENIM_ADMIN_FRONT_IMAGE=registry.cn-hangzhou.aliyuncs.com/openimsdk/openim-admin-front:release-v1.8.4
|
#OPENIM_ADMIN_FRONT_IMAGE=registry.cn-hangzhou.aliyuncs.com/openimsdk/openim-admin-front:release-v1.7
|
||||||
|
|
||||||
DATA_DIR=./
|
DATA_DIR=./
|
||||||
|
|
||||||
MONGO_BACKUP_DIR=${DATA_DIR}components/backup/mongo/
|
|
||||||
|
|
||||||
PROMETHEUS_PORT=19091
|
|
||||||
ALERTMANAGER_PORT=19093
|
|
||||||
GRAFANA_PORT=13000
|
|
||||||
15
.github/.codecov.yml
vendored
15
.github/.codecov.yml
vendored
@ -1,3 +1,17 @@
|
|||||||
|
# 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.
|
||||||
|
|
||||||
coverage:
|
coverage:
|
||||||
status:
|
status:
|
||||||
project:
|
project:
|
||||||
@ -14,7 +28,6 @@ coverage:
|
|||||||
paths:
|
paths:
|
||||||
- test/* # only include coverage in "test/" folder
|
- test/* # only include coverage in "test/" folder
|
||||||
informational: true # Always pass check
|
informational: true # Always pass check
|
||||||
|
|
||||||
# internal: # declare a new status context "internal"
|
# internal: # declare a new status context "internal"
|
||||||
# paths:
|
# paths:
|
||||||
# - internal/* # only include coverage in "internal/" folder
|
# - internal/* # only include coverage in "internal/" folder
|
||||||
|
|||||||
65
.github/ISSUE_TEMPLATE/bug-report.yml
vendored
65
.github/ISSUE_TEMPLATE/bug-report.yml
vendored
@ -1,65 +0,0 @@
|
|||||||
name: Bug Report
|
|
||||||
title: "[BUG] "
|
|
||||||
labels: ["bug"]
|
|
||||||
description: "Create a detailed report to help us identify and resolve issues."
|
|
||||||
# assignees: []
|
|
||||||
|
|
||||||
body:
|
|
||||||
- type: markdown
|
|
||||||
attributes:
|
|
||||||
value: "Thank you for taking the time to fill out the bug report. Please provide as much information as possible to help us understand and replicate the bug."
|
|
||||||
|
|
||||||
- type: input
|
|
||||||
id: openim-server-version
|
|
||||||
attributes:
|
|
||||||
label: OpenIM Server Version
|
|
||||||
description: "Please provide the version number of OpenIM Server you are using."
|
|
||||||
placeholder: "e.g., 3.8.0"
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
|
|
||||||
- type: dropdown
|
|
||||||
id: operating-system
|
|
||||||
attributes:
|
|
||||||
label: Operating System and CPU Architecture
|
|
||||||
description: "Please select the operating system and describe the CPU architecture."
|
|
||||||
options:
|
|
||||||
- Linux (AMD)
|
|
||||||
- Linux (ARM)
|
|
||||||
- Windows (AMD)
|
|
||||||
- Windows (ARM)
|
|
||||||
- macOS (AMD)
|
|
||||||
- macOS (ARM)
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
|
|
||||||
- type: dropdown
|
|
||||||
id: deployment-method
|
|
||||||
attributes:
|
|
||||||
label: Deployment Method
|
|
||||||
description: "Please specify how OpenIM Server was deployed."
|
|
||||||
options:
|
|
||||||
- Source Code Deployment
|
|
||||||
- Docker Deployment
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
|
|
||||||
- type: textarea
|
|
||||||
id: bug-description-reproduction
|
|
||||||
attributes:
|
|
||||||
label: Bug Description and Steps to Reproduce
|
|
||||||
description: "Provide a detailed description of the bug and a step-by-step guide on how to reproduce it."
|
|
||||||
placeholder: "Describe the bug in detail here...\n\nSteps to reproduce the bug on the server:\n1. Start the server with specific configurations (mention any relevant config details).\n2. Make an API call to '...' endpoint with the following payload '...'.\n3. Observe the behavior and note any error messages or logs.\n4. Mention any additional setup relevant to the bug (e.g., database version, external service dependencies)."
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
|
|
||||||
- type: markdown
|
|
||||||
attributes:
|
|
||||||
value: "If possible, please add screenshots to help explain your problem."
|
|
||||||
|
|
||||||
- type: textarea
|
|
||||||
id: screenshots-link
|
|
||||||
attributes:
|
|
||||||
label: Screenshots Link
|
|
||||||
description: "If applicable, please provide any links to screenshots here."
|
|
||||||
placeholder: "Paste your screenshot URL here, e.g., http://imgur.com/example"
|
|
||||||
11
.github/ISSUE_TEMPLATE/config.yml
vendored
11
.github/ISSUE_TEMPLATE/config.yml
vendored
@ -1,11 +0,0 @@
|
|||||||
blank_issues_enabled: false
|
|
||||||
contact_links:
|
|
||||||
# - name: "Bug Report"
|
|
||||||
# description: "Report a bug in the project"
|
|
||||||
# file: "bug-report.yml"
|
|
||||||
- name: 📢 Connect on slack
|
|
||||||
url: https://join.slack.com/t/openimsdk/shared_invite/zt-2ijy1ys1f-O0aEDCr7ExRZ7mwsHAVg9A
|
|
||||||
about: Support OpenIM-related requests or issues, get in touch with developers and help on slack
|
|
||||||
- name: 🌐 OpenIM Blog
|
|
||||||
url: https://www.openim.io/
|
|
||||||
about: Open the OpenIM community blog
|
|
||||||
65
.github/ISSUE_TEMPLATE/deployment.yml
vendored
65
.github/ISSUE_TEMPLATE/deployment.yml
vendored
@ -1,65 +0,0 @@
|
|||||||
name: Deployment issue
|
|
||||||
title: "[Deployment] "
|
|
||||||
labels: ["deployment"]
|
|
||||||
description: "Create a detailed report to help us identify and resolve deployment issues."
|
|
||||||
# assignees: []
|
|
||||||
|
|
||||||
body:
|
|
||||||
- type: markdown
|
|
||||||
attributes:
|
|
||||||
value: "Thank you for taking the time to fill out the deployment issue report. Please provide as much information as possible to help us understand and resolve the issue."
|
|
||||||
|
|
||||||
- type: input
|
|
||||||
id: openim-server-version
|
|
||||||
attributes:
|
|
||||||
label: OpenIM Server Version
|
|
||||||
description: "Please provide the version number of OpenIM Server you are using."
|
|
||||||
placeholder: "e.g., 3.8.0"
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
|
|
||||||
- type: dropdown
|
|
||||||
id: operating-system
|
|
||||||
attributes:
|
|
||||||
label: Operating System and CPU Architecture
|
|
||||||
description: "Please select the operating system and describe the CPU architecture."
|
|
||||||
options:
|
|
||||||
- Linux (AMD)
|
|
||||||
- Linux (ARM)
|
|
||||||
- Windows (AMD)
|
|
||||||
- Windows (ARM)
|
|
||||||
- macOS (AMD)
|
|
||||||
- macOS (ARM)
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
|
|
||||||
- type: dropdown
|
|
||||||
id: deployment-method
|
|
||||||
attributes:
|
|
||||||
label: Deployment Method
|
|
||||||
description: "Please specify how OpenIM Server was deployed."
|
|
||||||
options:
|
|
||||||
- Source Code Deployment
|
|
||||||
- Docker Deployment
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
|
|
||||||
- type: textarea
|
|
||||||
id: issue-description-reproduction
|
|
||||||
attributes:
|
|
||||||
label: Issue Description and Steps to Reproduce
|
|
||||||
description: "Provide a detailed description of the issue and a step-by-step guide on how to reproduce it."
|
|
||||||
placeholder: "Describe the issue in detail here...\n\nSteps to reproduce the issue on the server:\n1. Start the server with specific configurations (mention any relevant config details).\n2. Make an API call to '...' endpoint with the following payload '...'.\n3. Observe the behavior and note any error messages or logs.\n4. Mention any additional setup relevant to the bug (e.g., database version, external service dependencies)."
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
|
|
||||||
- type: markdown
|
|
||||||
attributes:
|
|
||||||
value: "If possible, please add screenshots to help explain your problem."
|
|
||||||
|
|
||||||
- type: textarea
|
|
||||||
id: screenshots-link
|
|
||||||
attributes:
|
|
||||||
label: Screenshots Link
|
|
||||||
description: "If applicable, please provide any links to screenshots here."
|
|
||||||
placeholder: "Paste your screenshot URL here, e.g., http://imgur.com/example"
|
|
||||||
20
.github/ISSUE_TEMPLATE/documentation.md
vendored
20
.github/ISSUE_TEMPLATE/documentation.md
vendored
@ -1,20 +0,0 @@
|
|||||||
---
|
|
||||||
name: Documentation Update
|
|
||||||
about: Propose updates to documentation, including README files and other docs.
|
|
||||||
title: "[DOC]: " # Prefix for the title to help identify documentation issues
|
|
||||||
labels: documentation # Labels to be automatically added
|
|
||||||
assignees: '' # Optionally, specify maintainers or teams to be auto-assigned
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Documentation Updates
|
|
||||||
Describe the documentation that needs to be updated or corrected. Please specify the files and sections if possible.
|
|
||||||
|
|
||||||
## Motivation
|
|
||||||
Explain why these updates are necessary. What is missing, misleading, or outdated?
|
|
||||||
|
|
||||||
## Suggested Changes
|
|
||||||
Detail the changes that you propose. If you are suggesting large changes, include examples or mockups of what the updated documentation should look like.
|
|
||||||
|
|
||||||
## Additional Information
|
|
||||||
Include any other information that might be relevant, such as links to discussions or related issues in the repository.
|
|
||||||
43
.github/ISSUE_TEMPLATE/feature-request.yml
vendored
43
.github/ISSUE_TEMPLATE/feature-request.yml
vendored
@ -1,43 +0,0 @@
|
|||||||
name: Feature Request
|
|
||||||
title: "[FEATURE REQUEST] "
|
|
||||||
labels: ["feature request","enhancement"]
|
|
||||||
description: "Propose a new feature or improvement that you believe will help enhance the project."
|
|
||||||
# assignees: []
|
|
||||||
|
|
||||||
body:
|
|
||||||
- type: markdown
|
|
||||||
attributes:
|
|
||||||
value: "Thank you for taking the time to propose a feature request. Please fill in as much detail as possible to help us understand why this feature is necessary and how it should work."
|
|
||||||
|
|
||||||
- type: textarea
|
|
||||||
id: feature-reason
|
|
||||||
attributes:
|
|
||||||
label: Why this feature?
|
|
||||||
description: "Explain why this feature is needed. What problem does it solve? How does it benefit the project and its users?"
|
|
||||||
placeholder: "Describe the need for this feature..."
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
|
|
||||||
- type: textarea
|
|
||||||
id: solution-proposal
|
|
||||||
attributes:
|
|
||||||
label: Suggested Solution
|
|
||||||
description: "Describe your proposed solution for this feature. How do you envision it working?"
|
|
||||||
placeholder: "Detail your solution here..."
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
|
|
||||||
- type: markdown
|
|
||||||
attributes:
|
|
||||||
value: "Please provide any other relevant information or screenshots that could help illustrate your idea."
|
|
||||||
|
|
||||||
- type: textarea
|
|
||||||
id: additional-info
|
|
||||||
attributes:
|
|
||||||
label: Additional Information
|
|
||||||
description: "Include any additional information, links, or screenshots that might be relevant to your feature request."
|
|
||||||
placeholder: "Add more context or links to relevant resources..."
|
|
||||||
|
|
||||||
- type: markdown
|
|
||||||
attributes:
|
|
||||||
value: "Thank you for contributing to the project! We appreciate your input and will review your suggestion as soon as possible."
|
|
||||||
29
.github/ISSUE_TEMPLATE/other.yml
vendored
29
.github/ISSUE_TEMPLATE/other.yml
vendored
@ -1,29 +0,0 @@
|
|||||||
name: 🐧 Other
|
|
||||||
description: Use this for any other issues. Please do NOT create blank issues
|
|
||||||
title: "[Other]: <give this problem a name>"
|
|
||||||
labels: ["other"]
|
|
||||||
# assignees: []
|
|
||||||
|
|
||||||
body:
|
|
||||||
- type: markdown
|
|
||||||
attributes:
|
|
||||||
value: "# Other issue"
|
|
||||||
- type: textarea
|
|
||||||
id: issuedescription
|
|
||||||
attributes:
|
|
||||||
label: What would you like to share?
|
|
||||||
description: Provide a clear and concise explanation of your issue.
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
- type: textarea
|
|
||||||
id: extrainfo
|
|
||||||
attributes:
|
|
||||||
label: Additional information
|
|
||||||
description: Is there anything else we should know about this issue?
|
|
||||||
validations:
|
|
||||||
required: false
|
|
||||||
- type: markdown
|
|
||||||
attributes:
|
|
||||||
value: |
|
|
||||||
You can also join our Discord community [here](https://join.slack.com/t/openimsdk/shared_invite/zt-2ijy1ys1f-O0aEDCr7ExRZ7mwsHAVg9A)
|
|
||||||
Feel free to check out other cool repositories of the openim Community [here](https://github.com/openimsdk)
|
|
||||||
26
.github/ISSUE_TEMPLATE/rfc.md
vendored
26
.github/ISSUE_TEMPLATE/rfc.md
vendored
@ -1,26 +0,0 @@
|
|||||||
---
|
|
||||||
name: RFC - Feature Proposal
|
|
||||||
about: Submit a proposal for a significant feature to invite community discussion.
|
|
||||||
title: "[RFC]: " # Prefix for the title to help identify RFC proposals
|
|
||||||
labels: rfc, proposal # Labels to be automatically added
|
|
||||||
assignees: '' # Optionally, specify maintainers or teams to be auto-assigned
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Proposal Overview
|
|
||||||
Briefly describe the content and objectives of your proposal.
|
|
||||||
|
|
||||||
## Motivation
|
|
||||||
Why is this new feature necessary? What is the background of this problem?
|
|
||||||
|
|
||||||
## Detailed Design
|
|
||||||
Describe the technical details of the proposal, including implementation steps, code snippets, or architecture diagrams.
|
|
||||||
|
|
||||||
## Alternatives Considered
|
|
||||||
Have other alternatives been considered? Why is this approach preferred over others?
|
|
||||||
|
|
||||||
## Impact
|
|
||||||
How will this proposal affect existing practices and community users?
|
|
||||||
|
|
||||||
## Additional Information
|
|
||||||
Include any other relevant information such as related discussions, prior related work, etc.
|
|
||||||
22
.github/code-language-detector.yml
vendored
Normal file
22
.github/code-language-detector.yml
vendored
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
# Copyright © 2024 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.
|
||||||
|
|
||||||
|
# https://github.com/marketplace/actions/code-language-detector
|
||||||
|
directory: ./
|
||||||
|
file_types:
|
||||||
|
- .go
|
||||||
|
- .yaml
|
||||||
|
- .yml
|
||||||
|
languages:
|
||||||
|
- Chinese
|
||||||
43
.github/labels.yml
vendored
Normal file
43
.github/labels.yml
vendored
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
# 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.
|
||||||
|
|
||||||
|
# Refer to Kubernetes for size/* Settings
|
||||||
|
# https://github.com/Kubernetes/Kubernetes
|
||||||
|
XS:
|
||||||
|
name: size/XS
|
||||||
|
lines: 0
|
||||||
|
color: 3CBF00
|
||||||
|
S:
|
||||||
|
name: size/S
|
||||||
|
lines: 10
|
||||||
|
color: 5D9801
|
||||||
|
M:
|
||||||
|
name: size/M
|
||||||
|
lines: 30
|
||||||
|
color: 7F7203
|
||||||
|
L:
|
||||||
|
name: size/L
|
||||||
|
lines: 100
|
||||||
|
color: A14C05
|
||||||
|
XL:
|
||||||
|
name: size/XL
|
||||||
|
lines: 500
|
||||||
|
color: C32607
|
||||||
|
XXL:
|
||||||
|
name: size/XXL
|
||||||
|
lines: 1000
|
||||||
|
color: E50009
|
||||||
|
comment: |
|
||||||
|
# Whoa! Easy there, Partner!
|
||||||
|
This PR is too big. Please break it up into smaller PRs.
|
||||||
51
.github/release-drafter.yml
vendored
Normal file
51
.github/release-drafter.yml
vendored
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
# 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-template: 'v$RESOLVED_VERSION 🌈'
|
||||||
|
tag-template: 'v$RESOLVED_VERSION'
|
||||||
|
categories:
|
||||||
|
- title: '🚀 Features'
|
||||||
|
labels:
|
||||||
|
- 'feature'
|
||||||
|
- 'enhancement'
|
||||||
|
- title: '🐛 Bug Fixes'
|
||||||
|
labels:
|
||||||
|
- 'kind/fix'
|
||||||
|
- 'kind/feature'
|
||||||
|
- 'enhancement'
|
||||||
|
- 'kind/documentation'
|
||||||
|
- 'good first issue'
|
||||||
|
- title: '🧰 Maintenance'
|
||||||
|
label: 'chore'
|
||||||
|
change-template: '- $TITLE @$AUTHOR (#$NUMBER)'
|
||||||
|
change-title-escapes: '\<*_&' # You can add # and @ to disable mentions, and add ` to disable code blocks.
|
||||||
|
version-resolver:
|
||||||
|
major:
|
||||||
|
labels:
|
||||||
|
- 'major'
|
||||||
|
minor:
|
||||||
|
labels:
|
||||||
|
- 'minor'
|
||||||
|
patch:
|
||||||
|
labels:
|
||||||
|
- 'patch'
|
||||||
|
default: patch
|
||||||
|
template: |
|
||||||
|
## Changes $PREVIOUS_TAG
|
||||||
|
|
||||||
|
$CHANGES
|
||||||
|
|
||||||
|
## Contributors to this $REPOSITORY release
|
||||||
|
|
||||||
|
$CONTRIBUTORS
|
||||||
50
.github/standardizer.yml
vendored
Normal file
50
.github/standardizer.yml
vendored
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
# https://github.com/marketplace/actions/conformity-checker-for-project
|
||||||
|
baseConfig:
|
||||||
|
searchDirectory: "./"
|
||||||
|
ignoreCase: false
|
||||||
|
|
||||||
|
directoryNaming:
|
||||||
|
allowHyphens: true
|
||||||
|
allowUnderscores: false
|
||||||
|
mustBeLowercase: true
|
||||||
|
|
||||||
|
fileNaming:
|
||||||
|
allowHyphens: true
|
||||||
|
allowUnderscores: true
|
||||||
|
mustBeLowercase: true
|
||||||
|
|
||||||
|
ignoreFormats:
|
||||||
|
- "\\.log$"
|
||||||
|
- "\\.env$"
|
||||||
|
- "README\\.md$"
|
||||||
|
- "_test\\.go$"
|
||||||
|
- "\\.md$"
|
||||||
|
- _test\\.txt$
|
||||||
|
- LICENSE
|
||||||
|
- Dockerfile
|
||||||
|
- CODEOWNERS
|
||||||
|
- Makefile
|
||||||
|
|
||||||
|
ignoreDirectories:
|
||||||
|
- "vendor"
|
||||||
|
- ".git"
|
||||||
|
- "deployments"
|
||||||
|
- "node_modules"
|
||||||
|
- "logs"
|
||||||
|
- "CHANGELOG"
|
||||||
|
- "components"
|
||||||
|
- "_output"
|
||||||
|
- "tools/openim-web"
|
||||||
|
- "CHANGELOG"
|
||||||
|
- "examples/Test_directory"
|
||||||
|
- test/testdata
|
||||||
|
|
||||||
|
fileTypeSpecificNaming:
|
||||||
|
".yaml":
|
||||||
|
allowHyphens: true
|
||||||
|
allowUnderscores: false
|
||||||
|
mustBeLowercase: true
|
||||||
|
".go":
|
||||||
|
allowHyphens: false
|
||||||
|
allowUnderscores: true
|
||||||
|
mustBeLowercase: true
|
||||||
16
.github/sync-release.yml
vendored
16
.github/sync-release.yml
vendored
@ -1,4 +1,18 @@
|
|||||||
openimsdk/openim-docker:
|
# 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.
|
||||||
|
|
||||||
|
OpenIMSDK/openim-docker:
|
||||||
- source: ./config
|
- source: ./config
|
||||||
dest: ./openim-server/release/config
|
dest: ./openim-server/release/config
|
||||||
replace: true
|
replace: true
|
||||||
|
|||||||
136
.github/sync.yml
vendored
Normal file
136
.github/sync.yml
vendored
Normal file
@ -0,0 +1,136 @@
|
|||||||
|
# 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.
|
||||||
|
|
||||||
|
# https://github.com/BetaHuhn/repo-file-sync-action
|
||||||
|
# Synchronization for the.github repository
|
||||||
|
OpenIMSDK/.github:
|
||||||
|
- source: LICENSE
|
||||||
|
dest: LICENSE
|
||||||
|
- source: scripts/LICENSE/
|
||||||
|
dest: scripts/LICENSE/
|
||||||
|
replace: false
|
||||||
|
|
||||||
|
OpenIMSDK/community:
|
||||||
|
- source: LICENSE
|
||||||
|
dest: LICENSE
|
||||||
|
- source: scripts/LICENSE/
|
||||||
|
dest: scripts/LICENSE/
|
||||||
|
replace: false
|
||||||
|
- source: .github/workflows/
|
||||||
|
dest: .github/workflows/
|
||||||
|
|
||||||
|
OpenIMSDK/openim-sdk-core:
|
||||||
|
- source: LICENSE
|
||||||
|
dest: LICENSE
|
||||||
|
- source: scripts/LICENSE/
|
||||||
|
dest: scripts/LICENSE/
|
||||||
|
replace: false
|
||||||
|
- source: .github/workflows/issue-robot.yml
|
||||||
|
dest: .github/workflows/issue-robot.yml
|
||||||
|
replace: false
|
||||||
|
- source: .github/workflows/stale.yml
|
||||||
|
dest: .github/workflows/stale.yml
|
||||||
|
replace: false
|
||||||
|
- source: .github/.codecov.yml
|
||||||
|
dest: .github/.codecov.yml
|
||||||
|
replace: false
|
||||||
|
|
||||||
|
OpenIMSDK/OpenIM-Docs:
|
||||||
|
- source: .github/workflows/
|
||||||
|
dest: .github/workflows/
|
||||||
|
exclude: |
|
||||||
|
e2e-test.yml
|
||||||
|
sync.yml
|
||||||
|
- source: scripts/githooks/
|
||||||
|
dest: scripts/githooks/
|
||||||
|
replace: true
|
||||||
|
- source: .github/.codecov.yml
|
||||||
|
dest: .github/.codecov.yml
|
||||||
|
replace: false
|
||||||
|
|
||||||
|
OpenIMSDK/OpenKF:
|
||||||
|
- source: LICENSE
|
||||||
|
dest: LICENSE
|
||||||
|
- source: scripts/LICENSE/
|
||||||
|
dest: scripts/LICENSE/
|
||||||
|
replace: false
|
||||||
|
- source: .github/workflows/issue-robot.yml
|
||||||
|
dest: .github/workflows/issue-robot.yml
|
||||||
|
replace: false
|
||||||
|
- source: .github/workflows/stale.yml
|
||||||
|
dest: .github/workflows/stale.yml
|
||||||
|
replace: false
|
||||||
|
- source: .github/.codecov.yml
|
||||||
|
dest: .github/.codecov.yml
|
||||||
|
replace: false
|
||||||
|
|
||||||
|
OpenIMSDK/openim-docker:
|
||||||
|
- source: ./config
|
||||||
|
dest: ./openim-server/main/config
|
||||||
|
replace: true
|
||||||
|
- source: ./docs
|
||||||
|
dest: ./openim-server/main/docs
|
||||||
|
replace: true
|
||||||
|
- source: ./scripts
|
||||||
|
dest: ./openim-server/main/scripts
|
||||||
|
replace: true
|
||||||
|
- source: ./scripts
|
||||||
|
dest: ./scripts
|
||||||
|
replace: true
|
||||||
|
- source: ./Makefile
|
||||||
|
dest: ./Makefile
|
||||||
|
replace: true
|
||||||
|
|
||||||
|
group:
|
||||||
|
# first group:common to all warehouses
|
||||||
|
# TODO: add the required warehouse here
|
||||||
|
- repos: |
|
||||||
|
OpenIMSDK/OpenKF@main
|
||||||
|
OpenIMSDK/openim-miniprogram-demo@main
|
||||||
|
OpenIMSDK/docs
|
||||||
|
OpenIMSDK/chat
|
||||||
|
OpenIMSDK/community
|
||||||
|
OpenIMSDK/openim-charts
|
||||||
|
OpenIMSDK/openim-sdk-cpp@main
|
||||||
|
files:
|
||||||
|
- source: LICENSE
|
||||||
|
dest: LICENSE
|
||||||
|
replace: false
|
||||||
|
- source: .github/workflows/issue-robot.yml
|
||||||
|
dest: .github/workflows/issue-robot.yml
|
||||||
|
replace: false
|
||||||
|
- source: .github/workflows/stale.yml
|
||||||
|
dest: .github/workflows/stale.yml
|
||||||
|
replace: false
|
||||||
|
- source: .github/workflows/project-progress.yml
|
||||||
|
dest: .github/workflows/project-progress.yml
|
||||||
|
replace: false
|
||||||
|
- source: .github/workflows/help-comment-issue.yml
|
||||||
|
dest: .github/workflows/help-comment-issue.yml
|
||||||
|
replace: false
|
||||||
|
- source: .github/.codecov.yml
|
||||||
|
dest: .github/.codecov.yml
|
||||||
|
replace: false
|
||||||
|
- source: .github/workflows/cla.yml
|
||||||
|
dest: .github/workflows/cla.yml
|
||||||
|
replace: false
|
||||||
|
- source: .github/workflows/auto-assign-issue.yml
|
||||||
|
dest: .github/workflows/auto-assign-issue.yml
|
||||||
|
replace: false
|
||||||
|
- source: .github/workflows/release.yml
|
||||||
|
dest: .github/workflows/release.yml
|
||||||
|
replace: false
|
||||||
|
- source: ./scripts/githooks/
|
||||||
|
dest: ./scripts/githooks/
|
||||||
|
replace: true
|
||||||
21
.github/weekly-digest.yml
vendored
Normal file
21
.github/weekly-digest.yml
vendored
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
# 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.
|
||||||
|
|
||||||
|
# https://github.com/apps/weekly-digest/installations/new
|
||||||
|
publishDay: sun
|
||||||
|
canPublishIssues: true
|
||||||
|
canPublishPullRequests: true
|
||||||
|
canPublishContributors: true
|
||||||
|
canPublishStargazers: true
|
||||||
|
canPublishCommits: true
|
||||||
24
.github/workflows/auto-assign-issue.yml
vendored
24
.github/workflows/auto-assign-issue.yml
vendored
@ -1,3 +1,17 @@
|
|||||||
|
# Copyright © 2023 OpenIM open source community. 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: Assign issue to comment author
|
name: Assign issue to comment author
|
||||||
on:
|
on:
|
||||||
issue_comment:
|
issue_comment:
|
||||||
@ -6,7 +20,8 @@ jobs:
|
|||||||
assign-issue:
|
assign-issue:
|
||||||
if: |
|
if: |
|
||||||
contains(github.event.comment.body, '/assign') || contains(github.event.comment.body, '/accept') &&
|
contains(github.event.comment.body, '/assign') || contains(github.event.comment.body, '/accept') &&
|
||||||
!contains(github.event.comment.user.login, 'openim-robot')
|
!contains(github.event.comment.user.login, 'openimbot') &&
|
||||||
|
!contains(github.event.comment.user.login, 'kubbot')
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
permissions:
|
permissions:
|
||||||
issues: write
|
issues: write
|
||||||
@ -18,12 +33,11 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
export LETASE_MILESTONES=$(curl 'https://api.github.com/repos/$OWNER/$PEPO/milestones' | jq -r 'last(.[]).title')
|
export LETASE_MILESTONES=$(curl 'https://api.github.com/repos/$OWNER/$PEPO/milestones' | jq -r 'last(.[]).title')
|
||||||
gh issue edit ${{ github.event.issue.number }} --add-assignee "${{ github.event.comment.user.login }}"
|
gh issue edit ${{ github.event.issue.number }} --add-assignee "${{ github.event.comment.user.login }}"
|
||||||
gh issue edit ${{ github.event.issue.number }} --add-label "accepted"
|
gh issue edit ${{ github.event.issue.number }} --add-label "triage/accepted"
|
||||||
|
gh issue edit ${{ github.event.issue.number }} --milestone "$LETASE_MILESTONES"
|
||||||
gh issue comment $ISSUE --body "@${{ github.event.comment.user.login }} Glad to see you accepted this issue🤲, this issue has been assigned to you. I set the milestones for this issue to [$LETASE_MILESTONES](https://github.com/$OWNER/$PEPO/milestones), We are looking forward to your PR!"
|
gh issue comment $ISSUE --body "@${{ github.event.comment.user.login }} Glad to see you accepted this issue🤲, this issue has been assigned to you. I set the milestones for this issue to [$LETASE_MILESTONES](https://github.com/$OWNER/$PEPO/milestones), We are looking forward to your PR!"
|
||||||
|
|
||||||
# gh issue edit ${{ github.event.issue.number }} --milestone "$LETASE_MILESTONES"
|
|
||||||
env:
|
env:
|
||||||
GH_TOKEN: ${{ secrets.BOT_TOKEN }}
|
GH_TOKEN: ${{ secrets.REDBOT_GITHUB_TOKEN }}
|
||||||
ISSUE: ${{ github.event.issue.html_url }}
|
ISSUE: ${{ github.event.issue.html_url }}
|
||||||
OWNER: ${{ github.repository_owner }}
|
OWNER: ${{ github.repository_owner }}
|
||||||
REPO: ${{ github.event.repository.name }}
|
REPO: ${{ github.event.repository.name }}
|
||||||
72
.github/workflows/auto-gh-pr.yml
vendored
Normal file
72
.github/workflows/auto-gh-pr.yml
vendored
Normal file
@ -0,0 +1,72 @@
|
|||||||
|
# Copyright © 2023 OpenIM open source community. 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: Auto PR to release
|
||||||
|
|
||||||
|
on:
|
||||||
|
pull_request:
|
||||||
|
# types:
|
||||||
|
# - closed
|
||||||
|
issue_comment:
|
||||||
|
types: [created]
|
||||||
|
pull_request_review_comment:
|
||||||
|
types: [created]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
sync-issue-to-pr:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Checkout code
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Sync Issue to PR
|
||||||
|
if: github.event_name == 'pull_request' && github.event.pull_request.base.ref == 'main'
|
||||||
|
run: |
|
||||||
|
PR_BODY="${{ github.event.pull_request.body }}"
|
||||||
|
|
||||||
|
ISSUE_NUMBER=$(echo "$PR_BODY" | grep -oP 'Fixes #\K\d+')
|
||||||
|
if [[ -z "$ISSUE_NUMBER" ]]; then
|
||||||
|
echo "No Issue number found."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Issue number found: $ISSUE_NUMBER"
|
||||||
|
|
||||||
|
# Using GitHub CLI to get issue details
|
||||||
|
gh issue view "$ISSUE_NUMBER" --repo "${{ github.repository }}" --json labels,assignees,milestone,title > issue_data.json
|
||||||
|
|
||||||
|
# Check if jq is installed
|
||||||
|
if ! command -v jq &> /dev/null; then
|
||||||
|
echo "Installing jq..."
|
||||||
|
sudo apt-get install -y jq
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Parse data with jq
|
||||||
|
LABELS=$(jq -r '.labels | map(.name) | join(",")' issue_data.json)
|
||||||
|
ASSIGNEES=$(jq -r '.assignees | map(.login) | join(",")' issue_data.json)
|
||||||
|
MILESTONE=$(jq -r '.milestone.title' issue_data.json)
|
||||||
|
|
||||||
|
# Check if any of the fields are empty and set them to None
|
||||||
|
LABELS=${LABELS:-None}
|
||||||
|
ASSIGNEES=${ASSIGNEES:-None}
|
||||||
|
MILESTONE=${MILESTONE:-None}
|
||||||
|
|
||||||
|
# Edit the PR with issue details, handling empty fields
|
||||||
|
gh pr edit "${{ github.event.pull_request.number }}" --repo "${{ github.repository }}" \
|
||||||
|
${LABELS:+--add-label "$LABELS"} \
|
||||||
|
${ASSIGNEES:+--add-assignee "$ASSIGNEES"} \
|
||||||
|
${MILESTONE:+--milestone "$MILESTONE"}
|
||||||
|
continue-on-error: true
|
||||||
|
env:
|
||||||
|
GITHUB_TOKEN: ${{ secrets.BOT_GITHUB_TOKEN }}
|
||||||
@ -1,17 +1,32 @@
|
|||||||
name: Invite users to join OpenIM Community.
|
# Copyright © 2023 OpenIM open source community. 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: Invite users to join our group
|
||||||
on:
|
on:
|
||||||
issue_comment:
|
issue_comment:
|
||||||
types:
|
types:
|
||||||
- created
|
- created
|
||||||
jobs:
|
jobs:
|
||||||
issue_comment:
|
issue_comment:
|
||||||
name: Invite users to join OpenIM Community
|
name: Invite users to join our group
|
||||||
if: ${{ github.event.comment.body == '/invite' || github.event.comment.body == '/close' || github.event.comment.body == '/comment' }}
|
if: ${{ github.event.comment.body == '/invite' || github.event.comment.body == '/close' || github.event.comment.body == '/comment' }}
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
permissions:
|
permissions:
|
||||||
issues: write
|
issues: write
|
||||||
steps:
|
steps:
|
||||||
- name: Invite user to join OpenIM Community
|
|
||||||
|
- name: Invite user to join our group
|
||||||
uses: peter-evans/create-or-update-comment@v4
|
uses: peter-evans/create-or-update-comment@v4
|
||||||
with:
|
with:
|
||||||
token: ${{ secrets.BOT_GITHUB_TOKEN }}
|
token: ${{ secrets.BOT_GITHUB_TOKEN }}
|
||||||
@ -19,20 +34,20 @@ jobs:
|
|||||||
body: |
|
body: |
|
||||||
We value close connections with our users, developers, and contributors here at Open-IM-Server. With a large community and maintainer team, we're always here to help and support you. Whether you're looking to join our community or have any questions or suggestions, we welcome you to get in touch with us.
|
We value close connections with our users, developers, and contributors here at Open-IM-Server. With a large community and maintainer team, we're always here to help and support you. Whether you're looking to join our community or have any questions or suggestions, we welcome you to get in touch with us.
|
||||||
|
|
||||||
Our most recommended way to get in touch is through [Slack](https://join.slack.com/t/openimsdk/shared_invite/zt-2ijy1ys1f-O0aEDCr7ExRZ7mwsHAVg9A). Even if you're in China, Slack is usually not blocked by firewalls, making it an easy way to connect with us. Our Slack community is the ideal place to discuss and share ideas and suggestions with other users and developers of Open-IM-Server. You can ask technical questions, seek help, or share your experiences with other users of Open-IM-Server.
|
Our most recommended way to get in touch is through [Slack](https://join.slack.com/t/openimsdk/shared_invite/zt-22720d66b-o_FvKxMTGXtcnnnHiMqe9Q). Even if you're in China, Slack is usually not blocked by firewalls, making it an easy way to connect with us. Our Slack community is the ideal place to discuss and share ideas and suggestions with other users and developers of Open-IM-Server. You can ask technical questions, seek help, or share your experiences with other users of Open-IM-Server.
|
||||||
|
|
||||||
In addition to Slack, we also offer the following ways to get in touch:
|
In addition to Slack, we also offer the following ways to get in touch:
|
||||||
|
|
||||||
+ <a href="https://join.slack.com/t/openimsdk/shared_invite/zt-2ijy1ys1f-O0aEDCr7ExRZ7mwsHAVg9A" target="_blank"><img src="https://img.shields.io/badge/Slack-OpenIM%2B-blueviolet?logo=slack&logoColor=white"></a> We also have Slack channels for you to communicate and discuss. To join, visit https://slack.com/ and join our [👀 Open-IM-Server slack](https://join.slack.com/t/openimsdk/shared_invite/zt-2ijy1ys1f-O0aEDCr7ExRZ7mwsHAVg9A) team channel.
|
+ <a href="https://join.slack.com/t/openimsdk/shared_invite/zt-22720d66b-o_FvKxMTGXtcnnnHiMqe9Q" target="_blank"><img src="https://img.shields.io/badge/Slack-OpenIM%2B-blueviolet?logo=slack&logoColor=white"></a> We also have Slack channels for you to communicate and discuss. To join, visit https://slack.com/ and join our [👀 Open-IM-Server slack](https://join.slack.com/t/openimsdk/shared_invite/zt-22720d66b-o_FvKxMTGXtcnnnHiMqe9Q) team channel.
|
||||||
+ <a href="https://mail.google.com/mail/u/0/?fs=1&tf=cm&to=info@openim.io" target="_blank"><img src="https://img.shields.io/badge/gmail-%40OOpenIMSDKCore?style=social&logo=gmail"></a> Get in touch with us on [Gmail](https://mail.google.com/mail/u/0/?fs=1&tf=cm&to=winxu81@gmail.com). If you have any questions or issues that need resolving, or any suggestions and feedback for our open source projects, please feel free to contact us via email.
|
+ <a href="https://mail.google.com/mail/u/0/?fs=1&tf=cm&to=info@openim.io" target="_blank"><img src="https://img.shields.io/badge/gmail-%40OOpenIMSDKCore?style=social&logo=gmail"></a> Get in touch with us on [Gmail](https://mail.google.com/mail/u/0/?fs=1&tf=cm&to=winxu81@gmail.com). If you have any questions or issues that need resolving, or any suggestions and feedback for our open source projects, please feel free to contact us via email.
|
||||||
+ <a href="https://doc.rentsoft.cn/" target="_blank"><img src="https://img.shields.io/badge/%E5%8D%9A%E5%AE%A2-%40OpenIMSDKCore-blue?style=social&logo=Octopus%20Deploy"></a> Read our [blog](https://doc.rentsoft.cn/). Our blog is a great place to stay up-to-date with Open-IM-Server projects and trends. On the blog, we share our latest developments, tech trends, and other interesting information.
|
+ <a href="https://doc.rentsoft.cn/" target="_blank"><img src="https://img.shields.io/badge/%E5%8D%9A%E5%AE%A2-%40OpenIMSDKCore-blue?style=social&logo=Octopus%20Deploy"></a> Read our [blog](https://doc.rentsoft.cn/). Our blog is a great place to stay up-to-date with Open-IM-Server projects and trends. On the blog, we share our latest developments, tech trends, and other interesting information.
|
||||||
+ <a href="https://github.com/OpenIMSDK/OpenIM-Docs/blob/main/docs/images/WechatIMG20.jpeg" target="_blank"><img src="https://img.shields.io/badge/%E5%BE%AE%E4%BF%A1-OpenIMSDKCore-brightgreen?logo=wechat&style=flat-square"></a> Add [Wechat](https://github.com/OpenIMSDK/OpenIM-Docs/blob/main/docs/images/WechatIMG20.jpeg) and indicate that you are a user or developer of Open-IM-Server. We will process your request as soon as possible.
|
+ <a href="https://github.com/OpenIMSDK/OpenIM-Docs/blob/main/docs/images/WechatIMG20.jpeg" target="_blank"><img src="https://img.shields.io/badge/%E5%BE%AE%E4%BF%A1-OpenIMSDKCore-brightgreen?logo=wechat&style=flat-square"></a> Add [Wechat](https://github.com/OpenIMSDK/OpenIM-Docs/blob/main/docs/images/WechatIMG20.jpeg) and indicate that you are a user or developer of Open-IM-Server. We will process your request as soon as possible.
|
||||||
|
|
||||||
# - name: Close Issue
|
- name: Close Issue
|
||||||
# uses: peter-evans/close-issue@v3
|
uses: peter-evans/close-issue@v3
|
||||||
# with:
|
with:
|
||||||
# token: ${{ secrets.BOT_GITHUB_TOKEN }}
|
token: ${{ secrets.BOT_GITHUB_TOKEN }}
|
||||||
# issue-number: ${{ github.event.issue.number }}
|
issue-number: ${{ github.event.issue.number }}
|
||||||
# comment: 🤖 Auto-closing issue, if you still need help please reopen the issue or ask for help in the community above
|
comment: 🤖 Auto-closing issue, if you still need help please reopen the issue or ask for help in the community above
|
||||||
# labels: |
|
labels: |
|
||||||
# accepted
|
triage/accepted
|
||||||
52
.github/workflows/auto-tag.yml
vendored
Normal file
52
.github/workflows/auto-tag.yml
vendored
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
# 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 Create Tag
|
||||||
|
|
||||||
|
on:
|
||||||
|
issue_comment:
|
||||||
|
types: [created]
|
||||||
|
pull_request_review_comment:
|
||||||
|
types: [created]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
create_tag:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
if: startsWith(github.event.comment.body, '/create tag')
|
||||||
|
steps:
|
||||||
|
- name: Checkout code
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Validate version number and get comment
|
||||||
|
id: validate
|
||||||
|
run: |
|
||||||
|
COMMENT="${{ github.event.comment.body }}"
|
||||||
|
VERSION=$(echo $COMMENT | cut -d ' ' -f 3)
|
||||||
|
TAG_COMMENT=$(echo $COMMENT | cut -d '"' -f 2)
|
||||||
|
if [[ $VERSION =~ ^v([0-9]+\.){2}[0-9]+$ ]]; then
|
||||||
|
echo "version=$VERSION" >> $GITHUB_STATE
|
||||||
|
echo "tag_comment=$TAG_COMMENT" >> $GITHUB_STATE
|
||||||
|
else
|
||||||
|
echo "Invalid version number."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
- name: Create a new tag
|
||||||
|
env:
|
||||||
|
GH_TOKEN: ${{ secrets.BOT_GITHUB_TOKEN }}
|
||||||
|
run: |
|
||||||
|
source $GITHUB_STATE
|
||||||
|
git tag -a $VERSION -m "$tag_comment"
|
||||||
|
git push origin $VERSION
|
||||||
|
echo "tag_created=$VERSION" >> $GITHUB_OUTPUT
|
||||||
67
.github/workflows/bot-auto-cherry-pick.yml
vendored
Normal file
67
.github/workflows/bot-auto-cherry-pick.yml
vendored
Normal file
@ -0,0 +1,67 @@
|
|||||||
|
# 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: Github Rebot for Cherry Pick when PR is merged
|
||||||
|
on:
|
||||||
|
pull_request_target:
|
||||||
|
types:
|
||||||
|
- closed
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
comment:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Comment cherry-pick command
|
||||||
|
uses: actions/github-script@v7
|
||||||
|
with:
|
||||||
|
github-token: ${{ secrets.BOT_GITHUB_TOKEN }}
|
||||||
|
script: |
|
||||||
|
const pr = context.payload.pull_request;
|
||||||
|
if (!pr.merged) {
|
||||||
|
console.log("PR is not merged. Skipping...");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (!pr.milestone || !pr.milestone.title) {
|
||||||
|
console.log("Milestone is not set. Skipping...");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const milestone = pr.milestone.title;
|
||||||
|
const ref = `heads/release-${milestone}`;
|
||||||
|
let branchExists;
|
||||||
|
try {
|
||||||
|
await github.rest.git.getRef({
|
||||||
|
owner: context.repo.owner,
|
||||||
|
repo: context.repo.repo,
|
||||||
|
ref: ref
|
||||||
|
});
|
||||||
|
branchExists = true;
|
||||||
|
} catch (error) {
|
||||||
|
if (error.status === 404) {
|
||||||
|
console.log(`Branch ${ref} does not exist. Skipping...`);
|
||||||
|
branchExists = false;
|
||||||
|
} else {
|
||||||
|
throw error; // Rethrow if it's another error
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!branchExists) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const cherryPickCmd = `/cherry-pick release-${milestone}`;
|
||||||
|
console.log(`Adding comment: ${cherryPickCmd}`);
|
||||||
|
await github.rest.issues.createComment({
|
||||||
|
owner: context.repo.owner,
|
||||||
|
repo: context.repo.repo,
|
||||||
|
issue_number: pr.number,
|
||||||
|
body: cherryPickCmd
|
||||||
|
});
|
||||||
68
.github/workflows/bot-cherry-pick.yml
vendored
Normal file
68
.github/workflows/bot-cherry-pick.yml
vendored
Normal file
@ -0,0 +1,68 @@
|
|||||||
|
# Copyright © 2023 OpenIM open source community. 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: Github Robot for Cherry Pick On Comment
|
||||||
|
|
||||||
|
on:
|
||||||
|
issue_comment:
|
||||||
|
types: [created]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
cherry-pick:
|
||||||
|
name: Cherry Pick
|
||||||
|
if: github.event.issue.pull_request != '' && contains(github.event.comment.body, '/cherry-pick')
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout the latest code
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
token: ${{ secrets.BOT_GITHUB_TOKEN }}
|
||||||
|
fetch-depth: 0 # To ensure all history is available for cherry-picking
|
||||||
|
|
||||||
|
- name: Automatic Cherry Pick
|
||||||
|
uses: vendoo/gha-cherry-pick@v1
|
||||||
|
with:
|
||||||
|
# Assuming the cherry-pick commit SHA is passed in the comment like '/cherry-pick sha'
|
||||||
|
commit-sha: ${{ github.event.comment.body }}
|
||||||
|
env:
|
||||||
|
GITHUB_TOKEN: ${{ secrets.BOT_GITHUB_TOKEN }}
|
||||||
|
|
||||||
|
- name: Create a new branch for PR
|
||||||
|
run: |
|
||||||
|
PR_BRANCH="cherry-pick-${GITHUB_SHA}-to-${{ github.base_ref }}"
|
||||||
|
git checkout -b $PR_BRANCH
|
||||||
|
git push origin $PR_BRANCH
|
||||||
|
env:
|
||||||
|
GITHUB_TOKEN: ${{ secrets.BOT_GITHUB_TOKEN }}
|
||||||
|
|
||||||
|
- name: Create Pull Request
|
||||||
|
uses: actions/github-script@v5
|
||||||
|
with:
|
||||||
|
script: |
|
||||||
|
const prTitle = "Cherry-pick to ${{ github.base_ref }}"
|
||||||
|
const prBody = "Automated cherry-pick of ${{ github.event.comment.body }}\n\n/cc @kubbot"
|
||||||
|
const base = "${{ github.base_ref }}"
|
||||||
|
const head = "cherry-pick-${{ github.sha }}-to-${{ github.base_ref }}"
|
||||||
|
const createPr = await github.rest.pulls.create({
|
||||||
|
owner: context.repo.owner,
|
||||||
|
repo: context.repo.repo,
|
||||||
|
title: prTitle,
|
||||||
|
body: prBody,
|
||||||
|
head: head,
|
||||||
|
base: base,
|
||||||
|
maintainer_can_modify: true, // Allows maintainers to edit the PR
|
||||||
|
})
|
||||||
|
env:
|
||||||
|
GITHUB_TOKEN: ${{ secrets.BOT_GITHUB_TOKEN }}
|
||||||
198
.github/workflows/build-docker-image.yml
vendored
Normal file
198
.github/workflows/build-docker-image.yml
vendored
Normal file
@ -0,0 +1,198 @@
|
|||||||
|
# Copyright © 2023 OpenIM open source community. 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: Publish Docker image
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
- release-*
|
||||||
|
paths-ignore:
|
||||||
|
- "docs/**"
|
||||||
|
- "README.md"
|
||||||
|
- "README_zh-CN.md"
|
||||||
|
- "**.md"
|
||||||
|
- "docs/**"
|
||||||
|
- "CONTRIBUTING.md"
|
||||||
|
tags:
|
||||||
|
- v*
|
||||||
|
pull_request:
|
||||||
|
types: [closed]
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
- release-*
|
||||||
|
paths-ignore:
|
||||||
|
- "docs/**"
|
||||||
|
- "README.md"
|
||||||
|
- "README_zh-CN.md"
|
||||||
|
- "**.md"
|
||||||
|
- "docs/**"
|
||||||
|
- "CONTRIBUTING.md"
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
env:
|
||||||
|
# Common versions
|
||||||
|
GO_VERSION: "1.20"
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build-dockerhub:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
if: ${{ !(github.event_name == 'pull_request' && github.event.pull_request.merged == false) }}
|
||||||
|
steps:
|
||||||
|
- name: Checkout main repository
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
path: main-repo
|
||||||
|
|
||||||
|
- name: Set up QEMU
|
||||||
|
uses: docker/setup-qemu-action@v3
|
||||||
|
- name: Set up Docker Buildx
|
||||||
|
uses: docker/setup-buildx-action@v3
|
||||||
|
|
||||||
|
- name: Build and push Docker image
|
||||||
|
uses: docker/build-push-action@v5
|
||||||
|
with:
|
||||||
|
context: ./main-repo
|
||||||
|
load: true
|
||||||
|
tags: "openim/openim-server:local"
|
||||||
|
|
||||||
|
- name: Checkout compose repository
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
repository: "openimsdk/openim-docker"
|
||||||
|
path: "compose-repo"
|
||||||
|
|
||||||
|
- name: Get Internal IP Address
|
||||||
|
id: get-ip
|
||||||
|
run: |
|
||||||
|
IP=$(hostname -I | awk '{print $1}')
|
||||||
|
echo "The IP Address is: $IP"
|
||||||
|
echo "::set-output name=ip::$IP"
|
||||||
|
|
||||||
|
- name: Update .env to use the local image
|
||||||
|
run: |
|
||||||
|
sed -i 's|OPENIM_SERVER_IMAGE=.*|OPENIM_SERVER_IMAGE=openim/openim-server:local|' ${{ github.workspace }}/compose-repo/.env
|
||||||
|
sed -i 's|MINIO_EXTERNAL_ADDRESS=.*|MINIO_EXTERNAL_ADDRESS=http://${{ steps.get-ip.outputs.ip }}:10005|' ${{ github.workspace }}/compose-repo/.env
|
||||||
|
|
||||||
|
- name: Start services using Docker Compose
|
||||||
|
run: |
|
||||||
|
cd ${{ github.workspace }}/compose-repo
|
||||||
|
docker compose up -d
|
||||||
|
sleep 30
|
||||||
|
|
||||||
|
- name: Check openim-server health
|
||||||
|
run: |
|
||||||
|
timeout=300
|
||||||
|
interval=30
|
||||||
|
elapsed=0
|
||||||
|
while [[ $elapsed -le $timeout ]]; do
|
||||||
|
if ! docker exec openim-server mage check; then
|
||||||
|
echo "openim-server is not ready, waiting..."
|
||||||
|
sleep $interval
|
||||||
|
elapsed=$(($elapsed + $interval))
|
||||||
|
else
|
||||||
|
echo "Health check successful"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
echo "Health check failed after 5 minutes"
|
||||||
|
exit 1
|
||||||
|
|
||||||
|
- name: Check openim-chat health
|
||||||
|
if: success()
|
||||||
|
run: |
|
||||||
|
if ! docker exec openim-chat mage check; then
|
||||||
|
echo "openim-chat check failed"
|
||||||
|
exit 1
|
||||||
|
else
|
||||||
|
echo "Health check successful"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# - name: Checkout e2e
|
||||||
|
# if: success()
|
||||||
|
# uses: actions/checkout@v4
|
||||||
|
# with:
|
||||||
|
# repository: "openimsdk/test-e2e"
|
||||||
|
# path: e2e-repo
|
||||||
|
|
||||||
|
# - name: Set up Python 3.9
|
||||||
|
# uses: actions/setup-python@v4
|
||||||
|
# with:
|
||||||
|
# python-version: '3.9'
|
||||||
|
|
||||||
|
# - name: Install dependencies
|
||||||
|
# run: |
|
||||||
|
# sudo apt-get update
|
||||||
|
# sudo apt-get install -y xvfb libxi6 libgconf-2-4
|
||||||
|
# cd ${{ github.workspace }}/e2e-repo
|
||||||
|
# pip install -r requirements.txt
|
||||||
|
|
||||||
|
# - name: Run tests
|
||||||
|
# run: |
|
||||||
|
# cd ${{ github.workspace }}/e2e-repo
|
||||||
|
# xvfb-run --auto-servernum --server-args='-screen 0 1920x1080x24' pytest -v -s ./script
|
||||||
|
|
||||||
|
- name: Extract metadata (tags, labels) for Docker
|
||||||
|
if: success()
|
||||||
|
id: meta
|
||||||
|
uses: docker/metadata-action@v5.5.1
|
||||||
|
with:
|
||||||
|
images: |
|
||||||
|
openim/openim-server
|
||||||
|
ghcr.io/openimsdk/openim-server
|
||||||
|
registry.cn-hangzhou.aliyuncs.com/openimsdk/openim-server
|
||||||
|
# generate Docker tags based on the following events/attributes
|
||||||
|
tags: |
|
||||||
|
type=ref,event=tag
|
||||||
|
type=schedule
|
||||||
|
type=ref,event=branch
|
||||||
|
type=ref,event=pr
|
||||||
|
type=semver,pattern={{version}}
|
||||||
|
type=semver,pattern=v{{version}}
|
||||||
|
type=semver,pattern={{major}}.{{minor}}
|
||||||
|
type=semver,pattern={{major}}
|
||||||
|
type=sha
|
||||||
|
|
||||||
|
- name: Log in to Docker Hub
|
||||||
|
uses: docker/login-action@v2
|
||||||
|
with:
|
||||||
|
username: ${{ secrets.DOCKER_USERNAME }}
|
||||||
|
password: ${{ secrets.DOCKER_PASSWORD }}
|
||||||
|
|
||||||
|
- name: Log in to GitHub Container Registry
|
||||||
|
uses: docker/login-action@v2
|
||||||
|
with:
|
||||||
|
registry: ghcr.io
|
||||||
|
username: ${{ github.repository_owner }}
|
||||||
|
password: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|
||||||
|
- name: Log in to Aliyun Container Registry
|
||||||
|
uses: docker/login-action@v2
|
||||||
|
with:
|
||||||
|
registry: registry.cn-hangzhou.aliyuncs.com
|
||||||
|
username: ${{ secrets.ALIREGISTRY_USERNAME }}
|
||||||
|
password: ${{ secrets.ALIREGISTRY_TOKEN }}
|
||||||
|
|
||||||
|
- name: Build and push Docker image
|
||||||
|
uses: docker/build-push-action@v5
|
||||||
|
with:
|
||||||
|
context: ./main-repo
|
||||||
|
push: true
|
||||||
|
# linux/ppc64le,linux/s390x
|
||||||
|
platforms: linux/amd64,linux/arm64
|
||||||
|
tags: ${{ steps.meta.outputs.tags }}
|
||||||
|
labels: ${{ steps.meta.outputs.labels }}
|
||||||
|
|
||||||
78
.github/workflows/changelog.yml
vendored
78
.github/workflows/changelog.yml
vendored
@ -1,78 +0,0 @@
|
|||||||
name: Release Changelog
|
|
||||||
|
|
||||||
on:
|
|
||||||
release:
|
|
||||||
types: [released]
|
|
||||||
|
|
||||||
permissions:
|
|
||||||
contents: write
|
|
||||||
pull-requests: write
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
update-changelog:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- name: Checkout code
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
|
|
||||||
- name: Run Go Changelog Generator
|
|
||||||
run: |
|
|
||||||
# Run the Go changelog generator, passing the release tag if available
|
|
||||||
if [ "${{ github.event.release.tag_name }}" = "latest" ]; then
|
|
||||||
go run tools/changelog/changelog.go > "${{ github.event.release.tag_name }}-changelog.md"
|
|
||||||
else
|
|
||||||
go run tools/changelog/changelog.go "${{ github.event.release.tag_name }}" > "${{ github.event.release.tag_name }}-changelog.md"
|
|
||||||
fi
|
|
||||||
|
|
||||||
- name: Handle changelog files
|
|
||||||
run: |
|
|
||||||
# Ensure that the CHANGELOG directory exists
|
|
||||||
mkdir -p CHANGELOG
|
|
||||||
|
|
||||||
# Extract Major.Minor version by removing the 'v' prefix from the tag name
|
|
||||||
TAG_NAME=${{ github.event.release.tag_name }}
|
|
||||||
CHANGELOG_VERSION_NUMBER=$(echo "$TAG_NAME" | sed 's/^v//' | grep -oP '^\d+\.\d+')
|
|
||||||
|
|
||||||
# Define the new changelog file path
|
|
||||||
CHANGELOG_FILENAME="CHANGELOG-$CHANGELOG_VERSION_NUMBER.md"
|
|
||||||
CHANGELOG_PATH="CHANGELOG/$CHANGELOG_FILENAME"
|
|
||||||
|
|
||||||
# Check if the changelog file for the current release already exists
|
|
||||||
if [ -f "$CHANGELOG_PATH" ]; then
|
|
||||||
# If the file exists, append the new changelog to the existing one
|
|
||||||
cat "$CHANGELOG_PATH" >> "${TAG_NAME}-changelog.md"
|
|
||||||
# Overwrite the existing changelog with the updated content
|
|
||||||
mv "${TAG_NAME}-changelog.md" "$CHANGELOG_PATH"
|
|
||||||
else
|
|
||||||
# If the changelog file doesn't exist, rename the temp changelog file to the new changelog file
|
|
||||||
mv "${TAG_NAME}-changelog.md" "$CHANGELOG_PATH"
|
|
||||||
|
|
||||||
# Ensure that README.md exists
|
|
||||||
if [ ! -f "CHANGELOG/README.md" ]; then
|
|
||||||
echo -e "# CHANGELOGs\n\n" > CHANGELOG/README.md
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Add the new changelog entry at the top of the README.md
|
|
||||||
if ! grep -q "\[$CHANGELOG_FILENAME\]" CHANGELOG/README.md; then
|
|
||||||
sed -i "3i- [$CHANGELOG_FILENAME](./$CHANGELOG_FILENAME)" CHANGELOG/README.md
|
|
||||||
# Remove the extra newline character added by sed
|
|
||||||
# sed -i '4d' CHANGELOG/README.md
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
- name: Clean up
|
|
||||||
run: |
|
|
||||||
# Remove any temporary files that were created during the process
|
|
||||||
rm -f "${{ github.event.release.tag_name }}-changelog.md"
|
|
||||||
|
|
||||||
- name: Create Pull Request
|
|
||||||
uses: peter-evans/create-pull-request@v7.0.5
|
|
||||||
with:
|
|
||||||
token: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
commit-message: "Update CHANGELOG for release ${{ github.event.release.tag_name }}"
|
|
||||||
title: "Update CHANGELOG for release ${{ github.event.release.tag_name }}"
|
|
||||||
body: "This PR updates the CHANGELOG files for release ${{ github.event.release.tag_name }}"
|
|
||||||
branch: changelog-${{ github.event.release.tag_name }}
|
|
||||||
base: main
|
|
||||||
delete-branch: true
|
|
||||||
labels: changelog
|
|
||||||
59
.github/workflows/check-coverage.bak
vendored
Normal file
59
.github/workflows/check-coverage.bak
vendored
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
# Copyright © 2023 OpenIM open source community. 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 Check Coverage
|
||||||
|
|
||||||
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
|
push:
|
||||||
|
branches: [ "main" ]
|
||||||
|
paths-ignore:
|
||||||
|
- "docs/**"
|
||||||
|
- "**/*.md"
|
||||||
|
- "**/*.yaml"
|
||||||
|
- "CONTRIBUTORS"
|
||||||
|
- "CHANGELOG/**"
|
||||||
|
pull_request:
|
||||||
|
branches: [ "*" ]
|
||||||
|
paths-ignore:
|
||||||
|
- "docs/**"
|
||||||
|
- "**/*.md"
|
||||||
|
- "**/*.yaml"
|
||||||
|
- "CONTRIBUTORS"
|
||||||
|
- "CHANGELOG/**"
|
||||||
|
env:
|
||||||
|
# Common versions
|
||||||
|
GO_VERSION: "1.20"
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
coverage:
|
||||||
|
runs-on: ubuntu-20.04
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Setup Golang with cache
|
||||||
|
uses: magnetikonline/action-golang-cache@v4
|
||||||
|
with:
|
||||||
|
go-version: ${{ env.GO_VERSION }}
|
||||||
|
|
||||||
|
- name: Install Dependencies
|
||||||
|
run: sudo apt update && sudo apt install -y libgpgme-dev libbtrfs-dev libdevmapper-dev
|
||||||
|
|
||||||
|
- name: Run Cover
|
||||||
|
run: make cover
|
||||||
|
continue-on-error: true
|
||||||
|
|
||||||
|
- name: Upload Coverage to Codecov
|
||||||
|
uses: codecov/codecov-action@v4
|
||||||
40
.github/workflows/cla-assistant.yml
vendored
40
.github/workflows/cla-assistant.yml
vendored
@ -1,40 +0,0 @@
|
|||||||
name: CLA Assistant
|
|
||||||
on:
|
|
||||||
issue_comment:
|
|
||||||
types: [created]
|
|
||||||
pull_request_target:
|
|
||||||
types: [opened,closed,synchronize]
|
|
||||||
|
|
||||||
# explicitly configure permissions, in case your GITHUB_TOKEN workflow permissions are set to read-only in repository settings
|
|
||||||
permissions:
|
|
||||||
actions: write
|
|
||||||
contents: write # this can be 'read' if the signatures are in remote repository
|
|
||||||
pull-requests: write
|
|
||||||
statuses: write
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
CLA-Assistant:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- name: "CLA Assistant"
|
|
||||||
if: (github.event.comment.body == 'recheck' || github.event.comment.body == 'I have read the CLA Document and I hereby sign the CLA') || github.event_name == 'pull_request_target'
|
|
||||||
uses: contributor-assistant/github-action@v2.4.0
|
|
||||||
env:
|
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
PERSONAL_ACCESS_TOKEN: ${{ secrets.BOT_TOKEN }}
|
|
||||||
with:
|
|
||||||
path-to-signatures: 'signatures/cla.json'
|
|
||||||
path-to-document: 'https://github.com/OpenIM-Robot/cla/blob/main/README.md' # e.g. a CLA or a DCO document
|
|
||||||
branch: 'main'
|
|
||||||
allowlist: 'bot*,*bot,OpenIM-Robot'
|
|
||||||
|
|
||||||
# the followings are the optional inputs - If the optional inputs are not given, then default values will be taken
|
|
||||||
remote-organization-name: OpenIM-Robot
|
|
||||||
remote-repository-name: cla
|
|
||||||
create-file-commit-message: 'Creating file for storing CLA Signatures'
|
|
||||||
# signed-commit-message: '$contributorName has signed the CLA in $owner/$repo#$pullRequestNo'
|
|
||||||
custom-notsigned-prcomment: '💕 Thank you for your contribution and please kindly read and sign our CLA. [CLA Docs](https://github.com/OpenIM-Robot/cla/blob/main/README.md)'
|
|
||||||
custom-pr-sign-comment: 'I have read the CLA Document and I hereby sign the CLA'
|
|
||||||
custom-allsigned-prcomment: '🤖 All Contributors have signed the [CLA](https://github.com/OpenIM-Robot/cla/blob/main/README.md).<br> The signed information is recorded [**here**](https://github.com/OpenIM-Robot/cla/blob/main/signatures/cla.json)'
|
|
||||||
#lock-pullrequest-aftermerge: false - if you don't want this bot to automatically lock the pull request after merging (default - true)
|
|
||||||
#use-dco-flag: true - If you are using DCO instead of CLA
|
|
||||||
62
.github/workflows/cla.yml
vendored
Normal file
62
.github/workflows/cla.yml
vendored
Normal file
@ -0,0 +1,62 @@
|
|||||||
|
# Copyright © 2023 OpenIM open source community. 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 CLA Assistant
|
||||||
|
on:
|
||||||
|
issue_comment:
|
||||||
|
types: [created]
|
||||||
|
pull_request_target:
|
||||||
|
types: [opened,closed,synchronize]
|
||||||
|
|
||||||
|
# explicitly configure permissions, in case your GITHUB_TOKEN workflow permissions are set to read-only in repository settings
|
||||||
|
permissions:
|
||||||
|
actions: write
|
||||||
|
contents: write
|
||||||
|
pull-requests: write
|
||||||
|
statuses: write
|
||||||
|
|
||||||
|
env:
|
||||||
|
# Define Open-IM-Server variables here
|
||||||
|
OPEN_IM_SERVER_REMOTE_ORGANIZATION: openim-sigs
|
||||||
|
REMOTE_REPOSITORY: cla
|
||||||
|
OPEN_IM_SERVER_CLA_DOCUMENT: https://github.com/openim-sigs/cla/blob/main/README.md
|
||||||
|
OPEN_IM_SERVER_SIGNATURES_PATH: signatures/${{ github.event.repository.name }}/cla.json
|
||||||
|
|
||||||
|
OPEN_IM_SERVER_ALLOWLIST: kubbot,openimbot,bot*,dependabot,sweep-ai,*bot,bot-*,bot/*,bot-/*,bot,*[bot]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
CLAAssistant:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: "CLA Assistant"
|
||||||
|
if: (github.event.comment.body == 'recheck' || github.event.comment.body == 'I have read the CLA Document and I hereby sign the CLA') || github.event_name == 'pull_request_target'
|
||||||
|
uses: contributor-assistant/github-action@v2.3.1
|
||||||
|
env:
|
||||||
|
GITHUB_TOKEN: ${{ secrets.BOT_GITHUB_TOKEN }}
|
||||||
|
PERSONAL_ACCESS_TOKEN: ${{ secrets.REDBOT_GITHUB_TOKEN }}
|
||||||
|
with:
|
||||||
|
path-to-signatures: ${{ env.OPEN_IM_SERVER_SIGNATURES_PATH }}
|
||||||
|
path-to-document: ${{ env.OPEN_IM_SERVER_CLA_DOCUMENT }}
|
||||||
|
branch: 'main'
|
||||||
|
allowlist: ${{ env.OPEN_IM_SERVER_ALLOWLIST }}
|
||||||
|
|
||||||
|
remote-organization-name: ${{ env.OPEN_IM_SERVER_REMOTE_ORGANIZATION }}
|
||||||
|
remote-repository-name: ${{ env.REMOTE_REPOSITORY }}
|
||||||
|
|
||||||
|
create-file-commit-message: '📚 Docs: Creating file for storing ${{ github.event.repository.name }} CLA Signatures'
|
||||||
|
custom-notsigned-prcomment: '💕 Thank you for your contribution and please kindly read and sign our [🎯https://github.com/openim-sigs/cla/blob/main/README.md](https://github.com/openim-sigs/cla/blob/main/README.md). <br> If you wish to sign the CRA, **Please copy and comment on the following sentence:**'
|
||||||
|
custom-pr-sign-comment: 'I have read the CLA Document and I hereby sign the CLA'
|
||||||
|
custom-allsigned-prcomment: '🤖 All Contributors have signed the [${{ github.event.repository.name }} CLA](https://github.com/openim-sigs/cla/blob/main/README.md).<br> The signed information is recorded [🤖here](https://github.com/openim-sigs/cla/tree/main/signatures/${{ github.event.repository.name }}/cla.json)'
|
||||||
|
# lock-pullrequest-aftermerge: false - if you don't want this bot to automatically lock the pull request after merging (default - true)
|
||||||
|
# use-dco-flag: true - If you are using DCO instead of CLA
|
||||||
@ -1,65 +0,0 @@
|
|||||||
name: Cleanup After Milestone PRs Merged
|
|
||||||
|
|
||||||
on:
|
|
||||||
pull_request:
|
|
||||||
types:
|
|
||||||
- closed
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
handle_pr:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: Checkout repository
|
|
||||||
uses: actions/checkout@v4.2.0
|
|
||||||
|
|
||||||
- name: Get the PR title and extract PR numbers
|
|
||||||
id: extract_pr_numbers
|
|
||||||
run: |
|
|
||||||
# Get the PR title
|
|
||||||
PR_TITLE="${{ github.event.pull_request.title }}"
|
|
||||||
|
|
||||||
echo "PR Title: $PR_TITLE"
|
|
||||||
|
|
||||||
# Extract PR numbers from the title
|
|
||||||
PR_NUMBERS=$(echo "$PR_TITLE" | grep -oE "#[0-9]+" | tr -d '#' | tr '\n' ' ')
|
|
||||||
echo "Extracted PR Numbers: $PR_NUMBERS"
|
|
||||||
|
|
||||||
# Save PR numbers to a file
|
|
||||||
echo "$PR_NUMBERS" > pr_numbers.txt
|
|
||||||
echo "Saved PR Numbers to pr_numbers.txt"
|
|
||||||
|
|
||||||
# Check if the title matches a specific pattern
|
|
||||||
if echo "$PR_TITLE" | grep -qE "^deps: Merge( #[0-9]+)+ PRs into .+"; then
|
|
||||||
echo "proceed=true" >> $GITHUB_OUTPUT
|
|
||||||
else
|
|
||||||
echo "proceed=false" >> $GITHUB_OUTPUT
|
|
||||||
fi
|
|
||||||
|
|
||||||
- name: Use extracted PR numbers and label PRs
|
|
||||||
if: (steps.extract_pr_numbers.outputs.proceed == 'true' || contains(github.event.pull_request.labels.*.name, 'milestone-merge')) && github.event.pull_request.merged == true
|
|
||||||
run: |
|
|
||||||
# Read the previously saved PR numbers
|
|
||||||
PR_NUMBERS=$(cat pr_numbers.txt)
|
|
||||||
echo "Using extracted PR Numbers: $PR_NUMBERS"
|
|
||||||
|
|
||||||
# Loop through each PR number and add label
|
|
||||||
for PR_NUMBER in $PR_NUMBERS; do
|
|
||||||
echo "Adding 'cherry-picked' label to PR #$PR_NUMBER"
|
|
||||||
curl -X POST \
|
|
||||||
-H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \
|
|
||||||
-H "Accept: application/vnd.github+json" \
|
|
||||||
https://api.github.com/repos/${{ github.repository }}/issues/$PR_NUMBER/labels \
|
|
||||||
-d '{"labels":["cherry-picked"]}'
|
|
||||||
done
|
|
||||||
env:
|
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
|
|
||||||
- name: Delete branch after PR close
|
|
||||||
if: steps.extract_pr_numbers.outputs.proceed == 'true' || contains(github.event.pull_request.labels.*.name, 'milestone-merge')
|
|
||||||
run: |
|
|
||||||
BRANCH_NAME="${{ github.event.pull_request.head.ref }}"
|
|
||||||
echo "Branch to delete: $BRANCH_NAME"
|
|
||||||
git push origin --delete "$BRANCH_NAME"
|
|
||||||
env:
|
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
27
.github/workflows/code-language-detector.yml
vendored
Normal file
27
.github/workflows/code-language-detector.yml
vendored
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
# Copyright © 2024 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: Language Check Workflow Test
|
||||||
|
|
||||||
|
on: [pull_request]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
comment-language-detector:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Checkout Repository
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Code Language Detector
|
||||||
|
uses: kubecub/comment-lang-detector@v1.0.0
|
||||||
71
.github/workflows/codeql-analysis.yml
vendored
71
.github/workflows/codeql-analysis.yml
vendored
@ -1,37 +1,49 @@
|
|||||||
# For most projects, this workflow file will not need changing; you simply need
|
# Copyright © 2023 OpenIM open source community. All rights reserved.
|
||||||
# to commit it to your repository.
|
|
||||||
#
|
#
|
||||||
# You may wish to alter this file to override the set of languages analyzed,
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
# or to provide custom queries or build logic.
|
# you may not use this file except in compliance with the License.
|
||||||
|
# You may obtain a copy of the License at
|
||||||
#
|
#
|
||||||
# ******** NOTE ********
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
# We have attempted to detect the languages in your repository. Please check
|
#
|
||||||
# the `language` matrix defined below to confirm you have the correct set of
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
# supported CodeQL languages.
|
# 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: "CodeQL"
|
|
||||||
|
name: "OpenIM Code Scanning - Action"
|
||||||
|
|
||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
branches: [main]
|
branches: [main]
|
||||||
pull_request:
|
pull_request:
|
||||||
# The branches below must be a subset of the branches above
|
|
||||||
branches: [main]
|
branches: [main]
|
||||||
schedule:
|
schedule:
|
||||||
- cron: '18 19 * * 6'
|
# ┌───────────── minute (0 - 59)
|
||||||
|
# │ ┌───────────── hour (0 - 23)
|
||||||
|
# │ │ ┌───────────── day of the month (1 - 31)
|
||||||
|
# │ │ │ ┌───────────── month (1 - 12 or JAN-DEC)
|
||||||
|
# │ │ │ │ ┌───────────── day of the week (0 - 6 or SUN-SAT)
|
||||||
|
# │ │ │ │ │
|
||||||
|
# │ │ │ │ │
|
||||||
|
# │ │ │ │ │
|
||||||
|
# * * * * *
|
||||||
|
- cron: '30 1 * * 0'
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
analyze:
|
CodeQL-Build:
|
||||||
name: Analyze
|
# CodeQL runs on ubuntu-latest, windows-latest, and macos-latest
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
strategy:
|
permissions:
|
||||||
fail-fast: false
|
# required for all workflows
|
||||||
matrix:
|
security-events: write
|
||||||
language: [ 'go' ]
|
|
||||||
# CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python' ]
|
# only required for workflows in private repositories
|
||||||
# Learn more:
|
actions: write
|
||||||
# https://docs.github.com/en/free-pro-team@latest/github/finding-security-vulnerabilities-and-errors-in-your-code/configuring-code-scanning#changing-the-languages-that-are-analyzed
|
contents: write
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
@ -40,24 +52,21 @@ jobs:
|
|||||||
# Initializes the CodeQL tools for scanning.
|
# Initializes the CodeQL tools for scanning.
|
||||||
- name: Initialize CodeQL
|
- name: Initialize CodeQL
|
||||||
uses: github/codeql-action/init@v3
|
uses: github/codeql-action/init@v3
|
||||||
|
# Override language selection by uncommenting this and choosing your languages
|
||||||
with:
|
with:
|
||||||
languages: ${{ matrix.language }}
|
languages: go
|
||||||
# If you wish to specify custom queries, you can do so here or in a config file.
|
|
||||||
# By default, queries listed here will override any specified in a config file.
|
|
||||||
# Prefix the list here with "+" to use these queries and those in the config file.
|
|
||||||
# queries: ./path/to/local/query, your-org/your-repo/queries@main
|
|
||||||
|
|
||||||
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
|
# Autobuild attempts to build any compiled languages (C/C++, C#, Go, or Java).
|
||||||
# If this step fails, then you should remove it and run the build manually (see below)
|
# If this step fails, then you should remove it and run the build manually (see below).
|
||||||
- name: Autobuild
|
- name: Autobuild
|
||||||
uses: github/codeql-action/autobuild@v3
|
uses: github/codeql-action/autobuild@v3
|
||||||
|
|
||||||
# ℹ️ Command-line programs to run using the OS shell.
|
# ℹ️ Command-line programs to run using the OS shell.
|
||||||
# 📚 https://git.io/JvXDl
|
# 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun
|
||||||
|
|
||||||
# ✏️ If the Autobuild fails above, remove it and uncomment the following three lines
|
# ✏️ If the Autobuild fails above, remove it and uncomment the following
|
||||||
# and modify them (or add more) to build your code if your project
|
# three lines and modify them (or add more) to build your code if your
|
||||||
# uses a compiled language
|
# project uses a compiled language
|
||||||
|
|
||||||
# - run: |
|
# - run: |
|
||||||
# make bootstrap
|
# make bootstrap
|
||||||
|
|||||||
51
.github/workflows/comment-check.yml
vendored
51
.github/workflows/comment-check.yml
vendored
@ -1,51 +0,0 @@
|
|||||||
name: Non-English Comments Check
|
|
||||||
|
|
||||||
on:
|
|
||||||
pull_request:
|
|
||||||
branches:
|
|
||||||
- main
|
|
||||||
workflow_dispatch:
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
non-english-comments-check:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
|
|
||||||
env:
|
|
||||||
# need ignore Dirs
|
|
||||||
EXCLUDE_DIRS: ".git docs tests scripts assets node_modules build"
|
|
||||||
# need ignore Files
|
|
||||||
EXCLUDE_FILES: "*.md *.txt *.html *.css *.min.js *.mdx"
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
|
|
||||||
- name: Search for Non-English comments
|
|
||||||
run: |
|
|
||||||
set -e
|
|
||||||
# Define the regex pattern to match Chinese characters
|
|
||||||
pattern='[\p{Han}]'
|
|
||||||
|
|
||||||
# Process the directories to be excluded
|
|
||||||
exclude_dirs=""
|
|
||||||
for dir in $EXCLUDE_DIRS; do
|
|
||||||
exclude_dirs="$exclude_dirs --exclude-dir=$dir"
|
|
||||||
done
|
|
||||||
|
|
||||||
# Process the file types to be excluded
|
|
||||||
exclude_files=""
|
|
||||||
for file in $EXCLUDE_FILES; do
|
|
||||||
exclude_files="$exclude_files --exclude=$file"
|
|
||||||
done
|
|
||||||
|
|
||||||
# Use grep to find all comments containing Non-English characters and save to file
|
|
||||||
grep -Pnr "$pattern" . $exclude_dirs $exclude_files > non_english_comments.txt || true
|
|
||||||
|
|
||||||
- name: Output non-English comments are found
|
|
||||||
run: |
|
|
||||||
if [ -s non_english_comments.txt ]; then
|
|
||||||
echo "Non-English comments found in the following locations:"
|
|
||||||
cat non_english_comments.txt
|
|
||||||
exit 1 # terminate the workflow
|
|
||||||
else
|
|
||||||
echo "No Non_English comments found."
|
|
||||||
fi
|
|
||||||
77
.github/workflows/create-branch-on-tag.bak
vendored
Normal file
77
.github/workflows/create-branch-on-tag.bak
vendored
Normal file
@ -0,0 +1,77 @@
|
|||||||
|
# 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: Create Branch on Tag
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
tags:
|
||||||
|
- 'v*.*.0'
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: write
|
||||||
|
actions: write
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
create-branch:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Check out code
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
|
||||||
|
- name: Set up Git
|
||||||
|
run: |
|
||||||
|
git config --global user.name 'kubbot'
|
||||||
|
git config --global user.email '3293172751yxy@gmail.com'
|
||||||
|
|
||||||
|
- name: Install git-chglog
|
||||||
|
run: make install.git-chglog
|
||||||
|
|
||||||
|
- name: Create Branch and Push
|
||||||
|
env:
|
||||||
|
TAG_NAME: ${{ github.ref_name }}
|
||||||
|
run: |
|
||||||
|
IFS='.' read -ra VERSION_PARTS <<< "$TAG_NAME"
|
||||||
|
if [[ "${VERSION_PARTS[2]}" = "0" ]]; then
|
||||||
|
BRANCH_NAME="release-v${VERSION_PARTS[0]}.${VERSION_PARTS[1]}"
|
||||||
|
echo "Creating branch $BRANCH_NAME"
|
||||||
|
git checkout -b "$BRANCH_NAME"
|
||||||
|
git push origin "$BRANCH_NAME"
|
||||||
|
else
|
||||||
|
echo "Not a release tag. Skipping branch creation."
|
||||||
|
fi
|
||||||
|
continue-on-error: true
|
||||||
|
|
||||||
|
- name: Create and Commit CHANGELOG
|
||||||
|
if: endsWith(github.ref_name, '.0')
|
||||||
|
run: |
|
||||||
|
git fetch --all
|
||||||
|
TAG_NAME=${GITHUB_REF#refs/tags/}
|
||||||
|
IFS='.' read -ra VERSION_PARTS <<< "$TAG_NAME"
|
||||||
|
git checkout main
|
||||||
|
cd CHANGELOG
|
||||||
|
git-chglog --tag-filter-pattern "v${VERSION_PARTS[0]}.${VERSION_PARTS[1]}.*" -o "CHANGELOG-${VERSION_PARTS[0]}.${VERSION_PARTS[1]}.md"
|
||||||
|
git add "CHANGELOG-${VERSION_PARTS[0]}.${VERSION_PARTS[1]}.md"
|
||||||
|
git commit -m "Update CHANGELOG for $TAG_NAME" || echo "No changes to commit."
|
||||||
|
continue-on-error: true
|
||||||
|
|
||||||
|
- name: Push CHANGELOG to Main
|
||||||
|
if: steps.create-and-commit-changelog.outputs.changes == 'true'
|
||||||
|
uses: ad-m/github-push-action@v0.8.0
|
||||||
|
with:
|
||||||
|
github_token: ${{ secrets.BOT_GITHUB_TOKEN }}
|
||||||
|
branch: main
|
||||||
|
continue-on-error: true
|
||||||
18
.github/workflows/depsreview.yaml
vendored
Normal file
18
.github/workflows/depsreview.yaml
vendored
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
# Copyright © 2023 KubeCub open source community. All rights reserved.
|
||||||
|
# Licensed under the MIT License (the "License");
|
||||||
|
# you may not use this file except in compliance with the License.
|
||||||
|
|
||||||
|
name: OpenIM Dependency Review
|
||||||
|
on: [pull_request]
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
dependency-review:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: 'Checkout Repository'
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
- name: 'Dependency Review'
|
||||||
|
uses: actions/dependency-review-action@v4
|
||||||
@ -1,91 +0,0 @@
|
|||||||
name: Build and release services Docker Images
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- release-*
|
|
||||||
release:
|
|
||||||
types: [published]
|
|
||||||
workflow_dispatch:
|
|
||||||
inputs:
|
|
||||||
tag:
|
|
||||||
description: "Tag version to be used for Docker image"
|
|
||||||
required: true
|
|
||||||
default: "v3.8.3"
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
build-and-push:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: Checkout repository
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
|
|
||||||
- name: Set up Docker Buildx
|
|
||||||
uses: docker/setup-buildx-action@v3.8.0
|
|
||||||
|
|
||||||
- name: Log in to Docker Hub
|
|
||||||
uses: docker/login-action@v3.3.0
|
|
||||||
with:
|
|
||||||
username: ${{ secrets.DOCKER_USERNAME }}
|
|
||||||
password: ${{ secrets.DOCKER_PASSWORD }}
|
|
||||||
|
|
||||||
- name: Log in to GitHub Container Registry
|
|
||||||
uses: docker/login-action@v3.3.0
|
|
||||||
with:
|
|
||||||
registry: ghcr.io
|
|
||||||
username: ${{ github.repository_owner }}
|
|
||||||
password: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
|
|
||||||
- name: Log in to Aliyun Container Registry
|
|
||||||
uses: docker/login-action@v3.3.0
|
|
||||||
with:
|
|
||||||
registry: registry.cn-hangzhou.aliyuncs.com
|
|
||||||
username: ${{ secrets.ALIREGISTRY_USERNAME }}
|
|
||||||
password: ${{ secrets.ALIREGISTRY_TOKEN }}
|
|
||||||
|
|
||||||
- name: Extract metadata for Docker (tags, labels)
|
|
||||||
id: meta
|
|
||||||
uses: docker/metadata-action@v5.6.0
|
|
||||||
with:
|
|
||||||
tags: |
|
|
||||||
type=ref,event=tag
|
|
||||||
type=schedule
|
|
||||||
type=ref,event=branch
|
|
||||||
type=semver,pattern={{version}}
|
|
||||||
type=semver,pattern=v{{version}}
|
|
||||||
type=semver,pattern=release-{{raw}}
|
|
||||||
type=sha
|
|
||||||
type=raw,value=${{ github.event.inputs.tag }}
|
|
||||||
|
|
||||||
- name: Build and push Docker images
|
|
||||||
run: |
|
|
||||||
IMG_DIR="build/images"
|
|
||||||
for dir in "$IMG_DIR"/*/; do
|
|
||||||
# Find Dockerfile or *.dockerfile in a case-insensitive manner
|
|
||||||
dockerfile=$(find "$dir" -maxdepth 1 -type f \( -iname 'dockerfile' -o -iname '*.dockerfile' \) | head -n 1)
|
|
||||||
|
|
||||||
if [ -n "$dockerfile" ] && [ -f "$dockerfile" ]; then
|
|
||||||
IMAGE_NAME=$(basename "$dir")
|
|
||||||
echo "Building Docker image for $IMAGE_NAME with tags:"
|
|
||||||
|
|
||||||
# Initialize tag arguments
|
|
||||||
tag_args=()
|
|
||||||
|
|
||||||
# Read each tag and append --tag arguments
|
|
||||||
while IFS= read -r tag; do
|
|
||||||
tag_args+=(--tag "${{ secrets.DOCKER_USERNAME }}/$IMAGE_NAME:$tag")
|
|
||||||
tag_args+=(--tag "ghcr.io/${{ github.repository_owner }}/$IMAGE_NAME:$tag")
|
|
||||||
tag_args+=(--tag "registry.cn-hangzhou.aliyuncs.com/openimsdk/$IMAGE_NAME:$tag")
|
|
||||||
done <<< "${{ steps.meta.outputs.tags }}"
|
|
||||||
|
|
||||||
# Build and push the Docker image with all tags
|
|
||||||
docker buildx build --platform linux/amd64,linux/arm64 \
|
|
||||||
--file "$dockerfile" \
|
|
||||||
"${tag_args[@]}" \
|
|
||||||
--push \
|
|
||||||
"."
|
|
||||||
else
|
|
||||||
echo "No valid Dockerfile found in $dir"
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
502
.github/workflows/docker-buildx.bak
vendored
Normal file
502
.github/workflows/docker-buildx.bak
vendored
Normal file
@ -0,0 +1,502 @@
|
|||||||
|
# Copyright © 2023 OpenIM open source community. 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: Docker Buildx Images CI
|
||||||
|
|
||||||
|
on:
|
||||||
|
schedule:
|
||||||
|
- cron: '30 1 * * *'
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- release-*
|
||||||
|
tags:
|
||||||
|
- v*
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build-ghcr:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Set up QEMU
|
||||||
|
uses: docker/setup-qemu-action@v3
|
||||||
|
|
||||||
|
- name: Set up Docker Buildx
|
||||||
|
uses: docker/setup-buildx-action@v3
|
||||||
|
with:
|
||||||
|
install: true
|
||||||
|
|
||||||
|
- name: Cache Docker layers
|
||||||
|
uses: actions/cache@v4
|
||||||
|
with:
|
||||||
|
path: /tmp/.buildx-cache
|
||||||
|
key: ${{ runner.os }}-buildx-${{ github.sha }}
|
||||||
|
restore-keys: |
|
||||||
|
${{ runner.os }}-buildx-
|
||||||
|
|
||||||
|
- name: Log in to GitHub Container Registry
|
||||||
|
uses: docker/login-action@v3
|
||||||
|
with:
|
||||||
|
registry: ghcr.io
|
||||||
|
username: ${{ github.repository_owner }}
|
||||||
|
password: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|
||||||
|
- name: Log in to Docker Hub
|
||||||
|
uses: docker/login-action@v3
|
||||||
|
with:
|
||||||
|
username: ${{ secrets.DOCKER_USERNAME }}
|
||||||
|
password: ${{ secrets.DOCKER_PASSWORD }}
|
||||||
|
|
||||||
|
- name: Log in to AliYun Docker Hub
|
||||||
|
uses: docker/login-action@v3
|
||||||
|
with:
|
||||||
|
registry: registry.cn-hangzhou.aliyuncs.com
|
||||||
|
username: ${{ secrets.ALIREGISTRY_USERNAME }}
|
||||||
|
password: ${{ secrets.ALIREGISTRY_TOKEN }}
|
||||||
|
|
||||||
|
################################################
|
||||||
|
# build/
|
||||||
|
# └── docker
|
||||||
|
# ├── openim-api
|
||||||
|
# │ └── Dockerfile
|
||||||
|
# ├── openim-cmdutils
|
||||||
|
# │ └── Dockerfile
|
||||||
|
# ├── openim-crontask
|
||||||
|
# │ └── Dockerfile
|
||||||
|
# ├── openim-msggateway
|
||||||
|
# │ └── Dockerfile
|
||||||
|
# ├── openim-msgtransfer
|
||||||
|
# │ └── Dockerfile
|
||||||
|
# ├── openim-push
|
||||||
|
# │ └── Dockerfile
|
||||||
|
# ├── openim-rpc-auth
|
||||||
|
# │ └── Dockerfile
|
||||||
|
# ├── openim-rpc-conversation
|
||||||
|
# │ └── Dockerfile
|
||||||
|
# ├── openim-rpc-friend
|
||||||
|
# │ └── Dockerfile
|
||||||
|
# ├── openim-rpc-group
|
||||||
|
# │ └── Dockerfile
|
||||||
|
# ├── openim-rpc-msg
|
||||||
|
# │ └── Dockerfile
|
||||||
|
# ├── openim-rpc-third
|
||||||
|
# │ └── Dockerfile
|
||||||
|
# └── openim-rpc-user
|
||||||
|
# └── Dockerfile
|
||||||
|
#############################################
|
||||||
|
|
||||||
|
- name: Extract metadata (tags, labels) for Docker openim-api
|
||||||
|
id: meta1
|
||||||
|
uses: docker/metadata-action@v5.5.1
|
||||||
|
with:
|
||||||
|
images: |
|
||||||
|
ghcr.io/openimsdk/openim-api
|
||||||
|
openim/openim-api
|
||||||
|
registry.cn-hangzhou.aliyuncs.com/openimsdk/openim-api
|
||||||
|
tags: |
|
||||||
|
type=ref,event=tag
|
||||||
|
type=schedule
|
||||||
|
type=ref,event=branch
|
||||||
|
type=ref,event=pr
|
||||||
|
type=semver,pattern={{version}}
|
||||||
|
type=semver,pattern=v{{version}}
|
||||||
|
type=semver,pattern={{major}}.{{minor}}
|
||||||
|
type=semver,pattern={{major}}
|
||||||
|
type=sha
|
||||||
|
|
||||||
|
- name: Build and push Docker image for openim-api
|
||||||
|
uses: docker/build-push-action@v5
|
||||||
|
with:
|
||||||
|
context: .
|
||||||
|
file: ./build/images/openim-api/Dockerfile
|
||||||
|
platforms: linux/amd64,linux/arm64
|
||||||
|
push: ${{ github.event_name != 'pull_request' }}
|
||||||
|
tags: ${{ steps.meta1.outputs.tags }}
|
||||||
|
labels: ${{ steps.meta1.outputs.labels }}
|
||||||
|
cache-from: type=local,src=/tmp/.buildx-cache
|
||||||
|
cache-to: type=local,dest=/tmp/.buildx-cache
|
||||||
|
|
||||||
|
- name: Extract metadata (tags, labels) for Docker openim-cmdutils
|
||||||
|
id: meta2
|
||||||
|
uses: docker/metadata-action@v5.5.1
|
||||||
|
with:
|
||||||
|
images: |
|
||||||
|
ghcr.io/openimsdk/openim-cmdutils
|
||||||
|
openim/openim-cmdutils
|
||||||
|
registry.cn-hangzhou.aliyuncs.com/openimsdk/openim-cmdutils
|
||||||
|
tags: |
|
||||||
|
type=ref,event=tag
|
||||||
|
type=schedule
|
||||||
|
type=ref,event=branch
|
||||||
|
type=ref,event=pr
|
||||||
|
type=semver,pattern={{version}}
|
||||||
|
type=semver,pattern=v{{version}}
|
||||||
|
type=semver,pattern={{major}}.{{minor}}
|
||||||
|
type=semver,pattern={{major}}
|
||||||
|
type=sha
|
||||||
|
|
||||||
|
- name: Build and push Docker image for openim-cmdutils
|
||||||
|
uses: docker/build-push-action@v5
|
||||||
|
with:
|
||||||
|
context: .
|
||||||
|
file: ./build/images/openim-cmdutils/Dockerfile
|
||||||
|
platforms: linux/amd64,linux/arm64
|
||||||
|
push: ${{ github.event_name != 'pull_request' }}
|
||||||
|
tags: ${{ steps.meta2.outputs.tags }}
|
||||||
|
labels: ${{ steps.meta2.outputs.labels }}
|
||||||
|
cache-from: type=local,src=/tmp/.buildx-cache
|
||||||
|
cache-to: type=local,dest=/tmp/.buildx-cache
|
||||||
|
|
||||||
|
- name: Extract metadata (tags, labels) for Docker openim-crontask
|
||||||
|
id: meta3
|
||||||
|
uses: docker/metadata-action@v5.5.1
|
||||||
|
with:
|
||||||
|
images: |
|
||||||
|
ghcr.io/openimsdk/openim-crontask
|
||||||
|
openim/openim-crontask
|
||||||
|
registry.cn-hangzhou.aliyuncs.com/openimsdk/openim-crontask
|
||||||
|
tags: |
|
||||||
|
type=ref,event=tag
|
||||||
|
type=schedule
|
||||||
|
type=ref,event=branch
|
||||||
|
type=ref,event=pr
|
||||||
|
type=semver,pattern={{version}}
|
||||||
|
type=semver,pattern=v{{version}}
|
||||||
|
type=semver,pattern={{major}}.{{minor}}
|
||||||
|
type=semver,pattern={{major}}
|
||||||
|
type=sha
|
||||||
|
|
||||||
|
- name: Build and push Docker image for openim-crontask
|
||||||
|
uses: docker/build-push-action@v5
|
||||||
|
with:
|
||||||
|
context: .
|
||||||
|
file: ./build/images/openim-crontask/Dockerfile
|
||||||
|
platforms: linux/amd64,linux/arm64
|
||||||
|
push: ${{ github.event_name != 'pull_request' }}
|
||||||
|
tags: ${{ steps.meta3.outputs.tags }}
|
||||||
|
labels: ${{ steps.meta3.outputs.labels }}
|
||||||
|
cache-from: type=local,src=/tmp/.buildx-cache
|
||||||
|
cache-to: type=local,dest=/tmp/.buildx-cache
|
||||||
|
|
||||||
|
- name: Extract metadata (tags, labels) for Docker openim-msggateway
|
||||||
|
id: meta4
|
||||||
|
uses: docker/metadata-action@v5.5.1
|
||||||
|
with:
|
||||||
|
images: |
|
||||||
|
ghcr.io/openimsdk/openim-msggateway
|
||||||
|
openim/openim-msggateway
|
||||||
|
registry.cn-hangzhou.aliyuncs.com/openimsdk/openim-msggateway
|
||||||
|
tags: |
|
||||||
|
type=ref,event=tag
|
||||||
|
type=schedule
|
||||||
|
type=ref,event=branch
|
||||||
|
type=ref,event=pr
|
||||||
|
type=semver,pattern={{version}}
|
||||||
|
type=semver,pattern=v{{version}}
|
||||||
|
type=semver,pattern={{major}}.{{minor}}
|
||||||
|
type=semver,pattern={{major}}
|
||||||
|
type=sha
|
||||||
|
|
||||||
|
- name: Build and push Docker image for openim-msggateway
|
||||||
|
uses: docker/build-push-action@v5
|
||||||
|
with:
|
||||||
|
context: .
|
||||||
|
file: ./build/images/openim-msggateway/Dockerfile
|
||||||
|
platforms: linux/amd64,linux/arm64
|
||||||
|
push: ${{ github.event_name != 'pull_request' }}
|
||||||
|
tags: ${{ steps.meta4.outputs.tags }}
|
||||||
|
labels: ${{ steps.meta4.outputs.labels }}
|
||||||
|
cache-from: type=local,src=/tmp/.buildx-cache
|
||||||
|
cache-to: type=local,dest=/tmp/.buildx-cache
|
||||||
|
|
||||||
|
- name: Extract metadata (tags, labels) for Docker openim-msgtransfer
|
||||||
|
id: meta5
|
||||||
|
uses: docker/metadata-action@v5.5.1
|
||||||
|
with:
|
||||||
|
images: |
|
||||||
|
ghcr.io/openimsdk/openim-msgtransfer
|
||||||
|
openim/openim-msgtransfer
|
||||||
|
registry.cn-hangzhou.aliyuncs.com/openimsdk/openim-msgtransfer
|
||||||
|
tags: |
|
||||||
|
type=ref,event=tag
|
||||||
|
type=schedule
|
||||||
|
type=ref,event=branch
|
||||||
|
type=ref,event=pr
|
||||||
|
type=semver,pattern={{version}}
|
||||||
|
type=semver,pattern=v{{version}}
|
||||||
|
type=semver,pattern={{major}}.{{minor}}
|
||||||
|
type=semver,pattern={{major}}
|
||||||
|
type=sha
|
||||||
|
|
||||||
|
- name: Build and push Docker image for openim-msgtransfer
|
||||||
|
uses: docker/build-push-action@v5
|
||||||
|
with:
|
||||||
|
context: .
|
||||||
|
file: ./build/images/openim-msgtransfer/Dockerfile
|
||||||
|
platforms: linux/amd64,linux/arm64
|
||||||
|
push: ${{ github.event_name != 'pull_request' }}
|
||||||
|
tags: ${{ steps.meta5.outputs.tags }}
|
||||||
|
labels: ${{ steps.meta5.outputs.labels }}
|
||||||
|
cache-from: type=local,src=/tmp/.buildx-cache
|
||||||
|
cache-to: type=local,dest=/tmp/.buildx-cache
|
||||||
|
|
||||||
|
- name: Extract metadata (tags, labels) for Docker openim-push
|
||||||
|
id: meta6
|
||||||
|
uses: docker/metadata-action@v5.5.1
|
||||||
|
with:
|
||||||
|
images: |
|
||||||
|
ghcr.io/openimsdk/openim-push
|
||||||
|
openim/openim-push
|
||||||
|
registry.cn-hangzhou.aliyuncs.com/openimsdk/openim-push
|
||||||
|
tags: |
|
||||||
|
type=ref,event=tag
|
||||||
|
type=schedule
|
||||||
|
type=ref,event=branch
|
||||||
|
type=ref,event=pr
|
||||||
|
type=semver,pattern={{version}}
|
||||||
|
type=semver,pattern=v{{version}}
|
||||||
|
type=semver,pattern={{major}}.{{minor}}
|
||||||
|
type=semver,pattern={{major}}
|
||||||
|
type=sha
|
||||||
|
|
||||||
|
- name: Build and push Docker image for openim-push
|
||||||
|
uses: docker/build-push-action@v5
|
||||||
|
with:
|
||||||
|
context: .
|
||||||
|
file: ./build/images/openim-push/Dockerfile
|
||||||
|
platforms: linux/amd64,linux/arm64
|
||||||
|
push: ${{ github.event_name != 'pull_request' }}
|
||||||
|
tags: ${{ steps.meta6.outputs.tags }}
|
||||||
|
labels: ${{ steps.meta6.outputs.labels }}
|
||||||
|
cache-from: type=local,src=/tmp/.buildx-cache
|
||||||
|
cache-to: type=local,dest=/tmp/.buildx-cache
|
||||||
|
|
||||||
|
- name: Extract metadata (tags, labels) for Docker openim-rpc-auth
|
||||||
|
id: meta7
|
||||||
|
uses: docker/metadata-action@v5.5.1
|
||||||
|
with:
|
||||||
|
images: |
|
||||||
|
ghcr.io/openimsdk/openim-rpc-auth
|
||||||
|
openim/openim-rpc-auth
|
||||||
|
registry.cn-hangzhou.aliyuncs.com/openimsdk/openim-rpc-auth
|
||||||
|
tags: |
|
||||||
|
type=ref,event=tag
|
||||||
|
type=schedule
|
||||||
|
type=ref,event=branch
|
||||||
|
type=ref,event=pr
|
||||||
|
type=semver,pattern={{version}}
|
||||||
|
type=semver,pattern=v{{version}}
|
||||||
|
type=semver,pattern={{major}}.{{minor}}
|
||||||
|
type=semver,pattern={{major}}
|
||||||
|
type=sha
|
||||||
|
|
||||||
|
- name: Build and push Docker image for openim-rpc-auth
|
||||||
|
uses: docker/build-push-action@v5
|
||||||
|
with:
|
||||||
|
context: .
|
||||||
|
file: ./build/images/openim-rpc-auth/Dockerfile
|
||||||
|
platforms: linux/amd64,linux/arm64
|
||||||
|
push: ${{ github.event_name != 'pull_request' }}
|
||||||
|
tags: ${{ steps.meta7.outputs.tags }}
|
||||||
|
labels: ${{ steps.meta7.outputs.labels }}
|
||||||
|
cache-from: type=local,src=/tmp/.buildx-cache
|
||||||
|
cache-to: type=local,dest=/tmp/.buildx-cache
|
||||||
|
|
||||||
|
- name: Extract metadata (tags, labels) for Docker openim-rpc-conversation
|
||||||
|
id: meta8
|
||||||
|
uses: docker/metadata-action@v5.5.1
|
||||||
|
with:
|
||||||
|
images: |
|
||||||
|
ghcr.io/openimsdk/openim-rpc-conversation
|
||||||
|
openim/openim-rpc-conversation
|
||||||
|
registry.cn-hangzhou.aliyuncs.com/openimsdk/openim-rpc-conversation
|
||||||
|
tags: |
|
||||||
|
type=ref,event=tag
|
||||||
|
type=schedule
|
||||||
|
type=ref,event=branch
|
||||||
|
type=ref,event=pr
|
||||||
|
type=semver,pattern={{version}}
|
||||||
|
type=semver,pattern=v{{version}}
|
||||||
|
type=semver,pattern={{major}}.{{minor}}
|
||||||
|
type=semver,pattern={{major}}
|
||||||
|
type=sha
|
||||||
|
|
||||||
|
- name: Build and push Docker image for openim-rpc-conversation
|
||||||
|
uses: docker/build-push-action@v5
|
||||||
|
with:
|
||||||
|
context: .
|
||||||
|
file: ./build/images/openim-rpc-conversation/Dockerfile
|
||||||
|
platforms: linux/amd64,linux/arm64
|
||||||
|
push: ${{ github.event_name != 'pull_request' }}
|
||||||
|
tags: ${{ steps.meta8.outputs.tags }}
|
||||||
|
labels: ${{ steps.meta8.outputs.labels }}
|
||||||
|
cache-from: type=local,src=/tmp/.buildx-cache
|
||||||
|
cache-to: type=local,dest=/tmp/.buildx-cache
|
||||||
|
|
||||||
|
- name: Extract metadata (tags, labels) for Docker openim-rpc-friend
|
||||||
|
id: meta9
|
||||||
|
uses: docker/metadata-action@v5.5.1
|
||||||
|
with:
|
||||||
|
images: |
|
||||||
|
ghcr.io/openimsdk/openim-rpc-friend
|
||||||
|
openim/openim-rpc-friend
|
||||||
|
registry.cn-hangzhou.aliyuncs.com/openimsdk/openim-rpc-friend
|
||||||
|
tags: |
|
||||||
|
type=ref,event=tag
|
||||||
|
type=schedule
|
||||||
|
type=ref,event=branch
|
||||||
|
type=ref,event=pr
|
||||||
|
type=semver,pattern={{version}}
|
||||||
|
type=semver,pattern=v{{version}}
|
||||||
|
type=semver,pattern={{major}}.{{minor}}
|
||||||
|
type=semver,pattern={{major}}
|
||||||
|
type=sha
|
||||||
|
|
||||||
|
- name: Build and push Docker image for openim-rpc-friend
|
||||||
|
uses: docker/build-push-action@v5
|
||||||
|
with:
|
||||||
|
context: .
|
||||||
|
file: ./build/images/openim-rpc-friend/Dockerfile
|
||||||
|
platforms: linux/amd64,linux/arm64
|
||||||
|
push: ${{ github.event_name != 'pull_request' }}
|
||||||
|
tags: ${{ steps.meta9.outputs.tags }}
|
||||||
|
labels: ${{ steps.meta9.outputs.labels }}
|
||||||
|
cache-from: type=local,src=/tmp/.buildx-cache
|
||||||
|
cache-to: type=local,dest=/tmp/.buildx-cache
|
||||||
|
|
||||||
|
- name: Extract metadata (tags, labels) for Docker openim-rpc-group
|
||||||
|
id: meta10
|
||||||
|
uses: docker/metadata-action@v5.5.1
|
||||||
|
with:
|
||||||
|
images: |
|
||||||
|
ghcr.io/openimsdk/openim-rpc-group
|
||||||
|
openim/openim-rpc-group
|
||||||
|
registry.cn-hangzhou.aliyuncs.com/openimsdk/openim-rpc-group
|
||||||
|
tags: |
|
||||||
|
type=ref,event=tag
|
||||||
|
type=schedule
|
||||||
|
type=ref,event=branch
|
||||||
|
type=ref,event=pr
|
||||||
|
type=semver,pattern={{version}}
|
||||||
|
type=semver,pattern=v{{version}}
|
||||||
|
type=semver,pattern={{major}}.{{minor}}
|
||||||
|
type=semver,pattern={{major}}
|
||||||
|
type=sha
|
||||||
|
|
||||||
|
- name: Build and push Docker image for openim-rpc-group
|
||||||
|
uses: docker/build-push-action@v5
|
||||||
|
with:
|
||||||
|
context: .
|
||||||
|
file: ./build/images/openim-rpc-group/Dockerfile
|
||||||
|
platforms: linux/amd64,linux/arm64
|
||||||
|
push: ${{ github.event_name != 'pull_request' }}
|
||||||
|
tags: ${{ steps.meta10.outputs.tags }}
|
||||||
|
labels: ${{ steps.meta10.outputs.labels }}
|
||||||
|
cache-from: type=local,src=/tmp/.buildx-cache
|
||||||
|
cache-to: type=local,dest=/tmp/.buildx-cache
|
||||||
|
|
||||||
|
- name: Extract metadata (tags, labels) for Docker openim-rpc-msg
|
||||||
|
id: meta11
|
||||||
|
uses: docker/metadata-action@v5.5.1
|
||||||
|
with:
|
||||||
|
images: |
|
||||||
|
ghcr.io/openimsdk/openim-rpc-msg
|
||||||
|
openim/openim-rpc-msg
|
||||||
|
registry.cn-hangzhou.aliyuncs.com/openimsdk/openim-rpc-msg
|
||||||
|
tags: |
|
||||||
|
type=ref,event=tag
|
||||||
|
type=schedule
|
||||||
|
type=ref,event=branch
|
||||||
|
type=ref,event=pr
|
||||||
|
type=semver,pattern={{version}}
|
||||||
|
type=semver,pattern=v{{version}}
|
||||||
|
type=semver,pattern={{major}}.{{minor}}
|
||||||
|
type=semver,pattern={{major}}
|
||||||
|
type=sha
|
||||||
|
|
||||||
|
- name: Build and push Docker image for openim-rpc-msg
|
||||||
|
uses: docker/build-push-action@v5
|
||||||
|
with:
|
||||||
|
context: .
|
||||||
|
file: ./build/images/openim-rpc-msg/Dockerfile
|
||||||
|
platforms: linux/amd64,linux/arm64
|
||||||
|
push: ${{ github.event_name != 'pull_request' }}
|
||||||
|
tags: ${{ steps.meta11.outputs.tags }}
|
||||||
|
labels: ${{ steps.meta11.outputs.labels }}
|
||||||
|
cache-from: type=local,src=/tmp/.buildx-cache
|
||||||
|
cache-to: type=local,dest=/tmp/.buildx-cache
|
||||||
|
|
||||||
|
- name: Extract metadata (tags, labels) for Docker openim-rpc-third
|
||||||
|
id: meta12
|
||||||
|
uses: docker/metadata-action@v5.5.1
|
||||||
|
with:
|
||||||
|
images: |
|
||||||
|
ghcr.io/openimsdk/openim-rpc-third
|
||||||
|
openim/openim-rpc-third
|
||||||
|
registry.cn-hangzhou.aliyuncs.com/openimsdk/openim-rpc-third
|
||||||
|
tags: |
|
||||||
|
type=ref,event=tag
|
||||||
|
type=schedule
|
||||||
|
type=ref,event=branch
|
||||||
|
type=ref,event=pr
|
||||||
|
type=semver,pattern={{version}}
|
||||||
|
type=semver,pattern=v{{version}}
|
||||||
|
type=semver,pattern={{major}}.{{minor}}
|
||||||
|
type=semver,pattern={{major}}
|
||||||
|
type=sha
|
||||||
|
|
||||||
|
- name: Build and push Docker image for openim-rpc-third
|
||||||
|
uses: docker/build-push-action@v5
|
||||||
|
with:
|
||||||
|
context: .
|
||||||
|
file: ./build/images/openim-rpc-third/Dockerfile
|
||||||
|
platforms: linux/amd64,linux/arm64
|
||||||
|
push: ${{ github.event_name != 'pull_request' }}
|
||||||
|
tags: ${{ steps.meta12.outputs.tags }}
|
||||||
|
labels: ${{ steps.meta12.outputs.labels }}
|
||||||
|
cache-from: type=local,src=/tmp/.buildx-cache
|
||||||
|
cache-to: type=local,dest=/tmp/.buildx-cache
|
||||||
|
|
||||||
|
- name: Extract metadata (tags, labels) for Docker openim-rpc-user
|
||||||
|
id: meta13
|
||||||
|
uses: docker/metadata-action@v5.5.1
|
||||||
|
with:
|
||||||
|
images: |
|
||||||
|
ghcr.io/openimsdk/openim-rpc-user
|
||||||
|
openim/openim-rpc-user
|
||||||
|
registry.cn-hangzhou.aliyuncs.com/openimsdk/openim-rpc-user
|
||||||
|
tags: |
|
||||||
|
type=ref,event=tag
|
||||||
|
type=schedule
|
||||||
|
type=ref,event=branch
|
||||||
|
type=ref,event=pr
|
||||||
|
type=semver,pattern={{version}}
|
||||||
|
type=semver,pattern=v{{version}}
|
||||||
|
type=semver,pattern={{major}}.{{minor}}
|
||||||
|
type=semver,pattern={{major}}
|
||||||
|
type=sha
|
||||||
|
|
||||||
|
- name: Build and push Docker image for openim-rpc-user
|
||||||
|
uses: docker/build-push-action@v5
|
||||||
|
with:
|
||||||
|
context: .
|
||||||
|
file: ./build/images/openim-rpc-user/Dockerfile
|
||||||
|
platforms: linux/amd64,linux/arm64
|
||||||
|
push: ${{ github.event_name != 'pull_request' }}
|
||||||
|
tags: ${{ steps.meta13.outputs.tags }}
|
||||||
|
labels: ${{ steps.meta13.outputs.labels }}
|
||||||
|
cache-from: type=local,src=/tmp/.buildx-cache
|
||||||
|
cache-to: type=local,dest=/tmp/.buildx-cache
|
||||||
159
.github/workflows/e2e-test.bak
vendored
Normal file
159
.github/workflows/e2e-test.bak
vendored
Normal file
@ -0,0 +1,159 @@
|
|||||||
|
# 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 E2E And API Test
|
||||||
|
|
||||||
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
|
pull_request:
|
||||||
|
push:
|
||||||
|
schedule:
|
||||||
|
# run e2e test every 4 hours
|
||||||
|
- cron: 0 */4 * * *
|
||||||
|
|
||||||
|
env:
|
||||||
|
CALLBACK_ENABLE: true
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
name: Test
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
env:
|
||||||
|
GO111MODULE: on
|
||||||
|
steps:
|
||||||
|
|
||||||
|
- name: Set up Go 1.21
|
||||||
|
uses: actions/setup-go@v5
|
||||||
|
with:
|
||||||
|
go-version: 1.21
|
||||||
|
id: go
|
||||||
|
|
||||||
|
- name: Check out code into the Go module directory
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Create e2e test
|
||||||
|
run: |
|
||||||
|
echo "...test e2e"
|
||||||
|
|
||||||
|
execute-linux-systemd-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@v4
|
||||||
|
|
||||||
|
- name: Set up Go ${{ matrix.go_version }}
|
||||||
|
uses: actions/setup-go@v5
|
||||||
|
with:
|
||||||
|
go-version: ${{ matrix.go_version }}
|
||||||
|
id: go
|
||||||
|
|
||||||
|
- name: Install Task
|
||||||
|
uses: arduino/setup-task@v1
|
||||||
|
with:
|
||||||
|
version: '3.x' # If available, use the latest major version that's compatible
|
||||||
|
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|
||||||
|
- name: Docker Operations
|
||||||
|
run: |
|
||||||
|
sudo docker compose up -d
|
||||||
|
sudo bash bootstrap.sh
|
||||||
|
sudo mage
|
||||||
|
sudo sleep 20
|
||||||
|
|
||||||
|
- name: Module Operations
|
||||||
|
run: |
|
||||||
|
echo "===========> Verifying go-gitlint is installed"
|
||||||
|
if [ ! -f ./_output/tools/go-gitlint ]; then
|
||||||
|
export GOBIN=$(pwd)/_output/tools
|
||||||
|
echo "===========> Installing The default installation path is /home/ubuntu/DF/open-im-server/_output/tools/go-gitlint"
|
||||||
|
sudo go install github.com/marmotedu/go-gitlint/cmd/go-gitlint@latest
|
||||||
|
echo "===========> go-gitlint is installed in /home/ubuntu/DF/open-im-server/_output/tools/go-gitlint"
|
||||||
|
fi
|
||||||
|
|
||||||
|
- name: Build, Start(make build && make start)
|
||||||
|
run: |
|
||||||
|
sudo ./scripts/install/install.sh -i
|
||||||
|
|
||||||
|
- name: Exec OpenIM System Status Chack
|
||||||
|
run: |
|
||||||
|
sudo ./scripts/install/install.sh -s
|
||||||
|
|
||||||
|
# - name: Exec OpenIM API test (make test-api)
|
||||||
|
- name: Exec OpenIM test (make test)
|
||||||
|
run: |
|
||||||
|
mkdir -p ./tmp
|
||||||
|
touch ./tmp/test.md
|
||||||
|
echo "# OpenIM Test" >> ./tmp/test.md
|
||||||
|
echo "## OpenIM API Test" >> ./tmp/test.md
|
||||||
|
echo "<details><summary>Command Output for OpenIM API Test</summary>" >> ./tmp/test.md
|
||||||
|
echo "<pre><code>" >> ./tmp/test.md
|
||||||
|
echo "===========> Run api test"
|
||||||
|
./scripts/install/test.sh
|
||||||
|
echo "===========> Run api test" >> ./tmp/test.md
|
||||||
|
./scripts/install/test.sh >> ./tmp/test.md
|
||||||
|
echo "</code></pre>" >> ./tmp/test.md
|
||||||
|
echo "</details>" >> ./tmp/test.md
|
||||||
|
|
||||||
|
echo "===========> Run api test"
|
||||||
|
./scripts/install/test.sh
|
||||||
|
|
||||||
|
# - name: Exec OpenIM E2E Test (make test-e2e)
|
||||||
|
# run: |
|
||||||
|
# echo "" >> ./tmp/test.md
|
||||||
|
# echo "## OpenIM E2E Test" >> ./tmp/test.md
|
||||||
|
# echo "<details><summary>Command Output for OpenIM E2E Test</summary>" >> ./tmp/test.md
|
||||||
|
# echo "<pre><code>" >> ./tmp/test.md
|
||||||
|
# sudo make test-e2e | tee -a ./tmp/test.md
|
||||||
|
# echo "</code></pre>" >> ./tmp/test.md
|
||||||
|
# echo "</details>" >> ./tmp/test.md
|
||||||
|
|
||||||
|
# sudo make test-e2e
|
||||||
|
|
||||||
|
- name: Comment PR with file
|
||||||
|
uses: thollander/actions-comment-pull-request@v2
|
||||||
|
with:
|
||||||
|
filePath: ./tmp/test.md
|
||||||
|
comment_tag: nrt_file
|
||||||
|
reactions: eyes, rocket
|
||||||
|
mode: recreate
|
||||||
|
GITHUB_TOKEN: ${{ secrets.BOT_GITHUB_TOKEN }}
|
||||||
|
continue-on-error: true
|
||||||
|
|
||||||
|
- name: Check outputs
|
||||||
|
run: |
|
||||||
|
echo "id : ${{ steps.nrt_message.outputs.id }}"
|
||||||
|
echo "body : ${{ steps.nrt_message.outputs.body }}"
|
||||||
|
echo "html_url : ${{ steps.nrt_message.outputs.html_url }}"
|
||||||
|
|
||||||
|
- name: Exec OpenIM System uninstall
|
||||||
|
run: |
|
||||||
|
sudo ./scripts/install/install.sh -u
|
||||||
|
|
||||||
|
- name: gobenchdata publish
|
||||||
|
uses: bobheadxi/gobenchdata@v1
|
||||||
|
with:
|
||||||
|
PRUNE_COUNT: 30
|
||||||
|
GO_TEST_FLAGS: -cpu 1,2
|
||||||
|
PUBLISH: true
|
||||||
|
PUBLISH_BRANCH: gh-pages
|
||||||
|
env:
|
||||||
|
GITHUB_TOKEN: ${{ secrets.BOT_GITHUB_TOKEN }}
|
||||||
|
continue-on-error: true
|
||||||
273
.github/workflows/go-build-test.yml
vendored
273
.github/workflows/go-build-test.yml
vendored
@ -1,273 +0,0 @@
|
|||||||
name: Go Build Test
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
pull_request:
|
|
||||||
paths-ignore:
|
|
||||||
- "**/*.md"
|
|
||||||
|
|
||||||
workflow_dispatch:
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
go-build:
|
|
||||||
name: Test with go ${{ matrix.go_version }} on ${{ matrix.os }}
|
|
||||||
runs-on: ${{ matrix.os }}
|
|
||||||
|
|
||||||
env:
|
|
||||||
SHARE_CONFIG_PATH: config/share.yml
|
|
||||||
|
|
||||||
permissions:
|
|
||||||
contents: write
|
|
||||||
pull-requests: write
|
|
||||||
strategy:
|
|
||||||
matrix:
|
|
||||||
os: [ubuntu-latest]
|
|
||||||
go_version: ["1.22.x"]
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: Checkout Server repository
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
|
|
||||||
- name: Set up Go ${{ matrix.go_version }}
|
|
||||||
uses: actions/setup-go@v5
|
|
||||||
with:
|
|
||||||
go-version: ${{ matrix.go_version }}
|
|
||||||
|
|
||||||
- name: Get Server dependencies
|
|
||||||
run: |
|
|
||||||
go install github.com/magefile/mage@latest
|
|
||||||
go mod tidy
|
|
||||||
go mod download
|
|
||||||
|
|
||||||
- name: Set up infra services
|
|
||||||
uses: hoverkraft-tech/compose-action@v2.0.1
|
|
||||||
with:
|
|
||||||
compose-file: "./docker-compose.yml"
|
|
||||||
|
|
||||||
- name: Modify Server Configuration
|
|
||||||
run: |
|
|
||||||
yq e '.secret = 123456' -i ${{ env.SHARE_CONFIG_PATH }}
|
|
||||||
|
|
||||||
# - name: Get Internal IP Address
|
|
||||||
# id: get-ip
|
|
||||||
# run: |
|
|
||||||
# IP=$(hostname -I | awk '{print $1}')
|
|
||||||
# echo "The IP Address is: $IP"
|
|
||||||
# echo "::set-output name=ip::$IP"
|
|
||||||
|
|
||||||
# - name: Update .env
|
|
||||||
# run: |
|
|
||||||
# sed -i 's|externalAddress:.*|externalAddress: "http://${{ steps.get-ip.outputs.ip }}:10005"|' config/minio.yml
|
|
||||||
# cat config/minio.yml
|
|
||||||
|
|
||||||
- name: Build and test Server Services
|
|
||||||
run: |
|
|
||||||
mage build
|
|
||||||
mage start
|
|
||||||
mage check
|
|
||||||
|
|
||||||
- name: Checkout Chat repository
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
repository: "openimsdk/chat"
|
|
||||||
path: "chat-repo"
|
|
||||||
|
|
||||||
- name: Get Chat dependencies
|
|
||||||
run: |
|
|
||||||
cd ${{ github.workspace }}/chat-repo
|
|
||||||
go mod tidy
|
|
||||||
go mod download
|
|
||||||
go install github.com/magefile/mage@latest
|
|
||||||
|
|
||||||
- name: Modify Chat Configuration
|
|
||||||
run: |
|
|
||||||
cd ${{ github.workspace }}/chat-repo
|
|
||||||
yq e '.openIM.secret = 123456' -i ${{ env.SHARE_CONFIG_PATH }}
|
|
||||||
|
|
||||||
- name: Build and test Chat Services
|
|
||||||
run: |
|
|
||||||
cd ${{ github.workspace }}/chat-repo
|
|
||||||
mage build
|
|
||||||
mage start
|
|
||||||
mage check
|
|
||||||
|
|
||||||
- name: Test Server and Chat
|
|
||||||
run: |
|
|
||||||
check_error() {
|
|
||||||
echo "Response: $1"
|
|
||||||
errCode=$(echo $1 | jq -r '.errCode')
|
|
||||||
if [ "$errCode" != "0" ]; then
|
|
||||||
errMsg=$(echo $1 | jq -r '.errMsg')
|
|
||||||
echo "Error: $errMsg"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
# Test register
|
|
||||||
response1=$(curl -X POST -H "Content-Type: application/json" -H "operationID: imAdmin" -d '{
|
|
||||||
"verifyCode": "666666",
|
|
||||||
"platform": 3,
|
|
||||||
"autoLogin": true,
|
|
||||||
"user":{
|
|
||||||
"nickname": "test12312",
|
|
||||||
"areaCode":"+86",
|
|
||||||
"phoneNumber": "12345678190",
|
|
||||||
"password":"test123456"
|
|
||||||
}
|
|
||||||
}' http://127.0.0.1:10008/account/register)
|
|
||||||
check_error "$response1"
|
|
||||||
userID1=$(echo $response1 | jq -r '.data.userID')
|
|
||||||
echo "userID1: $userID1"
|
|
||||||
|
|
||||||
response2=$(curl -X POST -H "Content-Type: application/json" -H "operationID: imAdmin" -d '{
|
|
||||||
"verifyCode": "666666",
|
|
||||||
"platform": 3,
|
|
||||||
"autoLogin": true,
|
|
||||||
"user":{
|
|
||||||
"nickname": "test22312",
|
|
||||||
"areaCode":"+86",
|
|
||||||
"phoneNumber": "12345678290",
|
|
||||||
"password":"test123456"
|
|
||||||
}
|
|
||||||
}' http://127.0.0.1:10008/account/register)
|
|
||||||
check_error "$response2"
|
|
||||||
userID2=$(echo $response2 | jq -r '.data.userID')
|
|
||||||
echo "userID2: $userID2"
|
|
||||||
|
|
||||||
# Test login
|
|
||||||
login_response=$(curl -X POST -H "Content-Type: application/json" -H "operationID: imAdmin" -d '{
|
|
||||||
"platform": 3,
|
|
||||||
"areaCode":"+86",
|
|
||||||
"phoneNumber": "12345678190",
|
|
||||||
"password":"test123456"
|
|
||||||
}' http://localhost:10008/account/login)
|
|
||||||
check_error "$login_response"
|
|
||||||
|
|
||||||
# Test get admin token
|
|
||||||
get_admin_token_response=$(curl -X POST -H "Content-Type: application/json" -H "operationID: imAdmin" -d '{
|
|
||||||
"secret": "123456",
|
|
||||||
"platformID": 2,
|
|
||||||
"userID": "imAdmin"
|
|
||||||
}' http://127.0.0.1:10002/auth/get_admin_token)
|
|
||||||
check_error "$get_admin_token_response"
|
|
||||||
adminToken=$(echo $get_admin_token_response | jq -r '.data.token')
|
|
||||||
echo "adminToken: $adminToken"
|
|
||||||
|
|
||||||
# Test send message
|
|
||||||
send_msg_response=$(curl -X POST -H "Content-Type: application/json" -H "operationID: imAdmin" -H "token: $adminToken" -d '{
|
|
||||||
"sendID": "'$userID1'",
|
|
||||||
"recvID": "'$userID2'",
|
|
||||||
"senderPlatformID": 3,
|
|
||||||
"content": {
|
|
||||||
"content": "hello!!"
|
|
||||||
},
|
|
||||||
"contentType": 101,
|
|
||||||
"sessionType": 1
|
|
||||||
}' http://127.0.0.1:10002/msg/send_msg)
|
|
||||||
check_error "$send_msg_response"
|
|
||||||
|
|
||||||
# Test get users
|
|
||||||
get_users_response=$(curl -X POST -H "Content-Type: application/json" -H "operationID: imAdmin" -H "token: $adminToken" -d '{
|
|
||||||
"pagination": {
|
|
||||||
"pageNumber": 1,
|
|
||||||
"showNumber": 100
|
|
||||||
}
|
|
||||||
}' http://127.0.0.1:10002/user/get_users)
|
|
||||||
check_error "$get_users_response"
|
|
||||||
|
|
||||||
go-test:
|
|
||||||
name: Benchmark Test with go ${{ matrix.go_version }} on ${{ matrix.os }}
|
|
||||||
runs-on: ${{ matrix.os }}
|
|
||||||
permissions:
|
|
||||||
contents: write
|
|
||||||
env:
|
|
||||||
SDK_DIR: openim-sdk-core
|
|
||||||
NOTIFICATION_CONFIG_PATH: config/notification.yml
|
|
||||||
SHARE_CONFIG_PATH: config/share.yml
|
|
||||||
|
|
||||||
strategy:
|
|
||||||
matrix:
|
|
||||||
os: [ubuntu-latest]
|
|
||||||
go_version: ["1.22.x"]
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: Checkout Server repository
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
|
|
||||||
- name: Checkout SDK repository
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
repository: "openimsdk/openim-sdk-core"
|
|
||||||
ref: "main"
|
|
||||||
path: ${{ env.SDK_DIR }}
|
|
||||||
|
|
||||||
- name: Set up Go ${{ matrix.go_version }}
|
|
||||||
uses: actions/setup-go@v5
|
|
||||||
with:
|
|
||||||
go-version: ${{ matrix.go_version }}
|
|
||||||
|
|
||||||
- name: Get Server dependencies
|
|
||||||
run: |
|
|
||||||
go install github.com/magefile/mage@latest
|
|
||||||
go mod download
|
|
||||||
|
|
||||||
- name: Modify Server Configuration
|
|
||||||
run: |
|
|
||||||
yq e '.groupCreated.isSendMsg = true' -i ${{ env.NOTIFICATION_CONFIG_PATH }}
|
|
||||||
yq e '.friendApplicationApproved.isSendMsg = true' -i ${{ env.NOTIFICATION_CONFIG_PATH }}
|
|
||||||
yq e '.secret = 123456' -i ${{ env.SHARE_CONFIG_PATH }}
|
|
||||||
|
|
||||||
- name: Start Server Services
|
|
||||||
run: |
|
|
||||||
docker compose up -d
|
|
||||||
mage build
|
|
||||||
mage start
|
|
||||||
mage check
|
|
||||||
|
|
||||||
- name: Build test SDK core
|
|
||||||
run: |
|
|
||||||
cd ${{ env.SDK_DIR }}
|
|
||||||
go mod tidy
|
|
||||||
cd integration_test
|
|
||||||
mkdir data
|
|
||||||
go run main.go -lgr 0.8 -imf -crg -ckgn -ckcon -sem -ckmsn -u 20 -su 5 -lg 2 -cg 2 -cgm 3 -sm 10 -gm 10 -reg
|
|
||||||
|
|
||||||
dockerfile-test:
|
|
||||||
name: Build and Test Dockerfile
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
strategy:
|
|
||||||
matrix:
|
|
||||||
go_version: ["1.22"]
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: Checkout Repository
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
|
|
||||||
- name: Set up Go ${{ matrix.go_version }}
|
|
||||||
uses: actions/setup-go@v5
|
|
||||||
with:
|
|
||||||
go-version: ${{ matrix.go_version }}
|
|
||||||
|
|
||||||
- name: Get dependencies
|
|
||||||
run: |
|
|
||||||
go mod tidy
|
|
||||||
go mod download
|
|
||||||
go install github.com/magefile/mage@latest
|
|
||||||
|
|
||||||
- name: Build Docker Image
|
|
||||||
run: |
|
|
||||||
IMAGE_NAME="${{ github.event.repository.name }}-test"
|
|
||||||
CONTAINER_NAME="${{ github.event.repository.name }}-container"
|
|
||||||
docker build -t $IMAGE_NAME .
|
|
||||||
|
|
||||||
- name: Run Docker Container
|
|
||||||
run: |
|
|
||||||
IMAGE_NAME="${{ github.event.repository.name }}-test"
|
|
||||||
CONTAINER_NAME="${{ github.event.repository.name }}-container"
|
|
||||||
docker run --name $CONTAINER_NAME -d $IMAGE_NAME
|
|
||||||
docker ps -a
|
|
||||||
|
|
||||||
- name: Test Docker Container Logs
|
|
||||||
run: |
|
|
||||||
CONTAINER_NAME="${{ github.event.repository.name }}-container"
|
|
||||||
docker logs $CONTAINER_NAME
|
|
||||||
58
.github/workflows/golangci-lint.bak
vendored
Normal file
58
.github/workflows/golangci-lint.bak
vendored
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
# Copyright © 2023 OpenIM open source community. 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 golangci-lint
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches: [main]
|
||||||
|
pull_request:
|
||||||
|
jobs:
|
||||||
|
golangci:
|
||||||
|
name: lint
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
- uses: actions/setup-go@v5
|
||||||
|
with:
|
||||||
|
go-version: '1.21'
|
||||||
|
cache: false
|
||||||
|
- name: OpenIM Scripts Verification(make verify)
|
||||||
|
run: |
|
||||||
|
cd scripts
|
||||||
|
for script in verify-*; do
|
||||||
|
if [ -x "$script" ]; then
|
||||||
|
./"$script"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
- name: golangci-lint
|
||||||
|
uses: golangci/golangci-lint-action@v4.0.0
|
||||||
|
with:
|
||||||
|
# Require: version of golangci-lint to use in form of v1.2 or v1.2.3 or `latest` to use the latest version
|
||||||
|
version: v1.54
|
||||||
|
|
||||||
|
# Optional: working directory, useful for monorepos
|
||||||
|
# working-directory: server
|
||||||
|
|
||||||
|
# Optional: golangci-lint command line arguments.
|
||||||
|
#
|
||||||
|
# Note: by default the `.golangci.yml` file should be at the root of the repository.
|
||||||
|
# The location of the configuration file can be changed by using `--config=`
|
||||||
|
# args: --timeout=30m --config=/scripts/.golangci.yml --issues-exit-code=0
|
||||||
|
|
||||||
|
# Optional: show only new issues if it's a pull request. The default value is `false`.
|
||||||
|
only-new-issues: true
|
||||||
|
|
||||||
|
# Optional:The mode to install golangci-lint. It can be 'binary' or 'goinstall'.
|
||||||
|
# install-mode: "goinstall"
|
||||||
45
.github/workflows/gosec.yml
vendored
Normal file
45
.github/workflows/gosec.yml
vendored
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
# 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 Run Gosec
|
||||||
|
|
||||||
|
# gosec is a source code security audit tool for the Go language. It performs a static
|
||||||
|
# analysis of the Go code, looking for potential security problems. The main functions of gosec are:
|
||||||
|
# 1. Find common security vulnerabilities, such as SQL injection, command injection, and cross-site scripting (XSS).
|
||||||
|
# 2. Audit codes according to common security standards and find non-standard codes.
|
||||||
|
# 3. Assist the Go language engineer to write safe and reliable code.
|
||||||
|
# https://github.com/securego/gosec/
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches: "*"
|
||||||
|
pull_request:
|
||||||
|
branches: "*"
|
||||||
|
paths-ignore:
|
||||||
|
- '*.md'
|
||||||
|
- '*.yml'
|
||||||
|
- '.github'
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
golang-security-action:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
env:
|
||||||
|
GO111MODULE: on
|
||||||
|
steps:
|
||||||
|
- name: Check out code
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
- name: Run Gosec Security Scanner
|
||||||
|
uses: securego/gosec@master
|
||||||
|
with:
|
||||||
|
args: ./...
|
||||||
|
continue-on-error: true
|
||||||
@ -1,4 +1,18 @@
|
|||||||
name: User First Interaction
|
# 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 First Interaction
|
||||||
|
|
||||||
on:
|
on:
|
||||||
issues:
|
issues:
|
||||||
@ -14,7 +28,7 @@ jobs:
|
|||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
- uses: actions/first-interaction@v1.3.0
|
- uses: actions/first-interaction@v1.3.0
|
||||||
with:
|
with:
|
||||||
repo-token: ${{ secrets.BOT_TOKEN }}
|
repo-token: ${{ secrets.BOT_GITHUB_TOKEN }}
|
||||||
pr-message: |
|
pr-message: |
|
||||||
Hello! Thank you for your contribution.
|
Hello! Thank you for your contribution.
|
||||||
|
|
||||||
@ -22,7 +36,7 @@ jobs:
|
|||||||
|
|
||||||
If you are implementing a feature request, please check with the maintainers that the feature will be accepted first.
|
If you are implementing a feature request, please check with the maintainers that the feature will be accepted first.
|
||||||
|
|
||||||
[Join slack 🤖](https://join.slack.com/t/openimsdk/shared_invite/zt-2ijy1ys1f-O0aEDCr7ExRZ7mwsHAVg9A) to connect and communicate with our developers.
|
[Join slack 🤖](https://join.slack.com/t/openimsdk/shared_invite/zt-22720d66b-o_FvKxMTGXtcnnnHiMqe9Q) to connect and communicate with our developers.
|
||||||
|
|
||||||
Please leave your information in the [✨ discussions](https://github.com/orgs/OpenIMSDK/discussions/426), we expect anyone to join OpenIM developer community.
|
Please leave your information in the [✨ discussions](https://github.com/orgs/OpenIMSDK/discussions/426), we expect anyone to join OpenIM developer community.
|
||||||
|
|
||||||
@ -31,5 +45,5 @@ jobs:
|
|||||||
|
|
||||||
If this is a bug report, please include relevant logs to help us debug the problem.
|
If this is a bug report, please include relevant logs to help us debug the problem.
|
||||||
|
|
||||||
[Join slack 🤖](https://join.slack.com/t/openimsdk/shared_invite/zt-2ijy1ys1f-O0aEDCr7ExRZ7mwsHAVg9A) to connect and communicate with our developers.
|
[Join slack 🤖](https://join.slack.com/t/openimsdk/shared_invite/zt-22720d66b-o_FvKxMTGXtcnnnHiMqe9Q) to connect and communicate with our developers.
|
||||||
continue-on-error: true
|
continue-on-error: true
|
||||||
4
.github/workflows/help-comment-issue.yml
vendored
4
.github/workflows/help-comment-issue.yml
vendored
@ -29,8 +29,8 @@ jobs:
|
|||||||
uses: peter-evans/create-or-update-comment@v4
|
uses: peter-evans/create-or-update-comment@v4
|
||||||
with:
|
with:
|
||||||
issue-number: ${{ github.event.issue.number }}
|
issue-number: ${{ github.event.issue.number }}
|
||||||
token: ${{ secrets.BOT_TOKEN }}
|
token: ${{ secrets.BOT_GITHUB_TOKEN }}
|
||||||
body: |
|
body: |
|
||||||
This issue is available for anyone to work on. **Make sure to reference this issue in your pull request.** :sparkles: Thank you for your contribution! :sparkles:
|
This issue is available for anyone to work on. **Make sure to reference this issue in your pull request.** :sparkles: Thank you for your contribution! :sparkles:
|
||||||
[Join slack 🤖](https://join.slack.com/t/openimsdk/shared_invite/zt-2ijy1ys1f-O0aEDCr7ExRZ7mwsHAVg9A) to connect and communicate with our developers.
|
[Join slack 🤖](https://join.slack.com/t/openimsdk/shared_invite/zt-22720d66b-o_FvKxMTGXtcnnnHiMqe9Q) to connect and communicate with our developers.
|
||||||
If you wish to accept this assignment, please leave a comment in the comments section: `/accept`.🎯
|
If you wish to accept this assignment, please leave a comment in the comments section: `/accept`.🎯
|
||||||
|
|||||||
31
.github/workflows/issue-robot.yml
vendored
Normal file
31
.github/workflows/issue-robot.yml
vendored
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
# Copyright © 2023 OpenIM open source community. 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 Issue Aotu Translator
|
||||||
|
on:
|
||||||
|
issue_comment:
|
||||||
|
types: [created]
|
||||||
|
issues:
|
||||||
|
types: [opened]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: usthe/issues-translate-action@v2.7
|
||||||
|
with:
|
||||||
|
# it is not necessary to decide whether you need to modify the issue header content
|
||||||
|
IS_MODIFY_TITLE: true
|
||||||
|
BOT_GITHUB_TOKEN: ${{ secrets.BOT_GITHUB_TOKEN }}
|
||||||
|
# Required, input your bot github token
|
||||||
19
.github/workflows/issue-translator.yml
vendored
19
.github/workflows/issue-translator.yml
vendored
@ -1,19 +0,0 @@
|
|||||||
name: 'issue-translator'
|
|
||||||
on:
|
|
||||||
issue_comment:
|
|
||||||
types: [created]
|
|
||||||
issues:
|
|
||||||
types: [opened]
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
build:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: usthe/issues-translate-action@v2.7
|
|
||||||
with:
|
|
||||||
BOT_GITHUB_TOKEN: ${{ secrets.BOT_TOKEN }}
|
|
||||||
IS_MODIFY_TITLE: true
|
|
||||||
# not require, default false, . Decide whether to modify the issue title
|
|
||||||
# if true, the robot account @Issues-translate-bot must have modification permissions, invite @Issues-translate-bot to your project or use your custom bot.
|
|
||||||
CUSTOM_BOT_NOTE: Bot detected the issue body's language is not English, translate it automatically. 👯👭🏻🧑🤝🧑👫🧑🏿🤝🧑🏻👩🏾🤝👨🏿👬🏿
|
|
||||||
# not require. Customize the translation robot prefix message.
|
|
||||||
65
.github/workflows/lock-issue.bak
vendored
Normal file
65
.github/workflows/lock-issue.bak
vendored
Normal file
@ -0,0 +1,65 @@
|
|||||||
|
# Copyright © 2023 OpenIM open source community. 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: 'Lock Threads'
|
||||||
|
|
||||||
|
on:
|
||||||
|
schedule:
|
||||||
|
- cron: '0 * * * *'
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
issues: write
|
||||||
|
pull-requests: write
|
||||||
|
|
||||||
|
concurrency:
|
||||||
|
group: lock
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
action:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: dessant/lock-threads@v5
|
||||||
|
with:
|
||||||
|
github-token: ${{ secrets.BOT_GITHUB_TOKEN }}
|
||||||
|
issue-inactive-days: '365'
|
||||||
|
exclude-issue-created-before: ''
|
||||||
|
exclude-issue-created-after: ''
|
||||||
|
exclude-issue-created-between: ''
|
||||||
|
exclude-issue-closed-before: ''
|
||||||
|
exclude-issue-closed-after: ''
|
||||||
|
exclude-issue-closed-between: ''
|
||||||
|
include-any-issue-labels: ''
|
||||||
|
include-all-issue-labels: ''
|
||||||
|
exclude-any-issue-labels: ''
|
||||||
|
add-issue-labels: ''
|
||||||
|
remove-issue-labels: ''
|
||||||
|
issue-comment: ''
|
||||||
|
issue-lock-reason: 'resolved'
|
||||||
|
pr-inactive-days: '365'
|
||||||
|
exclude-pr-created-before: ''
|
||||||
|
exclude-pr-created-after: ''
|
||||||
|
exclude-pr-created-between: ''
|
||||||
|
exclude-pr-closed-before: ''
|
||||||
|
exclude-pr-closed-after: ''
|
||||||
|
exclude-pr-closed-between: ''
|
||||||
|
include-any-pr-labels: ''
|
||||||
|
include-all-pr-labels: ''
|
||||||
|
exclude-any-pr-labels: ''
|
||||||
|
add-pr-labels: ''
|
||||||
|
remove-pr-labels: ''
|
||||||
|
pr-comment: ''
|
||||||
|
pr-lock-reason: 'resolved'
|
||||||
|
process-only: ''
|
||||||
|
log-output: false
|
||||||
181
.github/workflows/merge-from-milestone.yml
vendored
181
.github/workflows/merge-from-milestone.yml
vendored
@ -1,181 +0,0 @@
|
|||||||
name: Create Individual PRs from Milestone
|
|
||||||
|
|
||||||
permissions:
|
|
||||||
contents: write
|
|
||||||
pull-requests: write
|
|
||||||
issues: write
|
|
||||||
|
|
||||||
on:
|
|
||||||
workflow_dispatch:
|
|
||||||
inputs:
|
|
||||||
milestone_name:
|
|
||||||
description: "Milestone name to collect closed PRs from"
|
|
||||||
required: true
|
|
||||||
default: "v3.8.4"
|
|
||||||
target_branch:
|
|
||||||
description: "Target branch to merge the consolidated PR"
|
|
||||||
required: true
|
|
||||||
default: "pre-release-v3.8.4"
|
|
||||||
|
|
||||||
env:
|
|
||||||
MILESTONE_NAME: ${{ github.event.inputs.milestone_name || 'v3.8.4' }}
|
|
||||||
TARGET_BRANCH: ${{ github.event.inputs.target_branch || 'pre-release-v3.8.4' }}
|
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
BOT_TOKEN: ${{ secrets.BOT_TOKEN }}
|
|
||||||
LABEL_NAME: cherry-picked
|
|
||||||
TEMP_DIR: /tmp
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
merge_milestone_prs:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- name: Setup temp directory
|
|
||||||
run: |
|
|
||||||
# Create the temporary directory and initialize necessary files
|
|
||||||
mkdir -p ${{ env.TEMP_DIR }}
|
|
||||||
touch ${{ env.TEMP_DIR }}/pr_numbers.txt
|
|
||||||
touch ${{ env.TEMP_DIR }}/commit_hashes.txt
|
|
||||||
touch ${{ env.TEMP_DIR }}/pr_title.txt
|
|
||||||
touch ${{ env.TEMP_DIR }}/pr_body.txt
|
|
||||||
touch ${{ env.TEMP_DIR }}/created_pr_number.txt
|
|
||||||
|
|
||||||
- name: Checkout repository
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
fetch-depth: 0
|
|
||||||
token: ${{ secrets.BOT_TOKEN }}
|
|
||||||
|
|
||||||
- name: Setup Git User for OpenIM-Robot
|
|
||||||
run: |
|
|
||||||
git config --global user.email "OpenIM-Robot@users.noreply.github.com"
|
|
||||||
git config --global user.name "OpenIM-Robot"
|
|
||||||
|
|
||||||
- name: Fetch Milestone ID and Filter PR Numbers
|
|
||||||
env:
|
|
||||||
MILESTONE_NAME: ${{ env.MILESTONE_NAME }}
|
|
||||||
run: |
|
|
||||||
# Fetch milestone details and extract milestone ID
|
|
||||||
milestones=$(curl -s -H "Authorization: token $BOT_TOKEN" \
|
|
||||||
-H "Accept: application/vnd.github+json" \
|
|
||||||
"https://api.github.com/repos/${{ github.repository }}/milestones")
|
|
||||||
milestone_id=$(echo "$milestones" | grep -B3 "\"title\": \"$MILESTONE_NAME\"" | grep '"number":' | head -n1 | grep -o '[0-9]\+')
|
|
||||||
if [ -z "$milestone_id" ]; then
|
|
||||||
echo "Milestone '$MILESTONE_NAME' not found. Exiting."
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
echo "Milestone ID: $milestone_id"
|
|
||||||
echo "MILESTONE_ID=$milestone_id" >> $GITHUB_ENV
|
|
||||||
|
|
||||||
# Fetch issues for the milestone
|
|
||||||
issues=$(curl -s -H "Authorization: token $BOT_TOKEN" \
|
|
||||||
-H "Accept: application/vnd.github+json" \
|
|
||||||
"https://api.github.com/repos/${{ github.repository }}/issues?milestone=$milestone_id&state=closed&per_page=100")
|
|
||||||
|
|
||||||
> ${{ env.TEMP_DIR }}/pr_numbers.txt
|
|
||||||
|
|
||||||
# Filter PRs that do not have the 'cherry-picked' label
|
|
||||||
for pr_number in $(echo "$issues" | jq -r '.[] | select(.pull_request != null) | .number'); do
|
|
||||||
labels=$(curl -s -H "Authorization: token $BOT_TOKEN" \
|
|
||||||
-H "Accept: application/vnd.github+json" \
|
|
||||||
"https://api.github.com/repos/${{ github.repository }}/issues/$pr_number/labels" | jq -r '.[].name')
|
|
||||||
|
|
||||||
if ! echo "$labels" | grep -q "${LABEL_NAME}"; then
|
|
||||||
echo "PR #$pr_number does not have the 'cherry-picked' label. Adding to the list."
|
|
||||||
echo "$pr_number" >> ${{ env.TEMP_DIR }}/pr_numbers.txt
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
sort -n ${{ env.TEMP_DIR }}/pr_numbers.txt -o ${{ env.TEMP_DIR }}/pr_numbers.txt
|
|
||||||
|
|
||||||
- name: Create Individual PRs
|
|
||||||
run: |
|
|
||||||
for pr_number in $(cat ${{ env.TEMP_DIR }}/pr_numbers.txt); do
|
|
||||||
pr_details=$(curl -s -H "Authorization: token $BOT_TOKEN" \
|
|
||||||
-H "Accept: application/vnd.github+json" \
|
|
||||||
"https://api.github.com/repos/${{ github.repository }}/pulls/$pr_number")
|
|
||||||
pr_title=$(echo "$pr_details" | jq -r '.title')
|
|
||||||
pr_body=$(echo "$pr_details" | jq -r '.body')
|
|
||||||
pr_creator=$(echo "$pr_details" | jq -r '.user.login')
|
|
||||||
merge_commit=$(echo "$pr_details" | jq -r '.merge_commit_sha')
|
|
||||||
short_commit_hash=$(echo "$merge_commit" | cut -c 1-7)
|
|
||||||
|
|
||||||
if [ "$merge_commit" != "null" ]; then
|
|
||||||
git fetch origin
|
|
||||||
|
|
||||||
echo "Checking out target branch: $TARGET_BRANCH"
|
|
||||||
git checkout $TARGET_BRANCH
|
|
||||||
|
|
||||||
echo "Pulling latest changes from target branch: $TARGET_BRANCH"
|
|
||||||
git pull origin $TARGET_BRANCH
|
|
||||||
|
|
||||||
cherry_pick_branch="cherry-pick-${short_commit_hash}"
|
|
||||||
git checkout -b $cherry_pick_branch
|
|
||||||
|
|
||||||
echo "Cherry-picking commit: $merge_commit"
|
|
||||||
if ! git cherry-pick "$merge_commit" --strategy=recursive -X theirs; then
|
|
||||||
echo "Conflict detected for $merge_commit. Resolving with incoming changes."
|
|
||||||
conflict_files=$(git diff --name-only --diff-filter=U)
|
|
||||||
echo "Conflicting files:"
|
|
||||||
echo "$conflict_files"
|
|
||||||
|
|
||||||
for file in $conflict_files; do
|
|
||||||
if [ -f "$file" ]; then
|
|
||||||
echo "Resolving conflict for $file"
|
|
||||||
git add "$file"
|
|
||||||
else
|
|
||||||
echo "File $file has been deleted. Skipping."
|
|
||||||
git rm "$file"
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
echo "Conflicts resolved. Continuing cherry-pick."
|
|
||||||
git cherry-pick --continue || { echo "Cherry-pick failed, but continuing to create PR."; }
|
|
||||||
else
|
|
||||||
echo "Cherry-pick successful for commit $merge_commit."
|
|
||||||
fi
|
|
||||||
|
|
||||||
git remote set-url origin "https://${BOT_TOKEN}@github.com/${{ github.repository }}.git"
|
|
||||||
|
|
||||||
echo "Pushing branch: $cherry_pick_branch"
|
|
||||||
if ! git push origin $cherry_pick_branch --force; then
|
|
||||||
echo "Push failed, but continuing to create PR..."
|
|
||||||
fi
|
|
||||||
|
|
||||||
new_pr_title="$pr_title [Created by @$pr_creator from #$pr_number]"
|
|
||||||
new_pr_body="$pr_body
|
|
||||||
> This PR is created from original PR #$pr_number."
|
|
||||||
|
|
||||||
response=$(curl -s -X POST -H "Authorization: token $BOT_TOKEN" \
|
|
||||||
-H "Accept: application/vnd.github+json" \
|
|
||||||
https://api.github.com/repos/${{ github.repository }}/pulls \
|
|
||||||
-d "$(jq -n --arg title "$new_pr_title" \
|
|
||||||
--arg head "$cherry_pick_branch" \
|
|
||||||
--arg base "$TARGET_BRANCH" \
|
|
||||||
--arg body "$new_pr_body" \
|
|
||||||
'{title: $title, head: $head, base: $base, body: $body}')")
|
|
||||||
|
|
||||||
new_pr_number=$(echo "$response" | jq -r '.number')
|
|
||||||
|
|
||||||
if [[ "$new_pr_number" == "null" || -z "$new_pr_number" ]]; then
|
|
||||||
echo "Failed to create PR. Response: $response"
|
|
||||||
|
|
||||||
git checkout $TARGET_BRANCH
|
|
||||||
|
|
||||||
git branch -D $cherry_pick_branch
|
|
||||||
|
|
||||||
echo "Deleted branch: $cherry_pick_branch"
|
|
||||||
git push origin --delete $cherry_pick_branch
|
|
||||||
else
|
|
||||||
echo "Created PR #$new_pr_number"
|
|
||||||
|
|
||||||
curl -s -X POST -H "Authorization: token $GITHUB_TOKEN" \
|
|
||||||
-H "Accept: application/vnd.github+json" \
|
|
||||||
-d '{"labels": ["milestone-merge"]}' \
|
|
||||||
"https://api.github.com/repos/${{ github.repository }}/issues/$new_pr_number/labels"
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo ""
|
|
||||||
echo "----------------------------------------"
|
|
||||||
echo ""
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
74
.github/workflows/milestone.yml
vendored
Normal file
74
.github/workflows/milestone.yml
vendored
Normal file
@ -0,0 +1,74 @@
|
|||||||
|
# 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.
|
||||||
|
|
||||||
|
# shamelessly copied from https://github.com/sigstore/cosign/blob/main/.github/workflows/milestone.yaml
|
||||||
|
|
||||||
|
name: milestone
|
||||||
|
|
||||||
|
on:
|
||||||
|
pull_request_target:
|
||||||
|
types: [closed]
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
milestone:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
actions: none
|
||||||
|
checks: none
|
||||||
|
contents: read
|
||||||
|
deployments: none
|
||||||
|
issues: write
|
||||||
|
packages: none
|
||||||
|
pull-requests: write
|
||||||
|
repository-projects: none
|
||||||
|
security-events: none
|
||||||
|
statuses: none
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/github-script@v7 # v6
|
||||||
|
with:
|
||||||
|
github-token: ${{ secrets.BOT_GITHUB_TOKEN }}
|
||||||
|
script: |
|
||||||
|
if (!context.payload.pull_request.merged) {
|
||||||
|
console.log('PR was not merged, skipping.');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!!context.payload.pull_request.milestone) {
|
||||||
|
console.log('PR has existing milestone, skipping.');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
milestones = await github.rest.issues.listMilestones({
|
||||||
|
owner: context.repo.owner,
|
||||||
|
repo: context.repo.repo,
|
||||||
|
state: 'open',
|
||||||
|
sort: 'title',
|
||||||
|
direction: 'desc'
|
||||||
|
})
|
||||||
|
|
||||||
|
if (milestones.data.length === 0) {
|
||||||
|
console.log('There are no milestones, skipping.');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
await github.rest.issues.update({
|
||||||
|
owner: context.repo.owner,
|
||||||
|
repo: context.repo.repo,
|
||||||
|
issue_number: context.payload.pull_request.number,
|
||||||
|
milestone: milestones.data[0].number
|
||||||
|
});
|
||||||
55
.github/workflows/opencommit.yml
vendored
Normal file
55
.github/workflows/opencommit.yml
vendored
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
# 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 OpenCommit Action
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
# this list of branches is often enough,
|
||||||
|
# but you may still ignore other public branches
|
||||||
|
branches-ignore: [main master dev development release]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
opencommit:
|
||||||
|
timeout-minutes: 10
|
||||||
|
name: OpenCommit
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
permissions: write-all
|
||||||
|
steps:
|
||||||
|
- name: Setup Node.js Environment
|
||||||
|
uses: actions/setup-node@v4
|
||||||
|
with:
|
||||||
|
node-version: '16'
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
- uses: di-sukharev/opencommit@github-action-v1.0.4
|
||||||
|
with:
|
||||||
|
GITHUB_TOKEN: ${{ secrets.BOT_GITHUB_TOKEN }}
|
||||||
|
|
||||||
|
env:
|
||||||
|
# set openAI api key in repo actions secrets,
|
||||||
|
# for openAI keys go to: https://platform.openai.com/account/api-keys
|
||||||
|
# for repo secret go to: <your_repo_url>/settings/secrets/actions
|
||||||
|
OCO_OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
|
||||||
|
|
||||||
|
# customization
|
||||||
|
OCO_OPENAI_MAX_TOKENS: 500
|
||||||
|
OCO_OPENAI_BASE_PATH: ''
|
||||||
|
OCO_DESCRIPTION: false
|
||||||
|
OCO_EMOJI: false
|
||||||
|
OCO_MODEL: gpt-3.5-turbo-16k
|
||||||
|
OCO_LANGUAGE: en
|
||||||
|
OCO_PROMPT_MODULE: conventional-commit
|
||||||
|
continue-on-error: true
|
||||||
135
.github/workflows/openimci.yml
vendored
Normal file
135
.github/workflows/openimci.yml
vendored
Normal file
@ -0,0 +1,135 @@
|
|||||||
|
|
||||||
|
# Copyright © 2023 OpenIM open source community. 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 CI Auto Build
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
- release-*
|
||||||
|
paths-ignore:
|
||||||
|
- "docs/**"
|
||||||
|
- "README.md"
|
||||||
|
- "README_zh-CN.md"
|
||||||
|
- "**.md"
|
||||||
|
- "docs/**"
|
||||||
|
- "CONTRIBUTING.md"
|
||||||
|
pull_request:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
- release-*
|
||||||
|
paths-ignore:
|
||||||
|
- "README.md"
|
||||||
|
- "README_zh-CN.md"
|
||||||
|
- "CONTRIBUTING/**"
|
||||||
|
- "**.md"
|
||||||
|
- "docs/**"
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
|
||||||
|
build-linux:
|
||||||
|
name: Execute OpenIM Script On Linux
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
permissions:
|
||||||
|
contents: write
|
||||||
|
pull-requests: write
|
||||||
|
environment:
|
||||||
|
name: openim
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
arch: [arm64, armv7, amd64]
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v3
|
||||||
|
|
||||||
|
- name: Set up Go
|
||||||
|
uses: actions/setup-go@v4
|
||||||
|
with:
|
||||||
|
go-version: '1.21'
|
||||||
|
|
||||||
|
- name: Set up Docker for Linux
|
||||||
|
run: |
|
||||||
|
sudo docker compose up -d
|
||||||
|
sudo sleep 30 # Increased sleep time for better stability
|
||||||
|
timeout-minutes: 20 # Increased timeout for Docker setup
|
||||||
|
|
||||||
|
|
||||||
|
- name: init
|
||||||
|
run: sudo bash bootstrap.sh
|
||||||
|
timeout-minutes: 20
|
||||||
|
|
||||||
|
# - name: Get Internal IP Address
|
||||||
|
# id: get-ip
|
||||||
|
# run: |
|
||||||
|
# IP=$(hostname -I | awk '{print $1}')
|
||||||
|
# echo "The IP Address is: $IP"
|
||||||
|
# echo "::set-output name=ip::$IP"
|
||||||
|
|
||||||
|
# - name: Update .env
|
||||||
|
# run: |
|
||||||
|
# sed -i 's|externalAddress:.*|externalAddress: "http://${{ steps.get-ip.outputs.ip }}:10005"|' config/minio.yml
|
||||||
|
# cat config/minio.yml
|
||||||
|
|
||||||
|
- name: Build, Start, Check Services and Print Logs for Linux
|
||||||
|
run: |
|
||||||
|
sudo mage
|
||||||
|
sudo mage start
|
||||||
|
sudo mage check
|
||||||
|
|
||||||
|
|
||||||
|
- name: Restart Services and Print Logs
|
||||||
|
run: |
|
||||||
|
sudo mage stop
|
||||||
|
sudo mage start
|
||||||
|
sudo mage check
|
||||||
|
|
||||||
|
- name: Checkout chat repository
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
repository: 'openimsdk/chat'
|
||||||
|
path: 'chat-repo'
|
||||||
|
|
||||||
|
- name: Build and Start Chat Services
|
||||||
|
run: |
|
||||||
|
cd ${{ github.workspace }}/chat-repo
|
||||||
|
sudo mage
|
||||||
|
sudo mage start
|
||||||
|
sudo mage check
|
||||||
|
|
||||||
|
# - name: Checkout e2e repository
|
||||||
|
# uses: actions/checkout@v4
|
||||||
|
# with:
|
||||||
|
# repository: "openimsdk/test-e2e"
|
||||||
|
# path: e2e-repo
|
||||||
|
|
||||||
|
# - name: Set up Python 3.9
|
||||||
|
# uses: actions/setup-python@v4
|
||||||
|
# with:
|
||||||
|
# python-version: '3.9'
|
||||||
|
|
||||||
|
# - name: Install dependencies
|
||||||
|
# run: |
|
||||||
|
# sudo apt-get update
|
||||||
|
# sudo apt-get install -y xvfb libxi6 libgconf-2-4
|
||||||
|
# cd ${{ github.workspace }}/e2e-repo
|
||||||
|
# pip install -r requirements.txt
|
||||||
|
|
||||||
|
# - name: Run tests
|
||||||
|
# run: |
|
||||||
|
# cd ${{ github.workspace }}/e2e-repo
|
||||||
|
# xvfb-run --auto-servernum --server-args='-screen 0 1920x1080x24' pytest -v -s ./script
|
||||||
|
|
||||||
|
|
||||||
39
.github/workflows/project-progress.yml
vendored
Normal file
39
.github/workflows/project-progress.yml
vendored
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
# Copyright © 2023 OpenIM open source community. 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.
|
||||||
|
|
||||||
|
# GitHub recommends pinning actions to a commit SHA.
|
||||||
|
# To get a newer version, you will need to update the SHA.
|
||||||
|
# You can also reference a tag or branch, but the action may change without warning.
|
||||||
|
|
||||||
|
name: Move assigned card
|
||||||
|
on:
|
||||||
|
issues:
|
||||||
|
types:
|
||||||
|
- assigned
|
||||||
|
pull_request:
|
||||||
|
types:
|
||||||
|
- assigned
|
||||||
|
branches-ignore:
|
||||||
|
- 'asf-auto-updates'
|
||||||
|
- 'ignore'
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
move-assigned-card:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: alex-page/github-project-automation-plus@v0.9.0
|
||||||
|
with:
|
||||||
|
project: openim-powerful
|
||||||
|
column: In Progress
|
||||||
|
repo-token: ${{ secrets.BOT_GITHUB_TOKEN }}
|
||||||
139
.github/workflows/publish-docker-image.yml
vendored
139
.github/workflows/publish-docker-image.yml
vendored
@ -1,139 +0,0 @@
|
|||||||
name: Publish Docker image to registries
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- release-*
|
|
||||||
# tags:
|
|
||||||
# - 'v*'
|
|
||||||
|
|
||||||
release:
|
|
||||||
types: [published]
|
|
||||||
|
|
||||||
workflow_dispatch:
|
|
||||||
inputs:
|
|
||||||
tag:
|
|
||||||
description: "Tag version to be used for Docker image"
|
|
||||||
required: true
|
|
||||||
default: "v3.8.0"
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
build-and-test:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
path: main-repo
|
|
||||||
|
|
||||||
# - name: Set up QEMU
|
|
||||||
# uses: docker/setup-qemu-action@v3.3.0
|
|
||||||
|
|
||||||
- name: Set up Docker Buildx
|
|
||||||
uses: docker/setup-buildx-action@v3.8.0
|
|
||||||
|
|
||||||
- name: Build Docker image
|
|
||||||
id: build
|
|
||||||
uses: docker/build-push-action@v5
|
|
||||||
with:
|
|
||||||
context: ./main-repo
|
|
||||||
load: true
|
|
||||||
tags: "openim/openim-server:local"
|
|
||||||
cache-from: type=gha,scope=build
|
|
||||||
cache-to: type=gha,mode=max,scope=build
|
|
||||||
|
|
||||||
- name: Checkout compose repository
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
repository: "openimsdk/openim-docker"
|
|
||||||
path: "compose-repo"
|
|
||||||
|
|
||||||
- name: Get Internal IP Address
|
|
||||||
id: get-ip
|
|
||||||
run: |
|
|
||||||
IP=$(hostname -I | awk '{print $1}')
|
|
||||||
echo "The IP Address is: $IP"
|
|
||||||
echo "::set-output name=ip::$IP"
|
|
||||||
|
|
||||||
- name: Update .env to use the local image
|
|
||||||
run: |
|
|
||||||
sed -i 's|OPENIM_SERVER_IMAGE=.*|OPENIM_SERVER_IMAGE=openim/openim-server:local|' ${{ github.workspace }}/compose-repo/.env
|
|
||||||
sed -i 's|MINIO_EXTERNAL_ADDRESS=.*|MINIO_EXTERNAL_ADDRESS=http://${{ steps.get-ip.outputs.ip }}:10005|' ${{ github.workspace }}/compose-repo/.env
|
|
||||||
|
|
||||||
- name: Start services using Docker Compose
|
|
||||||
run: |
|
|
||||||
cd ${{ github.workspace }}/compose-repo
|
|
||||||
docker compose up -d
|
|
||||||
|
|
||||||
docker compose ps
|
|
||||||
|
|
||||||
- name: Extract metadata for Docker (tags, labels)
|
|
||||||
id: meta
|
|
||||||
uses: docker/metadata-action@v5.6.0
|
|
||||||
with:
|
|
||||||
images: |
|
|
||||||
openim/openim-server
|
|
||||||
ghcr.io/openimsdk/openim-server
|
|
||||||
registry.cn-hangzhou.aliyuncs.com/openimsdk/openim-server
|
|
||||||
tags: |
|
|
||||||
type=ref,event=tag
|
|
||||||
type=schedule
|
|
||||||
type=ref,event=branch
|
|
||||||
# type=semver,pattern={{version}}
|
|
||||||
type=semver,pattern=v{{version}}
|
|
||||||
type=semver,pattern=release-{{raw}}
|
|
||||||
type=sha
|
|
||||||
type=raw,value=${{ github.event.inputs.tag }}
|
|
||||||
|
|
||||||
- name: Log in to Docker Hub
|
|
||||||
uses: docker/login-action@v3.3.0
|
|
||||||
with:
|
|
||||||
username: ${{ secrets.DOCKER_USERNAME }}
|
|
||||||
password: ${{ secrets.DOCKER_PASSWORD }}
|
|
||||||
|
|
||||||
- name: Log in to GitHub Container Registry
|
|
||||||
uses: docker/login-action@v3.3.0
|
|
||||||
with:
|
|
||||||
registry: ghcr.io
|
|
||||||
username: ${{ github.repository_owner }}
|
|
||||||
password: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
|
|
||||||
- name: Log in to Aliyun Container Registry
|
|
||||||
uses: docker/login-action@v3.3.0
|
|
||||||
with:
|
|
||||||
registry: registry.cn-hangzhou.aliyuncs.com
|
|
||||||
username: ${{ secrets.ALIREGISTRY_USERNAME }}
|
|
||||||
password: ${{ secrets.ALIREGISTRY_TOKEN }}
|
|
||||||
|
|
||||||
- name: Push Docker images
|
|
||||||
uses: docker/build-push-action@v5
|
|
||||||
with:
|
|
||||||
context: ./main-repo
|
|
||||||
push: true
|
|
||||||
platforms: linux/amd64,linux/arm64
|
|
||||||
tags: ${{ steps.meta.outputs.tags }}
|
|
||||||
labels: ${{ steps.meta.outputs.labels }}
|
|
||||||
cache-from: type=gha,scope=build
|
|
||||||
cache-to: type=gha,mode=max,scope=build
|
|
||||||
|
|
||||||
- name: Verify multi-platform support
|
|
||||||
run: |
|
|
||||||
images=("openim/openim-server" "ghcr.io/openimsdk/openim-server" "registry.cn-hangzhou.aliyuncs.com/openimsdk/openim-server")
|
|
||||||
for image in "${images[@]}"; do
|
|
||||||
for tag in $(echo "${{ steps.meta.outputs.tags }}" | tr ',' '\n'); do
|
|
||||||
manifest=$(docker manifest inspect "$image:$tag" || echo "error")
|
|
||||||
if [[ "$manifest" == "error" ]]; then
|
|
||||||
echo "Manifest not found for $image:$tag"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
amd64_found=$(echo "$manifest" | jq '.manifests[] | select(.platform.architecture == "amd64")')
|
|
||||||
arm64_found=$(echo "$manifest" | jq '.manifests[] | select(.platform.architecture == "arm64")')
|
|
||||||
if [[ -z "$amd64_found" ]]; then
|
|
||||||
echo "Multi-platform support check failed for $image:$tag - missing amd64"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
if [[ -z "$arm64_found" ]]; then
|
|
||||||
echo "Multi-platform support check failed for $image:$tag - missing arm64"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
done
|
|
||||||
130
.github/workflows/pull-request.bak
vendored
Normal file
130
.github/workflows/pull-request.bak
vendored
Normal file
@ -0,0 +1,130 @@
|
|||||||
|
# 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: Github Pull Request
|
||||||
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
|
schedule:
|
||||||
|
- cron: '0 2 * * *'
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: write
|
||||||
|
pull-requests: write
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: checkout
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
|
||||||
|
- uses: actions/setup-node@v4
|
||||||
|
- name: Setup Go
|
||||||
|
uses: actions/setup-go@v5
|
||||||
|
- name: Run go modules tidy
|
||||||
|
run: |
|
||||||
|
sudo apt-get install jq
|
||||||
|
sudo make tidy
|
||||||
|
sudo make tools.verify.go-gitlint
|
||||||
|
echo "Run go modules tidy successfully"
|
||||||
|
continue-on-error: true
|
||||||
|
|
||||||
|
- name: Run go format and lint
|
||||||
|
run: |
|
||||||
|
sudo make format
|
||||||
|
echo "Run go format successfully"
|
||||||
|
continue-on-error: true
|
||||||
|
|
||||||
|
- name: Run go lint
|
||||||
|
run: |
|
||||||
|
sudo make lint
|
||||||
|
echo "Run go lint successfully"
|
||||||
|
continue-on-error: true
|
||||||
|
|
||||||
|
- name: Generate all necessary files, such as error code files
|
||||||
|
run: |
|
||||||
|
make gen.docgo.doc
|
||||||
|
make gen
|
||||||
|
echo "Generate all necessary files successfully"
|
||||||
|
continue-on-error: true
|
||||||
|
|
||||||
|
- name: make init
|
||||||
|
run: |
|
||||||
|
export OPENIM_IP=127.0.0.1
|
||||||
|
export LOG_STORAGE_LOCATION="../logs/"
|
||||||
|
./scripts/init-config.sh --examples --force
|
||||||
|
echo "Generate all necessary files successfully"
|
||||||
|
continue-on-error: true
|
||||||
|
|
||||||
|
- name: Generate Versions Including Pre-release Identifiers
|
||||||
|
run: |
|
||||||
|
latest_tag=$(git describe --tags `git rev-list --tags --max-count=1`)
|
||||||
|
echo $latest_tag > pkg/common/config/version
|
||||||
|
continue-on-error: true
|
||||||
|
|
||||||
|
- name: Gen CHANGELOG file
|
||||||
|
run: |
|
||||||
|
current_tag=$(git describe --tags --abbrev=0)
|
||||||
|
version=$(echo "$current_tag" | sed -E 's/^v?([0-9]+)\.([0-9]+)\..*$/\1.\2/')
|
||||||
|
echo "OpenIM Version: $version"
|
||||||
|
make tools.install.git-chglog
|
||||||
|
cd CHANGELOG
|
||||||
|
git-chglog --tag-filter-pattern "v${version}.*" -o CHANGELOG-${version}.md
|
||||||
|
cd ..
|
||||||
|
continue-on-error: true
|
||||||
|
|
||||||
|
- name: Run unit test and get test coverage
|
||||||
|
run: |
|
||||||
|
make cover
|
||||||
|
echo "Run unit test and get test coverage successfully"
|
||||||
|
continue-on-error: true
|
||||||
|
|
||||||
|
- name: OpenIM verify copyright
|
||||||
|
run: |
|
||||||
|
sudo make add-copyright
|
||||||
|
echo "OpenIM verify successfully"
|
||||||
|
continue-on-error: true
|
||||||
|
|
||||||
|
- name: Create Pull Request
|
||||||
|
uses: peter-evans/create-pull-request@v6
|
||||||
|
with:
|
||||||
|
token: ${{ secrets.BOT_GITHUB_TOKEN }}
|
||||||
|
commit-message: "cicd: bump League Patch"
|
||||||
|
author: kubbot <3293172751ysy@gmail.com>
|
||||||
|
committer: kubbot <3293172751ysy@gmail.com>
|
||||||
|
# signoff: false
|
||||||
|
# draft: false
|
||||||
|
branch: "asf-auto-updates"
|
||||||
|
assignees: cubxxw
|
||||||
|
reviewers: cubxxw
|
||||||
|
title: "[Auto PR 🤖] Bump League Patch auto PR"
|
||||||
|
body: |
|
||||||
|
I am a PR generated by robot automation.
|
||||||
|
|
||||||
|
Review criteria:
|
||||||
|
|
||||||
|
- [ ] Disenchanter can connect and issue actions
|
||||||
|
|
||||||
|
Github Actions Status:
|
||||||
|
|
||||||
|
[](https://github.com/openimsdk/open-im-server/actions/workflows/pull-request.yml)
|
||||||
|
|
||||||
|
This is an automated PR.
|
||||||
|
<sub>[workflow](https://github.com/openimsdk/open-im-server/blob/main/.github/workflows/pull-request.yml).</sub>
|
||||||
|
labels: |
|
||||||
|
kind/documentation
|
||||||
|
enhancement
|
||||||
|
report
|
||||||
55
.github/workflows/release-drafter.yml
vendored
Normal file
55
.github/workflows/release-drafter.yml
vendored
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
# 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: Release Drafter
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
# branches to consider in the event; optional, defaults to all
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
# pull_request event is required only for autolabeler
|
||||||
|
pull_request:
|
||||||
|
# Only following types are handled by the action, but one can default to all as well
|
||||||
|
# types: [opened, reopened, synchronize]
|
||||||
|
# pull_request_target event is required for autolabeler to support PRs from forks
|
||||||
|
# pull_request_target:
|
||||||
|
# types: [opened, reopened, synchronize]
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
update_release_draft:
|
||||||
|
permissions:
|
||||||
|
# write permission is required to create a github release
|
||||||
|
contents: write
|
||||||
|
# write permission is required for autolabeler
|
||||||
|
# otherwise, read permission is required at least
|
||||||
|
pull-requests: write
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
# (Optional) GitHub Enterprise requires GHE_HOST variable set
|
||||||
|
#- name: Set GHE_HOST
|
||||||
|
# run: |
|
||||||
|
# echo "GHE_HOST=${GITHUB_SERVER_URL##https:\/\/}" >> $GITHUB_ENV
|
||||||
|
|
||||||
|
# Drafts your next Release notes as Pull Requests are merged into "master"
|
||||||
|
- uses: release-drafter/release-drafter@v6
|
||||||
|
# (Optional) specify config name to use, relative to .github/. Default: release-drafter.yml
|
||||||
|
# with:
|
||||||
|
# config-name: my-config.yml
|
||||||
|
# disable-autolabeler: true
|
||||||
|
env:
|
||||||
|
GITHUB_TOKEN: ${{ secrets.REDBOT_GITHUB_TOKEN }}
|
||||||
81
.github/workflows/release.bak
vendored
Normal file
81
.github/workflows/release.bak
vendored
Normal file
@ -0,0 +1,81 @@
|
|||||||
|
# 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 Server Release Workflow
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
# run only against tags
|
||||||
|
tags:
|
||||||
|
- '*'
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: write
|
||||||
|
packages: write
|
||||||
|
issues: write
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
goreleaser:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
- run: git fetch --force --tags
|
||||||
|
- uses: actions/setup-go@v5
|
||||||
|
with:
|
||||||
|
go-version: stable
|
||||||
|
# More assembly might be required: Docker logins, GPG, etc. It all depends
|
||||||
|
# on your needs.
|
||||||
|
- uses: goreleaser/goreleaser-action@v5
|
||||||
|
with:
|
||||||
|
# either 'goreleaser' (default) or 'goreleaser-pro':
|
||||||
|
distribution: goreleaser
|
||||||
|
version: latest
|
||||||
|
workdir: .
|
||||||
|
args: release -f ./build/goreleaser.yaml --clean --release-footer-tmpl=scripts/template/footer.md.tmpl --release-header-tmpl=scripts/template/head.md.tmpl
|
||||||
|
env:
|
||||||
|
USERNAME: ${{ github.repository_owner }}
|
||||||
|
GITHUB_TOKEN: ${{ secrets.BOT_GITHUB_TOKEN }}
|
||||||
|
FURY_TOKEN: ${{ secrets.FURY_TOKEN }}
|
||||||
|
# Your GoReleaser Pro key, if you are using the 'goreleaser-pro'
|
||||||
|
# distribution:
|
||||||
|
# GORELEASER_KEY: ${{ secrets.GORELEASER_KEY }}
|
||||||
|
|
||||||
|
goreleaser-check-pkgs:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
env:
|
||||||
|
DOCKER_CLI_EXPERIMENTAL: "enabled"
|
||||||
|
needs: [ goreleaser ]
|
||||||
|
if: github.ref == 'refs/heads/main'
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
format: [ deb, rpm, apk ]
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4 # v3
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
- uses: arduino/setup-task@e26d8975574116b0097a1161e0fe16ba75d84c1c # v1
|
||||||
|
with:
|
||||||
|
version: 3.x
|
||||||
|
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
- uses: docker/setup-qemu-action@326560df218a7ea9cf6ab49bbc88b8b306bb437e # v2
|
||||||
|
- uses: actions/cache@a2ed59d39b352305bdd2f628719a53b2cc4f9613 # v3
|
||||||
|
with:
|
||||||
|
path: |
|
||||||
|
./_output/dist/*.deb
|
||||||
|
./_output/dist/*.rpm
|
||||||
|
./_output/dist/*.apk
|
||||||
|
key: ${{ github.ref }}
|
||||||
|
- run: task goreleaser:test:${{ matrix.format }}
|
||||||
74
.github/workflows/remove-unused-labels.yml
vendored
74
.github/workflows/remove-unused-labels.yml
vendored
@ -1,74 +0,0 @@
|
|||||||
name: Remove Unused Labels
|
|
||||||
on:
|
|
||||||
workflow_dispatch:
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
cleanup:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
permissions:
|
|
||||||
issues: write
|
|
||||||
pull-requests: write
|
|
||||||
contents: read
|
|
||||||
steps:
|
|
||||||
- name: Checkout Repository
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
|
|
||||||
- name: Fetch All Issues and PRs
|
|
||||||
id: fetch_issues_prs
|
|
||||||
uses: actions/github-script@v7.0.1
|
|
||||||
with:
|
|
||||||
github-token: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
script: |
|
|
||||||
const issues = await github.paginate(github.rest.issues.listForRepo, {
|
|
||||||
owner: context.repo.owner,
|
|
||||||
repo: context.repo.repo,
|
|
||||||
state: 'all',
|
|
||||||
per_page: 100
|
|
||||||
});
|
|
||||||
|
|
||||||
const labelsInUse = new Set();
|
|
||||||
issues.forEach(issue => {
|
|
||||||
issue.labels.forEach(label => {
|
|
||||||
labelsInUse.add(label.name);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
return JSON.stringify(Array.from(labelsInUse));
|
|
||||||
result-encoding: string
|
|
||||||
|
|
||||||
- name: Fetch All Labels
|
|
||||||
id: fetch_labels
|
|
||||||
uses: actions/github-script@v7.0.1
|
|
||||||
with:
|
|
||||||
github-token: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
script: |
|
|
||||||
const labels = await github.paginate(github.rest.issues.listLabelsForRepo, {
|
|
||||||
owner: context.repo.owner,
|
|
||||||
repo: context.repo.repo,
|
|
||||||
per_page: 100
|
|
||||||
});
|
|
||||||
|
|
||||||
return JSON.stringify(labels.map(label => label.name));
|
|
||||||
result-encoding: string
|
|
||||||
|
|
||||||
- name: Remove Unused Labels
|
|
||||||
uses: actions/github-script@v7.0.1
|
|
||||||
with:
|
|
||||||
github-token: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
script: |
|
|
||||||
const labelsInUse = new Set(JSON.parse(process.env.LABELS_IN_USE));
|
|
||||||
const allLabels = JSON.parse(process.env.ALL_LABELS);
|
|
||||||
|
|
||||||
const unusedLabels = allLabels.filter(label => !labelsInUse.has(label));
|
|
||||||
|
|
||||||
for (const label of unusedLabels) {
|
|
||||||
await github.rest.issues.deleteLabel({
|
|
||||||
owner: context.repo.owner,
|
|
||||||
repo: context.repo.repo,
|
|
||||||
name: label
|
|
||||||
});
|
|
||||||
console.log(`Deleted label: ${label}`);
|
|
||||||
}
|
|
||||||
env:
|
|
||||||
LABELS_IN_USE: ${{ steps.fetch_issues_prs.outputs.result }}
|
|
||||||
ALL_LABELS: ${{ steps.fetch_labels.outputs.result }}
|
|
||||||
78
.github/workflows/reopen-issue.yml
vendored
78
.github/workflows/reopen-issue.yml
vendored
@ -1,78 +0,0 @@
|
|||||||
name: Reopen and Update Stale Issues
|
|
||||||
|
|
||||||
on:
|
|
||||||
workflow_dispatch:
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
reopen_stale_issues:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
permissions:
|
|
||||||
issues: write
|
|
||||||
contents: read
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: Checkout Repository
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
|
|
||||||
- name: Fetch Closed Issues with lifecycle/stale Label
|
|
||||||
id: fetch_issues
|
|
||||||
uses: actions/github-script@v7
|
|
||||||
with:
|
|
||||||
github-token: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
script: |
|
|
||||||
const issues = await github.paginate(github.rest.issues.listForRepo, {
|
|
||||||
owner: context.repo.owner,
|
|
||||||
repo: context.repo.repo,
|
|
||||||
state: 'closed',
|
|
||||||
labels: 'lifecycle/stale',
|
|
||||||
per_page: 100
|
|
||||||
});
|
|
||||||
const issueNumbers = issues
|
|
||||||
.filter(issue => !issue.pull_request) // exclude PR
|
|
||||||
.map(issue => issue.number);
|
|
||||||
console.log(`Fetched issues: ${issueNumbers}`);
|
|
||||||
return issueNumbers;
|
|
||||||
|
|
||||||
- name: Set issue numbers
|
|
||||||
id: set_issue_numbers
|
|
||||||
run: |
|
|
||||||
echo "ISSUE_NUMBERS=${{ steps.fetch_issues.outputs.result }}" >> $GITHUB_ENV
|
|
||||||
echo "Issue numbers: ${{ steps.fetch_issues.outputs.result }}"
|
|
||||||
|
|
||||||
- name: Reopen Issues
|
|
||||||
uses: actions/github-script@v7
|
|
||||||
with:
|
|
||||||
github-token: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
script: |
|
|
||||||
const issueNumbers = JSON.parse(process.env.ISSUE_NUMBERS);
|
|
||||||
console.log(`Reopening issues: ${issueNumbers}`);
|
|
||||||
|
|
||||||
for (const issue_number of issueNumbers) {
|
|
||||||
// Reopen the issue
|
|
||||||
await github.rest.issues.update({
|
|
||||||
owner: context.repo.owner,
|
|
||||||
repo: context.repo.repo,
|
|
||||||
issue_number: issue_number,
|
|
||||||
state: 'open'
|
|
||||||
});
|
|
||||||
console.log(`Reopened issue #${issue_number}`);
|
|
||||||
}
|
|
||||||
|
|
||||||
- name: Remove lifecycle/stale Label
|
|
||||||
uses: actions/github-script@v7
|
|
||||||
with:
|
|
||||||
github-token: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
script: |
|
|
||||||
const issueNumbers = JSON.parse(process.env.ISSUE_NUMBERS);
|
|
||||||
console.log(`Removing 'lifecycle/stale' label from issues: ${issueNumbers}`);
|
|
||||||
|
|
||||||
for (const issue_number of issueNumbers) {
|
|
||||||
// Remove the lifecycle/stale label
|
|
||||||
await github.rest.issues.removeLabel({
|
|
||||||
owner: context.repo.owner,
|
|
||||||
repo: context.repo.repo,
|
|
||||||
issue_number: issue_number,
|
|
||||||
name: 'lifecycle/stale'
|
|
||||||
});
|
|
||||||
console.log(`Removed label 'lifecycle/stale' from issue #${issue_number}`);
|
|
||||||
}
|
|
||||||
44
.github/workflows/sync-release.bak
vendored
Normal file
44
.github/workflows/sync-release.bak
vendored
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
# Copyright © 2023 KubeCub open source community. All rights reserved.
|
||||||
|
# Licensed under the MIT License (the "License");
|
||||||
|
# you may not use this file except in compliance with the License.
|
||||||
|
|
||||||
|
# https://github.com/BetaHuhn/repo-file-sync-action
|
||||||
|
name: Synchronize OpenIM Release Branch Public Code To Other Repositories
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
paths:
|
||||||
|
- scripts/*
|
||||||
|
- docs/*
|
||||||
|
- config/*
|
||||||
|
branches:
|
||||||
|
- release-v*.*
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
sync:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Run GitHub File Sync
|
||||||
|
uses: BetaHuhn/repo-file-sync-action@latest
|
||||||
|
with:
|
||||||
|
GH_INSTALLATION_TOKEN: "${{ secrets.BOT_GITHUB_TOKEN }}"
|
||||||
|
CONFIG_PATH: .github/sync-release.yml
|
||||||
|
ORIGINAL_MESSAGE: true
|
||||||
|
SKIP_PR: true
|
||||||
|
COMMIT_EACH_FILE: false
|
||||||
|
COMMIT_BODY: "🤖 kubbot to synchronize the warehouse"
|
||||||
|
GIT_EMAIL: "3293172751ysy@gmail.com"
|
||||||
|
GIT_USERNAME: "kubbot"
|
||||||
|
PR_BODY: 👌 kubecub provides automated community services
|
||||||
|
REVIEWERS: |
|
||||||
|
kubbot
|
||||||
|
cubxxw
|
||||||
|
PR_LABELS: |
|
||||||
|
file-sync
|
||||||
|
automerge
|
||||||
|
ASSIGNEES: |
|
||||||
|
kubbot
|
||||||
|
continue-on-error: true
|
||||||
40
.github/workflows/sync.bak
vendored
Normal file
40
.github/workflows/sync.bak
vendored
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
# Copyright © 2023 KubeCub open source community. All rights reserved.
|
||||||
|
# Licensed under the MIT License (the "License");
|
||||||
|
# you may not use this file except in compliance with the License.
|
||||||
|
|
||||||
|
# https://github.com/BetaHuhn/repo-file-sync-action
|
||||||
|
name: Synchronize OpenIM Main Branch Public Code To Other Repositories
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
sync:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Run GitHub File Sync
|
||||||
|
uses: BetaHuhn/repo-file-sync-action@latest
|
||||||
|
with:
|
||||||
|
GH_INSTALLATION_TOKEN: "${{ secrets.BOT_GITHUB_TOKEN }}"
|
||||||
|
CONFIG_PATH: .github/sync.yml
|
||||||
|
ORIGINAL_MESSAGE: true
|
||||||
|
SKIP_PR: true
|
||||||
|
COMMIT_EACH_FILE: false
|
||||||
|
COMMIT_BODY: "🤖 kubbot to synchronize the warehouse"
|
||||||
|
GIT_EMAIL: "3293172751ysy@gmail.com"
|
||||||
|
GIT_USERNAME: "kubbot"
|
||||||
|
PR_BODY: 👌 kubecub provides automated community services
|
||||||
|
REVIEWERS: |
|
||||||
|
kubbot
|
||||||
|
cubxxw
|
||||||
|
PR_LABELS: |
|
||||||
|
file-sync
|
||||||
|
automerge
|
||||||
|
ASSIGNEES: |
|
||||||
|
kubbot
|
||||||
|
continue-on-error: true
|
||||||
119
.github/workflows/update-version-file-on-release.yml
vendored
119
.github/workflows/update-version-file-on-release.yml
vendored
@ -1,119 +0,0 @@
|
|||||||
name: Update Version File on Release
|
|
||||||
|
|
||||||
on:
|
|
||||||
release:
|
|
||||||
types: [created]
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
update-version:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
env:
|
|
||||||
TAG_VERSION: ${{ github.event.release.tag_name }}
|
|
||||||
steps:
|
|
||||||
# Step 1: Checkout the original repository's code
|
|
||||||
- name: Checkout code
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
fetch-depth: 0
|
|
||||||
# submodules: "recursive"
|
|
||||||
|
|
||||||
- name: Safe submodule initialization
|
|
||||||
run: |
|
|
||||||
echo "Checking for submodules..."
|
|
||||||
if [ -f .gitmodules ]; then
|
|
||||||
if [ -s .gitmodules ]; then
|
|
||||||
echo "Initializing submodules..."
|
|
||||||
if git submodule sync --recursive 2>/dev/null; then
|
|
||||||
git submodule update --init --force --recursive || {
|
|
||||||
echo "Warning: Some submodules failed to initialize, continuing anyway..."
|
|
||||||
}
|
|
||||||
else
|
|
||||||
echo "Warning: Submodule sync failed, continuing without submodules..."
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
echo ".gitmodules exists but is empty, skipping submodule initialization"
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
echo "No .gitmodules file found, no submodules to initialize"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Step 2: Set up Git with official account
|
|
||||||
- name: Set up Git
|
|
||||||
run: |
|
|
||||||
git config --global user.name "github-actions[bot]"
|
|
||||||
git config --global user.email "github-actions[bot]@users.noreply.github.com"
|
|
||||||
|
|
||||||
# Step 3: Check and delete existing tag
|
|
||||||
- name: Check and delete existing tag
|
|
||||||
run: |
|
|
||||||
if git rev-parse ${{ env.TAG_VERSION }} >/dev/null 2>&1; then
|
|
||||||
git tag -d ${{ env.TAG_VERSION }}
|
|
||||||
git push --delete origin ${{ env.TAG_VERSION }}
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Step 4: Update version file
|
|
||||||
- name: Update version file
|
|
||||||
run: |
|
|
||||||
mkdir -p version
|
|
||||||
echo -n "${{ env.TAG_VERSION }}" > version/version
|
|
||||||
|
|
||||||
# Step 5: Commit and push changes
|
|
||||||
- name: Commit and push changes
|
|
||||||
env:
|
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
run: |
|
|
||||||
git add version/version
|
|
||||||
git commit -m "Update version to ${{ env.TAG_VERSION }}"
|
|
||||||
|
|
||||||
# Step 6: Update tag
|
|
||||||
- name: Update tag
|
|
||||||
run: |
|
|
||||||
git tag -fa ${{ env.TAG_VERSION }} -m "Update version to ${{ env.TAG_VERSION }}"
|
|
||||||
git push origin ${{ env.TAG_VERSION }} --force
|
|
||||||
|
|
||||||
# Step 7: Find and Publish Draft Release
|
|
||||||
- name: Find and Publish Draft Release
|
|
||||||
uses: actions/github-script@v7
|
|
||||||
with:
|
|
||||||
github-token: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
script: |
|
|
||||||
const { owner, repo } = context.repo;
|
|
||||||
const tagName = process.env.TAG_VERSION;
|
|
||||||
|
|
||||||
try {
|
|
||||||
let release;
|
|
||||||
try {
|
|
||||||
const response = await github.rest.repos.getReleaseByTag({
|
|
||||||
owner,
|
|
||||||
repo,
|
|
||||||
tag: tagName
|
|
||||||
});
|
|
||||||
release = response.data;
|
|
||||||
} catch (tagError) {
|
|
||||||
core.info(`Release not found by tag, searching all releases...`);
|
|
||||||
const releases = await github.rest.repos.listReleases({
|
|
||||||
owner,
|
|
||||||
repo,
|
|
||||||
per_page: 100
|
|
||||||
});
|
|
||||||
|
|
||||||
release = releases.data.find(r => r.draft && r.tag_name === tagName);
|
|
||||||
if (!release) {
|
|
||||||
throw new Error(`No release found with tag ${tagName}`);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
await github.rest.repos.updateRelease({
|
|
||||||
owner,
|
|
||||||
repo,
|
|
||||||
release_id: release.id,
|
|
||||||
draft: false,
|
|
||||||
prerelease: release.prerelease
|
|
||||||
});
|
|
||||||
|
|
||||||
const status = release.draft ? "was draft" : "was already published";
|
|
||||||
core.info(`Release ${tagName} ensured to be published (${status}).`);
|
|
||||||
|
|
||||||
} catch (error) {
|
|
||||||
core.warning(`Could not find or update release for tag ${tagName}: ${error.message}`);
|
|
||||||
}
|
|
||||||
@ -1,3 +1,20 @@
|
|||||||
|
# Copyright © 2023 OpenIMSDK open source community. 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.
|
||||||
|
|
||||||
|
# This file contains all available configuration options
|
||||||
|
# with their default values.
|
||||||
|
|
||||||
# options for analysis running
|
# options for analysis running
|
||||||
run:
|
run:
|
||||||
# default concurrency is a available CPU number
|
# default concurrency is a available CPU number
|
||||||
@ -28,8 +45,6 @@ run:
|
|||||||
# - util
|
# - util
|
||||||
# - .*~
|
# - .*~
|
||||||
# - api/swagger/docs
|
# - api/swagger/docs
|
||||||
|
|
||||||
|
|
||||||
# - server/docs
|
# - server/docs
|
||||||
# - components/mnt/config/certs
|
# - components/mnt/config/certs
|
||||||
# - logs
|
# - logs
|
||||||
@ -287,7 +302,7 @@ linters-settings:
|
|||||||
|
|
||||||
gofumpt:
|
gofumpt:
|
||||||
# Select the Go version to target. The default is `1.18`.
|
# Select the Go version to target. The default is `1.18`.
|
||||||
go-version: "1.21"
|
lang-version: "1.20"
|
||||||
|
|
||||||
# Choose whether or not to use the extra rules that are disabled
|
# Choose whether or not to use the extra rules that are disabled
|
||||||
# by default
|
# by default
|
||||||
|
|||||||
62
CHANGELOG/.chglog/CHANGELOG.tpl.md
Normal file
62
CHANGELOG/.chglog/CHANGELOG.tpl.md
Normal file
@ -0,0 +1,62 @@
|
|||||||
|
# Version logging for OpenIM
|
||||||
|
|
||||||
|
<!-- BEGIN MUNGE: GENERATED_TOC -->
|
||||||
|
|
||||||
|
<!-- END MUNGE: GENERATED_TOC -->
|
||||||
|
|
||||||
|
{{ if .Versions -}}
|
||||||
|
<a name="unreleased"></a>
|
||||||
|
## [Unreleased]
|
||||||
|
|
||||||
|
{{ if .Unreleased.CommitGroups -}}
|
||||||
|
{{ range .Unreleased.CommitGroups -}}
|
||||||
|
### {{ .Title }}
|
||||||
|
{{ range .Commits -}}
|
||||||
|
- {{ if .Scope }}**{{ .Scope }}:** {{ end }}{{ .Subject }}
|
||||||
|
{{ end }}
|
||||||
|
{{ end -}}
|
||||||
|
{{ end -}}
|
||||||
|
{{ end -}}
|
||||||
|
|
||||||
|
{{ range .Versions }}
|
||||||
|
<a name="{{ .Tag.Name }}"></a>
|
||||||
|
## {{ if .Tag.Previous }}[{{ .Tag.Name }}]{{ else }}{{ .Tag.Name }}{{ end }} - {{ datetime "2006-01-02" .Tag.Date }}
|
||||||
|
{{ range .CommitGroups -}}
|
||||||
|
### {{ .Title }}
|
||||||
|
{{ range .Commits -}}
|
||||||
|
- {{ if .Scope }}**{{ .Scope }}:** {{ end }}{{ .Subject }}
|
||||||
|
{{ end }}
|
||||||
|
{{ end -}}
|
||||||
|
|
||||||
|
{{- if .RevertCommits -}}
|
||||||
|
### Reverts
|
||||||
|
{{ range .RevertCommits -}}
|
||||||
|
- {{ .Revert.Header }}
|
||||||
|
{{ end }}
|
||||||
|
{{ end -}}
|
||||||
|
|
||||||
|
{{- if .MergeCommits -}}
|
||||||
|
### Pull Requests
|
||||||
|
{{ range .MergeCommits -}}
|
||||||
|
- {{ .Header }}
|
||||||
|
{{ end }}
|
||||||
|
{{ end -}}
|
||||||
|
|
||||||
|
{{- if .NoteGroups -}}
|
||||||
|
{{ range .NoteGroups -}}
|
||||||
|
### {{ .Title }}
|
||||||
|
{{ range .Notes }}
|
||||||
|
{{ .Body }}
|
||||||
|
{{ end }}
|
||||||
|
{{ end -}}
|
||||||
|
{{ end -}}
|
||||||
|
{{ end -}}
|
||||||
|
|
||||||
|
{{- if .Versions }}
|
||||||
|
[Unreleased]: {{ .Info.RepositoryURL }}/compare/{{ $latest := index .Versions 0 }}{{ $latest.Tag.Name }}...HEAD
|
||||||
|
{{ range .Versions -}}
|
||||||
|
{{ if .Tag.Previous -}}
|
||||||
|
[{{ .Tag.Name }}]: {{ $.Info.RepositoryURL }}/compare/{{ .Tag.Previous.Name }}...{{ .Tag.Name }}
|
||||||
|
{{ end -}}
|
||||||
|
{{ end -}}
|
||||||
|
{{ end -}}
|
||||||
67
CHANGELOG/.chglog/config.yml
Normal file
67
CHANGELOG/.chglog/config.yml
Normal file
@ -0,0 +1,67 @@
|
|||||||
|
bin: git
|
||||||
|
style: github
|
||||||
|
template: CHANGELOG.tpl.md
|
||||||
|
info:
|
||||||
|
title: CHANGELOG
|
||||||
|
repository_url: https://github.com/openimsdk/open-im-server
|
||||||
|
options:
|
||||||
|
tag_filter_pattern: '^v'
|
||||||
|
sort: "date"
|
||||||
|
|
||||||
|
commits:
|
||||||
|
filters:
|
||||||
|
Type:
|
||||||
|
- feat
|
||||||
|
- fix
|
||||||
|
- perf
|
||||||
|
- refactor
|
||||||
|
- docs
|
||||||
|
- test
|
||||||
|
- chore
|
||||||
|
- ci
|
||||||
|
- build
|
||||||
|
sort_by: Scope
|
||||||
|
|
||||||
|
commit_groups:
|
||||||
|
group_by: Type
|
||||||
|
sort_by: Title
|
||||||
|
title_order:
|
||||||
|
- feat
|
||||||
|
- fix
|
||||||
|
- perf
|
||||||
|
- refactor
|
||||||
|
- docs
|
||||||
|
- test
|
||||||
|
- chore
|
||||||
|
- ci
|
||||||
|
- build
|
||||||
|
title_maps:
|
||||||
|
feat: Features
|
||||||
|
|
||||||
|
header:
|
||||||
|
pattern: "<regexp>"
|
||||||
|
pattern_maps:
|
||||||
|
- PropName
|
||||||
|
|
||||||
|
issues:
|
||||||
|
prefix:
|
||||||
|
- #
|
||||||
|
|
||||||
|
refs:
|
||||||
|
actions:
|
||||||
|
- Closes
|
||||||
|
- Fixes
|
||||||
|
|
||||||
|
merges:
|
||||||
|
pattern: "^Merge branch '(\\w+)'$"
|
||||||
|
pattern_maps:
|
||||||
|
- Source
|
||||||
|
|
||||||
|
reverts:
|
||||||
|
pattern: "^Revert \"([\\s\\S]*)\"$"
|
||||||
|
pattern_maps:
|
||||||
|
- Header
|
||||||
|
|
||||||
|
notes:
|
||||||
|
keywords:
|
||||||
|
- BREAKING CHANGE
|
||||||
@ -1,70 +0,0 @@
|
|||||||
## [v3.8.3-patch.6](https://github.com/openimsdk/open-im-server/releases/tag/v3.8.3-patch.6) (2025-07-23)
|
|
||||||
|
|
||||||
### Bug Fixes
|
|
||||||
* fix: Add friend DB in notification sender [#3438](https://github.com/openimsdk/open-im-server/pull/3438)
|
|
||||||
* fix: remove update version file workflows have new line in 3.8.3-patch branch. [#3452](https://github.com/openimsdk/open-im-server/pull/3452)
|
|
||||||
* fix: s3 aws init [#3454](https://github.com/openimsdk/open-im-server/pull/3454)
|
|
||||||
* fix: use safe submodule init in workflows in v3.8.3-patch. [#3469](https://github.com/openimsdk/open-im-server/pull/3469)
|
|
||||||
|
|
||||||
**Full Changelog**: [v3.8.3-patch.5...v3.8.3-patch.6](https://github.com/openimsdk/open-im-server/compare/v3.8.3-patch.5...v3.8.3-patch.6)
|
|
||||||
|
|
||||||
## [v3.8.3-patch.5](https://github.com/openimsdk/open-im-server/releases/tag/v3.8.3-patch.5) (2025-06-10)
|
|
||||||
|
|
||||||
### New Features
|
|
||||||
* feat: optimize friend and group applications [#3396](https://github.com/openimsdk/open-im-server/pull/3396)
|
|
||||||
|
|
||||||
### Bug Fixes
|
|
||||||
* fix: solve unocrrect invite notification [Created [#3219](https://github.com/openimsdk/open-im-server/pull/3219)
|
|
||||||
|
|
||||||
### Builds
|
|
||||||
* build: update gomake version in dockerfile.[Patch branch] [#3416](https://github.com/openimsdk/open-im-server/pull/3416)
|
|
||||||
|
|
||||||
**Full Changelog**: [v3.8.3...v3.8.3-patch.5](https://github.com/openimsdk/open-im-server/compare/v3.8.3...v3.8.3-patch.5)
|
|
||||||
|
|
||||||
## [v3.8.3-patch.4](https://github.com/openimsdk/open-im-server/releases/tag/v3.8.3-patch.4) (2025-03-13)
|
|
||||||
|
|
||||||
### Bug Fixes
|
|
||||||
* fix: solve unocrrect invite notificationfrom #3213
|
|
||||||
|
|
||||||
**Full Changelog**: [v3.8.3-patch.3...v3.8.3-patch.4](https://github.com/openimsdk/open-im-server/compare/v3.8.3-patch.3...v3.8.3-patch.4)
|
|
||||||
|
|
||||||
## [v3.8.3-patch.3](https://github.com/openimsdk/open-im-server/releases/tag/v3.8.3-patch.3) (2025-03-07)
|
|
||||||
|
|
||||||
### New Features
|
|
||||||
* feat: optimizing BatchGetIncrementalGroupMember #3180
|
|
||||||
|
|
||||||
### Bug Fixes
|
|
||||||
* fix: solve uncorrect notification when set group info #3172
|
|
||||||
* fix: the sorting is wrong after canceling the administrator in group settings #3185
|
|
||||||
* fix: solve uncorrect GroupMember enter group notification type. #3188
|
|
||||||
|
|
||||||
### Refactors
|
|
||||||
* refactor: change sendNotification to sendMessage to avoid ambiguity regarding message sending behavior. #3173
|
|
||||||
|
|
||||||
**Full Changelog**: [v3.8.3-patch.2...v3.8.3-patch.3](https://github.com/openimsdk/open-im-server/compare/v3.8.3-patch.2...v3.8.3-patch.3)
|
|
||||||
|
|
||||||
## [v3.8.3-patch.2](https://github.com/openimsdk/open-im-server/releases/tag/v3.8.3-patch.2) (2025-02-28)
|
|
||||||
|
|
||||||
### Bug Fixes
|
|
||||||
* fix: Offline push does not have a badge && Android offline push (#3146) [#3174](https://github.com/openimsdk/open-im-server/pull/3174)
|
|
||||||
|
|
||||||
**Full Changelog**: [v3.8.3-patch.1...v3.8.3-patch.2](https://github.com/openimsdk/open-im-server/compare/v3.8.3-patch.1...v3.8.3-patch.2)
|
|
||||||
|
|
||||||
## [v3.8.3-patch.1](https://github.com/openimsdk/open-im-server/releases/tag/v3.8.3-patch.1) (2025-02-25)
|
|
||||||
|
|
||||||
### New Features
|
|
||||||
* feat: add backup volume && optimize log print [Created [#3121](https://github.com/openimsdk/open-im-server/pull/3121)
|
|
||||||
|
|
||||||
### Bug Fixes
|
|
||||||
* fix: seq conversion failed without exiting [Created [#3120](https://github.com/openimsdk/open-im-server/pull/3120)
|
|
||||||
* fix: check error in BatchSetTokenMapByUidPid [Created [#3123](https://github.com/openimsdk/open-im-server/pull/3123)
|
|
||||||
* fix: DeleteDoc crash [Created [#3124](https://github.com/openimsdk/open-im-server/pull/3124)
|
|
||||||
* fix: the abnormal message has no sending time, causing the SDK to be abnormal [Created [#3126](https://github.com/openimsdk/open-im-server/pull/3126)
|
|
||||||
* fix: crash caused [#3127](https://github.com/openimsdk/open-im-server/pull/3127)
|
|
||||||
* fix: the user sets the conversation timer cleanup timestamp unit incorrectly [Created [#3128](https://github.com/openimsdk/open-im-server/pull/3128)
|
|
||||||
* fix: seq conversion not reading env in docker environment [Created [#3131](https://github.com/openimsdk/open-im-server/pull/3131)
|
|
||||||
|
|
||||||
### Builds
|
|
||||||
* build: improve workflows contents. [Created [#3125](https://github.com/openimsdk/open-im-server/pull/3125)
|
|
||||||
|
|
||||||
**Full Changelog**: [v3.8.3-e-v1.1.5...v3.8.3-patch.1-e-v1.1.5](https://github.com/openimsdk/open-im-server-enterprise/compare/v3.8.3-e-v1.1.5...v3.8.3-patch.1-e-v1.1.5)
|
|
||||||
@ -1,4 +0,0 @@
|
|||||||
# CHANGELOGs
|
|
||||||
|
|
||||||
- [CHANGELOG-3.8.md](./CHANGELOG-3.8.md)
|
|
||||||
|
|
||||||
10
Dockerfile
10
Dockerfile
@ -1,5 +1,5 @@
|
|||||||
# Use Go 1.22 Alpine as the base image for building the application
|
# Use Go 1.21 Alpine as the base image for building the application
|
||||||
FROM golang:1.22-alpine AS builder
|
FROM golang:1.21-alpine as builder
|
||||||
|
|
||||||
# Define the base directory for the application as an environment variable
|
# Define the base directory for the application as an environment variable
|
||||||
ENV SERVER_DIR=/openim-server
|
ENV SERVER_DIR=/openim-server
|
||||||
@ -8,7 +8,7 @@ ENV SERVER_DIR=/openim-server
|
|||||||
WORKDIR $SERVER_DIR
|
WORKDIR $SERVER_DIR
|
||||||
|
|
||||||
# Set the Go proxy to improve dependency resolution speed
|
# Set the Go proxy to improve dependency resolution speed
|
||||||
# ENV GOPROXY=https://goproxy.io,direct
|
ENV GOPROXY=https://goproxy.io,direct
|
||||||
|
|
||||||
# Copy all files from the current directory into the container
|
# Copy all files from the current directory into the container
|
||||||
COPY . .
|
COPY . .
|
||||||
@ -22,7 +22,7 @@ RUN go install github.com/magefile/mage@v1.15.0
|
|||||||
RUN mage build
|
RUN mage build
|
||||||
|
|
||||||
# Using Alpine Linux with Go environment for the final image
|
# Using Alpine Linux with Go environment for the final image
|
||||||
FROM golang:1.22-alpine
|
FROM golang:1.21-alpine
|
||||||
|
|
||||||
# Install necessary packages, such as bash
|
# Install necessary packages, such as bash
|
||||||
RUN apk add --no-cache bash
|
RUN apk add --no-cache bash
|
||||||
@ -43,7 +43,7 @@ COPY --from=builder $SERVER_DIR/start-config.yml $SERVER_DIR/
|
|||||||
COPY --from=builder $SERVER_DIR/go.mod $SERVER_DIR/
|
COPY --from=builder $SERVER_DIR/go.mod $SERVER_DIR/
|
||||||
COPY --from=builder $SERVER_DIR/go.sum $SERVER_DIR/
|
COPY --from=builder $SERVER_DIR/go.sum $SERVER_DIR/
|
||||||
|
|
||||||
RUN go get github.com/openimsdk/gomake@v0.0.15-alpha.1
|
RUN go get github.com/openimsdk/gomake@v0.0.14-alpha.5
|
||||||
|
|
||||||
# Set the command to run when the container starts
|
# Set the command to run when the container starts
|
||||||
ENTRYPOINT ["sh", "-c", "mage start && tail -f /dev/null"]
|
ENTRYPOINT ["sh", "-c", "mage start && tail -f /dev/null"]
|
||||||
|
|||||||
40
README.md
40
README.md
@ -12,11 +12,11 @@
|
|||||||
[](https://goreportcard.com/report/github.com/openimsdk/open-im-server)
|
[](https://goreportcard.com/report/github.com/openimsdk/open-im-server)
|
||||||
[](https://pkg.go.dev/github.com/openimsdk/open-im-server/v3)
|
[](https://pkg.go.dev/github.com/openimsdk/open-im-server/v3)
|
||||||
[](https://github.com/openimsdk/open-im-server/blob/main/LICENSE)
|
[](https://github.com/openimsdk/open-im-server/blob/main/LICENSE)
|
||||||
[](https://join.slack.com/t/openimsdk/shared_invite/zt-2ijy1ys1f-O0aEDCr7ExRZ7mwsHAVg9A)
|
[](https://join.slack.com/t/openimsdk/shared_invite/zt-22720d66b-o_FvKxMTGXtcnnnHiMqe9Q)
|
||||||
[](https://www.bestpractices.dev/projects/8045)
|
[](https://www.bestpractices.dev/projects/8045)
|
||||||
[](https://github.com/openimsdk/open-im-server/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22good+first+issue%22)
|
[](https://github.com/openimsdk/open-im-server/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22good+first+issue%22)
|
||||||
[](https://golang.org/)
|
[](https://golang.org/)
|
||||||
[](https://gurubase.io/g/openim)
|
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<a href="./README.md">English</a> ·
|
<a href="./README.md">English</a> ·
|
||||||
@ -46,15 +46,16 @@
|
|||||||
<a href="./docs/readme/README_tr.md">Türkçe</a>
|
<a href="./docs/readme/README_tr.md">Türkçe</a>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
## :busts_in_silhouette: Join Our Community
|
## :busts_in_silhouette: Join Our Community
|
||||||
|
|
||||||
- 💬 [Follow us on Twitter](https://twitter.com/founder_im63606)
|
+ 💬 [Follow us on Twitter](https://twitter.com/founder_im63606)
|
||||||
- 🚀 [Join our Slack](https://join.slack.com/t/openimsdk/shared_invite/zt-2ijy1ys1f-O0aEDCr7ExRZ7mwsHAVg9A)
|
+ 🚀 [Join our Slack](https://join.slack.com/t/openimsdk/shared_invite/zt-2ijy1ys1f-O0aEDCr7ExRZ7mwsHAVg9A)
|
||||||
- :eyes: [Join our WeChat Group](https://openim-1253691595.cos.ap-nanjing.myqcloud.com/WechatIMG20.jpeg)
|
+ :eyes: [Join our WeChat Group](https://openim-1253691595.cos.ap-nanjing.myqcloud.com/WechatIMG20.jpeg)
|
||||||
|
|
||||||
## Ⓜ️ About OpenIM
|
## Ⓜ️ About OpenIM
|
||||||
|
|
||||||
@ -66,14 +67,13 @@ Unlike standalone chat applications such as Telegram, Signal, and Rocket.Chat, O
|
|||||||
|
|
||||||
**OpenIMSDK**, designed for **OpenIMServer**, is an IM SDK created specifically for integration into client applications. It supports various functionalities and modules:
|
**OpenIMSDK**, designed for **OpenIMServer**, is an IM SDK created specifically for integration into client applications. It supports various functionalities and modules:
|
||||||
|
|
||||||
- 🌟 Main Features:
|
+ 🌟 Main Features:
|
||||||
|
|
||||||
- 📦 Local Storage
|
- 📦 Local Storage
|
||||||
- 🔔 Listener Callbacks
|
- 🔔 Listener Callbacks
|
||||||
- 🛡️ API Wrapping
|
- 🛡️ API Wrapping
|
||||||
- 🌐 Connection Management
|
- 🌐 Connection Management
|
||||||
|
|
||||||
- 📚 Main Modules:
|
+ 📚 Main Modules:
|
||||||
1. 🚀 Initialization and Login
|
1. 🚀 Initialization and Login
|
||||||
2. 👤 User Management
|
2. 👤 User Management
|
||||||
3. 👫 Friends Management
|
3. 👫 Friends Management
|
||||||
@ -86,16 +86,16 @@ Built with Golang and supports cross-platform deployment to ensure a consistent
|
|||||||
|
|
||||||
## 🌐 Introduction to OpenIMServer
|
## 🌐 Introduction to OpenIMServer
|
||||||
|
|
||||||
- **OpenIMServer** features include:
|
+ **OpenIMServer** features include:
|
||||||
- 🌐 Microservices Architecture: Supports cluster mode, including a gateway and multiple rpc services.
|
- 🌐 Microservices Architecture: Supports cluster mode, including a gateway and multiple rpc services.
|
||||||
- 🚀 Diverse Deployment Options: Supports source code, Kubernetes, or Docker deployment.
|
- 🚀 Diverse Deployment Options: Supports source code, Kubernetes, or Docker deployment.
|
||||||
- Massive User Support: Supports large-scale groups with hundreds of thousands, millions of users, and billions of messages.
|
- Massive User Support: Supports large-scale groups with hundreds of thousands, millions of users, and billions of messages.
|
||||||
|
|
||||||
### Enhanced Business Functions:
|
### Enhanced Business Functions:
|
||||||
|
|
||||||
- **REST API**: Provides a REST API for business systems to enhance functionality, such as group creation and message pushing through backend interfaces.
|
+ **REST API**: Provides a REST API for business systems to enhance functionality, such as group creation and message pushing through backend interfaces.
|
||||||
|
|
||||||
- **Webhooks**: Expands business forms through callbacks, sending requests to business servers before or after certain events.
|
+ **Webhooks**: Expands business forms through callbacks, sending requests to business servers before or after certain events.
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
@ -107,8 +107,8 @@ Experience online for iOS/Android/H5/PC/Web:
|
|||||||
|
|
||||||
To facilitate user experience, we offer various deployment solutions. You can choose your preferred deployment method from the list below:
|
To facilitate user experience, we offer various deployment solutions. You can choose your preferred deployment method from the list below:
|
||||||
|
|
||||||
- **[Source Code Deployment Guide](https://docs.openim.io/guides/gettingStarted/imSourceCodeDeployment)**
|
+ **[Source Code Deployment Guide](https://docs.openim.io/guides/gettingStarted/imSourceCodeDeployment)**
|
||||||
- **[Docker Deployment Guide](https://docs.openim.io/guides/gettingStarted/dockerCompose)**
|
+ **[Docker Deployment Guide](https://docs.openim.io/guides/gettingStarted/dockerCompose)**
|
||||||
|
|
||||||
## System Support
|
## System Support
|
||||||
|
|
||||||
@ -116,22 +116,24 @@ Supports Linux, Windows, Mac systems, and ARM and AMD CPU architectures.
|
|||||||
|
|
||||||
## :link: Links
|
## :link: Links
|
||||||
|
|
||||||
- **[Developer Manual](https://docs.openim.io/)**
|
+ **[Developer Manual](https://docs.openim.io/)**
|
||||||
- **[Changelog](https://github.com/openimsdk/open-im-server/blob/main/CHANGELOG.md)**
|
+ **[Changelog](https://github.com/openimsdk/open-im-server/blob/main/CHANGELOG.md)**
|
||||||
|
|
||||||
## :writing_hand: How to Contribute
|
## :writing_hand: How to Contribute
|
||||||
|
|
||||||
We welcome contributions of any kind! Please make sure to read our [Contributor Documentation](https://github.com/openimsdk/open-im-server/blob/main/CONTRIBUTING.md) before submitting a Pull Request.
|
We welcome contributions of any kind! Please make sure to read our [Contributor Documentation](https://github.com/openimsdk/open-im-server/blob/main/CONTRIBUTING.md) before submitting a Pull Request.
|
||||||
|
|
||||||
- **[Report a Bug](https://github.com/openimsdk/open-im-server/issues/new?assignees=&labels=bug&template=bug_report.md&title=)**
|
+ **[Report a Bug](https://github.com/openimsdk/open-im-server/issues/new?assignees=&labels=bug&template=bug_report.md&title=)**
|
||||||
- **[Suggest a Feature](https://github.com/openimsdk/open-im-server/issues/new?assignees=&labels=enhancement&template=feature_request.md&title=)**
|
+ **[Suggest a Feature](https://github.com/openimsdk/open-im-server/issues/new?assignees=&labels=enhancement&template=feature_request.md&title=)**
|
||||||
- **[Submit a Pull Request](https://github.com/openimsdk/open-im-server/pulls)**
|
+ **[Submit a Pull Request](https://github.com/openimsdk/open-im-server/pulls)**
|
||||||
|
|
||||||
Thank you for contributing to building a powerful instant messaging solution!
|
Thank you for contributing to building a powerful instant messaging solution!
|
||||||
|
|
||||||
## :closed_book: License
|
## :closed_book: License
|
||||||
|
|
||||||
This software is licensed under the Apache License 2.0
|
OpenIMSDK is available under the Apache License 2.0. See the [LICENSE file](https://github.com/openimsdk/open-im-server/blob/main/LICENSE) for more information.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## 🔮 Thanks to our contributors!
|
## 🔮 Thanks to our contributors!
|
||||||
|
|
||||||
|
|||||||
@ -12,11 +12,12 @@
|
|||||||
[](https://goreportcard.com/report/github.com/openimsdk/open-im-server)
|
[](https://goreportcard.com/report/github.com/openimsdk/open-im-server)
|
||||||
[](https://pkg.go.dev/github.com/openimsdk/open-im-server/v3)
|
[](https://pkg.go.dev/github.com/openimsdk/open-im-server/v3)
|
||||||
[](https://github.com/openimsdk/open-im-server/blob/main/LICENSE)
|
[](https://github.com/openimsdk/open-im-server/blob/main/LICENSE)
|
||||||
[](https://join.slack.com/t/openimsdk/shared_invite/zt-2ijy1ys1f-O0aEDCr7ExRZ7mwsHAVg9A)
|
[](https://join.slack.com/t/openimsdk/shared_invite/zt-22720d66b-o_FvKxMTGXtcnnnHiMqe9Q)
|
||||||
[](https://www.bestpractices.dev/projects/8045)
|
[](https://www.bestpractices.dev/projects/8045)
|
||||||
[](https://github.com/openimsdk/open-im-server/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22good+first+issue%22)
|
[](https://github.com/openimsdk/open-im-server/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22good+first+issue%22)
|
||||||
[](https://golang.org/)
|
[](https://golang.org/)
|
||||||
|
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<a href="./README.md">English</a> ·
|
<a href="./README.md">English</a> ·
|
||||||
<a href="./README_zh_CN.md">中文</a> ·
|
<a href="./README_zh_CN.md">中文</a> ·
|
||||||
@ -45,15 +46,16 @@
|
|||||||
<a href="./docs/readme/README_tr.md">Türkçe</a>
|
<a href="./docs/readme/README_tr.md">Türkçe</a>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
## :busts_in_silhouette: 加入我们的社区
|
## :busts_in_silhouette: 加入我们的社区
|
||||||
|
|
||||||
- 💬 [关注我们的 Twitter](https://twitter.com/founder_im63606)
|
+ 💬 [关注我们的 Twitter](https://twitter.com/founder_im63606)
|
||||||
- 🚀 [加入我们的 Slack](https://join.slack.com/t/openimsdk/shared_invite/zt-2hljfom5u-9ZuzP3NfEKW~BJKbpLm0Hw)
|
+ 🚀 [加入我们的 Slack](https://join.slack.com/t/openimsdk/shared_invite/zt-2hljfom5u-9ZuzP3NfEKW~BJKbpLm0Hw)
|
||||||
- :eyes: [加入我们的微信群](https://openim-1253691595.cos.ap-nanjing.myqcloud.com/WechatIMG20.jpeg)
|
+ :eyes: [加入我们的微信群](https://openim-1253691595.cos.ap-nanjing.myqcloud.com/WechatIMG20.jpeg)
|
||||||
|
|
||||||
## Ⓜ️ 关于 OpenIM
|
## Ⓜ️ 关于 OpenIM
|
||||||
|
|
||||||
@ -65,14 +67,13 @@
|
|||||||
|
|
||||||
**OpenIMSDK** 是为 **OpenIMServer** 设计的IM SDK,专为集成到客户端应用而生。它支持多种功能和模块:
|
**OpenIMSDK** 是为 **OpenIMServer** 设计的IM SDK,专为集成到客户端应用而生。它支持多种功能和模块:
|
||||||
|
|
||||||
- 🌟 主要功能:
|
+ 🌟 主要功能:
|
||||||
|
|
||||||
- 📦 本地存储
|
- 📦 本地存储
|
||||||
- 🔔 监听器回调
|
- 🔔 监听器回调
|
||||||
- 🛡️ API封装
|
- 🛡️ API封装
|
||||||
- 🌐 连接管理
|
- 🌐 连接管理
|
||||||
|
|
||||||
- 📚 主要模块:
|
+ 📚 主要模块:
|
||||||
1. 🚀 初始化及登录
|
1. 🚀 初始化及登录
|
||||||
2. 👤 用户管理
|
2. 👤 用户管理
|
||||||
3. 👫 好友管理
|
3. 👫 好友管理
|
||||||
@ -85,19 +86,21 @@
|
|||||||
|
|
||||||
## 🌐 OpenIMServer 介绍
|
## 🌐 OpenIMServer 介绍
|
||||||
|
|
||||||
- **OpenIMServer** 的特点包括:
|
+ **OpenIMServer** 的特点包括:
|
||||||
- 🌐 微服务架构:支持集群模式,包括网关(gateway)和多个rpc服务。
|
- 🌐 微服务架构:支持集群模式,包括网关(gateway)和多个rpc服务。
|
||||||
- 🚀 多样的部署方式:支持源代码、Kubernetes或Docker部署。
|
- 🚀 多样的部署方式:支持源代码、Kubernetes或Docker部署。
|
||||||
- 海量用户支持:支持十万级超大群组,千万级用户和百亿级消息。
|
- 海量用户支持:支持十万级超大群组,千万级用户和百亿级消息。
|
||||||
|
|
||||||
### 增强的业务功能:
|
### 增强的业务功能:
|
||||||
|
|
||||||
- **REST API**:为业务系统提供 REST API,增加群组创建、消息推送等后台接口功能。
|
+ **REST API**:为业务系统提供REST API,增加群组创建、消息推送等后台接口功能。
|
||||||
|
|
||||||
- **Webhooks**:通过事件前后的回调,向业务服务器发送请求,扩展更多的业务形态。
|
+ **Webhooks**:通过事件前后的回调,向业务服务器发送请求,扩展更多的业务形态。
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## :rocket: 快速入门
|
## :rocket: 快速入门
|
||||||
|
|
||||||
在线体验iOS/Android/H5/PC/Web:
|
在线体验iOS/Android/H5/PC/Web:
|
||||||
@ -106,8 +109,8 @@
|
|||||||
|
|
||||||
为了便于用户体验,我们提供了多种部署解决方案,您可以根据以下列表选择适合您的部署方式:
|
为了便于用户体验,我们提供了多种部署解决方案,您可以根据以下列表选择适合您的部署方式:
|
||||||
|
|
||||||
- **[源代码部署指南](https://docs.openim.io/guides/gettingStarted/imSourceCodeDeployment)**
|
+ **[源代码部署指南](https://docs.openim.io/guides/gettingStarted/imSourceCodeDeployment)**
|
||||||
- **[Docker 部署指南](https://docs.openim.io/guides/gettingStarted/dockerCompose)**
|
+ **[Docker 部署指南](https://docs.openim.io/guides/gettingStarted/dockerCompose)**
|
||||||
|
|
||||||
## 系统支持
|
## 系统支持
|
||||||
|
|
||||||
@ -115,22 +118,22 @@
|
|||||||
|
|
||||||
## :link: 相关链接
|
## :link: 相关链接
|
||||||
|
|
||||||
- **[开发手册](https://docs.openim.io/)**
|
+ **[开发手册](https://docs.openim.io/)**
|
||||||
- **[更新日志](https://github.com/openimsdk/open-im-server/blob/main/CHANGELOG.md)**
|
+ **[更新日志](https://github.com/openimsdk/open-im-server/blob/main/CHANGELOG.md)**
|
||||||
|
|
||||||
## :writing_hand: 如何贡献
|
## :writing_hand: 如何贡献
|
||||||
|
|
||||||
我们欢迎任何形式的贡献!在提交 Pull Request 之前,请确保阅读我们的[贡献者文档](https://github.com/openimsdk/open-im-server/blob/main/CONTRIBUTING.md)
|
我们欢迎任何形式的贡献!在提交 Pull Request 之前,请确保阅读我们的[贡献者文档](https://github.com/openimsdk/open-im-server/blob/main/CONTRIBUTING.md)
|
||||||
|
|
||||||
- **[报告 Bug](https://github.com/openimsdk/open-im-server/issues/new?assignees=&labels=bug&template=bug_report.md&title=)**
|
+ **[报告 Bug](https://github.com/openimsdk/open-im-server/issues/new?assignees=&labels=bug&template=bug_report.md&title=)**
|
||||||
- **[提出新特性](https://github.com/openimsdk/open-im-server/issues/new?assignees=&labels=enhancement&template=feature_request.md&title=)**
|
+ **[提出新特性](https://github.com/openimsdk/open-im-server/issues/new?assignees=&labels=enhancement&template=feature_request.md&title=)**
|
||||||
- **[提交 Pull Request](https://github.com/openimsdk/open-im-server/pulls)**
|
+ **[提交 Pull Request](https://github.com/openimsdk/open-im-server/pulls)**
|
||||||
|
|
||||||
感谢您的贡献,一起来打造强大的即时通讯解决方案!
|
感谢您的贡献,一起来打造强大的即时通讯解决方案!
|
||||||
|
|
||||||
## :closed_book: 开源许可证 License
|
## :closed_book: 许可证
|
||||||
|
|
||||||
This software is licensed under the Apache License 2.0
|
OpenIMSDK 在 Apache License 2.0 许可下可用。查看[LICENSE 文件](https://github.com/openimsdk/open-im-server/blob/main/LICENSE)了解更多信息。
|
||||||
|
|
||||||
## 🔮 Thanks to our contributors!
|
## 🔮 Thanks to our contributors!
|
||||||
|
|
||||||
|
|||||||
@ -53,8 +53,15 @@ builds:
|
|||||||
- windows
|
- windows
|
||||||
- linux
|
- linux
|
||||||
goarch:
|
goarch:
|
||||||
|
- s390x
|
||||||
|
- mips64
|
||||||
|
- mips64le
|
||||||
- amd64
|
- amd64
|
||||||
|
- ppc64le
|
||||||
- arm64
|
- arm64
|
||||||
|
goarm:
|
||||||
|
- "6"
|
||||||
|
- "7"
|
||||||
|
|
||||||
- binary: openim-cmdutils
|
- binary: openim-cmdutils
|
||||||
id: openim-cmdutils
|
id: openim-cmdutils
|
||||||
@ -64,8 +71,15 @@ builds:
|
|||||||
- windows
|
- windows
|
||||||
- linux
|
- linux
|
||||||
goarch:
|
goarch:
|
||||||
|
- s390x
|
||||||
|
- mips64
|
||||||
|
- mips64le
|
||||||
- amd64
|
- amd64
|
||||||
|
- ppc64le
|
||||||
- arm64
|
- arm64
|
||||||
|
goarm:
|
||||||
|
- "6"
|
||||||
|
- "7"
|
||||||
|
|
||||||
- binary: openim-crontask
|
- binary: openim-crontask
|
||||||
id: openim-crontask
|
id: openim-crontask
|
||||||
@ -75,8 +89,15 @@ builds:
|
|||||||
- windows
|
- windows
|
||||||
- linux
|
- linux
|
||||||
goarch:
|
goarch:
|
||||||
|
- s390x
|
||||||
|
- mips64
|
||||||
|
- mips64le
|
||||||
- amd64
|
- amd64
|
||||||
|
- ppc64le
|
||||||
- arm64
|
- arm64
|
||||||
|
goarm:
|
||||||
|
- "6"
|
||||||
|
- "7"
|
||||||
|
|
||||||
- binary: openim-msggateway
|
- binary: openim-msggateway
|
||||||
id: openim-msggateway
|
id: openim-msggateway
|
||||||
@ -86,8 +107,15 @@ builds:
|
|||||||
- windows
|
- windows
|
||||||
- linux
|
- linux
|
||||||
goarch:
|
goarch:
|
||||||
|
- s390x
|
||||||
|
- mips64
|
||||||
|
- mips64le
|
||||||
- amd64
|
- amd64
|
||||||
|
- ppc64le
|
||||||
- arm64
|
- arm64
|
||||||
|
goarm:
|
||||||
|
- "6"
|
||||||
|
- "7"
|
||||||
|
|
||||||
- binary: openim-msgtransfer
|
- binary: openim-msgtransfer
|
||||||
id: openim-msgtransfer
|
id: openim-msgtransfer
|
||||||
@ -97,8 +125,15 @@ builds:
|
|||||||
- windows
|
- windows
|
||||||
- linux
|
- linux
|
||||||
goarch:
|
goarch:
|
||||||
|
- s390x
|
||||||
|
- mips64
|
||||||
|
- mips64le
|
||||||
- amd64
|
- amd64
|
||||||
|
- ppc64le
|
||||||
- arm64
|
- arm64
|
||||||
|
goarm:
|
||||||
|
- "6"
|
||||||
|
- "7"
|
||||||
|
|
||||||
- binary: openim-push
|
- binary: openim-push
|
||||||
id: openim-push
|
id: openim-push
|
||||||
@ -108,8 +143,15 @@ builds:
|
|||||||
- windows
|
- windows
|
||||||
- linux
|
- linux
|
||||||
goarch:
|
goarch:
|
||||||
|
- s390x
|
||||||
|
- mips64
|
||||||
|
- mips64le
|
||||||
- amd64
|
- amd64
|
||||||
|
- ppc64le
|
||||||
- arm64
|
- arm64
|
||||||
|
goarm:
|
||||||
|
- "6"
|
||||||
|
- "7"
|
||||||
|
|
||||||
- binary: openim-rpc-auth
|
- binary: openim-rpc-auth
|
||||||
id: openim-rpc-auth
|
id: openim-rpc-auth
|
||||||
@ -119,8 +161,15 @@ builds:
|
|||||||
- windows
|
- windows
|
||||||
- linux
|
- linux
|
||||||
goarch:
|
goarch:
|
||||||
|
- s390x
|
||||||
|
- mips64
|
||||||
|
- mips64le
|
||||||
- amd64
|
- amd64
|
||||||
|
- ppc64le
|
||||||
- arm64
|
- arm64
|
||||||
|
goarm:
|
||||||
|
- "6"
|
||||||
|
- "7"
|
||||||
|
|
||||||
- binary: openim-rpc-conversation
|
- binary: openim-rpc-conversation
|
||||||
id: openim-rpc-conversation
|
id: openim-rpc-conversation
|
||||||
@ -130,8 +179,15 @@ builds:
|
|||||||
- windows
|
- windows
|
||||||
- linux
|
- linux
|
||||||
goarch:
|
goarch:
|
||||||
|
- s390x
|
||||||
|
- mips64
|
||||||
|
- mips64le
|
||||||
- amd64
|
- amd64
|
||||||
|
- ppc64le
|
||||||
- arm64
|
- arm64
|
||||||
|
goarm:
|
||||||
|
- "6"
|
||||||
|
- "7"
|
||||||
|
|
||||||
- binary: openim-rpc-friend
|
- binary: openim-rpc-friend
|
||||||
id: openim-rpc-friend
|
id: openim-rpc-friend
|
||||||
@ -141,8 +197,15 @@ builds:
|
|||||||
- windows
|
- windows
|
||||||
- linux
|
- linux
|
||||||
goarch:
|
goarch:
|
||||||
|
- s390x
|
||||||
|
- mips64
|
||||||
|
- mips64le
|
||||||
- amd64
|
- amd64
|
||||||
|
- ppc64le
|
||||||
- arm64
|
- arm64
|
||||||
|
goarm:
|
||||||
|
- "6"
|
||||||
|
- "7"
|
||||||
|
|
||||||
- binary: openim-rpc-group
|
- binary: openim-rpc-group
|
||||||
id: openim-rpc-group
|
id: openim-rpc-group
|
||||||
@ -152,8 +215,15 @@ builds:
|
|||||||
- windows
|
- windows
|
||||||
- linux
|
- linux
|
||||||
goarch:
|
goarch:
|
||||||
|
- s390x
|
||||||
|
- mips64
|
||||||
|
- mips64le
|
||||||
- amd64
|
- amd64
|
||||||
|
- ppc64le
|
||||||
- arm64
|
- arm64
|
||||||
|
goarm:
|
||||||
|
- "6"
|
||||||
|
- "7"
|
||||||
|
|
||||||
- binary: openim-rpc-msg
|
- binary: openim-rpc-msg
|
||||||
id: openim-rpc-msg
|
id: openim-rpc-msg
|
||||||
@ -163,8 +233,15 @@ builds:
|
|||||||
- windows
|
- windows
|
||||||
- linux
|
- linux
|
||||||
goarch:
|
goarch:
|
||||||
|
- s390x
|
||||||
|
- mips64
|
||||||
|
- mips64le
|
||||||
- amd64
|
- amd64
|
||||||
|
- ppc64le
|
||||||
- arm64
|
- arm64
|
||||||
|
goarm:
|
||||||
|
- "6"
|
||||||
|
- "7"
|
||||||
|
|
||||||
- binary: openim-rpc-third
|
- binary: openim-rpc-third
|
||||||
id: openim-rpc-third
|
id: openim-rpc-third
|
||||||
@ -174,8 +251,15 @@ builds:
|
|||||||
- windows
|
- windows
|
||||||
- linux
|
- linux
|
||||||
goarch:
|
goarch:
|
||||||
|
- s390x
|
||||||
|
- mips64
|
||||||
|
- mips64le
|
||||||
- amd64
|
- amd64
|
||||||
|
- ppc64le
|
||||||
- arm64
|
- arm64
|
||||||
|
goarm:
|
||||||
|
- "6"
|
||||||
|
- "7"
|
||||||
|
|
||||||
- binary: openim-rpc-user
|
- binary: openim-rpc-user
|
||||||
id: openim-rpc-user
|
id: openim-rpc-user
|
||||||
@ -185,8 +269,15 @@ builds:
|
|||||||
- windows
|
- windows
|
||||||
- linux
|
- linux
|
||||||
goarch:
|
goarch:
|
||||||
|
- s390x
|
||||||
|
- mips64
|
||||||
|
- mips64le
|
||||||
- amd64
|
- amd64
|
||||||
|
- ppc64le
|
||||||
- arm64
|
- arm64
|
||||||
|
goarm:
|
||||||
|
- "6"
|
||||||
|
- "7"
|
||||||
|
|
||||||
|
|
||||||
# TODO:Need a script, such as the init - release to help binary to find the right directory
|
# TODO:Need a script, such as the init - release to help binary to find the right directory
|
||||||
|
|||||||
@ -1,24 +1,24 @@
|
|||||||
# # Copyright © 2023 OpenIM. All rights reserved.
|
# Copyright © 2023 OpenIM. All rights reserved.
|
||||||
# #
|
#
|
||||||
# # Licensed under the Apache License, Version 2.0 (the "License");
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
# # you may not use this file except in compliance with the License.
|
# you may not use this file except in compliance with the License.
|
||||||
# # You may obtain a copy of the License at
|
# You may obtain a copy of the License at
|
||||||
# #
|
#
|
||||||
# # http://www.apache.org/licenses/LICENSE-2.0
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
# #
|
#
|
||||||
# # Unless required by applicable law or agreed to in writing, software
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
# # distributed under the License is distributed on an "AS IS" BASIS,
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
# # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
# # See the License for the specific language governing permissions and
|
# See the License for the specific language governing permissions and
|
||||||
# # limitations under the License.
|
# limitations under the License.
|
||||||
|
|
||||||
# FROM BASE_IMAGE
|
FROM BASE_IMAGE
|
||||||
|
|
||||||
# WORKDIR ${SERVER_WORKDIR}
|
WORKDIR ${SERVER_WORKDIR}
|
||||||
|
|
||||||
# # Set HTTP proxy
|
# Set HTTP proxy
|
||||||
# ARG BINARY_NAME
|
ARG BINARY_NAME
|
||||||
|
|
||||||
# COPY BINARY_NAME ./bin/BINARY_NAME
|
COPY BINARY_NAME ./bin/BINARY_NAME
|
||||||
|
|
||||||
# ENTRYPOINT ["./bin/BINARY_NAME"]
|
ENTRYPOINT ["./bin/BINARY_NAME"]
|
||||||
@ -1,36 +1,44 @@
|
|||||||
# Use Go 1.22 Alpine as the base image for building the application
|
# Copyright © 2023 OpenIM. All rights reserved.
|
||||||
FROM golang:1.22-alpine AS builder
|
#
|
||||||
|
# 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.
|
||||||
|
|
||||||
# Define the base directory for the application as an environment variable
|
# OpenIM base image: https://github.com/openim-sigs/openim-base-image
|
||||||
ENV SERVER_DIR=/openim-server
|
|
||||||
|
|
||||||
# Set the working directory inside the container based on the environment variable
|
# Set go mod installation source and proxy
|
||||||
WORKDIR $SERVER_DIR
|
|
||||||
|
|
||||||
# Set the Go proxy to improve dependency resolution speed
|
FROM golang:1.20 AS builder
|
||||||
#ENV GOPROXY=https://goproxy.io,direct
|
|
||||||
|
ARG GO111MODULE=on
|
||||||
|
|
||||||
|
WORKDIR /openim/openim-server
|
||||||
|
|
||||||
|
ENV GO111MODULE=$GO111MODULE
|
||||||
|
ENV GOPROXY=$GOPROXY
|
||||||
|
|
||||||
|
COPY go.mod go.sum ./
|
||||||
|
RUN go mod download
|
||||||
|
|
||||||
# Copy all files from the current directory into the container
|
|
||||||
COPY . .
|
COPY . .
|
||||||
|
|
||||||
RUN go mod tidy
|
RUN make build BINS=openim-api
|
||||||
|
|
||||||
RUN go build -o _output/openim-api ./cmd/openim-api
|
RUN cp /openim/openim-server/_output/bin/platforms/$(go env GOOS)/$(go env GOARCH)/openim-api /usr/bin/openim-api
|
||||||
|
|
||||||
# Using Alpine Linux for the final image
|
# FROM ghcr.io/openim-sigs/openim-bash-image:latest
|
||||||
FROM alpine:latest
|
FROM ghcr.io/openim-sigs/openim-bash-image:latest
|
||||||
|
|
||||||
# Install necessary packages, such as bash
|
WORKDIR /openim/openim-server
|
||||||
RUN apk add --no-cache bash
|
|
||||||
|
|
||||||
# Set the environment and work directory
|
COPY --from=builder /usr/bin/openim-api ./bin/openim-api
|
||||||
ENV SERVER_DIR=/openim-server
|
|
||||||
WORKDIR $SERVER_DIR
|
|
||||||
|
|
||||||
|
ENTRYPOINT ["./bin/openim-api"]
|
||||||
# Copy the compiled binaries and mage from the builder image to the final image
|
|
||||||
COPY --from=builder $SERVER_DIR/_output $SERVER_DIR/_output
|
|
||||||
COPY --from=builder $SERVER_DIR/config $SERVER_DIR/config
|
|
||||||
|
|
||||||
# Set the command to run when the container starts
|
|
||||||
ENTRYPOINT ["sh", "-c", "_output/openim-api"]
|
|
||||||
|
|||||||
44
build/images/openim-cmdutils/Dockerfile
Normal file
44
build/images/openim-cmdutils/Dockerfile
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
# 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.
|
||||||
|
|
||||||
|
# OpenIM base image: https://github.com/openim-sigs/openim-base-image
|
||||||
|
|
||||||
|
# Set go mod installation source and proxy
|
||||||
|
|
||||||
|
FROM golang:1.20 AS builder
|
||||||
|
|
||||||
|
ARG GO111MODULE=on
|
||||||
|
|
||||||
|
WORKDIR /openim/openim-server
|
||||||
|
|
||||||
|
ENV GO111MODULE=$GO111MODULE
|
||||||
|
ENV GOPROXY=$GOPROXY
|
||||||
|
|
||||||
|
COPY go.mod go.sum ./
|
||||||
|
RUN go mod download
|
||||||
|
|
||||||
|
COPY . .
|
||||||
|
|
||||||
|
RUN make build BINS=openim-cmdutils
|
||||||
|
RUN cp /openim/openim-server/_output/bin/platforms/$(go env GOOS)/$(go env GOARCH)/openim-cmdutils /usr/bin/openim-cmdutils
|
||||||
|
|
||||||
|
FROM ghcr.io/openim-sigs/openim-bash-image:latest
|
||||||
|
|
||||||
|
WORKDIR /openim/openim-server
|
||||||
|
|
||||||
|
COPY --from=builder /usr/bin/openim-cmdutils ./bin/openim-cmdutils
|
||||||
|
|
||||||
|
ENTRYPOINT ["./bin/openim-cmdutils"]
|
||||||
|
|
||||||
|
CMD ["--help"]
|
||||||
@ -1,39 +1,44 @@
|
|||||||
# Use Go 1.22 Alpine as the base image for building the application
|
# Copyright © 2023 OpenIM. All rights reserved.
|
||||||
FROM golang:1.22-alpine AS builder
|
#
|
||||||
# Define the base directory for the application as an environment variable
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
ENV SERVER_DIR=/openim-server
|
# 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.
|
||||||
|
|
||||||
# Set the working directory inside the container based on the environment variable
|
# OpenIM base image: https://github.com/openim-sigs/openim-base-image
|
||||||
WORKDIR $SERVER_DIR
|
|
||||||
|
|
||||||
# Set the Go proxy to improve dependency resolution speed
|
# Set go mod installation source and proxy
|
||||||
|
|
||||||
#ENV GOPROXY=https://goproxy.io,direct
|
FROM golang:1.20 AS builder
|
||||||
|
|
||||||
|
ARG GO111MODULE=on
|
||||||
|
|
||||||
|
WORKDIR /openim/openim-server
|
||||||
|
|
||||||
|
ENV GO111MODULE=$GO111MODULE
|
||||||
|
ENV GOPROXY=$GOPROXY
|
||||||
|
|
||||||
|
COPY go.mod go.sum ./
|
||||||
|
RUN go mod download
|
||||||
|
|
||||||
# Copy all files from the current directory into the container
|
|
||||||
COPY . .
|
COPY . .
|
||||||
|
|
||||||
RUN go mod tidy
|
RUN make build BINS=openim-crontask
|
||||||
|
|
||||||
|
RUN cp /openim/openim-server/_output/bin/platforms/$(go env GOOS)/$(go env GOARCH)/openim-crontask /usr/bin/openim-crontask
|
||||||
|
|
||||||
|
# FROM ghcr.io/openim-sigs/openim-bash-image:latest
|
||||||
|
FROM ghcr.io/openim-sigs/openim-bash-image:latest
|
||||||
|
|
||||||
RUN go build -o _output/openim-crontask ./cmd/openim-crontask
|
WORKDIR /openim/openim-server
|
||||||
|
|
||||||
|
COPY --from=builder /usr/bin/openim-crontask ./bin/openim-crontask
|
||||||
|
|
||||||
# Using Alpine Linux for the final image
|
ENTRYPOINT ["./bin/openim-crontask"]
|
||||||
FROM alpine:latest
|
|
||||||
|
|
||||||
# Install necessary packages, such as bash
|
|
||||||
RUN apk add --no-cache bash
|
|
||||||
|
|
||||||
# Set the environment and work directory
|
|
||||||
ENV SERVER_DIR=/openim-server
|
|
||||||
WORKDIR $SERVER_DIR
|
|
||||||
|
|
||||||
|
|
||||||
# Copy the compiled binaries and mage from the builder image to the final image
|
|
||||||
COPY --from=builder $SERVER_DIR/_output $SERVER_DIR/_output
|
|
||||||
# COPY --from=builder $SERVER_DIR/config $SERVER_DIR/config
|
|
||||||
|
|
||||||
# Set the command to run when the container starts
|
|
||||||
ENTRYPOINT ["sh", "-c", "_output/openim-crontask"]
|
|
||||||
|
|||||||
@ -1,39 +1,44 @@
|
|||||||
# Use Go 1.22 Alpine as the base image for building the application
|
# Copyright © 2023 OpenIM. All rights reserved.
|
||||||
FROM golang:1.22-alpine AS builder
|
#
|
||||||
# Define the base directory for the application as an environment variable
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
ENV SERVER_DIR=/openim-server
|
# 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.
|
||||||
|
|
||||||
# Set the working directory inside the container based on the environment variable
|
# OpenIM base image: https://github.com/openim-sigs/openim-base-image
|
||||||
WORKDIR $SERVER_DIR
|
|
||||||
|
|
||||||
# Set the Go proxy to improve dependency resolution speed
|
# Set go mod installation source and proxy
|
||||||
|
|
||||||
#ENV GOPROXY=https://goproxy.io,direct
|
FROM golang:1.20 AS builder
|
||||||
|
|
||||||
|
ARG GO111MODULE=on
|
||||||
|
|
||||||
|
WORKDIR /openim/openim-server
|
||||||
|
|
||||||
|
ENV GO111MODULE=$GO111MODULE
|
||||||
|
ENV GOPROXY=$GOPROXY
|
||||||
|
|
||||||
|
COPY go.mod go.sum ./
|
||||||
|
RUN go mod download
|
||||||
|
|
||||||
# Copy all files from the current directory into the container
|
|
||||||
COPY . .
|
COPY . .
|
||||||
|
|
||||||
RUN go mod tidy
|
RUN make build BINS=openim-msggateway
|
||||||
|
|
||||||
|
RUN cp /openim/openim-server/_output/bin/platforms/$(go env GOOS)/$(go env GOARCH)/openim-msggateway /usr/bin/openim-msggateway
|
||||||
|
|
||||||
|
# FROM ghcr.io/openim-sigs/openim-bash-image:latest
|
||||||
|
FROM ghcr.io/openim-sigs/openim-bash-image:latest
|
||||||
|
|
||||||
RUN go build -o _output/openim-msggateway ./cmd/openim-msggateway
|
WORKDIR /openim/openim-server
|
||||||
|
|
||||||
|
COPY --from=builder /usr/bin/openim-msggateway ./bin/openim-msggateway
|
||||||
|
|
||||||
# Using Alpine Linux for the final image
|
ENTRYPOINT ["./bin/openim-msggateway"]
|
||||||
FROM alpine:latest
|
|
||||||
|
|
||||||
# Install necessary packages, such as bash
|
|
||||||
RUN apk add --no-cache bash
|
|
||||||
|
|
||||||
# Set the environment and work directory
|
|
||||||
ENV SERVER_DIR=/openim-server
|
|
||||||
WORKDIR $SERVER_DIR
|
|
||||||
|
|
||||||
|
|
||||||
# Copy the compiled binaries and mage from the builder image to the final image
|
|
||||||
COPY --from=builder $SERVER_DIR/_output $SERVER_DIR/_output
|
|
||||||
# COPY --from=builder $SERVER_DIR/config $SERVER_DIR/config
|
|
||||||
|
|
||||||
# Set the command to run when the container starts
|
|
||||||
ENTRYPOINT ["sh", "-c", "_output/openim-msggateway"]
|
|
||||||
|
|||||||
@ -1,39 +1,44 @@
|
|||||||
# Use Go 1.22 Alpine as the base image for building the application
|
# Copyright © 2023 OpenIM. All rights reserved.
|
||||||
FROM golang:1.22-alpine AS builder
|
#
|
||||||
# Define the base directory for the application as an environment variable
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
ENV SERVER_DIR=/openim-server
|
# 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.
|
||||||
|
|
||||||
# Set the working directory inside the container based on the environment variable
|
# OpenIM base image: https://github.com/openim-sigs/openim-base-image
|
||||||
WORKDIR $SERVER_DIR
|
|
||||||
|
|
||||||
# Set the Go proxy to improve dependency resolution speed
|
# Set go mod installation source and proxy
|
||||||
|
|
||||||
#ENV GOPROXY=https://goproxy.io,direct
|
FROM golang:1.20 AS builder
|
||||||
|
|
||||||
|
ARG GO111MODULE=on
|
||||||
|
|
||||||
|
WORKDIR /openim/openim-server
|
||||||
|
|
||||||
|
ENV GO111MODULE=$GO111MODULE
|
||||||
|
ENV GOPROXY=$GOPROXY
|
||||||
|
|
||||||
|
COPY go.mod go.sum ./
|
||||||
|
RUN go mod download
|
||||||
|
|
||||||
# Copy all files from the current directory into the container
|
|
||||||
COPY . .
|
COPY . .
|
||||||
|
|
||||||
RUN go mod tidy
|
RUN make build BINS=openim-msgtransfer
|
||||||
|
|
||||||
|
RUN cp /openim/openim-server/_output/bin/platforms/$(go env GOOS)/$(go env GOARCH)/openim-msgtransfer /usr/bin/openim-msgtransfer
|
||||||
|
|
||||||
|
# FROM ghcr.io/openim-sigs/openim-bash-image:latest
|
||||||
|
FROM ghcr.io/openim-sigs/openim-bash-image:latest
|
||||||
|
|
||||||
RUN go build -o _output/openim-msgtransfer ./cmd/openim-msgtransfer
|
WORKDIR /openim/openim-server
|
||||||
|
|
||||||
|
COPY --from=builder /usr/bin/openim-msgtransfer ./bin/openim-msgtransfer
|
||||||
|
|
||||||
# Using Alpine Linux for the final image
|
ENTRYPOINT ["./bin/openim-msgtransfer"]
|
||||||
FROM alpine:latest
|
|
||||||
|
|
||||||
# Install necessary packages, such as bash
|
|
||||||
RUN apk add --no-cache bash
|
|
||||||
|
|
||||||
# Set the environment and work directory
|
|
||||||
ENV SERVER_DIR=/openim-server
|
|
||||||
WORKDIR $SERVER_DIR
|
|
||||||
|
|
||||||
|
|
||||||
# Copy the compiled binaries and mage from the builder image to the final image
|
|
||||||
COPY --from=builder $SERVER_DIR/_output $SERVER_DIR/_output
|
|
||||||
# COPY --from=builder $SERVER_DIR/config $SERVER_DIR/config
|
|
||||||
|
|
||||||
# Set the command to run when the container starts
|
|
||||||
ENTRYPOINT ["sh", "-c", "_output/openim-msgtransfer"]
|
|
||||||
|
|||||||
@ -1,39 +1,44 @@
|
|||||||
# Use Go 1.22 Alpine as the base image for building the application
|
# Copyright © 2023 OpenIM. All rights reserved.
|
||||||
FROM golang:1.22-alpine AS builder
|
#
|
||||||
# Define the base directory for the application as an environment variable
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
ENV SERVER_DIR=/openim-server
|
# 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.
|
||||||
|
|
||||||
# Set the working directory inside the container based on the environment variable
|
# OpenIM base image: https://github.com/openim-sigs/openim-base-image
|
||||||
WORKDIR $SERVER_DIR
|
|
||||||
|
|
||||||
# Set the Go proxy to improve dependency resolution speed
|
# Set go mod installation source and proxy
|
||||||
|
|
||||||
#ENV GOPROXY=https://goproxy.io,direct
|
FROM golang:1.20 AS builder
|
||||||
|
|
||||||
|
ARG GO111MODULE=on
|
||||||
|
|
||||||
|
WORKDIR /openim/openim-server
|
||||||
|
|
||||||
|
ENV GO111MODULE=$GO111MODULE
|
||||||
|
ENV GOPROXY=$GOPROXY
|
||||||
|
|
||||||
|
COPY go.mod go.sum ./
|
||||||
|
RUN go mod download
|
||||||
|
|
||||||
# Copy all files from the current directory into the container
|
|
||||||
COPY . .
|
COPY . .
|
||||||
|
|
||||||
RUN go mod tidy
|
RUN make build BINS=openim-push
|
||||||
|
|
||||||
|
RUN cp /openim/openim-server/_output/bin/platforms/$(go env GOOS)/$(go env GOARCH)/openim-push /usr/bin/openim-push
|
||||||
|
|
||||||
|
# FROM ghcr.io/openim-sigs/openim-bash-image:latest
|
||||||
|
FROM ghcr.io/openim-sigs/openim-bash-image:latest
|
||||||
|
|
||||||
RUN go build -o _output/openim-push ./cmd/openim-push
|
WORKDIR /openim/openim-server
|
||||||
|
|
||||||
|
COPY --from=builder /usr/bin/openim-push ./bin/openim-push
|
||||||
|
|
||||||
# Using Alpine Linux for the final image
|
ENTRYPOINT ["./bin/openim-push"]
|
||||||
FROM alpine:latest
|
|
||||||
|
|
||||||
# Install necessary packages, such as bash
|
|
||||||
RUN apk add --no-cache bash
|
|
||||||
|
|
||||||
# Set the environment and work directory
|
|
||||||
ENV SERVER_DIR=/openim-server
|
|
||||||
WORKDIR $SERVER_DIR
|
|
||||||
|
|
||||||
|
|
||||||
# Copy the compiled binaries and mage from the builder image to the final image
|
|
||||||
COPY --from=builder $SERVER_DIR/_output $SERVER_DIR/_output
|
|
||||||
# COPY --from=builder $SERVER_DIR/config $SERVER_DIR/config
|
|
||||||
|
|
||||||
# Set the command to run when the container starts
|
|
||||||
ENTRYPOINT ["sh", "-c", "_output/openim-push"]
|
|
||||||
|
|||||||
@ -1,39 +1,44 @@
|
|||||||
# Use Go 1.22 Alpine as the base image for building the application
|
# Copyright © 2023 OpenIM. All rights reserved.
|
||||||
FROM golang:1.22-alpine AS builder
|
#
|
||||||
# Define the base directory for the application as an environment variable
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
ENV SERVER_DIR=/openim-server
|
# 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.
|
||||||
|
|
||||||
# Set the working directory inside the container based on the environment variable
|
# OpenIM base image: https://github.com/openim-sigs/openim-base-image
|
||||||
WORKDIR $SERVER_DIR
|
|
||||||
|
|
||||||
# Set the Go proxy to improve dependency resolution speed
|
# Set go mod installation source and proxy
|
||||||
|
|
||||||
#ENV GOPROXY=https://goproxy.io,direct
|
FROM golang:1.20 AS builder
|
||||||
|
|
||||||
|
ARG GO111MODULE=on
|
||||||
|
|
||||||
|
WORKDIR /openim/openim-server
|
||||||
|
|
||||||
|
ENV GO111MODULE=$GO111MODULE
|
||||||
|
ENV GOPROXY=$GOPROXY
|
||||||
|
|
||||||
|
COPY go.mod go.sum ./
|
||||||
|
RUN go mod download
|
||||||
|
|
||||||
# Copy all files from the current directory into the container
|
|
||||||
COPY . .
|
COPY . .
|
||||||
|
|
||||||
RUN go mod tidy
|
RUN make build BINS=openim-rpc-auth
|
||||||
|
|
||||||
|
RUN cp /openim/openim-server/_output/bin/platforms/$(go env GOOS)/$(go env GOARCH)/openim-rpc-auth /usr/bin/openim-rpc-auth
|
||||||
|
|
||||||
|
# FROM ghcr.io/openim-sigs/openim-bash-image:latest
|
||||||
|
FROM ghcr.io/openim-sigs/openim-bash-image:latest
|
||||||
|
|
||||||
RUN go build -o _output/openim-rpc-auth ./cmd/openim-rpc/openim-rpc-auth
|
WORKDIR /openim/openim-server
|
||||||
|
|
||||||
|
COPY --from=builder /usr/bin/openim-rpc-auth ./bin/openim-rpc-auth
|
||||||
|
|
||||||
# Using Alpine Linux for the final image
|
ENTRYPOINT ["./bin/openim-rpc-auth"]
|
||||||
FROM alpine:latest
|
|
||||||
|
|
||||||
# Install necessary packages, such as bash
|
|
||||||
RUN apk add --no-cache bash
|
|
||||||
|
|
||||||
# Set the environment and work directory
|
|
||||||
ENV SERVER_DIR=/openim-server
|
|
||||||
WORKDIR $SERVER_DIR
|
|
||||||
|
|
||||||
|
|
||||||
# Copy the compiled binaries and mage from the builder image to the final image
|
|
||||||
COPY --from=builder $SERVER_DIR/_output $SERVER_DIR/_output
|
|
||||||
# COPY --from=builder $SERVER_DIR/config $SERVER_DIR/config
|
|
||||||
|
|
||||||
# Set the command to run when the container starts
|
|
||||||
ENTRYPOINT ["sh", "-c", "_output/openim-rpc-auth"]
|
|
||||||
|
|||||||
@ -1,39 +1,44 @@
|
|||||||
# Use Go 1.22 Alpine as the base image for building the application
|
# Copyright © 2023 OpenIM. All rights reserved.
|
||||||
FROM golang:1.22-alpine AS builder
|
#
|
||||||
# Define the base directory for the application as an environment variable
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
ENV SERVER_DIR=/openim-server
|
# 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.
|
||||||
|
|
||||||
# Set the working directory inside the container based on the environment variable
|
# OpenIM base image: https://github.com/openim-sigs/openim-base-image
|
||||||
WORKDIR $SERVER_DIR
|
|
||||||
|
|
||||||
# Set the Go proxy to improve dependency resolution speed
|
# Set go mod installation source and proxy
|
||||||
|
|
||||||
#ENV GOPROXY=https://goproxy.io,direct
|
FROM golang:1.20 AS builder
|
||||||
|
|
||||||
|
ARG GO111MODULE=on
|
||||||
|
|
||||||
|
WORKDIR /openim/openim-server
|
||||||
|
|
||||||
|
ENV GO111MODULE=$GO111MODULE
|
||||||
|
ENV GOPROXY=$GOPROXY
|
||||||
|
|
||||||
|
COPY go.mod go.sum ./
|
||||||
|
RUN go mod download
|
||||||
|
|
||||||
# Copy all files from the current directory into the container
|
|
||||||
COPY . .
|
COPY . .
|
||||||
|
|
||||||
RUN go mod tidy
|
RUN make build BINS=openim-rpc-conversation
|
||||||
|
|
||||||
|
RUN cp /openim/openim-server/_output/bin/platforms/$(go env GOOS)/$(go env GOARCH)/openim-rpc-conversation /usr/bin/openim-rpc-conversation
|
||||||
|
|
||||||
|
# FROM ghcr.io/openim-sigs/openim-bash-image:latest
|
||||||
|
FROM ghcr.io/openim-sigs/openim-bash-image:latest
|
||||||
|
|
||||||
RUN go build -o _output/openim-rpc-conversation ./cmd/openim-rpc/openim-rpc-conversation
|
WORKDIR /openim/openim-server
|
||||||
|
|
||||||
|
COPY --from=builder /usr/bin/openim-rpc-conversation ./bin/openim-rpc-conversation
|
||||||
|
|
||||||
# Using Alpine Linux for the final image
|
ENTRYPOINT ["./bin/openim-rpc-conversation"]
|
||||||
FROM alpine:latest
|
|
||||||
|
|
||||||
# Install necessary packages, such as bash
|
|
||||||
RUN apk add --no-cache bash
|
|
||||||
|
|
||||||
# Set the environment and work directory
|
|
||||||
ENV SERVER_DIR=/openim-server
|
|
||||||
WORKDIR $SERVER_DIR
|
|
||||||
|
|
||||||
|
|
||||||
# Copy the compiled binaries and mage from the builder image to the final image
|
|
||||||
COPY --from=builder $SERVER_DIR/_output $SERVER_DIR/_output
|
|
||||||
# COPY --from=builder $SERVER_DIR/config $SERVER_DIR/config
|
|
||||||
|
|
||||||
# Set the command to run when the container starts
|
|
||||||
ENTRYPOINT ["sh", "-c", "_output/openim-rpc-conversation"]
|
|
||||||
|
|||||||
@ -1,39 +1,44 @@
|
|||||||
# Use Go 1.22 Alpine as the base image for building the application
|
# Copyright © 2023 OpenIM. All rights reserved.
|
||||||
FROM golang:1.22-alpine AS builder
|
#
|
||||||
# Define the base directory for the application as an environment variable
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
ENV SERVER_DIR=/openim-server
|
# 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.
|
||||||
|
|
||||||
# Set the working directory inside the container based on the environment variable
|
# OpenIM base image: https://github.com/openim-sigs/openim-base-image
|
||||||
WORKDIR $SERVER_DIR
|
|
||||||
|
|
||||||
# Set the Go proxy to improve dependency resolution speed
|
# Set go mod installation source and proxy
|
||||||
|
|
||||||
#ENV GOPROXY=https://goproxy.io,direct
|
FROM golang:1.20 AS builder
|
||||||
|
|
||||||
|
ARG GO111MODULE=on
|
||||||
|
|
||||||
|
WORKDIR /openim/openim-server
|
||||||
|
|
||||||
|
ENV GO111MODULE=$GO111MODULE
|
||||||
|
ENV GOPROXY=$GOPROXY
|
||||||
|
|
||||||
|
COPY go.mod go.sum ./
|
||||||
|
RUN go mod download
|
||||||
|
|
||||||
# Copy all files from the current directory into the container
|
|
||||||
COPY . .
|
COPY . .
|
||||||
|
|
||||||
RUN go mod tidy
|
RUN make build BINS=openim-rpc-friend
|
||||||
|
|
||||||
|
RUN cp /openim/openim-server/_output/bin/platforms/$(go env GOOS)/$(go env GOARCH)/openim-rpc-friend /usr/bin/openim-rpc-friend
|
||||||
|
|
||||||
|
# FROM ghcr.io/openim-sigs/openim-bash-image:latest
|
||||||
|
FROM ghcr.io/openim-sigs/openim-bash-image:latest
|
||||||
|
|
||||||
RUN go build -o _output/openim-rpc-friend ./cmd/openim-rpc/openim-rpc-friend
|
WORKDIR /openim/openim-server
|
||||||
|
|
||||||
|
COPY --from=builder /usr/bin/openim-rpc-friend ./bin/openim-rpc-friend
|
||||||
|
|
||||||
# Using Alpine Linux for the final image
|
ENTRYPOINT ["./bin/openim-rpc-friend"]
|
||||||
FROM alpine:latest
|
|
||||||
|
|
||||||
# Install necessary packages, such as bash
|
|
||||||
RUN apk add --no-cache bash
|
|
||||||
|
|
||||||
# Set the environment and work directory
|
|
||||||
ENV SERVER_DIR=/openim-server
|
|
||||||
WORKDIR $SERVER_DIR
|
|
||||||
|
|
||||||
|
|
||||||
# Copy the compiled binaries and mage from the builder image to the final image
|
|
||||||
COPY --from=builder $SERVER_DIR/_output $SERVER_DIR/_output
|
|
||||||
# COPY --from=builder $SERVER_DIR/config $SERVER_DIR/config
|
|
||||||
|
|
||||||
# Set the command to run when the container starts
|
|
||||||
ENTRYPOINT ["sh", "-c", "_output/openim-rpc-friend"]
|
|
||||||
|
|||||||
@ -1,39 +1,44 @@
|
|||||||
# Use Go 1.22 Alpine as the base image for building the application
|
# Copyright © 2023 OpenIM. All rights reserved.
|
||||||
FROM golang:1.22-alpine AS builder
|
#
|
||||||
# Define the base directory for the application as an environment variable
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
ENV SERVER_DIR=/openim-server
|
# 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.
|
||||||
|
|
||||||
# Set the working directory inside the container based on the environment variable
|
# OpenIM base image: https://github.com/openim-sigs/openim-base-image
|
||||||
WORKDIR $SERVER_DIR
|
|
||||||
|
|
||||||
# Set the Go proxy to improve dependency resolution speed
|
# Set go mod installation source and proxy
|
||||||
|
|
||||||
#ENV GOPROXY=https://goproxy.io,direct
|
FROM golang:1.20 AS builder
|
||||||
|
|
||||||
|
ARG GO111MODULE=on
|
||||||
|
|
||||||
|
WORKDIR /openim/openim-server
|
||||||
|
|
||||||
|
ENV GO111MODULE=$GO111MODULE
|
||||||
|
ENV GOPROXY=$GOPROXY
|
||||||
|
|
||||||
|
COPY go.mod go.sum ./
|
||||||
|
RUN go mod download
|
||||||
|
|
||||||
# Copy all files from the current directory into the container
|
|
||||||
COPY . .
|
COPY . .
|
||||||
|
|
||||||
RUN go mod tidy
|
RUN make build BINS=openim-rpc-group
|
||||||
|
|
||||||
|
RUN cp /openim/openim-server/_output/bin/platforms/$(go env GOOS)/$(go env GOARCH)/openim-rpc-group /usr/bin/openim-rpc-group
|
||||||
|
|
||||||
|
# FROM ghcr.io/openim-sigs/openim-bash-image:latest
|
||||||
|
FROM ghcr.io/openim-sigs/openim-bash-image:latest
|
||||||
|
|
||||||
RUN go build -o _output/openim-rpc-group ./cmd/openim-rpc/openim-rpc-group
|
WORKDIR /openim/openim-server
|
||||||
|
|
||||||
|
COPY --from=builder /usr/bin/openim-rpc-group ./bin/openim-rpc-group
|
||||||
|
|
||||||
# Using Alpine Linux for the final image
|
ENTRYPOINT ["./bin/openim-rpc-group"]
|
||||||
FROM alpine:latest
|
|
||||||
|
|
||||||
# Install necessary packages, such as bash
|
|
||||||
RUN apk add --no-cache bash
|
|
||||||
|
|
||||||
# Set the environment and work directory
|
|
||||||
ENV SERVER_DIR=/openim-server
|
|
||||||
WORKDIR $SERVER_DIR
|
|
||||||
|
|
||||||
|
|
||||||
# Copy the compiled binaries and mage from the builder image to the final image
|
|
||||||
COPY --from=builder $SERVER_DIR/_output $SERVER_DIR/_output
|
|
||||||
# COPY --from=builder $SERVER_DIR/config $SERVER_DIR/config
|
|
||||||
|
|
||||||
# Set the command to run when the container starts
|
|
||||||
ENTRYPOINT ["sh", "-c", "_output/openim-rpc-group"]
|
|
||||||
|
|||||||
@ -1,39 +1,44 @@
|
|||||||
# Use Go 1.22 Alpine as the base image for building the application
|
# Copyright © 2023 OpenIM. All rights reserved.
|
||||||
FROM golang:1.22-alpine AS builder
|
#
|
||||||
# Define the base directory for the application as an environment variable
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
ENV SERVER_DIR=/openim-server
|
# 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.
|
||||||
|
|
||||||
# Set the working directory inside the container based on the environment variable
|
# OpenIM base image: https://github.com/openim-sigs/openim-base-image
|
||||||
WORKDIR $SERVER_DIR
|
|
||||||
|
|
||||||
# Set the Go proxy to improve dependency resolution speed
|
# Set go mod installation source and proxy
|
||||||
|
|
||||||
#ENV GOPROXY=https://goproxy.io,direct
|
FROM golang:1.20 AS builder
|
||||||
|
|
||||||
|
ARG GO111MODULE=on
|
||||||
|
|
||||||
|
WORKDIR /openim/openim-server
|
||||||
|
|
||||||
|
ENV GO111MODULE=$GO111MODULE
|
||||||
|
ENV GOPROXY=$GOPROXY
|
||||||
|
|
||||||
|
COPY go.mod go.sum ./
|
||||||
|
RUN go mod download
|
||||||
|
|
||||||
# Copy all files from the current directory into the container
|
|
||||||
COPY . .
|
COPY . .
|
||||||
|
|
||||||
RUN go mod tidy
|
RUN make build BINS=openim-rpc-msg
|
||||||
|
|
||||||
|
RUN cp /openim/openim-server/_output/bin/platforms/$(go env GOOS)/$(go env GOARCH)/openim-rpc-msg /usr/bin/openim-rpc-msg
|
||||||
|
|
||||||
|
# FROM ghcr.io/openim-sigs/openim-bash-image:latest
|
||||||
|
FROM ghcr.io/openim-sigs/openim-bash-image:latest
|
||||||
|
|
||||||
RUN go build -o _output/openim-rpc-msg ./cmd/openim-rpc/openim-rpc-msg
|
WORKDIR /openim/openim-server
|
||||||
|
|
||||||
|
COPY --from=builder /usr/bin/openim-rpc-msg ./bin/openim-rpc-msg
|
||||||
|
|
||||||
# Using Alpine Linux for the final image
|
ENTRYPOINT ["./bin/openim-rpc-msg"]
|
||||||
FROM alpine:latest
|
|
||||||
|
|
||||||
# Install necessary packages, such as bash
|
|
||||||
RUN apk add --no-cache bash
|
|
||||||
|
|
||||||
# Set the environment and work directory
|
|
||||||
ENV SERVER_DIR=/openim-server
|
|
||||||
WORKDIR $SERVER_DIR
|
|
||||||
|
|
||||||
|
|
||||||
# Copy the compiled binaries and mage from the builder image to the final image
|
|
||||||
COPY --from=builder $SERVER_DIR/_output $SERVER_DIR/_output
|
|
||||||
# COPY --from=builder $SERVER_DIR/config $SERVER_DIR/config
|
|
||||||
|
|
||||||
# Set the command to run when the container starts
|
|
||||||
ENTRYPOINT ["sh", "-c", "_output/openim-rpc-msg"]
|
|
||||||
|
|||||||
@ -1,39 +1,44 @@
|
|||||||
# Use Go 1.22 Alpine as the base image for building the application
|
# Copyright © 2023 OpenIM. All rights reserved.
|
||||||
FROM golang:1.22-alpine AS builder
|
#
|
||||||
# Define the base directory for the application as an environment variable
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
ENV SERVER_DIR=/openim-server
|
# 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.
|
||||||
|
|
||||||
# Set the working directory inside the container based on the environment variable
|
# OpenIM base image: https://github.com/openim-sigs/openim-base-image
|
||||||
WORKDIR $SERVER_DIR
|
|
||||||
|
|
||||||
# Set the Go proxy to improve dependency resolution speed
|
# Set go mod installation source and proxy
|
||||||
|
|
||||||
#ENV GOPROXY=https://goproxy.io,direct
|
FROM golang:1.20 AS builder
|
||||||
|
|
||||||
|
ARG GO111MODULE=on
|
||||||
|
|
||||||
|
WORKDIR /openim/openim-server
|
||||||
|
|
||||||
|
ENV GO111MODULE=$GO111MODULE
|
||||||
|
ENV GOPROXY=$GOPROXY
|
||||||
|
|
||||||
|
COPY go.mod go.sum ./
|
||||||
|
RUN go mod download
|
||||||
|
|
||||||
# Copy all files from the current directory into the container
|
|
||||||
COPY . .
|
COPY . .
|
||||||
|
|
||||||
RUN go mod tidy
|
RUN make build BINS=openim-rpc-third
|
||||||
|
|
||||||
|
RUN cp /openim/openim-server/_output/bin/platforms/$(go env GOOS)/$(go env GOARCH)/openim-rpc-third /usr/bin/openim-rpc-third
|
||||||
|
|
||||||
|
# FROM ghcr.io/openim-sigs/openim-bash-image:latest
|
||||||
|
FROM ghcr.io/openim-sigs/openim-bash-image:latest
|
||||||
|
|
||||||
RUN go build -o _output/openim-rpc-third ./cmd/openim-rpc/openim-rpc-third
|
WORKDIR /openim/openim-server
|
||||||
|
|
||||||
|
COPY --from=builder /usr/bin/openim-rpc-third ./bin/openim-rpc-third
|
||||||
|
|
||||||
# Using Alpine Linux for the final image
|
ENTRYPOINT ["./bin/openim-rpc-third"]
|
||||||
FROM alpine:latest
|
|
||||||
|
|
||||||
# Install necessary packages, such as bash
|
|
||||||
RUN apk add --no-cache bash
|
|
||||||
|
|
||||||
# Set the environment and work directory
|
|
||||||
ENV SERVER_DIR=/openim-server
|
|
||||||
WORKDIR $SERVER_DIR
|
|
||||||
|
|
||||||
|
|
||||||
# Copy the compiled binaries and mage from the builder image to the final image
|
|
||||||
COPY --from=builder $SERVER_DIR/_output $SERVER_DIR/_output
|
|
||||||
# COPY --from=builder $SERVER_DIR/config $SERVER_DIR/config
|
|
||||||
|
|
||||||
# Set the command to run when the container starts
|
|
||||||
ENTRYPOINT ["sh", "-c", "_output/openim-rpc-third"]
|
|
||||||
|
|||||||
@ -1,37 +1,44 @@
|
|||||||
# Use Go 1.22 Alpine as the base image for building the application
|
# Copyright © 2023 OpenIM. All rights reserved.
|
||||||
FROM golang:1.22-alpine AS builder
|
#
|
||||||
# Define the base directory for the application as an environment variable
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
ENV SERVER_DIR=/openim-server
|
# 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.
|
||||||
|
|
||||||
# Set the working directory inside the container based on the environment variable
|
# OpenIM base image: https://github.com/openim-sigs/openim-base-image
|
||||||
WORKDIR $SERVER_DIR
|
|
||||||
|
|
||||||
# Set the Go proxy to improve dependency resolution speed
|
# Set go mod installation source and proxy
|
||||||
|
|
||||||
#ENV GOPROXY=https://goproxy.io,direct
|
FROM golang:1.20 AS builder
|
||||||
|
|
||||||
|
ARG GO111MODULE=on
|
||||||
|
|
||||||
|
WORKDIR /openim/openim-server
|
||||||
|
|
||||||
|
ENV GO111MODULE=$GO111MODULE
|
||||||
|
ENV GOPROXY=$GOPROXY
|
||||||
|
|
||||||
|
COPY go.mod go.sum ./
|
||||||
|
RUN go mod download
|
||||||
|
|
||||||
# Copy all files from the current directory into the container
|
|
||||||
COPY . .
|
COPY . .
|
||||||
|
|
||||||
RUN go mod tidy
|
RUN make build BINS=openim-rpc-user
|
||||||
|
|
||||||
RUN go build -o _output/openim-rpc-user ./cmd/openim-rpc/openim-rpc-user
|
RUN cp /openim/openim-server/_output/bin/platforms/$(go env GOOS)/$(go env GOARCH)/openim-rpc-user /usr/bin/openim-rpc-user
|
||||||
|
|
||||||
|
# FROM ghcr.io/openim-sigs/openim-bash-image:latest
|
||||||
|
FROM ghcr.io/openim-sigs/openim-bash-image:latest
|
||||||
|
|
||||||
# Using Alpine Linux for the final image
|
WORKDIR /openim/openim-server
|
||||||
FROM alpine:latest
|
|
||||||
|
|
||||||
# Install necessary packages, such as bash
|
COPY --from=builder /usr/bin/openim-rpc-user ./bin/openim-rpc-user
|
||||||
RUN apk add --no-cache bash
|
|
||||||
|
|
||||||
# Set the environment and work directory
|
ENTRYPOINT ["./bin/openim-rpc-user"]
|
||||||
ENV SERVER_DIR=/openim-server
|
|
||||||
WORKDIR $SERVER_DIR
|
|
||||||
|
|
||||||
|
|
||||||
# Copy the compiled binaries and mage from the builder image to the final image
|
|
||||||
COPY --from=builder $SERVER_DIR/_output $SERVER_DIR/_output
|
|
||||||
# COPY --from=builder $SERVER_DIR/config $SERVER_DIR/config
|
|
||||||
|
|
||||||
# Set the command to run when the container starts
|
|
||||||
ENTRYPOINT ["sh", "-c", "_output/openim-rpc-user"]
|
|
||||||
|
|||||||
@ -1,108 +1,48 @@
|
|||||||
# # Copyright © 2023 OpenIM. All rights reserved.
|
# 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.
|
|
||||||
|
|
||||||
# # OpenIM base image: https://github.com/openim-sigs/openim-base-image
|
|
||||||
|
|
||||||
# # Set go mod installation source and proxy
|
|
||||||
|
|
||||||
# FROM golang:1.20 AS builder
|
|
||||||
|
|
||||||
#
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
# WORKDIR /openim/openim-server
|
# you may not use this file except in compliance with the License.
|
||||||
|
# You may obtain a copy of the License at
|
||||||
#
|
#
|
||||||
# ENV GOPROXY=$GOPROXY
|
# 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.
|
||||||
|
|
||||||
# COPY go.mod go.sum ./
|
# OpenIM base image: https://github.com/openim-sigs/openim-base-image
|
||||||
# RUN go mod download
|
|
||||||
|
|
||||||
# COPY . .
|
# Set go mod installation source and proxy
|
||||||
|
|
||||||
# RUN make clean
|
FROM golang:1.20 AS builder
|
||||||
# RUN make build BINS=component
|
|
||||||
|
|
||||||
# # FROM ghcr.io/openim-sigs/openim-bash-image:latest
|
ARG GO111MODULE=on
|
||||||
# FROM ghcr.io/openim-sigs/openim-bash-image:latest
|
|
||||||
|
|
||||||
# WORKDIR /openim/openim-server
|
WORKDIR /openim/openim-server
|
||||||
|
|
||||||
# COPY --from=builder /openim/openim-server/_output/bin/tools /openim/openim-server/_output/bin/tools/
|
ENV GO111MODULE=$GO111MODULE
|
||||||
# COPY --from=builder /openim/openim-server/config /openim/openim-server/config
|
ENV GOPROXY=$GOPROXY
|
||||||
|
|
||||||
# ENV OPENIM_SERVER_CONFIG_NAME=/openim/openim-server/config
|
|
||||||
|
|
||||||
# RUN mv ${OPENIM_SERVER_BINDIR}/platforms/$(get_os)/$(get_arch)/component /usr/bin/component
|
|
||||||
|
|
||||||
# ENTRYPOINT ["bash", "-c", "component -c $OPENIM_SERVER_CONFIG_NAME"]
|
|
||||||
|
|
||||||
|
|
||||||
# Use Go 1.22 Alpine as the base image for building the application
|
|
||||||
FROM golang:1.22-alpine AS builder
|
|
||||||
# Define the base directory for the application as an environment variable
|
|
||||||
ENV SERVER_DIR=/openim-server
|
|
||||||
|
|
||||||
# Set the working directory inside the container based on the environment variable
|
|
||||||
WORKDIR $SERVER_DIR
|
|
||||||
|
|
||||||
# Set the Go proxy to improve dependency resolution speed
|
|
||||||
|
|
||||||
#ENV GOPROXY=https://goproxy.io,direct
|
|
||||||
|
|
||||||
# Copy all files from the current directory into the container
|
|
||||||
COPY . .
|
|
||||||
|
|
||||||
|
COPY go.mod go.sum ./
|
||||||
RUN go mod download
|
RUN go mod download
|
||||||
|
|
||||||
# Install Mage to use for building the application
|
COPY . .
|
||||||
RUN go install github.com/magefile/mage@v1.15.0
|
|
||||||
|
|
||||||
# ENV BINS=openim-rpc-user
|
RUN make clean
|
||||||
|
RUN make build BINS=component
|
||||||
|
|
||||||
# Optionally build your application if needed
|
# FROM ghcr.io/openim-sigs/openim-bash-image:latest
|
||||||
# RUN mage build ${BINS} check-free-memory seq || true
|
FROM ghcr.io/openim-sigs/openim-bash-image:latest
|
||||||
RUN mage build check-free-memory seq || true
|
|
||||||
|
|
||||||
# Using Alpine Linux with Go environment for the final image
|
WORKDIR /openim/openim-server
|
||||||
FROM golang:1.22-alpine
|
|
||||||
|
|
||||||
# Install necessary packages, such as bash
|
COPY --from=builder /openim/openim-server/_output/bin/tools /openim/openim-server/_output/bin/tools/
|
||||||
RUN apk add bash
|
COPY --from=builder /openim/openim-server/config /openim/openim-server/config
|
||||||
|
|
||||||
# Set the environment and work directory
|
ENV OPENIM_SERVER_CONFIG_NAME=/openim/openim-server/config
|
||||||
ENV SERVER_DIR=/openim-server
|
|
||||||
WORKDIR $SERVER_DIR
|
|
||||||
|
|
||||||
|
RUN mv ${OPENIM_SERVER_BINDIR}/platforms/$(get_os)/$(get_arch)/component /usr/bin/component
|
||||||
|
|
||||||
# Copy the compiled binaries and mage from the builder image to the final image
|
ENTRYPOINT ["bash", "-c", "component -c $OPENIM_SERVER_CONFIG_NAME"]
|
||||||
COPY --from=builder $SERVER_DIR/_output $SERVER_DIR/_output
|
|
||||||
COPY --from=builder $SERVER_DIR/config $SERVER_DIR/config
|
|
||||||
COPY --from=builder /go/bin/mage /usr/local/bin/mage
|
|
||||||
COPY --from=builder $SERVER_DIR/magefile_windows.go $SERVER_DIR/
|
|
||||||
COPY --from=builder $SERVER_DIR/magefile_unix.go $SERVER_DIR/
|
|
||||||
COPY --from=builder $SERVER_DIR/magefile.go $SERVER_DIR/
|
|
||||||
# COPY --from=builder $SERVER_DIR/start-config.yml $SERVER_DIR/
|
|
||||||
COPY --from=builder $SERVER_DIR/go.mod $SERVER_DIR/
|
|
||||||
COPY --from=builder $SERVER_DIR/go.sum $SERVER_DIR/
|
|
||||||
|
|
||||||
|
|
||||||
RUN echo -e "serviceBinaries:\n \n" \
|
|
||||||
> $SERVER_DIR/start-config.yml && \
|
|
||||||
echo -e "toolBinaries:\n - check-free-memory\n - seq\n" >> $SERVER_DIR/start-config.yml && \
|
|
||||||
echo "maxFileDescriptors: 10000" >> $SERVER_DIR/start-config.yml
|
|
||||||
|
|
||||||
RUN go get github.com/openimsdk/gomake@v0.0.15-alpha.1
|
|
||||||
|
|
||||||
# Set the command to run when the container starts
|
|
||||||
ENTRYPOINT ["sh", "-c", "mage start && tail -f /dev/null"]
|
|
||||||
|
|||||||
406
cmd/main.go
406
cmd/main.go
@ -1,406 +0,0 @@
|
|||||||
package main
|
|
||||||
|
|
||||||
import (
|
|
||||||
"bytes"
|
|
||||||
"context"
|
|
||||||
"flag"
|
|
||||||
"fmt"
|
|
||||||
"net"
|
|
||||||
"os"
|
|
||||||
"os/signal"
|
|
||||||
"path"
|
|
||||||
"path/filepath"
|
|
||||||
"reflect"
|
|
||||||
"runtime"
|
|
||||||
"strings"
|
|
||||||
"sync"
|
|
||||||
"syscall"
|
|
||||||
"time"
|
|
||||||
|
|
||||||
"github.com/mitchellh/mapstructure"
|
|
||||||
"github.com/openimsdk/open-im-server/v3/internal/api"
|
|
||||||
"github.com/openimsdk/open-im-server/v3/internal/msggateway"
|
|
||||||
"github.com/openimsdk/open-im-server/v3/internal/msgtransfer"
|
|
||||||
"github.com/openimsdk/open-im-server/v3/internal/push"
|
|
||||||
"github.com/openimsdk/open-im-server/v3/internal/rpc/auth"
|
|
||||||
"github.com/openimsdk/open-im-server/v3/internal/rpc/conversation"
|
|
||||||
"github.com/openimsdk/open-im-server/v3/internal/rpc/group"
|
|
||||||
"github.com/openimsdk/open-im-server/v3/internal/rpc/msg"
|
|
||||||
"github.com/openimsdk/open-im-server/v3/internal/rpc/relation"
|
|
||||||
"github.com/openimsdk/open-im-server/v3/internal/rpc/third"
|
|
||||||
"github.com/openimsdk/open-im-server/v3/internal/rpc/user"
|
|
||||||
"github.com/openimsdk/open-im-server/v3/internal/tools/cron"
|
|
||||||
"github.com/openimsdk/open-im-server/v3/pkg/common/config"
|
|
||||||
"github.com/openimsdk/open-im-server/v3/pkg/common/prommetrics"
|
|
||||||
"github.com/openimsdk/open-im-server/v3/version"
|
|
||||||
"github.com/openimsdk/tools/discovery"
|
|
||||||
"github.com/openimsdk/tools/discovery/standalone"
|
|
||||||
"github.com/openimsdk/tools/log"
|
|
||||||
"github.com/openimsdk/tools/system/program"
|
|
||||||
"github.com/openimsdk/tools/utils/datautil"
|
|
||||||
"github.com/spf13/viper"
|
|
||||||
"google.golang.org/grpc"
|
|
||||||
)
|
|
||||||
|
|
||||||
func init() {
|
|
||||||
config.SetStandalone()
|
|
||||||
prommetrics.RegistryAll()
|
|
||||||
}
|
|
||||||
|
|
||||||
func main() {
|
|
||||||
var configPath string
|
|
||||||
flag.StringVar(&configPath, "c", "", "config path")
|
|
||||||
flag.Parse()
|
|
||||||
if configPath == "" {
|
|
||||||
_, _ = fmt.Fprintln(os.Stderr, "config path is empty")
|
|
||||||
os.Exit(1)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
cmd := newCmds(configPath)
|
|
||||||
putCmd(cmd, false, auth.Start)
|
|
||||||
putCmd(cmd, false, conversation.Start)
|
|
||||||
putCmd(cmd, false, relation.Start)
|
|
||||||
putCmd(cmd, false, group.Start)
|
|
||||||
putCmd(cmd, false, msg.Start)
|
|
||||||
putCmd(cmd, false, third.Start)
|
|
||||||
putCmd(cmd, false, user.Start)
|
|
||||||
putCmd(cmd, false, push.Start)
|
|
||||||
putCmd(cmd, true, msggateway.Start)
|
|
||||||
putCmd(cmd, true, msgtransfer.Start)
|
|
||||||
putCmd(cmd, true, api.Start)
|
|
||||||
putCmd(cmd, true, cron.Start)
|
|
||||||
ctx := context.Background()
|
|
||||||
if err := cmd.run(ctx); err != nil {
|
|
||||||
_, _ = fmt.Fprintf(os.Stderr, "server exit %s", err)
|
|
||||||
os.Exit(1)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func newCmds(confPath string) *cmds {
|
|
||||||
return &cmds{confPath: confPath}
|
|
||||||
}
|
|
||||||
|
|
||||||
type cmdName struct {
|
|
||||||
Name string
|
|
||||||
Func func(ctx context.Context) error
|
|
||||||
Block bool
|
|
||||||
}
|
|
||||||
type cmds struct {
|
|
||||||
confPath string
|
|
||||||
cmds []cmdName
|
|
||||||
config config.AllConfig
|
|
||||||
conf map[string]reflect.Value
|
|
||||||
}
|
|
||||||
|
|
||||||
func (x *cmds) getTypePath(typ reflect.Type) string {
|
|
||||||
return path.Join(typ.PkgPath(), typ.Name())
|
|
||||||
}
|
|
||||||
|
|
||||||
func (x *cmds) initDiscovery() {
|
|
||||||
x.config.Discovery.Enable = "standalone"
|
|
||||||
vof := reflect.ValueOf(&x.config.Discovery.RpcService).Elem()
|
|
||||||
tof := reflect.TypeOf(&x.config.Discovery.RpcService).Elem()
|
|
||||||
num := tof.NumField()
|
|
||||||
for i := 0; i < num; i++ {
|
|
||||||
field := tof.Field(i)
|
|
||||||
if !field.IsExported() {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
if field.Type.Kind() != reflect.String {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
vof.Field(i).SetString(field.Name)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (x *cmds) initAllConfig() error {
|
|
||||||
x.conf = make(map[string]reflect.Value)
|
|
||||||
vof := reflect.ValueOf(&x.config).Elem()
|
|
||||||
num := vof.NumField()
|
|
||||||
for i := 0; i < num; i++ {
|
|
||||||
field := vof.Field(i)
|
|
||||||
for ptr := true; ptr; {
|
|
||||||
if field.Kind() == reflect.Ptr {
|
|
||||||
field = field.Elem()
|
|
||||||
} else {
|
|
||||||
ptr = false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
x.conf[x.getTypePath(field.Type())] = field
|
|
||||||
val := field.Addr().Interface()
|
|
||||||
name := val.(interface{ GetConfigFileName() string }).GetConfigFileName()
|
|
||||||
confData, err := os.ReadFile(filepath.Join(x.confPath, name))
|
|
||||||
if err != nil {
|
|
||||||
if os.IsNotExist(err) {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
v := viper.New()
|
|
||||||
v.SetConfigType("yaml")
|
|
||||||
if err := v.ReadConfig(bytes.NewReader(confData)); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
opt := func(conf *mapstructure.DecoderConfig) {
|
|
||||||
conf.TagName = config.StructTagName
|
|
||||||
}
|
|
||||||
if err := v.Unmarshal(val, opt); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
x.initDiscovery()
|
|
||||||
x.config.Redis.Disable = false
|
|
||||||
x.config.LocalCache = config.LocalCache{}
|
|
||||||
config.InitNotification(&x.config.Notification)
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (x *cmds) parseConf(conf any) error {
|
|
||||||
vof := reflect.ValueOf(conf)
|
|
||||||
for {
|
|
||||||
if vof.Kind() == reflect.Ptr {
|
|
||||||
vof = vof.Elem()
|
|
||||||
} else {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
tof := vof.Type()
|
|
||||||
numField := vof.NumField()
|
|
||||||
for i := 0; i < numField; i++ {
|
|
||||||
typeField := tof.Field(i)
|
|
||||||
if !typeField.IsExported() {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
field := vof.Field(i)
|
|
||||||
pkt := x.getTypePath(field.Type())
|
|
||||||
val, ok := x.conf[pkt]
|
|
||||||
if !ok {
|
|
||||||
switch field.Interface().(type) {
|
|
||||||
case config.Index:
|
|
||||||
case config.Path:
|
|
||||||
field.SetString(x.confPath)
|
|
||||||
case config.AllConfig:
|
|
||||||
field.Set(reflect.ValueOf(x.config))
|
|
||||||
case *config.AllConfig:
|
|
||||||
field.Set(reflect.ValueOf(&x.config))
|
|
||||||
default:
|
|
||||||
return fmt.Errorf("config field %s %s not found", vof.Type().Name(), typeField.Name)
|
|
||||||
}
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
field.Set(val)
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (x *cmds) add(name string, block bool, fn func(ctx context.Context) error) {
|
|
||||||
x.cmds = append(x.cmds, cmdName{Name: name, Block: block, Func: fn})
|
|
||||||
}
|
|
||||||
|
|
||||||
func (x *cmds) initLog() error {
|
|
||||||
conf := x.config.Log
|
|
||||||
if err := log.InitLoggerFromConfig(
|
|
||||||
"openim-server",
|
|
||||||
program.GetProcessName(),
|
|
||||||
"", "",
|
|
||||||
conf.RemainLogLevel,
|
|
||||||
conf.IsStdout,
|
|
||||||
conf.IsJson,
|
|
||||||
conf.StorageLocation,
|
|
||||||
conf.RemainRotationCount,
|
|
||||||
conf.RotationTime,
|
|
||||||
strings.TrimSpace(version.Version),
|
|
||||||
conf.IsSimplify,
|
|
||||||
); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
func (x *cmds) run(ctx context.Context) error {
|
|
||||||
if len(x.cmds) == 0 {
|
|
||||||
return fmt.Errorf("no command to run")
|
|
||||||
}
|
|
||||||
if err := x.initAllConfig(); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
if err := x.initLog(); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
ctx, cancel := context.WithCancelCause(ctx)
|
|
||||||
|
|
||||||
go func() {
|
|
||||||
<-ctx.Done()
|
|
||||||
log.ZError(ctx, "context server exit cause", context.Cause(ctx))
|
|
||||||
}()
|
|
||||||
|
|
||||||
if prometheus := x.config.API.Prometheus; prometheus.Enable {
|
|
||||||
var (
|
|
||||||
port int
|
|
||||||
err error
|
|
||||||
)
|
|
||||||
if !prometheus.AutoSetPorts {
|
|
||||||
port, err = datautil.GetElemByIndex(prometheus.Ports, 0)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
listener, err := net.Listen("tcp", fmt.Sprintf(":%d", port))
|
|
||||||
if err != nil {
|
|
||||||
return fmt.Errorf("prometheus listen %d error %w", port, err)
|
|
||||||
}
|
|
||||||
defer listener.Close()
|
|
||||||
log.ZDebug(ctx, "prometheus start", "addr", listener.Addr())
|
|
||||||
go func() {
|
|
||||||
err := prommetrics.Start(listener)
|
|
||||||
if err == nil {
|
|
||||||
err = fmt.Errorf("http done")
|
|
||||||
}
|
|
||||||
cancel(fmt.Errorf("prometheus %w", err))
|
|
||||||
}()
|
|
||||||
}
|
|
||||||
|
|
||||||
go func() {
|
|
||||||
sigs := make(chan os.Signal, 1)
|
|
||||||
signal.Notify(sigs, syscall.SIGTERM, syscall.SIGINT, syscall.SIGKILL)
|
|
||||||
select {
|
|
||||||
case <-ctx.Done():
|
|
||||||
return
|
|
||||||
case val := <-sigs:
|
|
||||||
log.ZDebug(ctx, "recv signal", "signal", val.String())
|
|
||||||
cancel(fmt.Errorf("signal %s", val.String()))
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
|
|
||||||
for i := range x.cmds {
|
|
||||||
cmd := x.cmds[i]
|
|
||||||
if cmd.Block {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
if err := cmd.Func(ctx); err != nil {
|
|
||||||
cancel(fmt.Errorf("server %s exit %w", cmd.Name, err))
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
go func() {
|
|
||||||
if cmd.Block {
|
|
||||||
cancel(fmt.Errorf("server %s exit", cmd.Name))
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
}
|
|
||||||
|
|
||||||
var wait cmdManger
|
|
||||||
for i := range x.cmds {
|
|
||||||
cmd := x.cmds[i]
|
|
||||||
if !cmd.Block {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
wait.Start(cmd.Name)
|
|
||||||
go func() {
|
|
||||||
defer wait.Shutdown(cmd.Name)
|
|
||||||
if err := cmd.Func(ctx); err != nil {
|
|
||||||
cancel(fmt.Errorf("server %s exit %w", cmd.Name, err))
|
|
||||||
return
|
|
||||||
}
|
|
||||||
cancel(fmt.Errorf("server %s exit", cmd.Name))
|
|
||||||
}()
|
|
||||||
}
|
|
||||||
<-ctx.Done()
|
|
||||||
exitCause := context.Cause(ctx)
|
|
||||||
log.ZWarn(ctx, "notification of service closure", exitCause)
|
|
||||||
done := wait.Wait()
|
|
||||||
timeout := time.NewTimer(time.Second * 10)
|
|
||||||
defer timeout.Stop()
|
|
||||||
for {
|
|
||||||
select {
|
|
||||||
case <-timeout.C:
|
|
||||||
log.ZWarn(ctx, "server exit timeout", nil, "running", wait.Running())
|
|
||||||
return exitCause
|
|
||||||
case _, ok := <-done:
|
|
||||||
if ok {
|
|
||||||
log.ZWarn(ctx, "waiting for the service to exit", nil, "running", wait.Running())
|
|
||||||
} else {
|
|
||||||
log.ZInfo(ctx, "all server exit done")
|
|
||||||
return exitCause
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func putCmd[C any](cmd *cmds, block bool, fn func(ctx context.Context, config *C, client discovery.SvcDiscoveryRegistry, server grpc.ServiceRegistrar) error) {
|
|
||||||
name := path.Base(runtime.FuncForPC(reflect.ValueOf(fn).Pointer()).Name())
|
|
||||||
if index := strings.Index(name, "."); index >= 0 {
|
|
||||||
name = name[:index]
|
|
||||||
}
|
|
||||||
cmd.add(name, block, func(ctx context.Context) error {
|
|
||||||
var conf C
|
|
||||||
if err := cmd.parseConf(&conf); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
return fn(ctx, &conf, standalone.GetSvcDiscoveryRegistry(), standalone.GetServiceRegistrar())
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
type cmdManger struct {
|
|
||||||
lock sync.Mutex
|
|
||||||
done chan struct{}
|
|
||||||
count int
|
|
||||||
names map[string]struct{}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (x *cmdManger) Start(name string) {
|
|
||||||
x.lock.Lock()
|
|
||||||
defer x.lock.Unlock()
|
|
||||||
if x.names == nil {
|
|
||||||
x.names = make(map[string]struct{})
|
|
||||||
}
|
|
||||||
if x.done == nil {
|
|
||||||
x.done = make(chan struct{}, 1)
|
|
||||||
}
|
|
||||||
if _, ok := x.names[name]; ok {
|
|
||||||
panic(fmt.Errorf("cmd %s already exists", name))
|
|
||||||
}
|
|
||||||
x.count++
|
|
||||||
x.names[name] = struct{}{}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (x *cmdManger) Shutdown(name string) {
|
|
||||||
x.lock.Lock()
|
|
||||||
defer x.lock.Unlock()
|
|
||||||
if _, ok := x.names[name]; !ok {
|
|
||||||
panic(fmt.Errorf("cmd %s not exists", name))
|
|
||||||
}
|
|
||||||
delete(x.names, name)
|
|
||||||
x.count--
|
|
||||||
if x.count == 0 {
|
|
||||||
close(x.done)
|
|
||||||
} else {
|
|
||||||
select {
|
|
||||||
case x.done <- struct{}{}:
|
|
||||||
default:
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (x *cmdManger) Wait() <-chan struct{} {
|
|
||||||
x.lock.Lock()
|
|
||||||
defer x.lock.Unlock()
|
|
||||||
if x.count == 0 || x.done == nil {
|
|
||||||
tmp := make(chan struct{})
|
|
||||||
close(tmp)
|
|
||||||
return tmp
|
|
||||||
}
|
|
||||||
return x.done
|
|
||||||
}
|
|
||||||
|
|
||||||
func (x *cmdManger) Running() []string {
|
|
||||||
x.lock.Lock()
|
|
||||||
defer x.lock.Unlock()
|
|
||||||
names := make([]string, 0, len(x.names))
|
|
||||||
for name := range x.names {
|
|
||||||
names = append(names, name)
|
|
||||||
}
|
|
||||||
return names
|
|
||||||
}
|
|
||||||
@ -15,9 +15,10 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
_ "net/http/pprof"
|
||||||
|
|
||||||
"github.com/openimsdk/open-im-server/v3/pkg/common/cmd"
|
"github.com/openimsdk/open-im-server/v3/pkg/common/cmd"
|
||||||
"github.com/openimsdk/tools/system/program"
|
"github.com/openimsdk/tools/system/program"
|
||||||
_ "net/http/pprof"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
|
|||||||
100
config/README.md
100
config/README.md
@ -1,66 +1,48 @@
|
|||||||
# OpenIM Configuration File Descriptions and Common Configuration Modifications
|
---
|
||||||
|
title: 'OpenIM Configuration Files and Common Configuration Item Modifications Guide'
|
||||||
|
|
||||||
## External Component Configurations
|
## Configuration Files Explanation
|
||||||
|
|
||||||
| Configuration File | Description |
|
| Configuration File | Description |
|
||||||
| ------------------ |-------------------------------------------------------------|
|
| ------------------------------- | ------------------------------------------------------------ |
|
||||||
| **kafka.yml** | Configuration for Kafka username, password, address, etc. |
|
| **kafka.yml** | Configurations for Kafka username, password, address, etc. |
|
||||||
| **redis.yml** | Configuration for Redis password, address, etc. |
|
| **redis.yml** | Configurations for Redis password, address, etc. |
|
||||||
| **minio.yml** | Configuration for MinIO username, password, address, etc. |
|
| **minio.yml** | Configurations for MinIO username, password, address, and external IP/domain; failing to modify external IP or domain may cause image file sending failures |
|
||||||
| **mongodb.yml** | Configuration for MongoDB username, password, address, etc. |
|
| **zookeeper.yml** | Configurations for ZooKeeper user, password, address, etc. |
|
||||||
| **discovery.yml** | Service discovery and etcd credentials and address. |
|
| **mongodb.yml** | Configurations for MongoDB username, password, address, etc. |
|
||||||
|
| **log.yml** | Configurations for log level and storage directory. |
|
||||||
|
| **notification.yml** | Configurations for events like adding friends, creating groups, etc. |
|
||||||
|
| **share.yml** | Common configurations needed by various OpenIM services, such as secret. |
|
||||||
|
| **webhooks.yml** | Configurations for URLs in Webhook. |
|
||||||
|
| **local-cache.yml** | Local cache configurations. |
|
||||||
|
| **openim-rpc-third.yml** | Configurations for listening IP, port, and storage settings for images and videos in openim-rpc-third service. |
|
||||||
|
| **openim-rpc-user.yml** | Configurations for listening IP and port in openim-rpc-user service. |
|
||||||
|
| **openim-api.yml** | Configurations for listening IP, port, etc., in openim-api service. |
|
||||||
|
| **openim-crontask.yml** | Configurations for openim-crontask service. |
|
||||||
|
| **openim-msggateway.yml** | Configurations for listening IP, port, etc., in openim-msggateway service. |
|
||||||
|
| **openim-msgtransfer.yml** | Configurations for openim-msgtransfer service. |
|
||||||
|
| **openim-push.yml** | Configurations for listening IP, port, and offline push settings in openim-push service. |
|
||||||
|
| **openim-rpc-auth.yml** | Configurations for listening IP, port, and token expiration settings in openim-rpc-auth service. |
|
||||||
|
| **openim-rpc-conversation.yml** | Configurations for listening IP, port, etc., in openim-rpc-conversation service. |
|
||||||
|
| **openim-rpc-friend.yml** | Configurations for listening IP, port, etc., in openim-rpc-friend service. |
|
||||||
|
| **openim-rpc-group.yml** | Configurations for listening IP, port, etc., in openim-rpc-group service. |
|
||||||
|
| **openim-rpc-msg.yml** | Configurations for listening IP, port, and whether to verify friendship before sending messages in openim-rpc-msg service. |
|
||||||
|
|
||||||
## OpenIMServer Related Configurations
|
## Common Configuration Item Modifications
|
||||||
| Configuration File | Description |
|
|
||||||
| ------------------------------- | ---------------------------------------------- |
|
|
||||||
| **log.yml** | Configuration for logging levels and storage directory |
|
|
||||||
| **notification.yml** | Event notification settings (e.g., add friend, create group) |
|
|
||||||
| **share.yml** | Common settings for all services (e.g., secrets) |
|
|
||||||
| **webhooks.yml** | Webhook URLs and related settings |
|
|
||||||
| **local-cache.yml** | Local cache settings (generally do not modify) |
|
|
||||||
| **openim-rpc-third.yml** | openim-rpc-third listen IP, port, and object storage settings |
|
|
||||||
| **openim-rpc-user.yml** | openim-rpc-user listen IP and port settings |
|
|
||||||
| **openim-api.yml** | openim-api listen IP, port, and other settings |
|
|
||||||
| **openim-crontask.yml** | openim-crontask scheduled task settings |
|
|
||||||
| **openim-msggateway.yml** | openim-msggateway listen IP, port, and other settings |
|
|
||||||
| **openim-msgtransfer.yml** | Settings for openim-msgtransfer service |
|
|
||||||
| **openim-push.yml** | openim-push listen IP, port, and offline push settings |
|
|
||||||
| **openim-rpc-auth.yml** | openim-rpc-auth listen IP, port, token validity settings |
|
|
||||||
| **openim-rpc-conversation.yml** | openim-rpc-conversation listen IP and port settings |
|
|
||||||
| **openim-rpc-friend.yml** | openim-rpc-friend listen IP and port settings |
|
|
||||||
| **openim-rpc-group.yml** | openim-rpc-group listen IP and port settings |
|
|
||||||
| **openim-rpc-msg.yml** | openim-rpc-msg listen IP and port settings |
|
|
||||||
|
|
||||||
|
| Configuration Item Modification | Configuration File |
|
||||||
|
| ----------------------------------------------------- | ----------------------- |
|
||||||
|
| Using MinIO for image and video file object storage | `minio.yml` |
|
||||||
|
| Adjusting production environment logs | `log.yml` |
|
||||||
|
| Verifying friendship before sending messages | `openim-rpc-msg.yml` |
|
||||||
|
| Modifying secret | `share.yml` |
|
||||||
|
| Using OSS, COS, AWS, Kodo for image and video storage | `openim-rpc-third.yml` |
|
||||||
|
| Setting multiple login policy | `openim-msggateway.yml` |
|
||||||
|
| Setting up offline push | `openim-push.yml` |
|
||||||
|
|
||||||
## Monitoring and Alerting Related Configurations
|
## Starting Multiple Instances of an OpenIM Service
|
||||||
| Configuration File | Description |
|
|
||||||
| ------------------------------ | --------------- |
|
|
||||||
| **prometheus.yml** | Prometheus configuration |
|
|
||||||
| **instance-down-rules.yml** | Alert rules |
|
|
||||||
| **alertmanager.yml** | Alertmanager configuration |
|
|
||||||
| **email.tmpl** | Email alert template |
|
|
||||||
| **grefana-template/Demo.json** | Default Grafana dashboard |
|
|
||||||
|
|
||||||
## Common Configuration Modifications
|
To start multiple instances of an OpenIM service, simply increase the corresponding port numbers and modify the `start-config.yml` file in the project root directory. Restart the service to take effect. For example, the configuration to start 2 instances of `openim-rpc-user` is as follows:
|
||||||
| Configuration Item | Configuration File |
|
|
||||||
| -------------------------------------------------------- | ----------------------- |
|
|
||||||
| Configure MinIO as object storage (focus on the externalAddress field) | `minio.yml` |
|
|
||||||
| Adjust log level and number of log files | `log.yml` |
|
|
||||||
| Enable or disable friend verification when sending messages | `openim-rpc-msg.yml` |
|
|
||||||
| OpenIMServer secret | `share.yml` |
|
|
||||||
| Configure OSS, COS, AWS, or Kodo as object storage | `openim-rpc-third.yml` |
|
|
||||||
| Multi-end mutual kick strategy and max concurrent connections per gateway | `openim-msggateway.yml` |
|
|
||||||
| Offline message push configuration | `openim-push.yml` |
|
|
||||||
| Configure webhooks for callback notifications (e.g., before/after message send) | `webhooks.yml` |
|
|
||||||
| Whether new group members can view historical messages | `openim-rpc-group.yml` |
|
|
||||||
| Token expiration time settings | `openim-rpc-auth.yml` |
|
|
||||||
| Scheduled task settings (e.g., how long to retain messages) | `openim-crontask.yml` |
|
|
||||||
|
|
||||||
## Starting Multiple Instances of a Service and Maximum File Descriptors
|
|
||||||
|
|
||||||
|
|
||||||
To start multiple instances of an OpenIM service, simply add the corresponding port numbers and modify the `start-config.yml` file in the project’s root directory,
|
|
||||||
then restart the service. For example, to start 2 instances of `openim-rpc-user`:
|
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
rpc:
|
rpc:
|
||||||
@ -79,9 +61,3 @@ Modify`start-config.yml`:
|
|||||||
serviceBinaries:
|
serviceBinaries:
|
||||||
openim-rpc-user: 2
|
openim-rpc-user: 2
|
||||||
```
|
```
|
||||||
|
|
||||||
To set the maximum number of open file descriptors (typically one per online user):
|
|
||||||
|
|
||||||
```
|
|
||||||
maxFileDescriptors: 10000
|
|
||||||
```
|
|
||||||
|
|||||||
@ -1,63 +1,45 @@
|
|||||||
# OpenIM配置文件说明以及常用配置修改说明
|
# OpenIM配置文件说明以及常用配置修改说明
|
||||||
|
|
||||||
## 外部组件相关配置
|
## 配置文件说明
|
||||||
|
|
||||||
| Configuration File | Description |
|
| Configuration File | Description |
|
||||||
| ------------------ | ---------------------------------- |
|
| ------------------------------- | ------------------------------------------------------------ |
|
||||||
| **kafka.yml** | Kafka用户名、密码、地址等配置 |
|
| **kafka.yml** | Kafka用户名、密码、地址等配置 |
|
||||||
| **redis.yml** | Redis密码、地址等配置 |
|
| **redis.yml** | Redis密码、地址等配置 |
|
||||||
| **minio.yml** | MinIO用户名、密码、地址等配置 |
|
| **minio.yml** | MinIO用户名、密码、地址及外网IP域名等配置;未修改外网IP或域名可能导致图片文件发送失败 |
|
||||||
|
| **zookeeper.yml** | ZooKeeper用户、密码、地址等配置 |
|
||||||
| **mongodb.yml** | MongoDB用户名、密码、地址等配置 |
|
| **mongodb.yml** | MongoDB用户名、密码、地址等配置 |
|
||||||
| **discovery.yml** | 服务发现以及etcd用户名、密码、地址 |
|
|
||||||
|
|
||||||
## OpenIMServer相关配置
|
|
||||||
| Configuration File | Description |
|
|
||||||
| ------------------------------- | ---------------------------------------------- |
|
|
||||||
| **log.yml** | 日志级别及存储目录等配置 |
|
| **log.yml** | 日志级别及存储目录等配置 |
|
||||||
| **notification.yml** | 添加好友、创建群组等事件通知配置 |
|
| **notification.yml** | 添加好友、创建群组等事件通知配置 |
|
||||||
| **share.yml** | 各服务所需的公共配置,如secret等 |
|
| **share.yml** | OpenIM各服务所需的公共配置,如secret等 |
|
||||||
| **webhooks.yml** | Webhook中URL等配置 |
|
| **webhooks.yml** | Webhook中URL等配置 |
|
||||||
| **local-cache.yml** | 本地缓存配置,一般不用修改 |
|
| **local-cache.yml** | 本地缓存配置 |
|
||||||
| **openim-rpc-third.yml** | openim-rpc-third监听IP、端口及对象存储配置 |
|
| **openim-rpc-third.yml** | openim-rpc-third服务的监听IP、端口及图片视频对象存储配置 |
|
||||||
| **openim-rpc-user.yml** | openim-rpc-user监听IP、端口配置 |
|
| **openim-rpc-user.yml** | openim-rpc-user服务的监听IP、端口配置 |
|
||||||
| **openim-api.yml** | openim-api监听IP、端口等配置 |
|
| **openim-api.yml** | openim-api服务的监听IP、端口等配置项 |
|
||||||
| **openim-crontask.yml** | openim-crontask定时任务配置 |
|
| **openim-crontask.yml** | openim-crontask服务配置 |
|
||||||
| **openim-msggateway.yml** | openim-msggateway监听IP、端口等配置 |
|
| **openim-msggateway.yml** | openim-msggateway服务的监听IP、端口等配置 |
|
||||||
| **openim-msgtransfer.yml** | openim-msgtransfer服务配置 |
|
| **openim-msgtransfer.yml** | openim-msgtransfer服务配置 |
|
||||||
| **openim-push.yml** | openim-push监听IP、端口及离线推送配置 |
|
| **openim-push.yml** | openim-push服务的监听IP、端口及离线推送配置 |
|
||||||
| **openim-rpc-auth.yml** | openim-rpc-auth监听IP、端口及token有效期等配置 |
|
| **openim-rpc-auth.yml** | openim-rpc-auth服务的监听IP、端口及token有效期等配置 |
|
||||||
| **openim-rpc-conversation.yml** | openim-rpc-conversation监听IP、端口等配置 |
|
| **openim-rpc-conversation.yml** | openim-rpc-conversation服务的监听IP、端口等配置 |
|
||||||
| **openim-rpc-friend.yml** | openim-rpc-friend监听IP、端口等配置 |
|
| **openim-rpc-friend.yml** | openim-rpc-friend服务的监听IP、端口等配置 |
|
||||||
| **openim-rpc-group.yml** | openim-rpc-group监听IP、端口等配置 |
|
| **openim-rpc-group.yml** | openim-rpc-group服务的监听IP、端口等配置 |
|
||||||
| **openim-rpc-msg.yml** | openim-rpc-msg服务的监听IP、端口等配置 |
|
| **openim-rpc-msg.yml** | openim-rpc-msg服务的监听IP、端口及消息发送是否验证好友关系等配置 |
|
||||||
|
|
||||||
|
|
||||||
## 监控告警相关配置
|
|
||||||
| Configuration File | Description |
|
|
||||||
| ------------------------------ | --------------- |
|
|
||||||
| **prometheus.yml** | prometheus配置 |
|
|
||||||
| **instance-down-rules.yml** | 告警规则 |
|
|
||||||
| **alertmanager.yml** | 告警管理配置 |
|
|
||||||
| **email.tmpl** | 邮件告警模版 |
|
|
||||||
| **grefana-template/Demo.json** | 默认的dashboard |
|
|
||||||
|
|
||||||
## 常用配置修改
|
## 常用配置修改
|
||||||
|
|
||||||
| 修改配置项 | 配置文件 |
|
| 修改配置项 | 配置文件 |
|
||||||
| -------------------------------------------------------- | ----------------------- |
|
| ----------------------------------------------- | ----------------------- |
|
||||||
| 使用minio作为对象存储时配置,重点关注externalAddress字段 | `minio.yml` |
|
| 使用minio作为图片视频文件对象存储 | `minio.yml` |
|
||||||
| 日志级别及日志文件数量调整 | `log.yml` |
|
| 生产环境日志调整 | `log.yml` |
|
||||||
| 发送消息是否需要验证好友关系 | `openim-rpc-msg.yml` |
|
| 发送消息是否验证好友关系 | `openim-rpc-msg.yml` |
|
||||||
| OpenIMServer秘钥 | `share.yml` |
|
| 修改secret | `share.yml` |
|
||||||
| 使用oss, cos, aws, kodo作为对象存储时配置 | `openim-rpc-third.yml` |
|
| 使用oss, cos, aws, kodo作为图片视频文件对象存储 | `openim-rpc-third.yml` |
|
||||||
| 多端互踢策略,单个gateway同时最大连接数 | `openim-msggateway.yml` |
|
| 设置多端互踢策略 | `openim-msggateway.yml` |
|
||||||
| 消息离线推送 | `openim-push.yml` |
|
| 设置离线推送 | `openim-push.yml` |
|
||||||
| 配置webhook来通知回调服务器,如消息发送前后回调 | `webhooks.yml` |
|
|
||||||
| 新入群用户是否可以查看历史消息 | `openim-rpc-group.yml` |
|
|
||||||
| token 过期时间设置 | `openim-rpc-auth.yml` |
|
|
||||||
| 定时任务设置,例如消息保存多长时间 | `openim-crontask.yml` |
|
|
||||||
|
|
||||||
## 启动某个服务的多个实例和最大文件句柄数
|
|
||||||
|
|
||||||
|
## 启动某个OpenIM服务的多个实例
|
||||||
|
|
||||||
若要启动某个OpenIM的多个实例,只需增加对应的端口数,并修改项目根目录下的`start-config.yml`文件,重启服务即可生效。例如,启动2个`openim-rpc-user`实例的配置如下:
|
若要启动某个OpenIM的多个实例,只需增加对应的端口数,并修改项目根目录下的`start-config.yml`文件,重启服务即可生效。例如,启动2个`openim-rpc-user`实例的配置如下:
|
||||||
|
|
||||||
@ -79,8 +61,5 @@ serviceBinaries:
|
|||||||
openim-rpc-user: 2
|
openim-rpc-user: 2
|
||||||
```
|
```
|
||||||
|
|
||||||
修改最大同时打开的文件句柄数,一般是每个在线用户占用一个
|
|
||||||
|
|
||||||
```
|
|
||||||
maxFileDescriptors: 10000
|
|
||||||
```
|
|
||||||
|
|||||||
@ -1,22 +1,13 @@
|
|||||||
enable: etcd
|
enable: "etcd"
|
||||||
etcd:
|
etcd:
|
||||||
rootDirectory: openim
|
rootDirectory: openim
|
||||||
address: [ localhost:12379 ]
|
address: [ localhost:12379 ]
|
||||||
## Attention: If you set auth in etcd
|
username: ''
|
||||||
## you must also update the username and password in Chat project.
|
password: ''
|
||||||
username:
|
|
||||||
password:
|
|
||||||
|
|
||||||
kubernetes:
|
zookeeper:
|
||||||
namespace: default
|
schema: openim
|
||||||
|
address: [ localhost:12181 ]
|
||||||
|
username: ''
|
||||||
|
password: ''
|
||||||
|
|
||||||
rpcService:
|
|
||||||
user: user-rpc-service
|
|
||||||
friend: friend-rpc-service
|
|
||||||
msg: msg-rpc-service
|
|
||||||
push: push-rpc-service
|
|
||||||
messageGateway: messagegateway-rpc-service
|
|
||||||
group: group-rpc-service
|
|
||||||
auth: auth-rpc-service
|
|
||||||
conversation: conversation-rpc-service
|
|
||||||
third: third-rpc-service
|
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@ -1,40 +1,36 @@
|
|||||||
## Kafka authentication
|
# Username for authentication
|
||||||
username:
|
username: ''
|
||||||
password:
|
# Password for authentication
|
||||||
|
password: ''
|
||||||
# Producer acknowledgment settings
|
# Producer acknowledgment settings
|
||||||
producerAck:
|
producerAck: ""
|
||||||
# Compression type to use (e.g., none, gzip, snappy)
|
# Compression type to use (e.g., none, gzip, snappy)
|
||||||
compressType: none
|
compressType: "none"
|
||||||
# List of Kafka broker addresses
|
# List of Kafka broker addresses
|
||||||
address: [ localhost:19094 ]
|
address: [ localhost:19094 ]
|
||||||
# Kafka topic for Redis integration
|
# Kafka topic for Redis integration
|
||||||
toRedisTopic: toRedis
|
toRedisTopic: "toRedis"
|
||||||
# Kafka topic for MongoDB integration
|
# Kafka topic for MongoDB integration
|
||||||
toMongoTopic: toMongo
|
toMongoTopic: "toMongo"
|
||||||
# Kafka topic for push notifications
|
# Kafka topic for push notifications
|
||||||
toPushTopic: toPush
|
toPushTopic: "toPush"
|
||||||
# Kafka topic for offline push notifications
|
|
||||||
toOfflinePushTopic: toOfflinePush
|
|
||||||
# Consumer group ID for Redis topic
|
# Consumer group ID for Redis topic
|
||||||
toRedisGroupID: redis
|
toRedisGroupID: redis
|
||||||
# Consumer group ID for MongoDB topic
|
# Consumer group ID for MongoDB topic
|
||||||
toMongoGroupID: mongo
|
toMongoGroupID: mongo
|
||||||
# Consumer group ID for push notifications topic
|
# Consumer group ID for push notifications topic
|
||||||
toPushGroupID: push
|
toPushGroupID: push
|
||||||
# Consumer group ID for offline push notifications topic
|
|
||||||
toOfflinePushGroupID: offlinePush
|
|
||||||
# TLS (Transport Layer Security) configuration
|
# TLS (Transport Layer Security) configuration
|
||||||
tls:
|
tls:
|
||||||
# Enable or disable TLS
|
# Enable or disable TLS
|
||||||
enableTLS: false
|
enableTLS: false
|
||||||
# CA certificate file path
|
# CA certificate file path
|
||||||
caCrt:
|
caCrt: ""
|
||||||
# Client certificate file path
|
# Client certificate file path
|
||||||
clientCrt:
|
clientCrt: ""
|
||||||
# Client key file path
|
# Client key file path
|
||||||
clientKey:
|
clientKey: ""
|
||||||
# Client key password
|
# Client key password
|
||||||
clientKeyPwd:
|
clientKeyPwd: ""
|
||||||
# Whether to skip TLS verification (not recommended for production)
|
# Whether to skip TLS verification (not recommended for production)
|
||||||
insecureSkipVerify: false
|
insecureSkipVerify: false
|
||||||
|
|||||||
@ -1,10 +1,3 @@
|
|||||||
auth:
|
|
||||||
topic: DELETE_CACHE_AUTH
|
|
||||||
slotNum: 100
|
|
||||||
slotSize: 2000
|
|
||||||
successExpire: 300
|
|
||||||
failedExpire: 5
|
|
||||||
|
|
||||||
user:
|
user:
|
||||||
topic: DELETE_CACHE_USER
|
topic: DELETE_CACHE_USER
|
||||||
slotNum: 100
|
slotNum: 100
|
||||||
|
|||||||
@ -1,15 +1,15 @@
|
|||||||
# Name of the bucket in MinIO
|
# Name of the bucket in MinIO
|
||||||
bucket: openim
|
bucket: "openim"
|
||||||
# Access key ID for MinIO authentication
|
# Access key ID for MinIO authentication
|
||||||
accessKeyID: root
|
accessKeyID: "root"
|
||||||
# Secret access key for MinIO authentication
|
# Secret access key for MinIO authentication
|
||||||
secretAccessKey: openIM123
|
secretAccessKey: "openIM123"
|
||||||
# Session token for MinIO authentication (optional)
|
# Session token for MinIO authentication (optional)
|
||||||
sessionToken:
|
sessionToken: ''
|
||||||
# Internal address of the MinIO server
|
# Internal address of the MinIO server
|
||||||
internalAddress: localhost:10005
|
internalAddress: "localhost:10005"
|
||||||
# External address of the MinIO server, accessible from outside. Supports both HTTP and HTTPS using a domain name
|
# External address of the MinIO server, accessible from outside. Supports both HTTP and HTTPS using a domain name
|
||||||
externalAddress: http://external_ip:10005
|
externalAddress: "http://external_ip:10005"
|
||||||
# Flag to enable or disable public read access to the bucket
|
# Flag to enable or disable public read access to the bucket
|
||||||
publicRead: false
|
publicRead: false
|
||||||
|
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
# URI for database connection, leave empty if using address and credential settings directly
|
# URI for database connection, leave empty if using address and credential settings directly
|
||||||
uri:
|
uri: ''
|
||||||
# List of MongoDB server addresses
|
# List of MongoDB server addresses
|
||||||
address: [ localhost:37017 ]
|
address: [ localhost:37017 ]
|
||||||
# Name of the database
|
# Name of the database
|
||||||
@ -8,44 +8,7 @@ database: openim_v3
|
|||||||
username: openIM
|
username: openIM
|
||||||
# Password for database authentication
|
# Password for database authentication
|
||||||
password: openIM123
|
password: openIM123
|
||||||
# Authentication source for database authentication, if use root user, set it to admin
|
|
||||||
authSource: openim_v3
|
|
||||||
# Maximum number of connections in the connection pool
|
# Maximum number of connections in the connection pool
|
||||||
maxPoolSize: 100
|
maxPoolSize: 100
|
||||||
# Maximum number of retry attempts for a failed database connection
|
# Maximum number of retry attempts for a failed database connection
|
||||||
maxRetry: 10
|
maxRetry: 10
|
||||||
# MongoDB Mode, including "standalone", "replicaSet"
|
|
||||||
mongoMode: "standalone"
|
|
||||||
|
|
||||||
# The following configurations only take effect when mongoMode is set to "replicaSet"
|
|
||||||
replicaSet:
|
|
||||||
name: rs0
|
|
||||||
hosts: [127.0.0.1:37017, 127.0.0.1:37018, 127.0.0.1:37019]
|
|
||||||
# Read concern level: "local", "available", "majority", "linearizable", "snapshot"
|
|
||||||
readConcern: majority
|
|
||||||
# maximum staleness of data in seconds
|
|
||||||
maxStaleness: 90s
|
|
||||||
|
|
||||||
# The following configurations only take effect when mongoMode is set to "replicaSet"
|
|
||||||
readPreference:
|
|
||||||
# Read preference mode, can be "primary", "primaryPreferred", "secondary", "secondaryPreferred", "nearest"
|
|
||||||
mode: primary
|
|
||||||
maxStaleness: 90s
|
|
||||||
# TagSets is an array of maps with priority based on order, empty map must be placed last for fallback tagSets
|
|
||||||
tagSets:
|
|
||||||
- datacenter: "cn-east"
|
|
||||||
rack: "1"
|
|
||||||
storage: "ssd"
|
|
||||||
- datacenter: "cn-east"
|
|
||||||
storage: "ssd"
|
|
||||||
- datacenter: "cn-east"
|
|
||||||
- {} # Empty map, indicates any node
|
|
||||||
|
|
||||||
# The following configurations only take effect when mongoMode is set to "replicaSet"
|
|
||||||
writeConcern:
|
|
||||||
# Write node count or tag (int, "majority", or custom tag)
|
|
||||||
w: majority
|
|
||||||
# Whether to wait for journal confirmation
|
|
||||||
j: true
|
|
||||||
# Write timeout duration
|
|
||||||
wtimeout: 30s
|
|
||||||
|
|||||||
@ -1,19 +1,38 @@
|
|||||||
|
# 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.
|
||||||
|
|
||||||
|
# Determines if a message should be sent. If set to false, it triggers a silent sync without a message. If true, it requires triggering a conversation.
|
||||||
|
# For rpc notification, send twice: once as a message and once as a notification.
|
||||||
|
# The options field 'isNotification' indicates if it's a notification.
|
||||||
groupCreated:
|
groupCreated:
|
||||||
isSendMsg: true
|
isSendMsg: true
|
||||||
# Deprecated. Fixed as 1.
|
# Reliability level of the message sending.
|
||||||
|
# Set to 1 to send only when online, 2 for guaranteed delivery.
|
||||||
reliabilityLevel: 1
|
reliabilityLevel: 1
|
||||||
# Deprecated. Fixed as false.
|
# This setting is effective only when 'isSendMsg' is true.
|
||||||
|
# It controls whether to count unread messages.
|
||||||
unreadCount: false
|
unreadCount: false
|
||||||
# Configuration for offline push notifications.
|
# Configuration for offline push notifications.
|
||||||
offlinePush:
|
offlinePush:
|
||||||
# Enables or disables offline push notifications.
|
# Enables or disables offline push notifications.
|
||||||
enable: false
|
enable: false
|
||||||
# Title for the notification when a group is created.
|
# Title for the notification when a group is created.
|
||||||
title: create group title
|
title: "create group title"
|
||||||
# Description for the notification.
|
# Description for the notification.
|
||||||
desc: create group desc
|
desc: "create group desc"
|
||||||
# Additional information for the notification.
|
# Additional information for the notification.
|
||||||
ext: create group ext
|
ext: "create group ext"
|
||||||
|
|
||||||
groupInfoSet:
|
groupInfoSet:
|
||||||
isSendMsg: false
|
isSendMsg: false
|
||||||
@ -21,9 +40,9 @@ groupInfoSet:
|
|||||||
unreadCount: false
|
unreadCount: false
|
||||||
offlinePush:
|
offlinePush:
|
||||||
enable: false
|
enable: false
|
||||||
title: groupInfoSet title
|
title: "groupInfoSet title"
|
||||||
desc: groupInfoSet desc
|
desc: "groupInfoSet desc"
|
||||||
ext: groupInfoSet ext
|
ext: "groupInfoSet ext"
|
||||||
|
|
||||||
|
|
||||||
joinGroupApplication:
|
joinGroupApplication:
|
||||||
@ -31,10 +50,10 @@ joinGroupApplication:
|
|||||||
reliabilityLevel: 1
|
reliabilityLevel: 1
|
||||||
unreadCount: false
|
unreadCount: false
|
||||||
offlinePush:
|
offlinePush:
|
||||||
enable: true
|
enable: false
|
||||||
title: joinGroupApplication title
|
title: "joinGroupApplication title"
|
||||||
desc: joinGroupApplication desc
|
desc: "joinGroupApplication desc"
|
||||||
ext: joinGroupApplication ext
|
ext: "joinGroupApplication ext"
|
||||||
|
|
||||||
memberQuit:
|
memberQuit:
|
||||||
isSendMsg: true
|
isSendMsg: true
|
||||||
@ -42,29 +61,29 @@ memberQuit:
|
|||||||
unreadCount: false
|
unreadCount: false
|
||||||
offlinePush:
|
offlinePush:
|
||||||
enable: false
|
enable: false
|
||||||
title: memberQuit title
|
title: "memberQuit title"
|
||||||
desc: memberQuit desc
|
desc: "memberQuit desc"
|
||||||
ext: memberQuit ext
|
ext: "memberQuit ext"
|
||||||
|
|
||||||
groupApplicationAccepted:
|
groupApplicationAccepted:
|
||||||
isSendMsg: false
|
isSendMsg: false
|
||||||
reliabilityLevel: 1
|
reliabilityLevel: 1
|
||||||
unreadCount: false
|
unreadCount: false
|
||||||
offlinePush:
|
offlinePush:
|
||||||
enable: true
|
enable: false
|
||||||
title: groupApplicationAccepted title
|
title: "groupApplicationAccepted title"
|
||||||
desc: groupApplicationAccepted desc
|
desc: "groupApplicationAccepted desc"
|
||||||
ext: groupApplicationAccepted ext
|
ext: "groupApplicationAccepted ext"
|
||||||
|
|
||||||
groupApplicationRejected:
|
groupApplicationRejected:
|
||||||
isSendMsg: false
|
isSendMsg: false
|
||||||
reliabilityLevel: 1
|
reliabilityLevel: 1
|
||||||
unreadCount: false
|
unreadCount: false
|
||||||
offlinePush:
|
offlinePush:
|
||||||
enable: true
|
enable: false
|
||||||
title: groupApplicationRejected title
|
title: "groupApplicationRejected title"
|
||||||
desc: groupApplicationRejected desc
|
desc: "groupApplicationRejected desc"
|
||||||
ext: groupApplicationRejected ext
|
ext: "groupApplicationRejected ext"
|
||||||
|
|
||||||
|
|
||||||
groupOwnerTransferred:
|
groupOwnerTransferred:
|
||||||
@ -73,9 +92,9 @@ groupOwnerTransferred:
|
|||||||
unreadCount: false
|
unreadCount: false
|
||||||
offlinePush:
|
offlinePush:
|
||||||
enable: false
|
enable: false
|
||||||
title: groupOwnerTransferred title
|
title: "groupOwnerTransferred title"
|
||||||
desc: groupOwnerTransferred desc
|
desc: "groupOwnerTransferred desc"
|
||||||
ext: groupOwnerTransferred ext
|
ext: "groupOwnerTransferred ext"
|
||||||
|
|
||||||
memberKicked:
|
memberKicked:
|
||||||
isSendMsg: true
|
isSendMsg: true
|
||||||
@ -83,9 +102,9 @@ memberKicked:
|
|||||||
unreadCount: false
|
unreadCount: false
|
||||||
offlinePush:
|
offlinePush:
|
||||||
enable: false
|
enable: false
|
||||||
title: memberKicked title
|
title: "memberKicked title"
|
||||||
desc: memberKicked desc
|
desc: "memberKicked desc"
|
||||||
ext: memberKicked ext
|
ext: "memberKicked ext"
|
||||||
|
|
||||||
memberInvited:
|
memberInvited:
|
||||||
isSendMsg: true
|
isSendMsg: true
|
||||||
@ -93,9 +112,9 @@ memberInvited:
|
|||||||
unreadCount: false
|
unreadCount: false
|
||||||
offlinePush:
|
offlinePush:
|
||||||
enable: false
|
enable: false
|
||||||
title: memberInvited title
|
title: "memberInvited title"
|
||||||
desc: memberInvited desc
|
desc: "memberInvited desc"
|
||||||
ext: memberInvited ext
|
ext: "memberInvited ext"
|
||||||
|
|
||||||
memberEnter:
|
memberEnter:
|
||||||
isSendMsg: true
|
isSendMsg: true
|
||||||
@ -103,9 +122,9 @@ memberEnter:
|
|||||||
unreadCount: false
|
unreadCount: false
|
||||||
offlinePush:
|
offlinePush:
|
||||||
enable: false
|
enable: false
|
||||||
title: memberEnter title
|
title: "memberEnter title"
|
||||||
desc: memberEnter desc
|
desc: "memberEnter desc"
|
||||||
ext: memberEnter ext
|
ext: "memberEnter ext"
|
||||||
|
|
||||||
groupDismissed:
|
groupDismissed:
|
||||||
isSendMsg: true
|
isSendMsg: true
|
||||||
@ -113,9 +132,9 @@ groupDismissed:
|
|||||||
unreadCount: false
|
unreadCount: false
|
||||||
offlinePush:
|
offlinePush:
|
||||||
enable: false
|
enable: false
|
||||||
title: groupDismissed title
|
title: "groupDismissed title"
|
||||||
desc: groupDismissed desc
|
desc: "groupDismissed desc"
|
||||||
ext: groupDismissed ext
|
ext: "groupDismissed ext"
|
||||||
|
|
||||||
groupMuted:
|
groupMuted:
|
||||||
isSendMsg: true
|
isSendMsg: true
|
||||||
@ -123,9 +142,9 @@ groupMuted:
|
|||||||
unreadCount: false
|
unreadCount: false
|
||||||
offlinePush:
|
offlinePush:
|
||||||
enable: false
|
enable: false
|
||||||
title: groupMuted title
|
title: "groupMuted title"
|
||||||
desc: groupMuted desc
|
desc: "groupMuted desc"
|
||||||
ext: groupMuted ext
|
ext: "groupMuted ext"
|
||||||
|
|
||||||
groupCancelMuted:
|
groupCancelMuted:
|
||||||
isSendMsg: true
|
isSendMsg: true
|
||||||
@ -133,11 +152,11 @@ groupCancelMuted:
|
|||||||
unreadCount: false
|
unreadCount: false
|
||||||
offlinePush:
|
offlinePush:
|
||||||
enable: false
|
enable: false
|
||||||
title: groupCancelMuted title
|
title: "groupCancelMuted title"
|
||||||
desc: groupCancelMuted desc
|
desc: "groupCancelMuted desc"
|
||||||
ext: groupCancelMuted ext
|
ext: "groupCancelMuted ext"
|
||||||
defaultTips:
|
defaultTips:
|
||||||
tips: group Cancel Muted
|
tips: "group Cancel Muted"
|
||||||
|
|
||||||
|
|
||||||
groupMemberMuted:
|
groupMemberMuted:
|
||||||
@ -146,9 +165,9 @@ groupMemberMuted:
|
|||||||
unreadCount: false
|
unreadCount: false
|
||||||
offlinePush:
|
offlinePush:
|
||||||
enable: false
|
enable: false
|
||||||
title: groupMemberMuted title
|
title: "groupMemberMuted title"
|
||||||
desc: groupMemberMuted desc
|
desc: "groupMemberMuted desc"
|
||||||
ext: groupMemberMuted ext
|
ext: "groupMemberMuted ext"
|
||||||
|
|
||||||
groupMemberCancelMuted:
|
groupMemberCancelMuted:
|
||||||
isSendMsg: true
|
isSendMsg: true
|
||||||
@ -156,9 +175,9 @@ groupMemberCancelMuted:
|
|||||||
unreadCount: false
|
unreadCount: false
|
||||||
offlinePush:
|
offlinePush:
|
||||||
enable: false
|
enable: false
|
||||||
title: groupMemberCancelMuted title
|
title: "groupMemberCancelMuted title"
|
||||||
desc: groupMemberCancelMuted desc
|
desc: "groupMemberCancelMuted desc"
|
||||||
ext: groupMemberCancelMuted ext
|
ext: "groupMemberCancelMuted ext"
|
||||||
|
|
||||||
groupMemberInfoSet:
|
groupMemberInfoSet:
|
||||||
isSendMsg: false
|
isSendMsg: false
|
||||||
@ -166,9 +185,9 @@ groupMemberInfoSet:
|
|||||||
unreadCount: false
|
unreadCount: false
|
||||||
offlinePush:
|
offlinePush:
|
||||||
enable: false
|
enable: false
|
||||||
title: groupMemberInfoSet title
|
title: "groupMemberInfoSet title"
|
||||||
desc: groupMemberInfoSet desc
|
desc: "groupMemberInfoSet desc"
|
||||||
ext: groupMemberInfoSet ext
|
ext: "groupMemberInfoSet ext"
|
||||||
|
|
||||||
groupInfoSetAnnouncement:
|
groupInfoSetAnnouncement:
|
||||||
isSendMsg: true
|
isSendMsg: true
|
||||||
@ -176,9 +195,9 @@ groupInfoSetAnnouncement:
|
|||||||
unreadCount: false
|
unreadCount: false
|
||||||
offlinePush:
|
offlinePush:
|
||||||
enable: false
|
enable: false
|
||||||
title: groupInfoSetAnnouncement title
|
title: "groupInfoSetAnnouncement title"
|
||||||
desc: groupInfoSetAnnouncement desc
|
desc: "groupInfoSetAnnouncement desc"
|
||||||
ext: groupInfoSetAnnouncement ext
|
ext: "groupInfoSetAnnouncement ext"
|
||||||
|
|
||||||
|
|
||||||
groupInfoSetName:
|
groupInfoSetName:
|
||||||
@ -187,9 +206,9 @@ groupInfoSetName:
|
|||||||
unreadCount: false
|
unreadCount: false
|
||||||
offlinePush:
|
offlinePush:
|
||||||
enable: false
|
enable: false
|
||||||
title: groupInfoSetName title
|
title: "groupInfoSetName title"
|
||||||
desc: groupInfoSetName desc
|
desc: "groupInfoSetName desc"
|
||||||
ext: groupInfoSetName ext
|
ext: "groupInfoSetName ext"
|
||||||
|
|
||||||
|
|
||||||
#############################friend#################################
|
#############################friend#################################
|
||||||
@ -198,10 +217,10 @@ friendApplicationAdded:
|
|||||||
reliabilityLevel: 1
|
reliabilityLevel: 1
|
||||||
unreadCount: false
|
unreadCount: false
|
||||||
offlinePush:
|
offlinePush:
|
||||||
enable: true
|
enable: false
|
||||||
title: Somebody applies to add you as a friend
|
title: "Somebody applies to add you as a friend"
|
||||||
desc: Somebody applies to add you as a friend
|
desc: "Somebody applies to add you as a friend"
|
||||||
ext: Somebody applies to add you as a friend
|
ext: "Somebody applies to add you as a friend"
|
||||||
|
|
||||||
friendApplicationApproved:
|
friendApplicationApproved:
|
||||||
isSendMsg: true
|
isSendMsg: true
|
||||||
@ -209,9 +228,9 @@ friendApplicationApproved:
|
|||||||
unreadCount: false
|
unreadCount: false
|
||||||
offlinePush:
|
offlinePush:
|
||||||
enable: true
|
enable: true
|
||||||
title: Someone applies to add your friend application
|
title: "Someone applies to add your friend application"
|
||||||
desc: Someone applies to add your friend application
|
desc: "Someone applies to add your friend application"
|
||||||
ext: Someone applies to add your friend application
|
ext: "Someone applies to add your friend application"
|
||||||
|
|
||||||
friendApplicationRejected:
|
friendApplicationRejected:
|
||||||
isSendMsg: false
|
isSendMsg: false
|
||||||
@ -219,69 +238,69 @@ friendApplicationRejected:
|
|||||||
unreadCount: false
|
unreadCount: false
|
||||||
offlinePush:
|
offlinePush:
|
||||||
enable: true
|
enable: true
|
||||||
title: Someone rejected your friend application
|
title: "Someone rejected your friend application"
|
||||||
desc: Someone rejected your friend application
|
desc: "Someone rejected your friend application"
|
||||||
ext: Someone rejected your friend application
|
ext: "Someone rejected your friend application"
|
||||||
|
|
||||||
friendAdded:
|
friendAdded:
|
||||||
isSendMsg: false
|
isSendMsg: false
|
||||||
reliabilityLevel: 1
|
reliabilityLevel: 1
|
||||||
unreadCount: false
|
unreadCount: false
|
||||||
offlinePush:
|
offlinePush:
|
||||||
enable: false
|
enable: true
|
||||||
title: We have become friends
|
title: "We have become friends"
|
||||||
desc: We have become friends
|
desc: "We have become friends"
|
||||||
ext: We have become friends
|
ext: "We have become friends"
|
||||||
|
|
||||||
friendDeleted:
|
friendDeleted:
|
||||||
isSendMsg: false
|
isSendMsg: false
|
||||||
reliabilityLevel: 1
|
reliabilityLevel: 1
|
||||||
unreadCount: false
|
unreadCount: false
|
||||||
offlinePush:
|
offlinePush:
|
||||||
enable: false
|
enable: true
|
||||||
title: deleted a friend
|
title: "deleted a friend"
|
||||||
desc: deleted a friend
|
desc: "deleted a friend"
|
||||||
ext: deleted a friend
|
ext: "deleted a friend"
|
||||||
|
|
||||||
friendRemarkSet:
|
friendRemarkSet:
|
||||||
isSendMsg: false
|
isSendMsg: false
|
||||||
reliabilityLevel: 1
|
reliabilityLevel: 1
|
||||||
unreadCount: false
|
unreadCount: false
|
||||||
offlinePush:
|
offlinePush:
|
||||||
enable: false
|
enable: true
|
||||||
title: Your friend's profile has been changed
|
title: "Your friend's profile has been changed"
|
||||||
desc: Your friend's profile has been changed
|
desc: "Your friend's profile has been changed"
|
||||||
ext: Your friend's profile has been changed
|
ext: "Your friend's profile has been changed"
|
||||||
|
|
||||||
blackAdded:
|
blackAdded:
|
||||||
isSendMsg: false
|
isSendMsg: false
|
||||||
reliabilityLevel: 1
|
reliabilityLevel: 1
|
||||||
unreadCount: false
|
unreadCount: false
|
||||||
offlinePush:
|
offlinePush:
|
||||||
enable: false
|
enable: true
|
||||||
title: blocked a user
|
title: "blocked a user"
|
||||||
desc: blocked a user
|
desc: "blocked a user"
|
||||||
ext: blocked a user
|
ext: "blocked a user"
|
||||||
|
|
||||||
blackDeleted:
|
blackDeleted:
|
||||||
isSendMsg: false
|
isSendMsg: false
|
||||||
reliabilityLevel: 1
|
reliabilityLevel: 1
|
||||||
unreadCount: false
|
unreadCount: false
|
||||||
offlinePush:
|
offlinePush:
|
||||||
enable: false
|
enable: true
|
||||||
title: Remove a blocked user
|
title: "Remove a blocked user"
|
||||||
desc: Remove a blocked user
|
desc: "Remove a blocked user"
|
||||||
ext: Remove a blocked user
|
ext: "Remove a blocked user"
|
||||||
|
|
||||||
friendInfoUpdated:
|
friendInfoUpdated:
|
||||||
isSendMsg: false
|
isSendMsg: false
|
||||||
reliabilityLevel: 1
|
reliabilityLevel: 1
|
||||||
unreadCount: false
|
unreadCount: false
|
||||||
offlinePush:
|
offlinePush:
|
||||||
enable: false
|
enable: true
|
||||||
title: friend info updated
|
title: "friend info updated"
|
||||||
desc: friend info updated
|
desc: "friend info updated"
|
||||||
ext: friend info updated
|
ext: "friend info updated"
|
||||||
|
|
||||||
#####################user#########################
|
#####################user#########################
|
||||||
userInfoUpdated:
|
userInfoUpdated:
|
||||||
@ -289,10 +308,10 @@ userInfoUpdated:
|
|||||||
reliabilityLevel: 1
|
reliabilityLevel: 1
|
||||||
unreadCount: false
|
unreadCount: false
|
||||||
offlinePush:
|
offlinePush:
|
||||||
enable: false
|
enable: true
|
||||||
title: userInfo updated
|
title: "Remove a blocked user"
|
||||||
desc: userInfo updated
|
desc: "Remove a blocked user"
|
||||||
ext: userInfo updated
|
ext: "Remove a blocked user"
|
||||||
|
|
||||||
userStatusChanged:
|
userStatusChanged:
|
||||||
isSendMsg: false
|
isSendMsg: false
|
||||||
@ -300,9 +319,9 @@ userStatusChanged:
|
|||||||
unreadCount: false
|
unreadCount: false
|
||||||
offlinePush:
|
offlinePush:
|
||||||
enable: false
|
enable: false
|
||||||
title: user status changed
|
title: "user status changed"
|
||||||
desc: user status changed
|
desc: "user status changed"
|
||||||
ext: user status changed
|
ext: "user status changed"
|
||||||
|
|
||||||
#####################conversation#########################
|
#####################conversation#########################
|
||||||
conversationChanged:
|
conversationChanged:
|
||||||
@ -310,17 +329,17 @@ conversationChanged:
|
|||||||
reliabilityLevel: 1
|
reliabilityLevel: 1
|
||||||
unreadCount: false
|
unreadCount: false
|
||||||
offlinePush:
|
offlinePush:
|
||||||
enable: false
|
enable: true
|
||||||
title: conversation changed
|
title: "conversation changed"
|
||||||
desc: conversation changed
|
desc: "conversation changed"
|
||||||
ext: conversation changed
|
ext: "conversation changed"
|
||||||
|
|
||||||
conversationSetPrivate:
|
conversationSetPrivate:
|
||||||
isSendMsg: true
|
isSendMsg: true
|
||||||
reliabilityLevel: 1
|
reliabilityLevel: 1
|
||||||
unreadCount: false
|
unreadCount: false
|
||||||
offlinePush:
|
offlinePush:
|
||||||
enable: false
|
enable: true
|
||||||
title: burn after reading
|
title: "burn after reading"
|
||||||
desc: burn after reading
|
desc: "burn after reading"
|
||||||
ext: burn after reading
|
ext: "burn after reading"
|
||||||
|
|||||||
@ -3,17 +3,11 @@ api:
|
|||||||
listenIP: 0.0.0.0
|
listenIP: 0.0.0.0
|
||||||
# Listening ports; if multiple are configured, multiple instances will be launched, must be consistent with the number of prometheus.ports
|
# Listening ports; if multiple are configured, multiple instances will be launched, must be consistent with the number of prometheus.ports
|
||||||
ports: [ 10002 ]
|
ports: [ 10002 ]
|
||||||
# API compression level; 0: default compression, 1: best compression, 2: best speed, -1: no compression
|
|
||||||
compressionLevel: 0
|
|
||||||
|
|
||||||
|
|
||||||
prometheus:
|
prometheus:
|
||||||
# Whether to enable prometheus
|
# Whether to enable prometheus
|
||||||
enable: true
|
enable: true
|
||||||
# autoSetPorts indicates whether to automatically set the ports
|
|
||||||
autoSetPorts: true
|
|
||||||
# Prometheus listening ports, must match the number of api.ports
|
# Prometheus listening ports, must match the number of api.ports
|
||||||
# It will only take effect when autoSetPorts is set to false.
|
ports: [ 20113 ]
|
||||||
ports:
|
|
||||||
# This address can be accessed via a browser
|
# This address can be accessed via a browser
|
||||||
grafanaURL:
|
grafanaURL: http://127.0.0.1:13000/
|
||||||
|
|||||||
@ -1,4 +1,3 @@
|
|||||||
cronExecuteTime: 0 2 * * *
|
cronExecuteTime: "0 2 * * *"
|
||||||
retainChatRecords: 365
|
retainChatRecords: 365
|
||||||
fileExpireTime: 180
|
fileExpireTime: 90
|
||||||
deleteObjectType: ["msg-picture","msg-file", "msg-voice","msg-video","msg-video-snapshot","sdklog"]
|
|
||||||
|
|||||||
@ -1,19 +1,15 @@
|
|||||||
rpc:
|
rpc:
|
||||||
# The IP address where this RPC service registers itself; if left blank, it defaults to the internal network IP
|
# The IP address where this RPC service registers itself; if left blank, it defaults to the internal network IP
|
||||||
registerIP:
|
registerIP: ''
|
||||||
# autoSetPorts indicates whether to automatically set the ports
|
|
||||||
# if you use in kubernetes, set it to false
|
|
||||||
autoSetPorts: true
|
|
||||||
# List of ports that the RPC service listens on; configuring multiple ports will launch multiple instances. These must match the number of configured prometheus ports
|
# List of ports that the RPC service listens on; configuring multiple ports will launch multiple instances. These must match the number of configured prometheus ports
|
||||||
# It will only take effect when autoSetPorts is set to false.
|
ports: [ 10140 ]
|
||||||
ports:
|
|
||||||
|
|
||||||
prometheus:
|
prometheus:
|
||||||
# Enable or disable Prometheus monitoring
|
# Enable or disable Prometheus monitoring
|
||||||
enable: true
|
enable: true
|
||||||
# List of ports that Prometheus listens on; these must match the number of rpc.ports to ensure correct monitoring setup
|
# List of ports that Prometheus listens on; these must match the number of rpc.ports to ensure correct monitoring setup
|
||||||
# It will only take effect when autoSetPorts is set to false.
|
ports: [ 20112 ]
|
||||||
ports:
|
|
||||||
# IP address that the RPC/WebSocket service listens on; setting to 0.0.0.0 listens on both internal and external IPs. If left blank, it automatically uses the internal network IP
|
# IP address that the RPC/WebSocket service listens on; setting to 0.0.0.0 listens on both internal and external IPs. If left blank, it automatically uses the internal network IP
|
||||||
listenIP: 0.0.0.0
|
listenIP: 0.0.0.0
|
||||||
|
|
||||||
@ -26,3 +22,9 @@ longConnSvr:
|
|||||||
websocketMaxMsgLen: 4096
|
websocketMaxMsgLen: 4096
|
||||||
# WebSocket connection handshake timeout in seconds
|
# WebSocket connection handshake timeout in seconds
|
||||||
websocketTimeout: 10
|
websocketTimeout: 10
|
||||||
|
|
||||||
|
# 1: For Android, iOS, Windows, Mac, and web platforms, only one instance can be online at a time
|
||||||
|
multiLoginPolicy: 1
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -1,8 +1,6 @@
|
|||||||
prometheus:
|
prometheus:
|
||||||
# Enable or disable Prometheus monitoring
|
# Enable or disable Prometheus monitoring
|
||||||
enable: true
|
enable: true
|
||||||
# autoSetPorts indicates whether to automatically set the ports
|
|
||||||
autoSetPorts: true
|
|
||||||
# List of ports that Prometheus listens on; each port corresponds to an instance of monitoring. Ensure these are managed accordingly
|
# List of ports that Prometheus listens on; each port corresponds to an instance of monitoring. Ensure these are managed accordingly
|
||||||
# It will only take effect when autoSetPorts is set to false.
|
# Because four instances have been launched, four ports need to be specified
|
||||||
ports:
|
ports: [ 20108, 20109, 20110, 20111 ]
|
||||||
|
|||||||
@ -1,47 +1,46 @@
|
|||||||
rpc:
|
rpc:
|
||||||
# The IP address where this RPC service registers itself; if left blank, it defaults to the internal network IP
|
# The IP address where this RPC service registers itself; if left blank, it defaults to the internal network IP
|
||||||
registerIP:
|
registerIP: ''
|
||||||
# IP address that the RPC service listens on; setting to 0.0.0.0 listens on both internal and external IPs. If left blank, it automatically uses the internal network IP
|
# IP address that the RPC service listens on; setting to 0.0.0.0 listens on both internal and external IPs. If left blank, it automatically uses the internal network IP
|
||||||
listenIP: 0.0.0.0
|
listenIP: 0.0.0.0
|
||||||
# autoSetPorts indicates whether to automatically set the ports
|
|
||||||
# if you use in kubernetes, set it to false
|
|
||||||
autoSetPorts: true
|
|
||||||
# List of ports that the RPC service listens on; configuring multiple ports will launch multiple instances. These must match the number of configured prometheus ports
|
# List of ports that the RPC service listens on; configuring multiple ports will launch multiple instances. These must match the number of configured prometheus ports
|
||||||
# It will only take effect when autoSetPorts is set to false.
|
ports: [ 10170 ]
|
||||||
ports:
|
|
||||||
|
|
||||||
|
|
||||||
prometheus:
|
prometheus:
|
||||||
# Enable or disable Prometheus monitoring
|
# Enable or disable Prometheus monitoring
|
||||||
enable: true
|
enable: true
|
||||||
# List of ports that Prometheus listens on; these must match the number of rpc.ports to ensure correct monitoring setup
|
# List of ports that Prometheus listens on; these must match the number of rpc.ports to ensure correct monitoring setup
|
||||||
# It will only take effect when autoSetPorts is set to false.
|
ports: [ 20107 ]
|
||||||
ports:
|
|
||||||
|
|
||||||
maxConcurrentWorkers: 3
|
maxConcurrentWorkers: 3
|
||||||
#Use geTui for offline push notifications, or choose fcm or jpns; corresponding configuration settings must be specified.
|
#"Use geTui for offline push notifications, or choose fcm or jpns; corresponding configuration settings must be specified."
|
||||||
enable:
|
enable: "geTui"
|
||||||
getui:
|
geTui:
|
||||||
pushUrl: https://restapi.getui.com/v2/$appId
|
pushUrl: "https://restapi.getui.com/v2/$appId"
|
||||||
masterSecret:
|
masterSecret: ''
|
||||||
appKey:
|
appKey: ''
|
||||||
intent:
|
intent: ''
|
||||||
channelID:
|
channelID: ''
|
||||||
channelName:
|
channelName: ''
|
||||||
fcm:
|
fcm:
|
||||||
# Prioritize using file paths. If the file path is empty, use URL
|
# Prioritize using file paths. If the file path is empty, use URL
|
||||||
filePath: # File path is concatenated with the parameters passed in through - c(`mage` default pass in `config/`) and filePath.
|
filePath: "" # File path is concatenated with the parameters passed in through - c(`mage` default pass in `config/`) and filePath.
|
||||||
authURL: # Must start with https or http.
|
authURL: "" # Must start with https or http.
|
||||||
jpush:
|
jpns:
|
||||||
appKey:
|
appKey: ''
|
||||||
masterSecret:
|
masterSecret: ''
|
||||||
pushURL:
|
pushURL: ''
|
||||||
pushIntent:
|
pushIntent: ''
|
||||||
|
|
||||||
# iOS system push sound and badge count
|
# iOS system push sound and badge count
|
||||||
iosPush:
|
iosPush:
|
||||||
pushSound: xxx
|
pushSound: "xxx"
|
||||||
badgeCount: true
|
badgeCount: true
|
||||||
production: false
|
production: false
|
||||||
|
|
||||||
fullUserCache: true
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -1,22 +1,18 @@
|
|||||||
rpc:
|
rpc:
|
||||||
# The IP address where this RPC service registers itself; if left blank, it defaults to the internal network IP
|
# The IP address where this RPC service registers itself; if left blank, it defaults to the internal network IP
|
||||||
registerIP:
|
registerIP: ''
|
||||||
# IP address that the RPC service listens on; setting to 0.0.0.0 listens on both internal and external IPs. If left blank, it automatically uses the internal network IP
|
# IP address that the RPC service listens on; setting to 0.0.0.0 listens on both internal and external IPs. If left blank, it automatically uses the internal network IP
|
||||||
listenIP: 0.0.0.0
|
listenIP: 0.0.0.0
|
||||||
# autoSetPorts indicates whether to automatically set the ports
|
|
||||||
# if you use in kubernetes, set it to false
|
|
||||||
autoSetPorts: true
|
|
||||||
# List of ports that the RPC service listens on; configuring multiple ports will launch multiple instances. These must match the number of configured prometheus ports
|
# List of ports that the RPC service listens on; configuring multiple ports will launch multiple instances. These must match the number of configured prometheus ports
|
||||||
# It will only take effect when autoSetPorts is set to false.
|
ports: [ 10160 ]
|
||||||
ports:
|
|
||||||
|
|
||||||
prometheus:
|
prometheus:
|
||||||
# Enable or disable Prometheus monitoring
|
# Enable or disable Prometheus monitoring
|
||||||
enable: true
|
enable: true
|
||||||
# List of ports that Prometheus listens on; these must match the number of rpc.ports to ensure correct monitoring setup
|
# List of ports that Prometheus listens on; these must match the number of rpc.ports to ensure correct monitoring setup
|
||||||
# It will only take effect when autoSetPorts is set to false.
|
ports: [ 20106 ]
|
||||||
ports:
|
|
||||||
|
|
||||||
tokenPolicy:
|
tokenPolicy:
|
||||||
# Token validity period, in days
|
# Token validity period, in days
|
||||||
expire: 90
|
expire: 90
|
||||||
|
|
||||||
|
|||||||
@ -1,18 +1,13 @@
|
|||||||
rpc:
|
rpc:
|
||||||
# The IP address where this RPC service registers itself; if left blank, it defaults to the internal network IP
|
# The IP address where this RPC service registers itself; if left blank, it defaults to the internal network IP
|
||||||
registerIP:
|
registerIP: ''
|
||||||
# IP address that the RPC service listens on; setting to 0.0.0.0 listens on both internal and external IPs. If left blank, it automatically uses the internal network IP
|
# IP address that the RPC service listens on; setting to 0.0.0.0 listens on both internal and external IPs. If left blank, it automatically uses the internal network IP
|
||||||
listenIP: 0.0.0.0
|
listenIP: 0.0.0.0
|
||||||
# autoSetPorts indicates whether to automatically set the ports
|
|
||||||
# if you use in kubernetes, set it to false
|
|
||||||
autoSetPorts: true
|
|
||||||
# List of ports that the RPC service listens on; configuring multiple ports will launch multiple instances. These must match the number of configured prometheus ports
|
# List of ports that the RPC service listens on; configuring multiple ports will launch multiple instances. These must match the number of configured prometheus ports
|
||||||
# It will only take effect when autoSetPorts is set to false.
|
ports: [ 10180 ]
|
||||||
ports:
|
|
||||||
|
|
||||||
prometheus:
|
prometheus:
|
||||||
# Enable or disable Prometheus monitoring
|
# Enable or disable Prometheus monitoring
|
||||||
enable: true
|
enable: true
|
||||||
# List of ports that Prometheus listens on; these must match the number of rpc.ports to ensure correct monitoring setup
|
# List of ports that Prometheus listens on; these must match the number of rpc.ports to ensure correct monitoring setup
|
||||||
# It will only take effect when autoSetPorts is set to false.
|
ports: [ 20105 ]
|
||||||
ports:
|
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user