name: CI on: push: branches: [ "master" ] pull_request: branches: [ "master" ] jobs: build_frontend: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - uses: actions/setup-node@v3 with: node-version: 14.x - name: Setup run: npm install - name: Build run: make build_frontend - uses: actions/upload-artifact@v4 with: name: build-frontend path: server/ctrl/static/www/ build_backend: needs: build_frontend runs-on: ubuntu-22.04 steps: - uses: actions/checkout@v3 - uses: actions/download-artifact@v4 with: name: build-frontend path: server/ctrl/static/www/ - uses: actions/setup-go@v3.5.0 with: go-version: 1.19 - name: Setup run: | sudo apt install -y libraw-dev libjpeg-dev libpng-dev libheif-dev libwebp-dev libgif-dev sudo apt install -y build-essential libstdc++6 libomp-dev mkdir -p ./dist/data/state/config cp config/config.json ./dist/data/state/config/ - name: Build run: | make build_init make build_backend - uses: actions/upload-artifact@v4 with: name: build path: dist - name: Verify run: timeout 5 ./dist/filestash || code=$?; if [[ $code -ne 124 ]]; then exit $code; fi test_prepare: runs-on: ubuntu-latest needs: [build_frontend, build_backend] steps: - uses: actions/checkout@v3 - name: Clone test repo uses: actions/checkout@v3 with: repository: mickael-kerjean/filestash-test ssh-key: ${{ secrets.DEPLOY_KEY_FILESTASH_TEST }} path: test - uses: actions/upload-artifact@v4 with: name: test path: test test_frontend: needs: test_prepare runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - uses: actions/download-artifact@v4 with: name: test path: test - uses: actions/setup-node@v3 with: node-version: 14.x - name: Setup run: | npm install cd ./test/unit_js npm install - name: Run run: | cd ./test/unit_js npm test # verify_frontend: # needs: [build_frontend, build_backend] # runs-on: ubuntu-latest # steps: # - uses: actions/checkout@v3 # - uses: actions/setup-node@v3 # with: # node-version: 14.x # - name: Setup # run: cd public && npm install # - name: Run # run: | # cd public # # npx eslint . # npx tsc test_backend: needs: test_prepare runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - uses: actions/download-artifact@v4 with: name: test path: test - uses: actions/download-artifact@v4 with: name: build-frontend path: server/ctrl/static/www/ - uses: actions/setup-go@v3.5.0 with: go-version: 1.19 - name: Setup run: | sudo apt-get install -y poppler-utils ls -lah ls -lah test cp ./test/assets/* /tmp/ mkdir server/ctrl/static/www/ && touch server/ctrl/static/www/index.html make build_init rm -rf server/generator/ go generate ./test/unit_go/... go get github.com/stretchr/testify/assert go mod vendor - name: Run run: go test --tags "fts5" -count=1 $(go list ./server/... | grep -v "server/plugin" | grep -v "server/generator") test_smoke: needs: test_prepare runs-on: ubuntu-latest steps: - name: Init uses: actions/download-artifact@v4 with: name: build - name: Run run: | chmod +x filestash timeout 5 ./filestash > access.log || code=$?; if [[ $code -ne 124 ]]; then exit $code; fi echo "========= access.log " cat access.log echo "=====================" cat access.log | grep -q "Filestash v0.5 starting" cat access.log | grep -q "listening on :" cat access.log | grep -vz "WARN" cat access.log | grep -vz "ERR" # test_e2e: # needs: test_smoke # runs-on: ubuntu-latest # container: # image: machines/puppeteer # options: --user root # env: # ADMIN_PASSWORD: $2a$10$9OFbPZV4lYpYjU5eUi91o.kgeMyCuW11j878YBRri3gBwccq2lSFy # APP_URL: http://127.0.0.1:8334 # CI: true # steps: # - uses: actions/checkout@v4 # - uses: actions/download-artifact@v4 # with: # name: test # - uses: actions/download-artifact@v4 # with: # name: build # - name: Setup # run: | # cd ./test/e2e # npm install # - name: Run # run: | # chmod +x ./filestash # ./filestash > /dev/null & # cd ./test/e2e # node servers/webdav.js > /dev/null & # npm test release_docker_amd64: if: github.ref == 'refs/heads/master' needs: [ test_backend, test_frontend, test_e2e ] runs-on: ubuntu-latest steps: - name: Init uses: actions/checkout@v3 - name: Setup uses: docker/login-action@v2 with: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} - name: Run run: | docker build -t machines/filestash:latest-amd64 ./docker/ docker push machines/filestash:latest-amd64 release_docker_arm64: if: github.ref == 'refs/heads/master' needs: [ test_backend, test_frontend, test_e2e ] runs-on: ubuntu-latest steps: - name: Init uses: actions/checkout@v3 - name: Setup uses: docker/login-action@v2 with: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} - name: Set up QEMU uses: docker/setup-qemu-action@v2 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v2 - name: Run run: | uname -m uname -a docker version # docker build -t machines/filestash:latest-arm64 ./docker/ # echo "DONE" release_docker: needs: [ release_docker_amd64, release_docker_arm64 ] runs-on: ubuntu-latest steps: - name: Init uses: actions/checkout@v3 - name: Setup uses: docker/login-action@v2 with: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} - name: Run run: | docker manifest create machines/filestash:latest \ --amend machines/filestash:latest-amd64 \ --amend machines/filestash:latest-arm64v8 docker manifest push machines/filestash:latest deploy: if: github.ref == 'refs/heads/master' needs: release_docker runs-on: ubuntu-latest steps: - name: Setup uses: Azure/k8s-set-context@v1 with: method: kubeconfig kubeconfig: ${{ secrets.KUBE_CONFIG }} - name: Deploy run: kubectl rollout restart deployment app-filestash-demo -n filestash