Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

jgf: refactor to use shared functions and fix containment #76

Merged
merged 6 commits into from
Jun 27, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
179 changes: 179 additions & 0 deletions .github/workflows/e2e-test.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,179 @@
name: fluence build test

on:
pull_request: []
# Test on demand (dispatch) or once a week, sunday
# We combine the builds into one job to simplify not needing to share
# containers between jobs. We also don't want to push unless the tests pass.
workflow_dispatch:
schedule:
- cron: '0 0 * * 0'

jobs:
build-fluence:

# The scheduler and controller are built together with the hack script
# in the upstream scheduler-plugins
env:
container: ghcr.io/flux-framework/fluence
controller: ghcr.io/flux-framework/fluence-controller
runs-on: ubuntu-latest
name: build fluence
steps:
- uses: actions/checkout@v4
- uses: actions/setup-go@v4
with:
go-version: ^1.21

- name: Build Containers
run: |
make prepare
make build REGISTRY=ghcr.io/flux-framework SCHEDULER_IMAGE=fluence CONTROLLER_IMAGE=fluence-controller

- name: Save Containers
run: |
docker save ${{ env.container }} | gzip > fluence_latest.tar.gz
docker save ${{ env.controller }} | gzip > fluence_controller_latest.tar.gz

- name: Upload container artifact
uses: actions/upload-artifact@v4
with:
name: fluence
path: fluence_latest.tar.gz

- name: Upload container artifact
uses: actions/upload-artifact@v4
with:
name: fluence_controller
path: fluence_controller_latest.tar.gz

build-sidecar:
env:
container: ghcr.io/flux-framework/fluence-sidecar
runs-on: ubuntu-latest
name: build sidecar
steps:
- uses: actions/checkout@v4
- uses: actions/setup-go@v4
with:
go-version: ^1.21

- name: Build Container
run: |
make prepare
make build-sidecar REGISTRY=ghcr.io/flux-framework SIDECAR_IMAGE=fluence-sidecar

- name: Save Container
run: docker save ${{ env.container }} | gzip > fluence_sidecar_latest.tar.gz

- name: Upload container artifact
uses: actions/upload-artifact@v4
with:
name: fluence_sidecar
path: fluence_sidecar_latest.tar.gz

test-fluence:
needs: [build-fluence, build-sidecar]
permissions:
packages: write
env:
fluence_container: ghcr.io/flux-framework/fluence
sidecar_container: ghcr.io/flux-framework/fluence-sidecar
controller_container: ghcr.io/flux-framework/fluence-controller

runs-on: ubuntu-latest
name: test fluence
steps:
- uses: actions/checkout@v4
- uses: actions/setup-go@v4
with:
go-version: ^1.21

- name: Download fluence artifact
uses: actions/download-artifact@v4
with:
name: fluence
path: /tmp

- name: Download fluence_sidecar artifact
uses: actions/download-artifact@v4
with:
name: fluence_sidecar
path: /tmp

- name: Download fluence_controller artifact
uses: actions/download-artifact@v4
with:
name: fluence_controller
path: /tmp

- name: Make Space For Build
run: |
sudo rm -rf /usr/share/dotnet
sudo rm -rf /usr/local/lib/android
sudo rm -rf /opt/ghc

