Meshery UI and Server #24
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Meshery UI and Server | |
on: | |
pull_request: | |
branches: | |
- "master" | |
paths-ignore: | |
- "docs/**" | |
- "mesheryctl/**" | |
- "*.md" | |
- "*.github/**" | |
workflow_dispatch: | |
inputs: | |
logLevel: | |
description: "Log level" | |
required: true | |
default: "warning" | |
jobs: | |
build-backend: | |
name: Backend build | |
runs-on: ubuntu-22.04 | |
steps: | |
- name: Check out code | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: 1 | |
- name: Setup Go | |
uses: actions/setup-go@master | |
with: | |
go-version: "1.21" | |
- name: Build Meshery Server | |
env: | |
PROVIDER_BASE_URLS: https://meshery.layer5.io | |
PORT: 9081 | |
ADAPTER_URLS: "mesherylocal.layer5.io:10000 mesherylocal.layer5.io:10001 mesherylocal.layer5.io:10002 mesherylocal.layer5.io:10003 mesherylocal.layer5.io:10004 mesherylocal.layer5.io:10008 mesherylocal.layer5.io:10009 mesherylocal.layer5.io:10007" | |
run: | | |
make build-server | |
ui-build: | |
name: UI build | |
runs-on: ubuntu-22.04 | |
steps: | |
- name: Check out code | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: 1 | |
- uses: actions/setup-node@v4 | |
with: | |
node-version: 18 | |
- name: Cache node modules | |
id: node-cache | |
uses: actions/cache@v4 | |
with: | |
path: | | |
~/cache | |
~/.cache | |
/home/runner/.cache | |
!~/cache/exclude | |
**/node_modules | |
/home/runner/.cache/Cypress | |
~/.npm | |
${{ github.workspace }}/.next/cache | |
key: ${{ runner.os }}-nextjs-${{ hashFiles('**/package-lock.json') }}-${{ hashFiles('**.[jt]s', '**.[jt]sx') }} | |
restore-keys: | | |
${{ runner.os }}-nextjs-${{ hashFiles('**/package-lock.json') }}- | |
- name: Install dependencies | |
if: steps.node-cache.outputs.cache-hit != 'true' | |
run: | | |
cd ui | |
npm i | |
cd .. | |
cd provider-ui | |
npm i | |
# - name: Cache meshery-ui | |
# id: meshery-ui-cache | |
# uses: actions/cache@v3 | |
# with: | |
# path: | | |
# /home/runner/work/meshery/meshery/ui/out | |
# key: ${{ runner.os }}-meshery-ui-${{ hashFiles('**.[jt]s', '**.[jt]sx') }} | |
- name: build meshery-ui | |
# if: steps.meshery-ui-cache.outputs.cache-hit != 'true' | |
run: | | |
make ui-meshery-build | |
- name: build provider-ui | |
run: | | |
make ui-provider-build | |
- name: Upload meshery-ui artifacts | |
uses: actions/upload-artifact@v4 | |
with: | |
name: meshery-ui | |
path: /home/runner/work/meshery/meshery/ui/out | |
- name: Upload provider-ui artifacts | |
uses: actions/upload-artifact@v4 | |
with: | |
name: provider-ui | |
path: /home/runner/work/meshery/meshery/provider-ui/out | |
tests-ui-e2e: | |
needs: [build-backend, ui-build] | |
name: UI end-to-end tests | |
runs-on: ubuntu-22.04 | |
steps: | |
- name: Check out code | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
- name: Check out meshery-istio code | |
uses: actions/checkout@v4 | |
with: | |
repository: layer5io/meshery-istio | |
path: ./meshery-istio | |
- name: Check out meshery-consul code | |
uses: actions/checkout@v4 | |
with: | |
repository: layer5io/meshery-consul | |
path: ./meshery-consul | |
- name: Create k8s Kind Cluster | |
uses: helm/[email protected] | |
with: | |
cluster_name: "kind-cluster" | |
- name: Setup Go | |
uses: actions/setup-go@master | |
with: | |
go-version: "1.21" | |
- name: Run meshery-istio | |
run: | | |
mkdir -p /home/runner/.meshery/bin | |
cd ./meshery-istio | |
go run main.go & | |
sleep 60 | |
- name: Run meshery-consul | |
run: | | |
mkdir -p /home/runner/.meshery/bin | |
cd ./meshery-consul | |
go run main.go & | |
sleep 60 | |
- name: Setup node | |
uses: actions/setup-node@v4 | |
with: | |
node-version: 18 | |
- name: Restore node modules cache | |
id: node-cache | |
uses: actions/cache@v4 | |
with: | |
path: | | |
~/cache | |
~/.cache | |
/home/runner/.cache | |
!~/cache/exclude | |
**/node_modules | |
/home/runner/.cache/Cypress | |
~/.npm | |
${{ github.workspace }}/.next/cache | |
key: ${{ runner.os }}-nextjs-${{ hashFiles('**/package-lock.json') }}-${{ hashFiles('**.[jt]s', '**.[jt]sx') }} | |
restore-keys: | | |
${{ runner.os }}-nextjs-${{ hashFiles('**/package-lock.json') }}- | |
- name: Download meshery-ui artifacts | |
uses: actions/download-artifact@v4 | |
with: | |
name: meshery-ui | |
path: /home/runner/work/meshery/meshery/ui/out | |
- name: Download provider-ui artifacts | |
uses: actions/download-artifact@v4 | |
with: | |
name: provider-ui | |
path: /home/runner/work/meshery/meshery/provider-ui/out | |
- name: Run Meshery UI and Server | |
env: | |
PROVIDER_BASE_URLS: https://meshery.layer5.io | |
PORT: 9081 | |
ADAPTER_URLS: "mesherylocal.layer5.io:10000 mesherylocal.layer5.io:10001 mesherylocal.layer5.io:10002 mesherylocal.layer5.io:10003 mesherylocal.layer5.io:10004 mesherylocal.layer5.io:10008 mesherylocal.layer5.io:10009 mesherylocal.layer5.io:10007" | |
run: | | |
make server & | |
sleep 60 | |
- name: Run Playwright End-to-End Tests | |
env: | |
MESHERY_SERVER_URL: "http://localhost:9081" | |
REMOTE_PROVIDER_URL: "https://meshery.layer5.io" | |
REMOTE_PROVIDER_USER_EMAIL: ${{ secrets.REMOTE_PROVIDER_USER_EMAIL }} | |
REMOTE_PROVIDER_USER_PASSWORD: ${{ secrets.REMOTE_PROVIDER_USER_PASS }} | |
PROVIDER_TOKEN: ${{ secrets.PROVIDER_TOKEN }} | |
run: | | |
make test-setup-ui | |
make test-ui | |
docker-build-test: | |
name: Docker build | |
if: github.repository == 'meshery/meshery' | |
runs-on: ubuntu-22.04 | |
steps: | |
- name: Check out code | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: 1 | |
- name: Docker edge build & tag | |
if: startsWith(github.ref, 'refs/tags/') != true && success() | |
env: | |
RELEASE_CHANNEL: "edge" | |
run: | | |
DOCKER_BUILDKIT=1 docker build -f install/docker/Dockerfile --no-cache -t meshery:edge-latest --build-arg TOKEN=test --build-arg GIT_COMMITSHA=${GITHUB_SHA::8} --build-arg RELEASE_CHANNEL=${RELEASE_CHANNEL} . | |
docker tag meshery:edge-latest meshery:edge-${GITHUB_SHA::8} | |
- name: Docker edge push | |
if: github.event_name != 'pull_request' && startsWith(github.ref, 'refs/tags/') && success() | |
run: | | |
docker push ${{ secrets.IMAGE_NAME }}:edge-latest | |
docker push ${{ secrets.IMAGE_NAME }}:edge-${GITHUB_REF/refs\/tags\//} | |
docker push ${{ secrets.IMAGE_NAME }}:edge-${GITHUB_SHA::8} | |
- name: Docker Hub Description | |
if: github.event_name != 'pull_request' && startsWith(github.ref, 'refs/tags/') && success() | |
uses: peter-evans/dockerhub-description@v4 | |
env: | |
DOCKERHUB_USERNAME: ${{ secrets.DOCKER_USERNAME }} | |
DOCKERHUB_PASSWORD: ${{ secrets.DOCKER_PASSWORD }} | |
DOCKERHUB_REPOSITORY: ${{ secrets.IMAGE_NAME }} | |
# validate the swagger docs | |
swaggerci: | |
if: github.repository == 'meshery/meshery' | |
name: swagger-docs | |
runs-on: ubuntu-22.04 | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Check if handlers were modified | |
uses: dorny/paths-filter@v3 | |
id: changes | |
with: | |
filters: | | |
modified: | |
- added|modified: "handlers/**" | |
- name: Setup go-swagger | |
if: steps.changes.outputs.modified == 'true' | |
uses: minchao/setup-go-swagger@v1 | |
with: | |
version: v0.26.1 | |
- name: swagger-spec | |
if: steps.changes.outputs.modified == 'true' | |
run: swagger generate spec -o ./server/helpers/swagger.yaml --scan-models | |
- name: swagger-docs | |
if: steps.changes.outputs.modified == 'true' | |
run: swagger generate spec -o ./docs/_data/swagger.yml --scan-models && swagger flatten ./docs/_data/swagger.yml -o ./docs/_data/swagger.yml --with-expand --format=yaml | |
# validate graphQL schema | |
garphql_validate: | |
name: Validate GraphQL schema | |
if: github.repository == 'meshery/meshery' | |
runs-on: ubuntu-latest | |
steps: | |
- name: Check out code | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: 1 | |
- name: Check if schema was modified | |
uses: dorny/paths-filter@v3 | |
id: filter | |
with: | |
filters: | | |
modified: | |
- added|modified: 'server/internal/graphql/schema/schema.graphql' | |
- name: Set up Ruby | |
if: steps.filter.outputs.modified == 'true' | |
uses: ruby/setup-ruby@v1 | |
with: | |
ruby-version: 3.2.2 | |
bundler-cache: true | |
- name: graphql-docs | |
if: steps.filter.outputs.modified == 'true' | |
run: | | |
cd docs | |
bundle install | |
bundle exec rake graphql:compile_docs | |