-
-
Notifications
You must be signed in to change notification settings - Fork 41
Deployment Details
Core implementation
- Java/Spring server app
- Postgres DB
- ElasticSearch
- Blob storage (Azure or Google Cloud)
- React/TypeScript UI
Deployment specific details for open-vsx.org deployment
application.yml
- Eclipse Foundation specific UI
- Publisher’s agreement
Scripts and Github actions for publishing
-
extensions.json
file for list of extensions to auto-publish - Github action for nightly auto-publishing
- log of results
- Other Github actions for publishing extensions
- One must first have signed the Publisher Agreement.
- Publisher agreement status visible in one's profile.
- Create a
.vsix
file with thevsce package
command - Minimal package includes
extension.js
andpackage.json
- Click 'Publish' and drag and drop
.vsix
file in the UI. - Use the
ovsx publish --p [personal access token]
command. Requires a personal access token one generates from profile settings. - Because file processing is asynchronous, extension will temporarily show as inactive until file processing completes, assuming no errors.
Documentation on architecture of implementation and instructions for building and deploying.
user_data
extension
extension_review
extension_version
file_resource
namespace
namespace_membership
namespace_social_links
personal_access_token
- update-download-counts - hourly
- MonthlyAdminStatistics - monthly
- ElasticSearchUpdateIndex - daily
- DataMirror, if enabled - configurable
- File processing on publish
- Namespace rename/merge
- DB migration
- Extension file removal
- Generate/delete keypair for extension signing
- Create/delete extension signature
- Production Kube Cluster
- 2 server pods (with up to 5 CPUs and 8 GB of RAM)
- 3 elastic search pods (with up to 4 CPUs and 6 GB of RAM)
- Staging Kube Cluster
- 1 server pod (with up to 1 CPU and 2 GB of RAM)
- 1 elastic search pod (with up to 1 CPU and 2 GB of RAM)
- Spring Boot
v3.1.0
- Java
eclipse-temurin:17.0.7_7-jdk
- Postgres
- version?
- 39GB
- Elastic
v8.7.1
- 5MB
- Azure Blob storage
- 1.5TB
- Better Uptime
- SRE creates a pull request in the
eclipse/openvsx
repository. - GitHub runs Eclipse Contributor Agreement action to check that the committer has signed the Eclipse Contributor Agreement.
- GitHub action runs unit tests and integration tests.
- SRE merges the pull request into the
eclipse/openvsx
master
branch. - SRE creates new release in the
eclipse/openvsx
repository:- SRE merges
@dependabot
pull requests to fix vulnerabilities. - SRE drafts a new release and publishes it.
- GitHub action creates server and webui Docker images.
- if
webui
has changed, then SRE publishes newopenvsx-webui
version to NPM. - if
cli
has changed, then SRE publishes newovsx
version to NPM. - SRE updates release post with links to
server
andwebui
Docker images and, if changed,openvsx-webui
andovsx
NPM packages.
- SRE merges
- SRE updates
DockerFile
inamvanbaren/open-vsx.org
repository with newopenvsx-server
Docker image version and, if changed, newopenvsx-webui
package version. - if
openvsx-webui
version has changed, then SRE updates theopenvsx-webui
version in thewebsite/package.json
file and runsyarn install
to update theyarn.lock
file. - SRE commits and pushes the changes to a new branch in the
amvanbaren/open-vsx.org
repository. - SRE creates pull request to merge the new
amvanbaren/open-vsx.org
branch intoEclipseFdn/open-vsx.org
repositorymain
branch. - GitHub runs Eclipse Contributor Agreement action to check that the committer has signed the Eclipse Contributor Agreement.
- GitHub action kicks off Jenkins job to verify the new Docker image.
- SRE merges the pull request into the
main
branch. - GitHub action kicks off Jenkins job to build the Docker image and deploy it to
staging
. - SRE checks the staging server and does some quick smoke testing.
- SRE creates pull request in
EclipseFdn/open-vsx.org
repository to merge themain
branch into theproduction
branch. - Independent review and approval of the pull request.
- SRE merges the pull request into the
production
branch. - GitHub action kicks off Jenkins job to build the Docker image and deploy it to
production
. - SRE monitors production for ~15 min to make sure the deployment succeeded and the server is stable.
- ElasticSearch unresponsive:
- Delete ElasticSearch pods.
- In server application.yml set
ovsx.elasticsearch.clear-on-start: true
. - Wait until all ElasticSearch pods have started.
- Deploy server application.
- In server application.yml remove
ovsx.elasticsearch.clear-on-start: true
.
- Open VSX server unresponsive:
- Delete Open VSX server pod.
- Wait until new pod has started.
- Repeat the previous steps until all Open VSX server pods are renewed.
- Too much load:
- Delete pod that is under load.
- Wait until new pod has started.
Site status and 90 day history are available at https://status.open-vsx.org/. These are a series of https://uptime.betterstack.com monitors. Site admins have access to an API for access to historical data.
Outages show up on the status page and as an incident report at https://status.open-vsx.org/incidents.
Once an outage is detected, an incident is created at https://status.open-vsx.org/incidents. The support acknowledges the incident on that page to indicate they are aware of the issue and are working it. If it's a lengthy outage, status reports may be appropriate.
One the outage is resolved, the support team documents the cause and actions taken.
Planned outages are communicated with:
- An entry at https://status.open-vsx.org/maintenance
- A communication on the developer Slack channel and working group mailing list.
- If appropriate, on the site banner.