- name: Load Docker images
run: |
ls /tmp/*.tar.gz
docker load --input /tmp/fluence_sidecar_latest.tar.gz
rm /tmp/fluence_sidecar_latest.tar.gz
docker load --input /tmp/fluence_latest.tar.gz
rm /tmp/fluence_latest.tar.gz
docker load --input /tmp/fluence_controller_latest.tar.gz
rm /tmp/fluence_controller_latest.tar.gz
docker image ls -a | grep fluence

- name: Create Kind Cluster
uses: helm/[email protected]
with:
cluster_name: kind
kubectl_version: v1.28.2
version: v0.20.0
config: ./.github/test-kind-config.yaml

- name: Load Docker Containers into Kind
env:
fluence: ${{ env.fluence_container }}
sidecar: ${{ env.sidecar_container }}
controller: ${{ env.controller_container }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
kind load docker-image ${fluence}
kind load docker-image ${sidecar}
kind load docker-image ${controller}

- name: Install Cert Manager
run: |
kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.13.1/cert-manager.yaml
sleep 10

- name: Test Fluence
run: /bin/bash ./.github/test.sh

- name: Tag Weekly Images
run: |
# YEAR-MONTH-DAY or #YYYY-MM-DD
tag=$(echo $(date +%Y-%m-%d))
echo "Tagging and releasing ${{ env.fluence_container}}:${tag}"
docker tag ${{ env.fluence_container }}:latest ${{ env.fluence_container }}:${tag}
echo "Tagging and releasing ${{ env.sidecar_container}}:${tag}"
docker tag ${{ env.sidecar_container }}:latest ${{ env.sidecar_container }}:${tag}
echo "Tagging and releasing ${{ env.controller_container}}:${tag}"
docker tag ${{ env.controller_container }}:latest ${{ env.controller_container }}:${tag}

# If we get here, tests pass, and we can deploy
- name: GHCR Login
if: (github.event_name != 'pull_request')
uses: docker/login-action@v2
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}

- name: Deploy Containers
if: (github.event_name != 'pull_request')
run: |
docker push ${{ env.fluence_container }} --all-tags
docker push ${{ env.sidecar_container }} --all-tags
docker push ${{ env.controller_container }} --all-tags
172 changes: 6 additions & 166 deletions .github/workflows/test.yaml
Original file line number Diff line number Diff line change
@@ -1,179 +1,19 @@
name: fluence build test
name: fluence testing

on:
pull_request: []
# Test on demand (dispatch) or once a week, sunday
# We combine the builds into one job to simplify not needing to share
# containers between jobs. We also don't want to push unless the tests pass.
workflow_dispatch:
schedule:
- cron: '0 0 * * 0'

jobs:
build-fluence:

# The scheduler and controller are built together with the hack script
# in the upstream scheduler-plugins
env:
container: ghcr.io/flux-framework/fluence
controller: ghcr.io/flux-framework/fluence-controller
runs-on: ubuntu-latest
name: build fluence
steps:
- uses: actions/checkout@v4
- uses: actions/setup-go@v4
with:
go-version: ^1.19

- name: Build Containers
run: |
make prepare
make build REGISTRY=ghcr.io/flux-framework SCHEDULER_IMAGE=fluence CONTROLLER_IMAGE=fluence-controller

- name: Save Containers
run: |
docker save ${{ env.container }} | gzip > fluence_latest.tar.gz
docker save ${{ env.controller }} | gzip > fluence_controller_latest.tar.gz

- name: Upload container artifact
uses: actions/upload-artifact@v4
with:
name: fluence
path: fluence_latest.tar.gz

- name: Upload container artifact
uses: actions/upload-artifact@v4
with:
name: fluence_controller
path: fluence_controller_latest.tar.gz

build-sidecar:
env:
container: ghcr.io/flux-framework/fluence-sidecar
runs-on: ubuntu-latest
name: build sidecar
steps:
- uses: actions/checkout@v4
- uses: actions/setup-go@v4
with:
go-version: ^1.19

- name: Build Container
run: |
make prepare
make build-sidecar REGISTRY=ghcr.io/flux-framework SIDECAR_IMAGE=fluence-sidecar

- name: Save Container
run: docker save ${{ env.container }} | gzip > fluence_sidecar_latest.tar.gz

- name: Upload container artifact
uses: actions/upload-artifact@v4
with:
name: fluence_sidecar
path: fluence_sidecar_latest.tar.gz

test-fluence:
needs: [build-fluence, build-sidecar]
permissions:
packages: write
env:
fluence_container: ghcr.io/flux-framework/fluence
sidecar_container: ghcr.io/flux-framework/fluence-sidecar
controller_container: ghcr.io/flux-framework/fluence-controller

runs-on: ubuntu-latest
name: test fluence
name: build fluence
steps:
- uses: actions/checkout@v4
- uses: actions/setup-go@v4
with:
go-version: ^1.19

- name: Download fluence artifact
uses: actions/download-artifact@v4
with:
name: fluence
path: /tmp

- name: Download fluence_sidecar artifact
uses: actions/download-artifact@v4
with:
name: fluence_sidecar
path: /tmp

- name: Download fluence_controller artifact
uses: actions/download-artifact@v4
with:
name: fluence_controller
path: /tmp

- name: Make Space For Build
run: |
sudo rm -rf /usr/share/dotnet
sudo rm -rf /usr/local/lib/android
sudo rm -rf /opt/ghc

- name: Load Docker images
run: |
ls /tmp/*.tar.gz
docker load --input /tmp/fluence_sidecar_latest.tar.gz
rm /tmp/fluence_sidecar_latest.tar.gz
docker load --input /tmp/fluence_latest.tar.gz
rm /tmp/fluence_latest.tar.gz
docker load --input /tmp/fluence_controller_latest.tar.gz
rm /tmp/fluence_controller_latest.tar.gz
docker image ls -a | grep fluence

- name: Create Kind Cluster
uses: helm/[email protected]
with:
cluster_name: kind
kubectl_version: v1.28.2
version: v0.20.0
config: ./.github/test-kind-config.yaml

- name: Load Docker Containers into Kind
env:
fluence: ${{ env.fluence_container }}
sidecar: ${{ env.sidecar_container }}
controller: ${{ env.controller_container }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
kind load docker-image ${fluence}
kind load docker-image ${sidecar}
kind load docker-image ${controller}

- name: Install Cert Manager
run: |
kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.13.1/cert-manager.yaml
sleep 10

- name: Test Fluence
run: /bin/bash ./.github/test.sh

- name: Tag Weekly Images
run: |
# YEAR-MONTH-DAY or #YYYY-MM-DD
tag=$(echo $(date +%Y-%m-%d))
echo "Tagging and releasing ${{ env.fluence_container}}:${tag}"
docker tag ${{ env.fluence_container }}:latest ${{ env.fluence_container }}:${tag}
echo "Tagging and releasing ${{ env.sidecar_container}}:${tag}"
docker tag ${{ env.sidecar_container }}:latest ${{ env.sidecar_container }}:${tag}
echo "Tagging and releasing ${{ env.controller_container}}:${tag}"
docker tag ${{ env.controller_container }}:latest ${{ env.controller_container }}:${tag}

# If we get here, tests pass, and we can deploy
- name: GHCR Login
if: (github.event_name != 'pull_request')
uses: docker/login-action@v2
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
go-version: ^1.21

- name: Deploy Containers
if: (github.event_name != 'pull_request')
- name: Run Tests
run: |
docker push ${{ env.fluence_container }} --all-tags
docker push ${{ env.sidecar_container }} --all-tags
docker push ${{ env.controller_container }} --all-tags
cd src/fluence
make test
7 changes: 7 additions & 0 deletions src/fluence/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@

.PHONY: all
all: test

.PHONY: test
test:
go test -v ./jgf/
2 changes: 1 addition & 1 deletion src/fluence/cmd/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ func main() {

// Fluxion GRPC
flux := fluxion.Fluxion{}
flux.InitFluxion(policy, label)
flux.InitFluxion(*policy, *label)

lis, err := net.Listen("tcp", port)
if err != nil {
Expand Down
Loading
Loading