diff --git a/.github/workflows/verify.yml b/.github/workflows/verify.yml new file mode 100644 index 00000000..cd5b20df --- /dev/null +++ b/.github/workflows/verify.yml @@ -0,0 +1,490 @@ +name: Verify + +# https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#permissions +permissions: + actions: none + checks: none + contents: read + deployments: none + id-token: none + issues: none + discussions: none + packages: none + pages: none + pull-requests: none + repository-projects: none + security-events: none + statuses: none + +on: + push: + branches: + - 'master' + pull_request: + branches: + - '*' + +jobs: + # The job checkout structure is: + # . + # ├── metasploit-omnibus + # └── metasploit-framework (Only if ARM or Windows builds) + # + docker_arm: + runs-on: ${{ matrix.os }} + timeout-minutes: 600 + + strategy: + fail-fast: false + matrix: + os: + - ubuntu-latest + # From: 'ls ./docker/' + docker: + # Skipped as not working + # - { dockerfile: 'debian-aarch64', previousImage: '' } + - { name: 'debian-armv7', previousDockerhubImage: 'rapid7/msf-debian-armv7-omnibus:2020_03' } + + name: ${{ matrix.os }} - ${{ matrix.docker.name }} + steps: + - name: Checkout omnibus + uses: actions/checkout@v4 + with: + path: metasploit-omnibus + + - uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 + id: changes + with: + filters: | + docker: + - 'docker/**' + working-directory: metasploit-omnibus + + # Set the env vars for either a new build, or a previously successful build + - name: Set docker build metadata + run: | + export BUILD_DATE=$(date "+%Y_%m") + echo "BUILD_DATE=$BUILD_DATE" >> "$GITHUB_ENV" + if test "${HAS_MODIFIED_DOCKERFILES}" = 'true'; then + echo 'New build required' + echo "DOCKER_IMAGE=rapid7/${DOCKER_NAME}-omnibus:${BUILD_DATE}" >> "$GITHUB_ENV" + else + echo 'Reusing old image' + echo "DOCKER_IMAGE=${PREVIOUS_DOCKERHUB_IMAGE}" >> "$GITHUB_ENV" + fi + env: + HAS_MODIFIED_DOCKERFILES: ${{ steps.changes.outputs.docker }} + DOCKER_NAME: ${{ matrix.docker.name }} + PREVIOUS_DOCKERHUB_IMAGE: ${{ matrix.docker.previousDockerhubImage }} + + - name: Build Docker image + if: steps.changes.outputs.docker == 'true' + run: | + /bin/bash -x -c "cd metasploit-omnibus && docker build --tag ${DOCKER_IMAGE} -f ./docker/${DOCKER_NAME}/Dockerfile ./docker/${DOCKER_NAME}" + env: + DOCKER_NAME: ${{ matrix.docker.name }} + + # Checkout again - but with the submodules enabled to start a real build + - name: Checkout omnibus and submodules + uses: actions/checkout@v4 + with: + submodules: true + path: metasploit-omnibus + + # Checkout framework + - name: Checkout metasploit-framework code + uses: actions/checkout@v4 + with: + repository: rapid7/metasploit-framework + path: metasploit-framework + # If testing a custom branch is required + # ref: 'update-bundler-version' + + - name: Run omnibus + run: | + echo "Building new image from ${DOCKER_IMAGE}" + mkdir -p metasploit-omnibus/certs + curl -L -o metasploit-omnibus/certs/ca-certificates.crt https://curl.haxx.se/ca/cacert.pem + cat > Dockerfile_temp < Dockerfile_temp.dockerignore <> "$GITHUB_ENV" + if test "${HAS_MODIFIED_DOCKERFILES}" = 'true'; then + echo 'New build required' + echo "DOCKER_IMAGE=rapid7/${DOCKER_NAME}-omnibus:${BUILD_DATE}" >> "$GITHUB_ENV" + else + echo 'Reusing old image' + echo "DOCKER_IMAGE=${PREVIOUS_DOCKERHUB_IMAGE}" >> "$GITHUB_ENV" + fi + env: + HAS_MODIFIED_DOCKERFILES: ${{ steps.changes.outputs.docker }} + DOCKER_NAME: ${{ matrix.docker.name }} + PREVIOUS_DOCKERHUB_IMAGE: ${{ matrix.docker.previousDockerhubImage }} + + - name: Build Docker image + if: steps.changes.outputs.docker == 'true' + run: | + /bin/bash -x -c "cd metasploit-omnibus && docker build --tag ${DOCKER_IMAGE} -f ./docker/${IMAGE_NAME}/Dockerfile ./docker/${IMAGE_NAME}" + env: + IMAGE_NAME: ${{ matrix.docker.name }} + + # Checkout again - but with the submodules enabled to start a real build + - name: Checkout omnibus and submodules + uses: actions/checkout@v4 + with: + submodules: true + path: metasploit-omnibus + + - name: Run omnibus + run: | + mkdir -p metasploit-omnibus/certs + curl -L -o metasploit-omnibus/certs/ca-certificates.crt https://curl.haxx.se/ca/cacert.pem + + # If required, change reported architecture in new program environment and set personality flags + if [ ! -z "${LINUX32}" ] ; then + echo 'setting linux32' + /bin/bash -x -c "docker run --rm --volume $(pwd):$(pwd) --workdir $(pwd) --user jenkins ${DOCKER_IMAGE} linux32 /bin/bash -l -c 'cd metasploit-omnibus && ARCH=x86_64 make'" + else + /bin/bash -x -c "docker run --rm --volume $(pwd):$(pwd) --workdir $(pwd) --user jenkins ${DOCKER_IMAGE} /bin/bash -l -c 'cd metasploit-omnibus && make'" + fi + env: + LINUX32: ${{ matrix.docker.linux32 }} + + - name: Test artifact + run: | + echo "Testing artifact" + + cat > test_script.sh <