name: Build Firmware on: push: branches: [ main ] pull_request: branches: [ main ] release: types: [ created ] jobs: build: runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v3 - name: Setup Arduino CLI uses: arduino/setup-arduino-cli@v1 - name: Install ESP8266 platform run: | arduino-cli core update-index arduino-cli core install esp8266:esp8266 - name: Install libraries run: | arduino-cli lib install "Adafruit GFX Library" arduino-cli lib install "Adafruit SSD1306" arduino-cli lib install "NTPClient" arduino-cli lib install "WiFiManager" arduino-cli lib install "AsyncHTTPRequest_Generic" arduino-cli lib install "ESPAsyncTCP" - name: Compile firmware run: | arduino-cli compile --fqbn esp8266:esp8266:generic \ --build-property "build.flash_size=1M64" \ --build-property "build.flash_mode=dio" \ --output-dir build \ src/clock_ntp_ota_v1.9.ino - name: Check firmware size run: | SIZE=$(stat -c%s "build/clock_ntp_ota_v1.9.ino.bin") echo "Firmware size: $SIZE bytes" MAX_SIZE=470000 # 470KB max for OTA if [ $SIZE -gt $MAX_SIZE ]; then echo "ERROR: Firmware too large ($SIZE > $MAX_SIZE)" exit 1 fi - name: Upload build artifacts uses: actions/upload-artifact@v3 with: name: firmware path: | build/clock_ntp_ota_v1.9.ino.bin build/clock_ntp_ota_v1.9.ino.elf build/clock_ntp_ota_v1.9.ino.map retention-days: 30 - name: Upload release assets if: github.event_name == 'release' uses: actions/upload-release-asset@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: upload_url: ${{ github.event.release.upload_url }} asset_path: build/clock_ntp_ota_v1.9.ino.bin asset_name: esp8266-weather-clock-${{ github.event.release.tag_name }}.bin asset_content_type: application/octet-stream